@utogether/udp-core 2.0.0-beta.26 → 2.0.0-beta.27

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 (161) hide show
  1. package/dist/403-gdcH0-Bo.js +65 -0
  2. package/dist/404-Se2SF97M.js +65 -0
  3. package/dist/500-B6j9AqLo.js +67 -0
  4. package/dist/AuthorityInfo-CQ8ydZvr.js +4 -0
  5. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-C4NRvS8p.js +100 -0
  6. package/dist/AuthorityPanel-lVnZ5bce.js +4 -0
  7. package/dist/AuthorityPanel.vue_vue_type_style_index_0_lang-nsfhDlvV.js +113 -0
  8. package/dist/Company-BzSVBSC4.js +25 -0
  9. package/dist/CompanyPanel-DBjZB4aJ.js +204 -0
  10. package/dist/DataSet-iBHzs75s.js +147 -0
  11. package/dist/Department-BkgseHo8.js +25 -0
  12. package/dist/DepartmentPanel-Sen93_2M.js +249 -0
  13. package/dist/DesignPanel-pqDcwaFC.js +4 -0
  14. package/dist/DesignPanel.vue_vue_type_style_index_0_lang-BjtYyEw7.js +1013 -0
  15. package/dist/DictView-CJLG4LlE.js +110 -0
  16. package/dist/InvOrganization-D0Jq1IAa.js +74 -0
  17. package/dist/Org-CO_1WT39.js +39 -0
  18. package/dist/Preview-DLI4Bwel.js +48 -0
  19. package/dist/ReportDefine-Cw46OnJ_.js +10 -0
  20. package/dist/ReportDesign-D4sHTXT7.js +165 -0
  21. package/dist/ReportQuery-DtOCvQSN.js +74 -0
  22. package/dist/ReportQueryFrom-QjL-ETPq.js +4 -0
  23. package/dist/ReportQueryFrom.vue_vue_type_style_index_0_lang-Dj9ne87n.js +177 -0
  24. package/dist/ReportTemplate-BxAgc_Aj.js +161 -0
  25. package/dist/Role-Df77BBD-.js +25 -0
  26. package/dist/RoleAssign-BrunouML.js +26 -0
  27. package/dist/RolePanel-DSVwqhiD.js +4 -0
  28. package/dist/RolePanel-HLA7XBlN.js +4 -0
  29. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-CKlbqRa5.js +132 -0
  30. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-CN0rUxKz.js +152 -0
  31. package/dist/ScrollPanel.vue_vue_type_style_index_0_lang-D_FeSXKv.js +99 -0
  32. package/dist/Staff-BeL1xcRf.js +26 -0
  33. package/dist/StaffInfo-CIfnltyX.js +4 -0
  34. package/dist/StaffInfo.vue_vue_type_script_setup_true_lang-DbLFwWfG.js +107 -0
  35. package/dist/StaffPanel-BV2CHWac.js +4 -0
  36. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-CvT-Vp2G.js +153 -0
  37. package/dist/SysUser-DPfNvthk.js +15 -0
  38. package/dist/SysUserPanel-CoLKYlQE.js +4 -0
  39. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-lcO3Cjbq.js +353 -0
  40. package/dist/SystemMenu-sdj1dRDA.js +156 -0
  41. package/dist/UserInfo-CTX4hhFl.js +4 -0
  42. package/dist/UserInfo.vue_vue_type_style_index_0_lang-ClhCd_8z.js +160 -0
  43. package/dist/await-to-js.es5-Bv3Eu4mi.js +10 -0
  44. package/dist/childView-BDmWwJO5.js +4 -0
  45. package/dist/childView-Dx3ACtHa.js +4 -0
  46. package/dist/childView.vue_vue_type_style_index_0_lang-CfKq_0FN.js +183 -0
  47. package/dist/childView.vue_vue_type_style_index_0_lang-DxZNtkhd.js +143 -0
  48. package/dist/code-rule-cvN4gYC_.js +148 -0
  49. package/dist/core.es.js +24 -6
  50. package/dist/cron-task-B0TkxFdp.js +135 -0
  51. package/dist/flow-task-PoDnE_kE.js +10 -0
  52. package/dist/frameView-5cy5BSgS.js +43 -0
  53. package/dist/img/minicolors.png +0 -0
  54. package/dist/index-C5WRTwvI.js +3006 -0
  55. package/dist/layout-home-DrARg-3o.js +232 -0
  56. package/dist/layoutView-25v_ngk5.js +3191 -0
  57. package/dist/log-in-Bmz5Uhbt.js +116 -0
  58. package/dist/log-out-B-8m3oNj.js +130 -0
  59. package/dist/login-Cmp2RvvW.js +217 -0
  60. package/dist/login-log-CVvRgZSu.js +70 -0
  61. package/dist/lov-view-BATtzw2X.js +99 -0
  62. package/dist/menuInfo-BIvrE7nm.js +4 -0
  63. package/dist/menuInfo.vue_vue_type_style_index_0_lang-B6USomit.js +360 -0
  64. package/dist/pda-app-CzHVyeEa.js +707 -0
  65. package/dist/redirect-DTz8GSnv.js +15 -0
  66. package/dist/resource-Y5lGB38n.js +97 -0
  67. package/dist/su-welcome-CXA6OzBw.js +878 -0
  68. package/dist/sys-config-CqO03LeC.js +385 -0
  69. package/dist/udp-core.css +1 -2
  70. package/dist/useNav-C-rCgubt.js +84 -0
  71. package/dist/utogether-MlnyYtNS.js +4 -0
  72. package/dist/wecom-push-B75FLee5.js +70 -0
  73. package/index.ts +3 -2
  74. package/package.json +1 -1
  75. package/src/App.vue +79 -78
  76. package/src/api/index.ts +1 -1
  77. package/src/components/SuQrcode/src/index.tsx +231 -236
  78. package/src/layout/components/lay-panel/index.vue +2 -6
  79. package/src/layout/components/lay-search/components/SearchModal.vue +7 -3
  80. package/src/main.ts +25 -23
  81. package/src/router/index.ts +156 -187
  82. package/src/store/modules/system.ts +7 -0
  83. package/src/style/vxetable.scss +372 -364
  84. package/src/utils/authority/index.ts +46 -29
  85. package/src/utils/udp/http/index.ts +115 -64
  86. package/src/utils/udp/http/types.d.ts +15 -14
  87. package/src/views/login/login-view.vue +4 -21
  88. package/src/views/organization/department/DepartmentPanel.vue +3 -4
  89. package/src/views/system/sys/sys-config.vue +344 -344
  90. package/src/views/uhome/components/home-todo.vue +179 -178
  91. package/src/views/ulogin/login.vue +5 -9
  92. package/tsconfig.json +2 -3
  93. package/types/global.d.ts +234 -234
  94. package/vite.config.ts +2 -1
  95. package/dist/403-D6Wb3JJh.js +0 -72
  96. package/dist/404-B_HNbPNV.js +0 -72
  97. package/dist/500-BMemTTy1.js +0 -77
  98. package/dist/AuthorityInfo-6wHxwiFM.js +0 -91
  99. package/dist/AuthorityPanel-OqF_DvXA.js +0 -98
  100. package/dist/Company-BLXSfow0.js +0 -21
  101. package/dist/CompanyPanel-B4kRZ5Cg.js +0 -199
  102. package/dist/DataSet-CuGZcKC-.js +0 -141
  103. package/dist/Department-oFhsa7cd.js +0 -21
  104. package/dist/DepartmentPanel-B1UGpu-r.js +0 -242
  105. package/dist/DepartmentPanel-BL58AdoT.js +0 -2
  106. package/dist/DesignPanel-DmkFVw1N.js +0 -1196
  107. package/dist/DictView-CC5yMzOq.js +0 -100
  108. package/dist/File-WJXjGYxr.js +0 -89
  109. package/dist/InvOrganization-BwMmD8Ua.js +0 -76
  110. package/dist/Org-HgnOWubi.js +0 -76
  111. package/dist/Preview-CAzWxLmP.js +0 -45
  112. package/dist/ReIcon-DecitXmg.js +0 -413
  113. package/dist/ReportDefine-BgLM-Rjk.js +0 -10
  114. package/dist/ReportDesign-DwchGG2P.js +0 -158
  115. package/dist/ReportQuery-D5jaRJEn.js +0 -101
  116. package/dist/ReportQueryFrom-CNlmtYey.js +0 -198
  117. package/dist/ReportTemplate-CNcTmccs.js +0 -162
  118. package/dist/Role-Be8WfdCA.js +0 -21
  119. package/dist/RoleAssign-CtehGAUf.js +0 -22
  120. package/dist/RolePanel-CAwITg_q.js +0 -131
  121. package/dist/RolePanel-SN0FGFZ7.js +0 -176
  122. package/dist/ScrollPanel-DW30pGz1.js +0 -88
  123. package/dist/Staff-V2YsNKcj.js +0 -22
  124. package/dist/StaffInfo-CKRPW0r4.js +0 -149
  125. package/dist/StaffPanel-BxcgMg7u.js +0 -143
  126. package/dist/SysUser-Dxyj5w5m.js +0 -12
  127. package/dist/SysUserPanel-DI6CWcZo.js +0 -365
  128. package/dist/SystemMenu-BBHREM8T.js +0 -154
  129. package/dist/UserInfo-BMVQ0xwE.js +0 -194
  130. package/dist/_plugin-vue_export-helper-C6QCLu9I.js +0 -8
  131. package/dist/api-BFNxcxSN.js +0 -30
  132. package/dist/authority-BJFEUdrh.js +0 -20
  133. package/dist/await-to-js.es5-DkWYmPXW.js +0 -10
  134. package/dist/childView-BBjPEraB.js +0 -184
  135. package/dist/childView-DNqG2UVm.js +0 -181
  136. package/dist/code-rule-QFrhqFrW.js +0 -151
  137. package/dist/contant-Q77dU_V3.js +0 -4
  138. package/dist/cron-task-BpUDKEAU.js +0 -131
  139. package/dist/flow-task-DAc2NrDU.js +0 -11
  140. package/dist/frameView-Di0zJZUR.js +0 -39
  141. package/dist/layout-home-BVp7vYLR.js +0 -239
  142. package/dist/layoutView-B6Mx2ERA.js +0 -2662
  143. package/dist/log-in-BrNB0mLz.js +0 -117
  144. package/dist/log-out-dYfqvzy6.js +0 -111
  145. package/dist/login-D_Hjy3Jd.js +0 -231
  146. package/dist/login-log-CJak-ANA.js +0 -79
  147. package/dist/lov-view-DM5Nm5tW.js +0 -95
  148. package/dist/menuInfo-BlOY1KZW.js +0 -346
  149. package/dist/mitt-CQgI7DYU.js +0 -27
  150. package/dist/pda-app-CA7YI37u.js +0 -589
  151. package/dist/redirect-N0k4tImU.js +0 -16
  152. package/dist/resource-CfQTHFcs.js +0 -94
  153. package/dist/su-welcome-DVD3S_du.js +0 -799
  154. package/dist/sys-config-Ddb3vBpK.js +0 -316
  155. package/dist/system-Cm3lyBas.js +0 -1528
  156. package/dist/udp-core-DaQd5CF1.js +0 -2028
  157. package/dist/useDataThemeChange-DJ4K3VGp.js +0 -226
  158. package/dist/useNav-BhOJIdrJ.js +0 -106
  159. package/dist/utogether-l7JXs4Lv.js +0 -4
  160. package/dist/water-mark-WDQZ9YqB.js +0 -119
  161. package/dist/wecom-push-kWkAVRCj.js +0 -77
@@ -1,344 +1,344 @@
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 :label="$t('message.udp.showTitle')" prop="showTitle">
27
- <el-switch v-model="record.showTitle" active-value="Y" inactive-value="N" />
28
- </el-form-item>
29
- <el-form-item :label="$t('message.udp.initialPasswordModification')" prop="initialPasswordModification">
30
- <el-switch v-model="record.initialPasswordModification" active-value="Y" inactive-value="N" />
31
- </el-form-item>
32
- <el-form-item
33
- v-if="['liwei', 'yanhuaijun', 'phr', 'zhonglijun', 'ccl'].includes(cookies.get(kLOGINER))"
34
- :label="$t('message.udp.techSupport')"
35
- prop="techSupport"
36
- >
37
- <el-switch v-model="record.techSupport" active-value="Y" inactive-value="N" />
38
- </el-form-item>
39
- <el-form-item
40
- v-if="['liwei', 'yanhuaijun', 'phr', 'zhonglijun', 'ccl'].includes(cookies.get(kLOGINER))"
41
- :label="$t('message.udp.baseColor')"
42
- prop="baseColor"
43
- >
44
- <vxe-color-picker v-model="record.baseColor" :colors="colorList" type="hex" clearable transfer />
45
- </el-form-item>
46
- <el-form-item :label="$t('message.udp.systemLogo')">
47
- <el-upload
48
- v-model:file-list="record.logo"
49
- class="u-upload"
50
- :action="baseUrl + '/ufil/file/uploadMultipart'"
51
- :headers="headers"
52
- :on-exceed="handleExceed"
53
- accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
54
- list-type="picture"
55
- :limit="1"
56
- >
57
- <!-- :before-upload="handleBeforUpload" -->
58
- <div class="flex items-center">
59
- <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
60
- <div class="pl-2 text-xs">
61
- <span>
62
- {{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}
63
- </span>
64
- <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 600 * 200' }) }}</span>
65
- <span class="pl-2">
66
- {{ $t('message.tip.imageCapacity', { capacity: ': <50kb' }) }}
67
- </span>
68
- </div>
69
- </div>
70
- </el-upload>
71
- </el-form-item>
72
- <el-form-item :label="$t('message.udp.homeBackimg')">
73
- <el-upload
74
- v-model:file-list="record.backgroundImg"
75
- class="u-upload"
76
- :action="baseUrl + '/ufil/file/uploadMultipart'"
77
- :headers="headers"
78
- :on-exceed="handleExceed"
79
- accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
80
- list-type="picture"
81
- :limit="1"
82
- >
83
- <div class="flex items-center">
84
- <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
85
- <div class="pl-2 text-xs">
86
- <span>{{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}</span>
87
- <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 4096 * 2048' }) }}</span>
88
- </div>
89
- </div>
90
- </el-upload>
91
- </el-form-item>
92
- <el-form-item :label="$t('message.udp.systemFavicon')">
93
- <el-upload
94
- v-model:file-list="record.favicon"
95
- class="u-upload"
96
- :action="baseUrl + '/ufil/file/uploadMultipart'"
97
- :headers="headers"
98
- :on-exceed="handleExceed"
99
- accept=".ico"
100
- list-type="picture"
101
- :limit="1"
102
- >
103
- <div class="flex items-center">
104
- <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
105
- <div class="pl-2 text-xs">
106
- {{ $t('message.tip.uploadFormat', { type: ': *.ico,.png*.jpg;' }) }}
107
- </div>
108
- </div>
109
- </el-upload>
110
- </el-form-item>
111
- </el-form>
112
- </div>
113
- <div class="flex justify-end w-1/2 p-2">
114
- <el-button type="primary" @click="submitForm(xfrom)">
115
- {{ $t('message.btn.confirm') }}
116
- </el-button>
117
- </div>
118
- </div>
119
- </template>
120
-
121
- <script lang="ts" setup>
122
- import { reactive, ref, computed, onMounted } from 'vue';
123
- import type { FormInstance, FormRules } from 'element-plus';
124
- import { useI18n } from 'vue-i18n';
125
- import to from 'await-to-js';
126
- import { successMessage, cookies, warnMessage } from '@utogether/utils';
127
- import { isArray } from 'xe-utils';
128
- import { kTOKEN, kLOGINER } from '../../../contant';
129
- import { getServiceApi, getBaseURL } from '../../../api';
130
-
131
- const xfrom = ref<FormInstance>();
132
- const loading = ref(false);
133
- const record = reactive({
134
- defaultLanguage: 'zh',
135
- title: 'U-DP',
136
- ispTitle: 'U-DP',
137
- baseColor: '#FFF',
138
- i18nEnabled: 'N',
139
- orgTaggle: 'Y',
140
- showTitle: 'Y',
141
- initialPasswordModification: 'N',
142
- techSupport: 'Y',
143
- copyright: '深圳友聚信息技术有限公司',
144
- logo: [],
145
- backgroundImg: [],
146
- favicon: []
147
- });
148
-
149
- const serviceApi = getServiceApi();
150
- const { t } = useI18n();
151
-
152
- const baseUrl = ref(getBaseURL());
153
-
154
- const url = '/upfm/v1/sysConfig';
155
- let dataList = [];
156
-
157
- const colorList = [
158
- '#DC143C',
159
- '#FF1493',
160
- '#FF00FF',
161
- '#9932CC',
162
- '#6A5ACD',
163
- '#0000FF',
164
- '#00008B',
165
- '#778899',
166
- '#1E90FF',
167
- '#00BFFF',
168
- '#5F9EA0',
169
- '#00FFFF',
170
- '#008080',
171
- '#7FFFAA',
172
- '#3CB371',
173
- '#8FBC8F',
174
- '#008000',
175
- '#7CFC00',
176
- '#556B2F',
177
- '#FFFFE0',
178
- '#FFFF00',
179
- '#808000',
180
- '#EEE8AA',
181
- '#FFD700',
182
- '#FFA500',
183
- '#FF4500',
184
- '#FA8072',
185
- '#FF0000',
186
- '#800000',
187
- '#C0C0C0'
188
- ];
189
-
190
- const rules = reactive<FormRules>({
191
- defaultLanguage: [
192
- {
193
- required: true,
194
- message: t('message.required') + t('message.udp.defaultLanguage'),
195
- trigger: 'blur'
196
- }
197
- ],
198
- title: [{ required: true, message: t('message.required') + t('message.udp.systemTitle'), trigger: 'blur' }]
199
- });
200
-
201
- const headers = computed(() => {
202
- const token = cookies.get(kTOKEN)!;
203
- const data = JSON.parse(token);
204
- const headers = {
205
- Authorization: 'Bearer ' + data.accessToken
206
- };
207
- return headers;
208
- });
209
-
210
- const submitForm = (xfrom: FormInstance) => {
211
- // const menthod = dataList.length ? 'put' : 'post';
212
- Object.keys(record).forEach(field => {
213
- const obj = {
214
- configCode: field,
215
- configValue: record[field],
216
- configCategory: 'system',
217
- fileName: ''
218
- };
219
- if (isArray(record[field])) {
220
- obj.configValue = getImgActUrl(record[field][0]).url;
221
- obj.fileName = getImgActUrl(record[field][0]).name;
222
- }
223
- const idx = dataList.findIndex(f => f.configCode === field);
224
- if (idx !== -1) {
225
- dataList[idx] = Object.assign(dataList[idx], obj);
226
- } else {
227
- dataList.push(obj);
228
- }
229
- });
230
- // return;
231
- xfrom?.validate(async valid => {
232
- if (valid) {
233
- loading.value = true;
234
- const addList = dataList.filter(data => !data.id);
235
- const updateList = dataList.filter(data => data.id);
236
- const services = [];
237
- if (addList.length) {
238
- services.push(serviceApi.post(url, addList));
239
- } else {
240
- services.push(serviceApi.put(url, updateList));
241
- }
242
- const [err] = await to(Promise.all(services));
243
- // const [err, data]: [Error, any] = await to(serviceApi[menthod](url, dataList));
244
- if (!err) {
245
- successMessage();
246
- // console.log({ data });
247
- // dataList = data;
248
- // setDisplayObject();
249
- setDisplayObject();
250
- }
251
- loading.value = false;
252
- }
253
- });
254
- };
255
-
256
- const getImgActUrl = file => {
257
- if (file?.response) {
258
- return { url: file.response.data, name: file.name };
259
- }
260
- return { url: file?.realpath || file?.url, name: file?.name };
261
- };
262
-
263
- const handleExceed = file => {
264
- if (file) {
265
- return warnMessage(t('message.tip.singleImg'));
266
- }
267
- };
268
-
269
- // const handleBeforUpload = (file, type) => {
270
- // console.log(file);
271
- // console.log(type);
272
- // return true;
273
- // };
274
-
275
- /**
276
- * @description: 处理显示数据
277
- * @return {*}
278
- */
279
- const setDisplayObject = () => {
280
- Object.keys(record).forEach(key => {
281
- const data = dataList.find(f => f.configCode === key);
282
- if (data) {
283
- record[data.configCode] = data.configValue || record[data.configCode];
284
- if (data.fileName) {
285
- const { configValue, fileName } = data;
286
- record[data.configCode] = [
287
- { url: baseUrl.value + '/ufil' + configValue, realpath: configValue, name: fileName }
288
- ];
289
- }
290
- }
291
- });
292
- };
293
- /**
294
- * @description: 查询系统配置
295
- * @return {*}
296
- */
297
- const getSysConfig = async () => {
298
- const [err, data]: [Error, any] = await to(serviceApi.get(url, {}));
299
- if (!err) {
300
- dataList = data.list;
301
- }
302
- // dataList = [
303
- // { configCode: 'logo', configValue: '', fileName: 'logo' },
304
- // { configCode: 'backgroundImg', configValue: '', fileName: '首页背景' },
305
- // { configCode: 'favicon', configValue: '', fileName: 'favicon' },
306
- // { configCode: 'copyright', configValue: '' },
307
- // { configCode: 'i18nEnabled', configValue: '' },
308
- // { configCode: 'title', configValue: '' },
309
- // { configCode: 'defaultLanguage', configValue: '' }
310
- // ];
311
- setDisplayObject();
312
- };
313
-
314
- onMounted(() => {
315
- getSysConfig();
316
- });
317
- </script>
318
- <style lang="scss">
319
- .u-system-config {
320
- padding-top: 48px;
321
-
322
- .el-select,
323
- .el-select--small {
324
- width: 100%;
325
- }
326
-
327
- .el-form-item__content {
328
- width: 100%;
329
- }
330
-
331
- .u-upload {
332
- width: 100%;
333
-
334
- .el-upload-list {
335
- margin: 0;
336
- }
337
-
338
- .el-upload-list__item {
339
- max-height: 60px;
340
- padding: 0;
341
- }
342
- }
343
- }
344
- </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 :label="$t('message.udp.showTitle')" prop="showTitle">
27
+ <el-switch v-model="record.showTitle" active-value="Y" inactive-value="N" />
28
+ </el-form-item>
29
+ <el-form-item :label="$t('message.udp.initialPasswordModification')" prop="initialPasswordModification">
30
+ <el-switch v-model="record.initialPasswordModification" active-value="Y" inactive-value="N" />
31
+ </el-form-item>
32
+ <el-form-item
33
+ v-if="['liwei', 'yanhuaijun', 'phr', 'zhonglijun', 'ccl'].includes(cookies.get(kLOGINER))"
34
+ :label="$t('message.udp.techSupport')"
35
+ prop="techSupport"
36
+ >
37
+ <el-switch v-model="record.techSupport" active-value="Y" inactive-value="N" />
38
+ </el-form-item>
39
+ <el-form-item
40
+ v-if="['liwei', 'yanhuaijun', 'phr', 'zhonglijun', 'ccl'].includes(cookies.get(kLOGINER))"
41
+ :label="$t('message.udp.baseColor')"
42
+ prop="baseColor"
43
+ >
44
+ <vxe-color-picker v-model="record.baseColor" :colors="colorList" type="hex" clearable transfer />
45
+ </el-form-item>
46
+ <el-form-item :label="$t('message.udp.systemLogo')">
47
+ <el-upload
48
+ v-model:file-list="record.logo"
49
+ class="u-upload"
50
+ :action="baseUrl + '/ufil/file/uploadMultipart'"
51
+ :headers="headers"
52
+ :on-exceed="handleExceed"
53
+ accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
54
+ list-type="picture"
55
+ :limit="1"
56
+ >
57
+ <!-- :before-upload="handleBeforUpload" -->
58
+ <div class="flex items-center">
59
+ <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
60
+ <div class="pl-2 text-xs">
61
+ <span>
62
+ {{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}
63
+ </span>
64
+ <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 600 * 200' }) }}</span>
65
+ <span class="pl-2">
66
+ {{ $t('message.tip.imageCapacity', { capacity: ': <50kb' }) }}
67
+ </span>
68
+ </div>
69
+ </div>
70
+ </el-upload>
71
+ </el-form-item>
72
+ <el-form-item :label="$t('message.udp.homeBackimg')">
73
+ <el-upload
74
+ v-model:file-list="record.backgroundImg"
75
+ class="u-upload"
76
+ :action="baseUrl + '/ufil/file/uploadMultipart'"
77
+ :headers="headers"
78
+ :on-exceed="handleExceed"
79
+ accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
80
+ list-type="picture"
81
+ :limit="1"
82
+ >
83
+ <div class="flex items-center">
84
+ <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
85
+ <div class="pl-2 text-xs">
86
+ <span>{{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}</span>
87
+ <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 4096 * 2048' }) }}</span>
88
+ </div>
89
+ </div>
90
+ </el-upload>
91
+ </el-form-item>
92
+ <el-form-item :label="$t('message.udp.systemFavicon')">
93
+ <el-upload
94
+ v-model:file-list="record.favicon"
95
+ class="u-upload"
96
+ :action="baseUrl + '/ufil/file/uploadMultipart'"
97
+ :headers="headers"
98
+ :on-exceed="handleExceed"
99
+ accept=".ico"
100
+ list-type="picture"
101
+ :limit="1"
102
+ >
103
+ <div class="flex items-center">
104
+ <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
105
+ <div class="pl-2 text-xs">
106
+ {{ $t('message.tip.uploadFormat', { type: ': *.ico,.png*.jpg;' }) }}
107
+ </div>
108
+ </div>
109
+ </el-upload>
110
+ </el-form-item>
111
+ </el-form>
112
+ </div>
113
+ <div class="flex justify-end w-1/2 p-2">
114
+ <el-button type="primary" @click="submitForm(xfrom)">
115
+ {{ $t('message.btn.confirm') }}
116
+ </el-button>
117
+ </div>
118
+ </div>
119
+ </template>
120
+
121
+ <script lang="ts" setup>
122
+ import { reactive, ref, computed, onMounted } from 'vue';
123
+ import type { FormInstance, FormRules } from 'element-plus';
124
+ import { useI18n } from 'vue-i18n';
125
+ import to from 'await-to-js';
126
+ import { successMessage, cookies, warnMessage } from '@utogether/utils';
127
+ import { isArray } from 'xe-utils';
128
+ import { kTOKEN, kLOGINER } from '../../../contant';
129
+ import { getServiceApi, getBaseURL } from '../../../api';
130
+
131
+ const xfrom = ref<FormInstance>();
132
+ const loading = ref(false);
133
+ const record = reactive({
134
+ defaultLanguage: 'zh',
135
+ title: 'U-DP',
136
+ ispTitle: 'U-DP',
137
+ baseColor: '#FFF',
138
+ i18nEnabled: 'N',
139
+ orgTaggle: 'Y',
140
+ showTitle: 'Y',
141
+ initialPasswordModification: 'N',
142
+ techSupport: 'Y',
143
+ copyright: '深圳友聚信息技术有限公司',
144
+ logo: [],
145
+ backgroundImg: [],
146
+ favicon: []
147
+ });
148
+
149
+ const serviceApi = getServiceApi();
150
+ const { t } = useI18n();
151
+
152
+ const baseUrl = ref(getBaseURL());
153
+
154
+ const url = '/upfm/v1/sysConfig';
155
+ let dataList = [];
156
+
157
+ const colorList = [
158
+ '#DC143C',
159
+ '#FF1493',
160
+ '#FF00FF',
161
+ '#9932CC',
162
+ '#6A5ACD',
163
+ '#0000FF',
164
+ '#00008B',
165
+ '#778899',
166
+ '#1E90FF',
167
+ '#00BFFF',
168
+ '#5F9EA0',
169
+ '#00FFFF',
170
+ '#008080',
171
+ '#7FFFAA',
172
+ '#3CB371',
173
+ '#8FBC8F',
174
+ '#008000',
175
+ '#7CFC00',
176
+ '#556B2F',
177
+ '#FFFFE0',
178
+ '#FFFF00',
179
+ '#808000',
180
+ '#EEE8AA',
181
+ '#FFD700',
182
+ '#FFA500',
183
+ '#FF4500',
184
+ '#FA8072',
185
+ '#FF0000',
186
+ '#800000',
187
+ '#C0C0C0'
188
+ ];
189
+
190
+ const rules = reactive<FormRules>({
191
+ defaultLanguage: [
192
+ {
193
+ required: true,
194
+ message: t('message.required') + t('message.udp.defaultLanguage'),
195
+ trigger: 'blur'
196
+ }
197
+ ],
198
+ title: [{ required: true, message: t('message.required') + t('message.udp.systemTitle'), trigger: 'blur' }]
199
+ });
200
+
201
+ const headers = computed(() => {
202
+ const token = cookies.get(kTOKEN)!;
203
+ const data = JSON.parse(token);
204
+ const headers = {
205
+ Authorization: 'Bearer ' + data.accessToken
206
+ };
207
+ return headers;
208
+ });
209
+
210
+ const submitForm = (xfrom: FormInstance) => {
211
+ // const menthod = dataList.length ? 'put' : 'post';
212
+ Object.keys(record).forEach(field => {
213
+ const obj = {
214
+ configCode: field,
215
+ configValue: record[field],
216
+ configCategory: 'system',
217
+ fileName: ''
218
+ };
219
+ if (isArray(record[field])) {
220
+ obj.configValue = getImgActUrl(record[field][0]).url;
221
+ obj.fileName = getImgActUrl(record[field][0]).name;
222
+ }
223
+ const idx = dataList.findIndex(f => f.configCode === field);
224
+ if (idx !== -1) {
225
+ dataList[idx] = Object.assign(dataList[idx], obj);
226
+ } else {
227
+ dataList.push(obj);
228
+ }
229
+ });
230
+ // return;
231
+ xfrom?.validate(async valid => {
232
+ if (valid) {
233
+ loading.value = true;
234
+ const addList = dataList.filter(data => !data.id);
235
+ const updateList = dataList.filter(data => data.id);
236
+ const services = [];
237
+ if (addList.length) {
238
+ services.push(serviceApi.post(url, addList));
239
+ } else {
240
+ services.push(serviceApi.put(url, updateList));
241
+ }
242
+ const [err] = await to(Promise.all(services));
243
+ // const [err, data]: [Error, any] = await to(serviceApi[menthod](url, dataList));
244
+ if (!err) {
245
+ successMessage();
246
+ // console.log({ data });
247
+ // dataList = data;
248
+ // setDisplayObject();
249
+ setDisplayObject();
250
+ }
251
+ loading.value = false;
252
+ }
253
+ });
254
+ };
255
+
256
+ const getImgActUrl = file => {
257
+ if (file?.response) {
258
+ return { url: file.response.data, name: file.name };
259
+ }
260
+ return { url: file?.realpath || file?.url, name: file?.name };
261
+ };
262
+
263
+ const handleExceed = file => {
264
+ if (file) {
265
+ return warnMessage(t('message.tip.singleImg'));
266
+ }
267
+ };
268
+
269
+ // const handleBeforUpload = (file, type) => {
270
+ // console.log(file);
271
+ // console.log(type);
272
+ // return true;
273
+ // };
274
+
275
+ /**
276
+ * @description: 处理显示数据
277
+ * @return {*}
278
+ */
279
+ const setDisplayObject = () => {
280
+ Object.keys(record).forEach(key => {
281
+ const data = dataList.find(f => f.configCode === key);
282
+ if (data) {
283
+ record[data.configCode] = data.configValue || record[data.configCode];
284
+ if (data.fileName) {
285
+ const { configValue, fileName } = data;
286
+ record[data.configCode] = [
287
+ { url: baseUrl.value + '/ufil' + configValue, realpath: configValue, name: fileName }
288
+ ];
289
+ }
290
+ }
291
+ });
292
+ };
293
+ /**
294
+ * @description: 查询系统配置
295
+ * @return {*}
296
+ */
297
+ const getSysConfig = async () => {
298
+ const [err, data]: [Error, any] = await to(serviceApi.get(url, {}));
299
+ if (!err) {
300
+ dataList = data.list;
301
+ }
302
+ // dataList = [
303
+ // { configCode: 'logo', configValue: '', fileName: 'logo' },
304
+ // { configCode: 'backgroundImg', configValue: '', fileName: '首页背景' },
305
+ // { configCode: 'favicon', configValue: '', fileName: 'favicon' },
306
+ // { configCode: 'copyright', configValue: '' },
307
+ // { configCode: 'i18nEnabled', configValue: '' },
308
+ // { configCode: 'title', configValue: '' },
309
+ // { configCode: 'defaultLanguage', configValue: '' }
310
+ // ];
311
+ setDisplayObject();
312
+ };
313
+
314
+ onMounted(() => {
315
+ getSysConfig();
316
+ });
317
+ </script>
318
+ <style lang="scss">
319
+ .u-system-config {
320
+ padding-top: 48px;
321
+
322
+ .el-select,
323
+ .el-select--small {
324
+ width: 100%;
325
+ }
326
+
327
+ .el-form-item__content {
328
+ width: 100%;
329
+ }
330
+
331
+ .u-upload {
332
+ width: 100%;
333
+
334
+ .el-upload-list {
335
+ margin: 0;
336
+ }
337
+
338
+ .el-upload-list__item {
339
+ max-height: 60px;
340
+ padding: 0;
341
+ }
342
+ }
343
+ }
344
+ </style>