@utogether/udp-core 1.0.1-beta.1 → 1.0.1-beta.11

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 (147) hide show
  1. package/build/plugins.ts +39 -32
  2. package/dist/{403-Dp617CWX.js → 403-Dsgsr2M-.js} +1 -1
  3. package/dist/{404-Cz_Axb6Y.js → 404-DmPHEfqM.js} +1 -1
  4. package/dist/{500-BGCtRNse.js → 500-OYEgHR2a.js} +1 -1
  5. package/dist/{AuthorityInfo-DGGfm7IS.js → AuthorityInfo-B1H1txG-.js} +1 -1
  6. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-BUlmQtjQ.js +100 -0
  7. package/dist/{Company-IV3GTnzY.js → Company-C8ojgx93.js} +3 -3
  8. package/dist/{CompanyPanel-qV-_VtoL.js → CompanyPanel-Dageer1t.js} +16 -16
  9. package/dist/{Department-B3W-OxW8.js → Department-Dr94_85I.js} +3 -3
  10. package/dist/{DepartmentPanel-Cw3OWxE7.js → DepartmentPanel-Bc5r1HpT.js} +1 -1
  11. package/dist/{DesignPanel-BFxR2fHJ.js → DesignPanel-CcWt1Myp.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-DljbeFba.js → DesignPanel.vue_vue_type_style_index_0_lang-CKA6nx1l.js} +24 -26
  13. package/dist/DictView-BHj6wexC.js +110 -0
  14. package/dist/InvOrganization-DP3Le9g-.js +72 -0
  15. package/dist/Org-BRGHTwsw.js +39 -0
  16. package/dist/{Preview-BlDMmpdR.js → Preview-CqMaUD_3.js} +1 -1
  17. package/dist/{ReportDefine-Cub_85LA.js → ReportDefine-PEQdTCOY.js} +1 -1
  18. package/dist/{ReportDesign-hFhq5UVE.js → ReportDesign-CB4bv8ba.js} +43 -43
  19. package/dist/{ReportQuery-ChkWEyxT.js → ReportQuery-B7t4lMK0.js} +1 -1
  20. package/dist/{ReportQueryFrom-KVyD_8Dj.js → ReportQueryFrom-VBxUIMRJ.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-CLNODquq.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-HeLA4Qs5.js} +1 -1
  22. package/dist/{ReportTemplate-ag9NDvh2.js → ReportTemplate-DNkv7F5p.js} +28 -28
  23. package/dist/{Role-_q3lQ8CZ.js → Role-BGfTpZK4.js} +6 -6
  24. package/dist/{RoleAssign-DZb9IRsm.js → RoleAssign-DrKFWZzA.js} +8 -8
  25. package/dist/{RolePanel-CsLsz-Ds.js → RolePanel-3lvRh7aS.js} +1 -1
  26. package/dist/{RolePanel-BQb1LlhD.js → RolePanel-BRI5QYe4.js} +1 -1
  27. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-BXKZb7yt.js +132 -0
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-BrnRgHEk.js → RolePanel.vue_vue_type_script_setup_true_lang-Cci_Ysty.js} +44 -38
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-CaFKRwXu.js → ScrollPanel.vue_vue_type_style_index_0_lang-BmId6zzA.js} +21 -21
  30. package/dist/{Staff-BSf9Ypbk.js → Staff-Dr0dq3fW.js} +3 -3
  31. package/dist/{StaffInfo-BNKasyMF.js → StaffInfo-_N9g2hPa.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-DDZ7ukd0.js → StaffInfo.vue_vue_type_script_setup_true_lang-DiTJY2ug.js} +11 -11
  33. package/dist/{StaffPanel-Bpq0WVlH.js → StaffPanel-mxJQiW3G.js} +1 -1
  34. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-BhiJ0Q-Q.js → StaffPanel.vue_vue_type_script_setup_true_lang-GRGn-5t6.js} +2 -2
  35. package/dist/{SysUser-FAABuNti.js → SysUser-DgA19hZE.js} +2 -2
  36. package/dist/{SysUserPanel-PxJeOgHm.js → SysUserPanel-Bc85z5_K.js} +1 -1
  37. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-BHDrP1Pk.js +294 -0
  38. package/dist/{SystemMenu-C-7NAGon.js → SystemMenu-Be-gFIie.js} +26 -26
  39. package/dist/{UserInfo-ClXKtyGo.js → UserInfo-BCYuwFmr.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-8N7P4Hl7.js → UserInfo.vue_vue_type_style_index_0_lang-B1lgokO6.js} +39 -37
  41. package/dist/{childView-C_HmDQNd.js → childView-DhcBr1UA.js} +1 -1
  42. package/dist/{childView-uUlBcTza.js → childView-Dk4zZoXd.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-Ckjmw6wJ.js → childView.vue_vue_type_style_index_0_lang-CVnLnl03.js} +40 -40
  44. package/dist/{childView.vue_vue_type_style_index_0_lang-y0sDvYx5.js → childView.vue_vue_type_style_index_0_lang-D4GYVhOc.js} +1 -1
  45. package/dist/{code-rule-AgCVDKFy.js → code-rule-BSwPwuAL.js} +9 -10
  46. package/dist/core.es.js +14 -11
  47. package/dist/{cron-task-C6FgQxTi.js → cron-task-T1ztyra7.js} +1 -1
  48. package/dist/{frameView-BDgISK7N.js → frameView-BDgngiBq.js} +1 -1
  49. package/dist/img/l_img.svg +1 -1
  50. package/dist/img/minicolors.png +0 -0
  51. package/dist/img/v_img.svg +1 -1
  52. package/dist/index-BSj2AtVL.js +4468 -0
  53. package/dist/{layoutView-yb3DV2DQ.js → layoutView-i7dLLBzJ.js} +1181 -1176
  54. package/dist/{login-RRpljbkm.js → login-K5Ludp8x.js} +105 -113
  55. package/dist/{login-log-CvVnyGi3.js → login-log-kqKzKTto.js} +1 -1
  56. package/dist/{lov-view-C9-rjzZR.js → lov-view-lAexiucu.js} +2 -2
  57. package/dist/{menuInfo-CzPQyFhp.js → menuInfo-BaN5YZPp.js} +1 -1
  58. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-BumXunCg.js → menuInfo.vue_vue_type_style_index_0_lang-yI4QOYxG.js} +100 -97
  59. package/dist/{pda-app-Dvy3U-b6.js → pda-app-DEtDXFvM.js} +211 -197
  60. package/dist/{resource-Fy0lFkSV.js → resource-Bztmz7pn.js} +15 -15
  61. package/dist/{su-welcome-DYvSCUST.js → su-welcome-Bx8nBPi9.js} +109 -110
  62. package/dist/sys-config-nvrtYGgi.js +290 -0
  63. package/dist/udp-core.css +2 -2
  64. package/dist/{utogether-CjmJiHoE.js → utogether-yPnwDAIH.js} +1 -1
  65. package/index.ts +40 -36
  66. package/package.json +18 -18
  67. package/src/App.vue +65 -70
  68. package/src/api/index.ts +31 -31
  69. package/src/components/SuCharts/src/UserInfo.vue +78 -78
  70. package/src/components/SuScrollTree/ScrollPanel.vue +3 -3
  71. package/src/components/udp/count-down.vue +536 -0
  72. package/src/components/udp/flip-down/FlipCard/flip-card.vue +251 -0
  73. package/src/components/udp/flip-down/FlipCard/interfaces.ts +4 -0
  74. package/src/components/udp/flip-down/FlipClock/flip-clock.vue +113 -0
  75. package/src/components/udp/form-upload.vue +414 -64
  76. package/src/components/udp/form.vue +112 -0
  77. package/src/components/udp/grid.vue +495 -0
  78. package/src/components/udp/index.ts +10 -4
  79. package/src/components/udp/lov.vue +388 -0
  80. package/src/components/udp/modal-form.vue +13 -3
  81. package/src/components/udp/modal-grid.vue +298 -0
  82. package/src/components/udp/upload.vue +423 -0
  83. package/src/components/udp/utils.ts +447 -40
  84. package/src/directives/permission/index.ts +1 -1
  85. package/src/layout/components/lay-navbar/index.vue +239 -237
  86. package/src/layout/components/lay-panel/index.vue +150 -150
  87. package/src/layout/components/lay-search/index.vue +25 -25
  88. package/src/layout/components/lay-select-org/index.vue +64 -69
  89. package/src/layout/components/lay-sidebar/breadCrumb.vue +1 -1
  90. package/src/layout/components/lay-sidebar/horizontal.vue +190 -191
  91. package/src/layout/components/lay-sidebar/mixNav.vue +260 -258
  92. package/src/layout/components/lay-sidebar/sidebar-logo.vue +92 -98
  93. package/src/layout/components/lay-tag/index.vue +625 -625
  94. package/src/layout/hooks/useNav.ts +173 -173
  95. package/src/layout/layoutView.vue +215 -215
  96. package/src/main.ts +119 -109
  97. package/src/plugins/i18n/en.ts +302 -289
  98. package/src/plugins/i18n/zh.ts +349 -337
  99. package/src/plugins/vxe-table/index.ts +53 -46
  100. package/src/plugins/vxe-table/render.tsx +956 -817
  101. package/src/router/index.ts +177 -183
  102. package/src/router/modules/remaining.ts +58 -83
  103. package/src/store/modules/permission.ts +1 -4
  104. package/src/style/button.scss +85 -78
  105. package/src/style/tailwind.css +1 -68
  106. package/src/style/vxetable.scss +44 -11
  107. package/src/utils/authority/index.ts +1 -1
  108. package/src/utils/{http → udp/http}/index.ts +283 -297
  109. package/src/utils/{http → udp/http}/types.d.ts +8 -5
  110. package/src/utils/udp/useRender.ts +17 -6
  111. package/src/views/login/login-view.vue +300 -314
  112. package/src/views/organization/company/CompanyPanel.vue +259 -259
  113. package/src/views/organization/inv-org/InvOrganization.vue +68 -54
  114. package/src/views/organization/org/Org.vue +9 -5
  115. package/src/views/system/menu/SystemMenu.vue +183 -197
  116. package/src/views/system/menu/menuInfo.vue +363 -371
  117. package/src/views/system/role/AuthorityInfo.vue +19 -15
  118. package/src/views/system/role/Role.vue +1 -5
  119. package/src/views/system/role/RolePanel.vue +11 -2
  120. package/src/views/system/role/UserInfo.vue +195 -193
  121. package/src/views/system/role-assign/RoleAssign.vue +57 -57
  122. package/src/views/system/role-assign/RolePanel.vue +139 -136
  123. package/src/views/system/sys/sys-config.vue +287 -291
  124. package/src/views/system/sysUser/SysUserPanel.vue +278 -278
  125. package/src/views/uapp/pda/pda-app.vue +208 -176
  126. package/src/views/udev/dict/DictView.vue +118 -106
  127. package/src/views/udev/dict/childView.vue +7 -7
  128. package/src/views/udev/lov/lov-view.vue +91 -91
  129. package/src/views/ufile/aggregation/File.vue +5 -5
  130. package/src/views/ufile/file/water-mark.vue +14 -14
  131. package/src/views/uhome/su-welcome.vue +3 -3
  132. package/src/views/ulogin/login.vue +12 -8
  133. package/src/views/upms/user/login-log.vue +1 -1
  134. package/src/views/urpt/design/DesignPanel.vue +507 -526
  135. package/src/views/urpt/design/ReportDesign.vue +15 -19
  136. package/src/views/urpt/static-resource/resource.vue +3 -3
  137. package/src/views/urpt/template/ReportTemplate.vue +7 -7
  138. package/types/global.d.ts +2 -1
  139. package/vite.config.ts +6 -2
  140. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-BqccGW7v.js +0 -102
  141. package/dist/DictView-C-i7e4hZ.js +0 -95
  142. package/dist/InvOrganization-cfT6riGU.js +0 -260
  143. package/dist/Org-CA7vTDIF.js +0 -35
  144. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-cmW7zBLu.js +0 -126
  145. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-njefUln5.js +0 -288
  146. package/dist/index-DzOzUkf6.js +0 -3388
  147. package/dist/sys-config-DJ1vNQTy.js +0 -277
@@ -1,291 +1,287 @@
1
- <template>
2
- <div v-spinning="loading" class="flex flex-col items-center bg-white u-system-config">
3
- <div class="flex justify-end w-1/2 p-2">
4
- <el-button type="primary" @click="submitForm(xfrom)">
5
- {{ $t('message.btn.confirm') }}
6
- </el-button>
7
- </div>
8
- <div class="flex w-1/2 p-2 overflow-y-auto border border-gray-300 rounded-md">
9
- <el-form
10
- ref="xfrom"
11
- :model="record"
12
- :rules="rules"
13
- label-width="90"
14
- size="small"
15
- status-icon
16
- class="w-full"
17
- >
18
- <el-form-item :label="$t('message.udp.systemTitle')" prop="title">
19
- <el-input v-model="record.title" />
20
- </el-form-item>
21
- <!-- <el-form-item :label="$t('message.udp.ispTitle')" prop="ispTitle">
22
- <el-input v-model="record.ispTitle" />
23
- </el-form-item> -->
24
- <el-form-item :label="$t('message.udp.copyright')" prop="copyright">
25
- <el-input v-model="record.copyright" />
26
- </el-form-item>
27
- <el-form-item :label="$t('message.udp.defaultLanguage')" prop="defaultLanguage">
28
- <el-select v-model="record.defaultLanguage" placeholder="please select">
29
- <el-option label="中文" value="zh" />
30
- <el-option label="英文" value="en" />
31
- </el-select>
32
- </el-form-item>
33
- <el-form-item :label="$t('message.udp.i18nEnabled')" prop="i18nEnabled">
34
- <el-switch v-model="record.i18nEnabled" active-value="Y" inactive-value="N" />
35
- </el-form-item>
36
- <el-form-item :label="$t('message.udp.systemLogo')">
37
- <el-upload
38
- v-model:file-list="record.logo"
39
- class="u-upload"
40
- :action="baseUrl + '/ufil/file/uploadMultipart'"
41
- :headers="headers"
42
- :on-exceed="handleExceed"
43
- accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
44
- list-type="picture"
45
- :limit="1"
46
- >
47
- <!-- :before-upload="handleBeforUpload" -->
48
- <div class="flex items-center">
49
- <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
50
- <div class="pl-2 text-xs">
51
- <span>
52
- {{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}
53
- </span>
54
- <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 600 * 200' }) }}</span>
55
- <span class="pl-2">
56
- {{ $t('message.tip.imageCapacity', { capacity: ': <50kb' }) }}
57
- </span>
58
- </div>
59
- </div>
60
- </el-upload>
61
- </el-form-item>
62
- <el-form-item :label="$t('message.udp.homeBackimg')">
63
- <el-upload
64
- v-model:file-list="record.backgroundImg"
65
- class="u-upload"
66
- :action="baseUrl + '/ufil/file/uploadMultipart'"
67
- :headers="headers"
68
- :on-exceed="handleExceed"
69
- accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
70
- list-type="picture"
71
- :limit="1"
72
- >
73
- <div class="flex items-center">
74
- <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
75
- <div class="pl-2 text-xs">
76
- <span>{{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}</span>
77
- <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 4096 * 2048' }) }}</span>
78
- </div>
79
- </div>
80
- </el-upload>
81
- </el-form-item>
82
- <el-form-item :label="$t('message.udp.systemFavicon')">
83
- <el-upload
84
- v-model:file-list="record.favicon"
85
- class="u-upload"
86
- :action="baseUrl + '/ufil/file/uploadMultipart'"
87
- :headers="headers"
88
- :on-exceed="handleExceed"
89
- accept=".ico"
90
- list-type="picture"
91
- :limit="1"
92
- >
93
- <div class="flex items-center">
94
- <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
95
- <div class="pl-2 text-xs">
96
- {{ $t('message.tip.uploadFormat', { type: ': *.ico,.png*.jpg;' }) }}
97
- </div>
98
- </div>
99
- </el-upload>
100
- </el-form-item>
101
- </el-form>
102
- </div>
103
- </div>
104
- </template>
105
-
106
- <script lang="ts" setup>
107
- import { reactive, ref, computed, onMounted } from 'vue';
108
- import type { FormInstance, FormRules } from 'element-plus';
109
- import { useI18n } from 'vue-i18n';
110
- import to from 'await-to-js';
111
- import { successMessage, cookies, warnMessage } from '@utogether/utils';
112
- import { isArray } from 'xe-utils';
113
- import { kTOKEN } from '../../../contant';
114
- import { getServiceApi, getBaseURL } from '../../../api';
115
-
116
- const xfrom = ref<FormInstance>();
117
- const loading = ref(false);
118
- const record = reactive({
119
- defaultLanguage: 'zh',
120
- title: 'U-DP',
121
- ispTitle: 'U-DP',
122
- i18nEnabled: 'Y',
123
- copyright: '深圳友聚信息技术有限公司',
124
- logo: [],
125
- backgroundImg: [],
126
- favicon: []
127
- });
128
-
129
- const serviceApi = getServiceApi();
130
- const { t } = useI18n();
131
-
132
- const baseUrl = ref(getBaseURL());
133
-
134
- const url = '/upfm/v1/sysConfig';
135
- let dataList = [];
136
-
137
- const rules = reactive<FormRules>({
138
- defaultLanguage: [
139
- {
140
- required: true,
141
- message: t('message.required') + t('message.udp.defaultLanguage'),
142
- trigger: 'blur'
143
- }
144
- ],
145
- title: [
146
- { required: true, message: t('message.required') + t('message.udp.systemTitle'), trigger: 'blur' }
147
- ]
148
- });
149
-
150
- const headers = computed(() => {
151
- const token = cookies.get(kTOKEN)!;
152
- const data = JSON.parse(token);
153
- const headers = {
154
- Authorization: 'Bearer ' + data.accessToken
155
- };
156
- return headers;
157
- });
158
-
159
- const submitForm = (xfrom: FormInstance) => {
160
- // const menthod = dataList.length ? 'put' : 'post';
161
- Object.keys(record).forEach(field => {
162
- const obj = {
163
- configCode: field,
164
- configValue: record[field],
165
- configCategory: 'system',
166
- fileName: ''
167
- };
168
- if (isArray(record[field])) {
169
- obj.configValue = getImgActUrl(record[field][0]).url;
170
- obj.fileName = getImgActUrl(record[field][0]).name;
171
- }
172
- const idx = dataList.findIndex(f => f.configCode === field);
173
- if (idx !== -1) {
174
- dataList[idx] = Object.assign(dataList[idx], obj);
175
- } else {
176
- dataList.push(obj);
177
- }
178
- });
179
- // return;
180
- xfrom?.validate(async valid => {
181
- if (valid) {
182
- loading.value = true;
183
- const addList = dataList.filter(data => !data.id);
184
- const updateList = dataList.filter(data => data.id);
185
- const services = [];
186
- if (addList.length) {
187
- services.push(serviceApi.post(url, addList));
188
- } else {
189
- services.push(serviceApi.put(url, updateList));
190
- }
191
- const [err] = await to(Promise.all(services));
192
- // const [err, data]: [Error, any] = await to(serviceApi[menthod](url, dataList));
193
- if (!err) {
194
- successMessage();
195
- // console.log({ data });
196
- // dataList = data;
197
- // setDisplayObject();
198
- setDisplayObject();
199
- }
200
- loading.value = false;
201
- }
202
- });
203
- };
204
-
205
- const getImgActUrl = file => {
206
- if (file?.response) {
207
- return { url: file.response.data, name: file.name };
208
- }
209
- return { url: file?.realpath || file?.url, name: file?.name };
210
- };
211
-
212
- const handleExceed = file => {
213
- if (file) {
214
- return warnMessage(t('message.tip.singleImg'));
215
- }
216
- };
217
-
218
- // const handleBeforUpload = (file, type) => {
219
- // console.log(file);
220
- // console.log(type);
221
- // return true;
222
- // };
223
-
224
- /**
225
- * @description: 处理显示数据
226
- * @return {*}
227
- */
228
- const setDisplayObject = () => {
229
- Object.keys(record).forEach(key => {
230
- const data = dataList.find(f => f.configCode === key);
231
- if (data) {
232
- record[data.configCode] = data.configValue || record[data.configCode];
233
- if (data.fileName) {
234
- const { configValue, fileName } = data;
235
- record[data.configCode] = [
236
- { url: baseUrl.value + '/ufil' + configValue, realpath: configValue, name: fileName }
237
- ];
238
- }
239
- }
240
- });
241
- };
242
- /**
243
- * @description: 查询系统配置
244
- * @return {*}
245
- */
246
- const getSysConfig = async () => {
247
- const [err, data]: [Error, any] = await to(serviceApi.get(url, {}));
248
- if (!err) {
249
- dataList = data.list;
250
- }
251
- // dataList = [
252
- // { configCode: 'logo', configValue: '', fileName: 'logo' },
253
- // { configCode: 'backgroundImg', configValue: '', fileName: '首页背景' },
254
- // { configCode: 'favicon', configValue: '', fileName: 'favicon' },
255
- // { configCode: 'copyright', configValue: '' },
256
- // { configCode: 'i18nEnabled', configValue: '' },
257
- // { configCode: 'title', configValue: '' },
258
- // { configCode: 'defaultLanguage', configValue: '' }
259
- // ];
260
- setDisplayObject();
261
- };
262
-
263
- onMounted(() => {
264
- getSysConfig();
265
- });
266
- </script>
267
- <style lang="scss">
268
- .u-system-config {
269
- .el-select,
270
- .el-select--small {
271
- width: 100%;
272
- }
273
-
274
- .el-form-item__content {
275
- width: 100%;
276
- }
277
-
278
- .u-upload {
279
- width: 100%;
280
-
281
- .el-upload-list {
282
- margin: 0;
283
- }
284
-
285
- .el-upload-list__item {
286
- max-height: 60px;
287
- padding: 0;
288
- }
289
- }
290
- }
291
- </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.systemLogo')">
27
+ <el-upload
28
+ v-model:file-list="record.logo"
29
+ class="u-upload"
30
+ :action="baseUrl + '/ufil/file/uploadMultipart'"
31
+ :headers="headers"
32
+ :on-exceed="handleExceed"
33
+ accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
34
+ list-type="picture"
35
+ :limit="1"
36
+ >
37
+ <!-- :before-upload="handleBeforUpload" -->
38
+ <div class="flex items-center">
39
+ <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
40
+ <div class="pl-2 text-xs">
41
+ <span>
42
+ {{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}
43
+ </span>
44
+ <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 600 * 200' }) }}</span>
45
+ <span class="pl-2">
46
+ {{ $t('message.tip.imageCapacity', { capacity: ': <50kb' }) }}
47
+ </span>
48
+ </div>
49
+ </div>
50
+ </el-upload>
51
+ </el-form-item>
52
+ <el-form-item :label="$t('message.udp.homeBackimg')">
53
+ <el-upload
54
+ v-model:file-list="record.backgroundImg"
55
+ class="u-upload"
56
+ :action="baseUrl + '/ufil/file/uploadMultipart'"
57
+ :headers="headers"
58
+ :on-exceed="handleExceed"
59
+ accept=".png,.jpg,.jpeg,.PNG,.JPEG,.jPG"
60
+ list-type="picture"
61
+ :limit="1"
62
+ >
63
+ <div class="flex items-center">
64
+ <el-button type="primary">{{ $t('message.btn.upload') }}</el-button>
65
+ <div class="pl-2 text-xs">
66
+ <span>{{ $t('message.tip.uploadFormat', { type: ': *.png,*.jpg;' }) }}</span>
67
+ <span class="pl-2">{{ $t('message.tip.imageSize', { size: ': 4096 * 2048' }) }}</span>
68
+ </div>
69
+ </div>
70
+ </el-upload>
71
+ </el-form-item>
72
+ <el-form-item :label="$t('message.udp.systemFavicon')">
73
+ <el-upload
74
+ v-model:file-list="record.favicon"
75
+ class="u-upload"
76
+ :action="baseUrl + '/ufil/file/uploadMultipart'"
77
+ :headers="headers"
78
+ :on-exceed="handleExceed"
79
+ accept=".ico"
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
+ {{ $t('message.tip.uploadFormat', { type: ': *.ico,.png*.jpg;' }) }}
87
+ </div>
88
+ </div>
89
+ </el-upload>
90
+ </el-form-item>
91
+ </el-form>
92
+ </div>
93
+ <div class="flex justify-end w-1/2 p-2">
94
+ <el-button type="primary" @click="submitForm(xfrom)">
95
+ {{ $t('message.btn.confirm') }}
96
+ </el-button>
97
+ </div>
98
+ </div>
99
+ </template>
100
+
101
+ <script lang="ts" setup>
102
+ import { reactive, ref, computed, onMounted } from 'vue';
103
+ import type { FormInstance, FormRules } from 'element-plus';
104
+ import { useI18n } from 'vue-i18n';
105
+ import to from 'await-to-js';
106
+ import { successMessage, cookies, warnMessage } from '@utogether/utils';
107
+ import { isArray } from 'xe-utils';
108
+ import { kTOKEN } from '../../../contant';
109
+ import { getServiceApi, getBaseURL } from '../../../api';
110
+
111
+ const xfrom = ref<FormInstance>();
112
+ const loading = ref(false);
113
+ const record = reactive({
114
+ defaultLanguage: 'zh',
115
+ title: 'U-DP',
116
+ ispTitle: 'U-DP',
117
+ i18nEnabled: 'N',
118
+ orgTaggle: 'Y',
119
+ copyright: '深圳友聚信息技术有限公司',
120
+ logo: [],
121
+ backgroundImg: [],
122
+ favicon: []
123
+ });
124
+
125
+ const serviceApi = getServiceApi();
126
+ const { t } = useI18n();
127
+
128
+ const baseUrl = ref(getBaseURL());
129
+
130
+ const url = '/upfm/v1/sysConfig';
131
+ let dataList = [];
132
+
133
+ const rules = reactive<FormRules>({
134
+ defaultLanguage: [
135
+ {
136
+ required: true,
137
+ message: t('message.required') + t('message.udp.defaultLanguage'),
138
+ trigger: 'blur'
139
+ }
140
+ ],
141
+ title: [{ required: true, message: t('message.required') + t('message.udp.systemTitle'), trigger: 'blur' }]
142
+ });
143
+
144
+ const headers = computed(() => {
145
+ const token = cookies.get(kTOKEN)!;
146
+ const data = JSON.parse(token);
147
+ const headers = {
148
+ Authorization: 'Bearer ' + data.accessToken
149
+ };
150
+ return headers;
151
+ });
152
+
153
+ const submitForm = (xfrom: FormInstance) => {
154
+ // const menthod = dataList.length ? 'put' : 'post';
155
+ Object.keys(record).forEach(field => {
156
+ const obj = {
157
+ configCode: field,
158
+ configValue: record[field],
159
+ configCategory: 'system',
160
+ fileName: ''
161
+ };
162
+ if (isArray(record[field])) {
163
+ obj.configValue = getImgActUrl(record[field][0]).url;
164
+ obj.fileName = getImgActUrl(record[field][0]).name;
165
+ }
166
+ const idx = dataList.findIndex(f => f.configCode === field);
167
+ if (idx !== -1) {
168
+ dataList[idx] = Object.assign(dataList[idx], obj);
169
+ } else {
170
+ dataList.push(obj);
171
+ }
172
+ });
173
+ // return;
174
+ xfrom?.validate(async valid => {
175
+ if (valid) {
176
+ loading.value = true;
177
+ const addList = dataList.filter(data => !data.id);
178
+ const updateList = dataList.filter(data => data.id);
179
+ const services = [];
180
+ if (addList.length) {
181
+ services.push(serviceApi.post(url, addList));
182
+ } else {
183
+ services.push(serviceApi.put(url, updateList));
184
+ }
185
+ const [err] = await to(Promise.all(services));
186
+ // const [err, data]: [Error, any] = await to(serviceApi[menthod](url, dataList));
187
+ if (!err) {
188
+ successMessage();
189
+ // console.log({ data });
190
+ // dataList = data;
191
+ // setDisplayObject();
192
+ setDisplayObject();
193
+ }
194
+ loading.value = false;
195
+ }
196
+ });
197
+ };
198
+
199
+ const getImgActUrl = file => {
200
+ if (file?.response) {
201
+ return { url: file.response.data, name: file.name };
202
+ }
203
+ return { url: file?.realpath || file?.url, name: file?.name };
204
+ };
205
+
206
+ const handleExceed = file => {
207
+ if (file) {
208
+ return warnMessage(t('message.tip.singleImg'));
209
+ }
210
+ };
211
+
212
+ // const handleBeforUpload = (file, type) => {
213
+ // console.log(file);
214
+ // console.log(type);
215
+ // return true;
216
+ // };
217
+
218
+ /**
219
+ * @description: 处理显示数据
220
+ * @return {*}
221
+ */
222
+ const setDisplayObject = () => {
223
+ Object.keys(record).forEach(key => {
224
+ const data = dataList.find(f => f.configCode === key);
225
+ if (data) {
226
+ record[data.configCode] = data.configValue || record[data.configCode];
227
+ if (data.fileName) {
228
+ const { configValue, fileName } = data;
229
+ record[data.configCode] = [
230
+ { url: baseUrl.value + '/ufil' + configValue, realpath: configValue, name: fileName }
231
+ ];
232
+ }
233
+ }
234
+ });
235
+ };
236
+ /**
237
+ * @description: 查询系统配置
238
+ * @return {*}
239
+ */
240
+ const getSysConfig = async () => {
241
+ const [err, data]: [Error, any] = await to(serviceApi.get(url, {}));
242
+ if (!err) {
243
+ dataList = data.list;
244
+ }
245
+ // dataList = [
246
+ // { configCode: 'logo', configValue: '', fileName: 'logo' },
247
+ // { configCode: 'backgroundImg', configValue: '', fileName: '首页背景' },
248
+ // { configCode: 'favicon', configValue: '', fileName: 'favicon' },
249
+ // { configCode: 'copyright', configValue: '' },
250
+ // { configCode: 'i18nEnabled', configValue: '' },
251
+ // { configCode: 'title', configValue: '' },
252
+ // { configCode: 'defaultLanguage', configValue: '' }
253
+ // ];
254
+ setDisplayObject();
255
+ };
256
+
257
+ onMounted(() => {
258
+ getSysConfig();
259
+ });
260
+ </script>
261
+ <style lang="scss">
262
+ .u-system-config {
263
+ padding-top: 48px;
264
+
265
+ .el-select,
266
+ .el-select--small {
267
+ width: 100%;
268
+ }
269
+
270
+ .el-form-item__content {
271
+ width: 100%;
272
+ }
273
+
274
+ .u-upload {
275
+ width: 100%;
276
+
277
+ .el-upload-list {
278
+ margin: 0;
279
+ }
280
+
281
+ .el-upload-list__item {
282
+ max-height: 60px;
283
+ padding: 0;
284
+ }
285
+ }
286
+ }
287
+ </style>