@utogether/udp-core 1.0.1-beta.16 → 1.0.1-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/build/plugins.ts +39 -39
  2. package/dist/{403-RBzulrcG.js → 403-C3cfjZIT.js} +1 -1
  3. package/dist/{404-DX-dU_6C.js → 404-Bg3j7QIo.js} +1 -1
  4. package/dist/{500-BCTk0__d.js → 500-CMT7Zyy7.js} +1 -1
  5. package/dist/{AuthorityInfo-BADTOenq.js → AuthorityInfo-B1mvqs4x.js} +1 -1
  6. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-Cv46yAx_.js → AuthorityInfo.vue_vue_type_style_index_0_lang-DwoW7QWO.js} +1 -1
  7. package/dist/{Company-B-61KrWd.js → Company-qTguidK8.js} +3 -3
  8. package/dist/{CompanyPanel-CawSrEff.js → CompanyPanel-BBC-o-k3.js} +8 -8
  9. package/dist/{Department-CrzJPtvP.js → Department-C3mKZOnK.js} +3 -3
  10. package/dist/{DepartmentPanel-DYuL8H-j.js → DepartmentPanel-CNdpOHBT.js} +3 -3
  11. package/dist/{DesignPanel-DEAv6V68.js → DesignPanel-D9jrRCoG.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-BsnXZ2td.js → DesignPanel.vue_vue_type_style_index_0_lang-A-Aj1Hl0.js} +2 -2
  13. package/dist/{DictView-BuO-2b-c.js → DictView-CgdVkSiP.js} +1 -1
  14. package/dist/{InvOrganization-CBgKBJAn.js → InvOrganization-RE7s3vBq.js} +1 -1
  15. package/dist/{Org-BaQw2r-o.js → Org-wXDGvTrS.js} +1 -1
  16. package/dist/{Preview-DvCrmKNk.js → Preview-Pvt1__BV.js} +1 -1
  17. package/dist/{ReportDefine-DyhWz0as.js → ReportDefine-xEQsgFyv.js} +1 -1
  18. package/dist/{ReportDesign-DgZ2f2zv.js → ReportDesign-jOSuEFH9.js} +2 -2
  19. package/dist/{ReportQuery-DTZYbCDi.js → ReportQuery-DxEmmGiN.js} +1 -1
  20. package/dist/{ReportQueryFrom-B-vtJegP.js → ReportQueryFrom-CFlxfS5M.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-D6izgxph.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-iHpiYz8f.js} +1 -1
  22. package/dist/{ReportTemplate-DA1ZqKGf.js → ReportTemplate-Dtz3aet7.js} +1 -1
  23. package/dist/{Role-mbqoav5t.js → Role-B_NsHIyE.js} +3 -3
  24. package/dist/{RoleAssign-ltEJIEcr.js → RoleAssign-C9wm4zq4.js} +8 -8
  25. package/dist/{RolePanel-u90v9eS0.js → RolePanel-BlHidBR0.js} +1 -1
  26. package/dist/{RolePanel-1g1a-G8D.js → RolePanel-DWM9mfNs.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-D9YxpGnt.js → RolePanel.vue_vue_type_script_setup_true_lang-Cn4RRzXm.js} +1 -1
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-LC4Egk-Q.js → RolePanel.vue_vue_type_script_setup_true_lang-DVQ9aqb1.js} +3 -3
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-DZ3W1epK.js → ScrollPanel.vue_vue_type_style_index_0_lang-CCm-_i8O.js} +1 -1
  30. package/dist/{Staff-CJ2GgCL3.js → Staff-BfDc61QS.js} +3 -3
  31. package/dist/{StaffInfo-3KkodDCK.js → StaffInfo-BaJFo4mg.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-CW-isIxJ.js → StaffInfo.vue_vue_type_script_setup_true_lang-Bwj4x1wu.js} +1 -1
  33. package/dist/{StaffPanel-DoXPSoY5.js → StaffPanel-B6I2ZS6A.js} +1 -1
  34. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-DvhGnOMZ.js → StaffPanel.vue_vue_type_script_setup_true_lang-vbyS4w3V.js} +2 -2
  35. package/dist/{SysUser-BuIZhMPh.js → SysUser-B_r9LYc5.js} +2 -2
  36. package/dist/{SysUserPanel-t1GJcJGM.js → SysUserPanel-C4ajcHPV.js} +1 -1
  37. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-CDDkFLlN.js → SysUserPanel.vue_vue_type_script_setup_true_lang-8Q0VvC9B.js} +43 -39
  38. package/dist/{SystemMenu-DuLEL6_l.js → SystemMenu-CyPG23uP.js} +2 -2
  39. package/dist/{UserInfo-WWby4lts.js → UserInfo-BkoGt4ib.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-B06ZSrJV.js → UserInfo.vue_vue_type_style_index_0_lang-DrzF1YYG.js} +1 -1
  41. package/dist/{childView-B0-EAoAi.js → childView-9vEO8ymO.js} +1 -1
  42. package/dist/{childView-IYY4L8VK.js → childView-Dh0NyiQe.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-CjF8nZuj.js → childView.vue_vue_type_style_index_0_lang-BOeoZuAK.js} +2 -2
  44. package/dist/{childView.vue_vue_type_style_index_0_lang-B56v6yK7.js → childView.vue_vue_type_style_index_0_lang-CMOjfXBX.js} +1 -1
  45. package/dist/{code-rule-DDLdi3pP.js → code-rule-C7jI_1gJ.js} +1 -1
  46. package/dist/core.es.js +1 -1
  47. package/dist/{cron-task-p3-AFN1w.js → cron-task-Dg9DJXvv.js} +1 -1
  48. package/dist/{frameView-B_WAZErD.js → frameView-CeR-_hjB.js} +1 -1
  49. package/dist/{index-24fnvUBy.js → index-Bb7gIEvu.js} +611 -569
  50. package/dist/{layoutView-CoEp2afn.js → layoutView-wsLHrEeX.js} +1340 -1337
  51. package/dist/{login-DP0oP70W.js → login-CluzzdqH.js} +2 -2
  52. package/dist/{lov-view-BDoZRK-v.js → lov-view-BvQCvwbW.js} +2 -2
  53. package/dist/{menuInfo-5Xls76qB.js → menuInfo-B8RLelIC.js} +1 -1
  54. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-BfZczW9a.js → menuInfo.vue_vue_type_style_index_0_lang-DvkapEZr.js} +1 -1
  55. package/dist/{pda-app-DxGYn4G7.js → pda-app-D3LNmD9a.js} +2 -2
  56. package/dist/{resource-BnYWe_-Q.js → resource-D8JA_03-.js} +1 -1
  57. package/dist/{su-welcome-B2rNhhDH.js → su-welcome-BjxeEKSo.js} +1 -1
  58. package/dist/{sys-config-Bb4WkxZK.js → sys-config-sbeLk9bP.js} +1 -1
  59. package/dist/udp-core.css +1 -9
  60. package/index.ts +48 -48
  61. package/package.json +1 -1
  62. package/src/App.vue +65 -65
  63. package/src/components/SuCharts/src/UserInfo.vue +78 -78
  64. package/src/components/SuScrollTree/ScrollPanel.vue +170 -175
  65. package/src/components/udp/{grid.vue → grid/index.vue} +27 -24
  66. package/src/components/udp/index.ts +2 -9
  67. package/src/components/udp/utils.ts +60 -107
  68. package/src/layout/components/lay-navbar/index.vue +239 -239
  69. package/src/layout/components/lay-panel/index.vue +150 -150
  70. package/src/layout/components/lay-search/index.vue +25 -25
  71. package/src/layout/components/lay-select-org/index.vue +64 -64
  72. package/src/layout/components/lay-sidebar/horizontal.vue +190 -190
  73. package/src/layout/components/lay-sidebar/mixNav.vue +260 -260
  74. package/src/layout/components/lay-sidebar/sidebar-logo.vue +92 -92
  75. package/src/layout/components/lay-tag/index.vue +20 -48
  76. package/src/layout/hooks/useNav.ts +173 -173
  77. package/src/layout/hooks/useTag.ts +5 -3
  78. package/src/layout/types.ts +3 -2
  79. package/src/main.ts +9 -6
  80. package/src/plugins/i18n/en.ts +302 -302
  81. package/src/plugins/i18n/zh.ts +356 -354
  82. package/src/plugins/vxe-table/index.ts +116 -53
  83. package/src/plugins/vxe-table/render.tsx +956 -956
  84. package/src/router/index.ts +186 -177
  85. package/src/router/modules/remaining.ts +58 -58
  86. package/src/router/utils.ts +393 -377
  87. package/src/store/modules/app.ts +1 -3
  88. package/src/store/modules/multiTags.ts +110 -109
  89. package/src/store/modules/permission.ts +113 -100
  90. package/src/style/button.scss +85 -85
  91. package/src/style/login.css +336 -336
  92. package/src/style/vxetable.scss +13 -3
  93. package/src/views/organization/company/CompanyPanel.vue +259 -259
  94. package/src/views/organization/department/DepartmentPanel.vue +269 -283
  95. package/src/views/system/menu/SystemMenu.vue +183 -183
  96. package/src/views/system/menu/menuInfo.vue +363 -363
  97. package/src/views/system/role/UserInfo.vue +195 -195
  98. package/src/views/system/role-assign/RoleAssign.vue +57 -57
  99. package/src/views/system/role-assign/RolePanel.vue +139 -139
  100. package/src/views/system/sys/sys-config.vue +336 -336
  101. package/src/views/system/sysUser/SysUserPanel.vue +279 -278
  102. package/src/views/uapp/pda/pda-app.vue +208 -208
  103. package/src/views/udev/dict/DictView.vue +118 -118
  104. package/src/views/udev/dict/childView.vue +1 -1
  105. package/src/views/udev/lov/lov-view.vue +91 -91
  106. package/src/views/ulogin/login.vue +323 -323
  107. package/src/views/upms/interface/log-out.vue +101 -101
  108. package/src/views/urpt/design/DesignPanel.vue +507 -507
  109. package/types/global.d.ts +230 -230
  110. package/src/components/udp/count-down.vue +0 -536
  111. package/src/components/udp/flip-down/FlipCard/flip-card.vue +0 -251
  112. package/src/components/udp/flip-down/FlipCard/interfaces.ts +0 -4
  113. package/src/components/udp/flip-down/FlipClock/flip-clock.vue +0 -113
  114. package/src/components/udp/form-upload.vue +0 -482
  115. package/src/components/udp/form.vue +0 -112
  116. package/src/components/udp/lov.vue +0 -388
  117. package/src/components/udp/modal-form.vue +0 -190
  118. package/src/components/udp/modal-grid.vue +0 -298
  119. package/src/components/udp/upload.vue +0 -423
  120. package/src/utils/udp/http/index.ts +0 -294
  121. package/src/utils/udp/http/types.d.ts +0 -49
  122. package/src/utils/udp/useRender.ts +0 -431
@@ -1,336 +1,336 @@
1
- <template>
2
- <div v-spinning="loading" class="flex flex-col items-center pt-20 bg-white u-system-config">
3
- <div class="flex w-1/2 p-3 overflow-y-auto border border-gray-300 rounded-md">
4
- <el-form ref="xfrom" :model="record" :rules="rules" label-width="90" size="small" status-icon class="w-full">
5
- <el-form-item :label="$t('message.udp.systemTitle')" prop="title">
6
- <el-input v-model="record.title" />
7
- </el-form-item>
8
- <!-- <el-form-item :label="$t('message.udp.ispTitle')" prop="ispTitle">
9
- <el-input v-model="record.ispTitle" />
10
- </el-form-item> -->
11
- <el-form-item :label="$t('message.udp.copyright')" prop="copyright">
12
- <el-input v-model="record.copyright" />
13
- </el-form-item>
14
- <el-form-item :label="$t('message.udp.defaultLanguage')" prop="defaultLanguage">
15
- <el-select v-model="record.defaultLanguage" placeholder="please select">
16
- <el-option label="中文" value="zh" />
17
- <el-option label="英文" value="en" />
18
- </el-select>
19
- </el-form-item>
20
- <el-form-item :label="$t('message.udp.i18nEnabled')" prop="i18nEnabled">
21
- <el-switch v-model="record.i18nEnabled" active-value="Y" inactive-value="N" />
22
- </el-form-item>
23
- <el-form-item :label="$t('message.udp.orgTaggle')" prop="orgTaggle">
24
- <el-switch v-model="record.orgTaggle" active-value="Y" inactive-value="N" />
25
- </el-form-item>
26
- <el-form-item
27
- v-if="['liwei', 'yanhuaijun', 'phr', 'zhonglijun', 'ccl'].includes(cookies.get(kLOGINER))"
28
- :label="$t('message.udp.techSupport')"
29
- prop="techSupport"
30
- >
31
- <el-switch v-model="record.techSupport" active-value="Y" inactive-value="N" />
32
- </el-form-item>
33
- <el-form-item
34
- v-if="['liwei', 'yanhuaijun', 'phr', 'zhonglijun', 'ccl'].includes(cookies.get(kLOGINER))"
35
- :label="$t('message.udp.baseColor')"
36
- prop="baseColor"
37
- >
38
- <vxe-color-picker v-model="record.baseColor" :colors="colorList" type="hex" clearable transfer />
39
- </el-form-item>
40
- <el-form-item :label="$t('message.udp.systemLogo')">
41
- <el-upload
42
- v-model:file-list="record.logo"
43
- class="u-upload"
44
- :action="baseUrl + '/ufil/file/uploadMultipart'"
45
- :headers="headers"
46
- :on-exceed="handleExceed"
47
- accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
48
- list-type="picture"
49
- :limit="1"
50
- >
51
- <!-- :before-upload="handleBeforUpload" -->
52
- <div class="flex items-center">
53
- <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
54
- <div class="pl-2 text-xs">
55
- <span>
56
- {{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}
57
- </span>
58
- <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 600 * 200' }) }}</span>
59
- <span class="pl-2">
60
- {{ $t('message.tip.imageCapacity', { capacity: ': <50kb' }) }}
61
- </span>
62
- </div>
63
- </div>
64
- </el-upload>
65
- </el-form-item>
66
- <el-form-item :label="$t('message.udp.homeBackimg')">
67
- <el-upload
68
- v-model:file-list="record.backgroundImg"
69
- class="u-upload"
70
- :action="baseUrl + '/ufil/file/uploadMultipart'"
71
- :headers="headers"
72
- :on-exceed="handleExceed"
73
- accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
74
- list-type="picture"
75
- :limit="1"
76
- >
77
- <div class="flex items-center">
78
- <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
79
- <div class="pl-2 text-xs">
80
- <span>{{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}</span>
81
- <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 4096 * 2048' }) }}</span>
82
- </div>
83
- </div>
84
- </el-upload>
85
- </el-form-item>
86
- <el-form-item :label="$t('message.udp.systemFavicon')">
87
- <el-upload
88
- v-model:file-list="record.favicon"
89
- class="u-upload"
90
- :action="baseUrl + '/ufil/file/uploadMultipart'"
91
- :headers="headers"
92
- :on-exceed="handleExceed"
93
- accept=".ico"
94
- list-type="picture"
95
- :limit="1"
96
- >
97
- <div class="flex items-center">
98
- <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
99
- <div class="pl-2 text-xs">
100
- {{ $t('message.tip.uploadFormat', { type: ': *.ico,.png*.jpg;' }) }}
101
- </div>
102
- </div>
103
- </el-upload>
104
- </el-form-item>
105
- </el-form>
106
- </div>
107
- <div class="flex justify-end w-1/2 p-2">
108
- <el-button type="primary" @click="submitForm(xfrom)">
109
- {{ $t('message.btn.confirm') }}
110
- </el-button>
111
- </div>
112
- </div>
113
- </template>
114
-
115
- <script lang="ts" setup>
116
- import { reactive, ref, computed, onMounted } from 'vue';
117
- import type { FormInstance, FormRules } from 'element-plus';
118
- import { useI18n } from 'vue-i18n';
119
- import to from 'await-to-js';
120
- import { successMessage, cookies, warnMessage } from '@utogether/utils';
121
- import { isArray } from 'xe-utils';
122
- import { kTOKEN, kLOGINER } from '../../../contant';
123
- import { getServiceApi, getBaseURL } from '../../../api';
124
-
125
- const xfrom = ref<FormInstance>();
126
- const loading = ref(false);
127
- const record = reactive({
128
- defaultLanguage: 'zh',
129
- title: 'U-DP',
130
- ispTitle: 'U-DP',
131
- baseColor: '#FFF',
132
- i18nEnabled: 'N',
133
- orgTaggle: 'Y',
134
- techSupport: 'Y',
135
- copyright: '深圳友聚信息技术有限公司',
136
- logo: [],
137
- backgroundImg: [],
138
- favicon: []
139
- });
140
-
141
- const serviceApi = getServiceApi();
142
- const { t } = useI18n();
143
-
144
- const baseUrl = ref(getBaseURL());
145
-
146
- const url = '/upfm/v1/sysConfig';
147
- let dataList = [];
148
-
149
- const colorList = [
150
- '#DC143C',
151
- '#FF1493',
152
- '#FF00FF',
153
- '#9932CC',
154
- '#6A5ACD',
155
- '#0000FF',
156
- '#00008B',
157
- '#778899',
158
- '#1E90FF',
159
- '#00BFFF',
160
- '#5F9EA0',
161
- '#00FFFF',
162
- '#008080',
163
- '#7FFFAA',
164
- '#3CB371',
165
- '#8FBC8F',
166
- '#008000',
167
- '#7CFC00',
168
- '#556B2F',
169
- '#FFFFE0',
170
- '#FFFF00',
171
- '#808000',
172
- '#EEE8AA',
173
- '#FFD700',
174
- '#FFA500',
175
- '#FF4500',
176
- '#FA8072',
177
- '#FF0000',
178
- '#800000',
179
- '#C0C0C0'
180
- ];
181
-
182
- const rules = reactive<FormRules>({
183
- defaultLanguage: [
184
- {
185
- required: true,
186
- message: t('message.required') + t('message.udp.defaultLanguage'),
187
- trigger: 'blur'
188
- }
189
- ],
190
- title: [{ required: true, message: t('message.required') + t('message.udp.systemTitle'), trigger: 'blur' }]
191
- });
192
-
193
- const headers = computed(() => {
194
- const token = cookies.get(kTOKEN)!;
195
- const data = JSON.parse(token);
196
- const headers = {
197
- Authorization: 'Bearer ' + data.accessToken
198
- };
199
- return headers;
200
- });
201
-
202
- const submitForm = (xfrom: FormInstance) => {
203
- // const menthod = dataList.length ? 'put' : 'post';
204
- Object.keys(record).forEach(field => {
205
- const obj = {
206
- configCode: field,
207
- configValue: record[field],
208
- configCategory: 'system',
209
- fileName: ''
210
- };
211
- if (isArray(record[field])) {
212
- obj.configValue = getImgActUrl(record[field][0]).url;
213
- obj.fileName = getImgActUrl(record[field][0]).name;
214
- }
215
- const idx = dataList.findIndex(f => f.configCode === field);
216
- if (idx !== -1) {
217
- dataList[idx] = Object.assign(dataList[idx], obj);
218
- } else {
219
- dataList.push(obj);
220
- }
221
- });
222
- // return;
223
- xfrom?.validate(async valid => {
224
- if (valid) {
225
- loading.value = true;
226
- const addList = dataList.filter(data => !data.id);
227
- const updateList = dataList.filter(data => data.id);
228
- const services = [];
229
- if (addList.length) {
230
- services.push(serviceApi.post(url, addList));
231
- } else {
232
- services.push(serviceApi.put(url, updateList));
233
- }
234
- const [err] = await to(Promise.all(services));
235
- // const [err, data]: [Error, any] = await to(serviceApi[menthod](url, dataList));
236
- if (!err) {
237
- successMessage();
238
- // console.log({ data });
239
- // dataList = data;
240
- // setDisplayObject();
241
- setDisplayObject();
242
- }
243
- loading.value = false;
244
- }
245
- });
246
- };
247
-
248
- const getImgActUrl = file => {
249
- if (file?.response) {
250
- return { url: file.response.data, name: file.name };
251
- }
252
- return { url: file?.realpath || file?.url, name: file?.name };
253
- };
254
-
255
- const handleExceed = file => {
256
- if (file) {
257
- return warnMessage(t('message.tip.singleImg'));
258
- }
259
- };
260
-
261
- // const handleBeforUpload = (file, type) => {
262
- // console.log(file);
263
- // console.log(type);
264
- // return true;
265
- // };
266
-
267
- /**
268
- * @description: 处理显示数据
269
- * @return {*}
270
- */
271
- const setDisplayObject = () => {
272
- Object.keys(record).forEach(key => {
273
- const data = dataList.find(f => f.configCode === key);
274
- if (data) {
275
- record[data.configCode] = data.configValue || record[data.configCode];
276
- if (data.fileName) {
277
- const { configValue, fileName } = data;
278
- record[data.configCode] = [
279
- { url: baseUrl.value + '/ufil' + configValue, realpath: configValue, name: fileName }
280
- ];
281
- }
282
- }
283
- });
284
- };
285
- /**
286
- * @description: 查询系统配置
287
- * @return {*}
288
- */
289
- const getSysConfig = async () => {
290
- const [err, data]: [Error, any] = await to(serviceApi.get(url, {}));
291
- if (!err) {
292
- dataList = data.list;
293
- }
294
- // dataList = [
295
- // { configCode: 'logo', configValue: '', fileName: 'logo' },
296
- // { configCode: 'backgroundImg', configValue: '', fileName: '首页背景' },
297
- // { configCode: 'favicon', configValue: '', fileName: 'favicon' },
298
- // { configCode: 'copyright', configValue: '' },
299
- // { configCode: 'i18nEnabled', configValue: '' },
300
- // { configCode: 'title', configValue: '' },
301
- // { configCode: 'defaultLanguage', configValue: '' }
302
- // ];
303
- setDisplayObject();
304
- };
305
-
306
- onMounted(() => {
307
- getSysConfig();
308
- });
309
- </script>
310
- <style lang="scss">
311
- .u-system-config {
312
- padding-top: 48px;
313
-
314
- .el-select,
315
- .el-select--small {
316
- width: 100%;
317
- }
318
-
319
- .el-form-item__content {
320
- width: 100%;
321
- }
322
-
323
- .u-upload {
324
- width: 100%;
325
-
326
- .el-upload-list {
327
- margin: 0;
328
- }
329
-
330
- .el-upload-list__item {
331
- max-height: 60px;
332
- padding: 0;
333
- }
334
- }
335
- }
336
- </style>
1
+ <template>
2
+ <div v-spinning="loading" class="flex flex-col items-center pt-20 bg-white u-system-config">
3
+ <div class="flex w-1/2 p-3 overflow-y-auto border border-gray-300 rounded-md">
4
+ <el-form ref="xfrom" :model="record" :rules="rules" label-width="90" size="small" status-icon class="w-full">
5
+ <el-form-item :label="$t('message.udp.systemTitle')" prop="title">
6
+ <el-input v-model="record.title" />
7
+ </el-form-item>
8
+ <!-- <el-form-item :label="$t('message.udp.ispTitle')" prop="ispTitle">
9
+ <el-input v-model="record.ispTitle" />
10
+ </el-form-item> -->
11
+ <el-form-item :label="$t('message.udp.copyright')" prop="copyright">
12
+ <el-input v-model="record.copyright" />
13
+ </el-form-item>
14
+ <el-form-item :label="$t('message.udp.defaultLanguage')" prop="defaultLanguage">
15
+ <el-select v-model="record.defaultLanguage" placeholder="please select">
16
+ <el-option label="中文" value="zh" />
17
+ <el-option label="英文" value="en" />
18
+ </el-select>
19
+ </el-form-item>
20
+ <el-form-item :label="$t('message.udp.i18nEnabled')" prop="i18nEnabled">
21
+ <el-switch v-model="record.i18nEnabled" active-value="Y" inactive-value="N" />
22
+ </el-form-item>
23
+ <el-form-item :label="$t('message.udp.orgTaggle')" prop="orgTaggle">
24
+ <el-switch v-model="record.orgTaggle" active-value="Y" inactive-value="N" />
25
+ </el-form-item>
26
+ <el-form-item
27
+ v-if="['liwei', 'yanhuaijun', 'phr', 'zhonglijun', 'ccl'].includes(cookies.get(kLOGINER))"
28
+ :label="$t('message.udp.techSupport')"
29
+ prop="techSupport"
30
+ >
31
+ <el-switch v-model="record.techSupport" active-value="Y" inactive-value="N" />
32
+ </el-form-item>
33
+ <el-form-item
34
+ v-if="['liwei', 'yanhuaijun', 'phr', 'zhonglijun', 'ccl'].includes(cookies.get(kLOGINER))"
35
+ :label="$t('message.udp.baseColor')"
36
+ prop="baseColor"
37
+ >
38
+ <vxe-color-picker v-model="record.baseColor" :colors="colorList" type="hex" clearable transfer />
39
+ </el-form-item>
40
+ <el-form-item :label="$t('message.udp.systemLogo')">
41
+ <el-upload
42
+ v-model:file-list="record.logo"
43
+ class="u-upload"
44
+ :action="baseUrl + '/ufil/file/uploadMultipart'"
45
+ :headers="headers"
46
+ :on-exceed="handleExceed"
47
+ accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
48
+ list-type="picture"
49
+ :limit="1"
50
+ >
51
+ <!-- :before-upload="handleBeforUpload" -->
52
+ <div class="flex items-center">
53
+ <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
54
+ <div class="pl-2 text-xs">
55
+ <span>
56
+ {{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}
57
+ </span>
58
+ <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 600 * 200' }) }}</span>
59
+ <span class="pl-2">
60
+ {{ $t('message.tip.imageCapacity', { capacity: ': <50kb' }) }}
61
+ </span>
62
+ </div>
63
+ </div>
64
+ </el-upload>
65
+ </el-form-item>
66
+ <el-form-item :label="$t('message.udp.homeBackimg')">
67
+ <el-upload
68
+ v-model:file-list="record.backgroundImg"
69
+ class="u-upload"
70
+ :action="baseUrl + '/ufil/file/uploadMultipart'"
71
+ :headers="headers"
72
+ :on-exceed="handleExceed"
73
+ accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
74
+ list-type="picture"
75
+ :limit="1"
76
+ >
77
+ <div class="flex items-center">
78
+ <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
79
+ <div class="pl-2 text-xs">
80
+ <span>{{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}</span>
81
+ <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 4096 * 2048' }) }}</span>
82
+ </div>
83
+ </div>
84
+ </el-upload>
85
+ </el-form-item>
86
+ <el-form-item :label="$t('message.udp.systemFavicon')">
87
+ <el-upload
88
+ v-model:file-list="record.favicon"
89
+ class="u-upload"
90
+ :action="baseUrl + '/ufil/file/uploadMultipart'"
91
+ :headers="headers"
92
+ :on-exceed="handleExceed"
93
+ accept=".ico"
94
+ list-type="picture"
95
+ :limit="1"
96
+ >
97
+ <div class="flex items-center">
98
+ <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
99
+ <div class="pl-2 text-xs">
100
+ {{ $t('message.tip.uploadFormat', { type: ': *.ico,.png*.jpg;' }) }}
101
+ </div>
102
+ </div>
103
+ </el-upload>
104
+ </el-form-item>
105
+ </el-form>
106
+ </div>
107
+ <div class="flex justify-end w-1/2 p-2">
108
+ <el-button type="primary" @click="submitForm(xfrom)">
109
+ {{ $t('message.btn.confirm') }}
110
+ </el-button>
111
+ </div>
112
+ </div>
113
+ </template>
114
+
115
+ <script lang="ts" setup>
116
+ import { reactive, ref, computed, onMounted } from 'vue';
117
+ import type { FormInstance, FormRules } from 'element-plus';
118
+ import { useI18n } from 'vue-i18n';
119
+ import to from 'await-to-js';
120
+ import { successMessage, cookies, warnMessage } from '@utogether/utils';
121
+ import { isArray } from 'xe-utils';
122
+ import { kTOKEN, kLOGINER } from '../../../contant';
123
+ import { getServiceApi, getBaseURL } from '../../../api';
124
+
125
+ const xfrom = ref<FormInstance>();
126
+ const loading = ref(false);
127
+ const record = reactive({
128
+ defaultLanguage: 'zh',
129
+ title: 'U-DP',
130
+ ispTitle: 'U-DP',
131
+ baseColor: '#FFF',
132
+ i18nEnabled: 'N',
133
+ orgTaggle: 'Y',
134
+ techSupport: 'Y',
135
+ copyright: '深圳友聚信息技术有限公司',
136
+ logo: [],
137
+ backgroundImg: [],
138
+ favicon: []
139
+ });
140
+
141
+ const serviceApi = getServiceApi();
142
+ const { t } = useI18n();
143
+
144
+ const baseUrl = ref(getBaseURL());
145
+
146
+ const url = '/upfm/v1/sysConfig';
147
+ let dataList = [];
148
+
149
+ const colorList = [
150
+ '#DC143C',
151
+ '#FF1493',
152
+ '#FF00FF',
153
+ '#9932CC',
154
+ '#6A5ACD',
155
+ '#0000FF',
156
+ '#00008B',
157
+ '#778899',
158
+ '#1E90FF',
159
+ '#00BFFF',
160
+ '#5F9EA0',
161
+ '#00FFFF',
162
+ '#008080',
163
+ '#7FFFAA',
164
+ '#3CB371',
165
+ '#8FBC8F',
166
+ '#008000',
167
+ '#7CFC00',
168
+ '#556B2F',
169
+ '#FFFFE0',
170
+ '#FFFF00',
171
+ '#808000',
172
+ '#EEE8AA',
173
+ '#FFD700',
174
+ '#FFA500',
175
+ '#FF4500',
176
+ '#FA8072',
177
+ '#FF0000',
178
+ '#800000',
179
+ '#C0C0C0'
180
+ ];
181
+
182
+ const rules = reactive<FormRules>({
183
+ defaultLanguage: [
184
+ {
185
+ required: true,
186
+ message: t('message.required') + t('message.udp.defaultLanguage'),
187
+ trigger: 'blur'
188
+ }
189
+ ],
190
+ title: [{ required: true, message: t('message.required') + t('message.udp.systemTitle'), trigger: 'blur' }]
191
+ });
192
+
193
+ const headers = computed(() => {
194
+ const token = cookies.get(kTOKEN)!;
195
+ const data = JSON.parse(token);
196
+ const headers = {
197
+ Authorization: 'Bearer ' + data.accessToken
198
+ };
199
+ return headers;
200
+ });
201
+
202
+ const submitForm = (xfrom: FormInstance) => {
203
+ // const menthod = dataList.length ? 'put' : 'post';
204
+ Object.keys(record).forEach(field => {
205
+ const obj = {
206
+ configCode: field,
207
+ configValue: record[field],
208
+ configCategory: 'system',
209
+ fileName: ''
210
+ };
211
+ if (isArray(record[field])) {
212
+ obj.configValue = getImgActUrl(record[field][0]).url;
213
+ obj.fileName = getImgActUrl(record[field][0]).name;
214
+ }
215
+ const idx = dataList.findIndex(f => f.configCode === field);
216
+ if (idx !== -1) {
217
+ dataList[idx] = Object.assign(dataList[idx], obj);
218
+ } else {
219
+ dataList.push(obj);
220
+ }
221
+ });
222
+ // return;
223
+ xfrom?.validate(async valid => {
224
+ if (valid) {
225
+ loading.value = true;
226
+ const addList = dataList.filter(data => !data.id);
227
+ const updateList = dataList.filter(data => data.id);
228
+ const services = [];
229
+ if (addList.length) {
230
+ services.push(serviceApi.post(url, addList));
231
+ } else {
232
+ services.push(serviceApi.put(url, updateList));
233
+ }
234
+ const [err] = await to(Promise.all(services));
235
+ // const [err, data]: [Error, any] = await to(serviceApi[menthod](url, dataList));
236
+ if (!err) {
237
+ successMessage();
238
+ // console.log({ data });
239
+ // dataList = data;
240
+ // setDisplayObject();
241
+ setDisplayObject();
242
+ }
243
+ loading.value = false;
244
+ }
245
+ });
246
+ };
247
+
248
+ const getImgActUrl = file => {
249
+ if (file?.response) {
250
+ return { url: file.response.data, name: file.name };
251
+ }
252
+ return { url: file?.realpath || file?.url, name: file?.name };
253
+ };
254
+
255
+ const handleExceed = file => {
256
+ if (file) {
257
+ return warnMessage(t('message.tip.singleImg'));
258
+ }
259
+ };
260
+
261
+ // const handleBeforUpload = (file, type) => {
262
+ // console.log(file);
263
+ // console.log(type);
264
+ // return true;
265
+ // };
266
+
267
+ /**
268
+ * @description: 处理显示数据
269
+ * @return {*}
270
+ */
271
+ const setDisplayObject = () => {
272
+ Object.keys(record).forEach(key => {
273
+ const data = dataList.find(f => f.configCode === key);
274
+ if (data) {
275
+ record[data.configCode] = data.configValue || record[data.configCode];
276
+ if (data.fileName) {
277
+ const { configValue, fileName } = data;
278
+ record[data.configCode] = [
279
+ { url: baseUrl.value + '/ufil' + configValue, realpath: configValue, name: fileName }
280
+ ];
281
+ }
282
+ }
283
+ });
284
+ };
285
+ /**
286
+ * @description: 查询系统配置
287
+ * @return {*}
288
+ */
289
+ const getSysConfig = async () => {
290
+ const [err, data]: [Error, any] = await to(serviceApi.get(url, {}));
291
+ if (!err) {
292
+ dataList = data.list;
293
+ }
294
+ // dataList = [
295
+ // { configCode: 'logo', configValue: '', fileName: 'logo' },
296
+ // { configCode: 'backgroundImg', configValue: '', fileName: '首页背景' },
297
+ // { configCode: 'favicon', configValue: '', fileName: 'favicon' },
298
+ // { configCode: 'copyright', configValue: '' },
299
+ // { configCode: 'i18nEnabled', configValue: '' },
300
+ // { configCode: 'title', configValue: '' },
301
+ // { configCode: 'defaultLanguage', configValue: '' }
302
+ // ];
303
+ setDisplayObject();
304
+ };
305
+
306
+ onMounted(() => {
307
+ getSysConfig();
308
+ });
309
+ </script>
310
+ <style lang="scss">
311
+ .u-system-config {
312
+ padding-top: 48px;
313
+
314
+ .el-select,
315
+ .el-select--small {
316
+ width: 100%;
317
+ }
318
+
319
+ .el-form-item__content {
320
+ width: 100%;
321
+ }
322
+
323
+ .u-upload {
324
+ width: 100%;
325
+
326
+ .el-upload-list {
327
+ margin: 0;
328
+ }
329
+
330
+ .el-upload-list__item {
331
+ max-height: 60px;
332
+ padding: 0;
333
+ }
334
+ }
335
+ }
336
+ </style>