cloud-web-corejs 1.0.219 → 1.0.220
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.
- package/package.json +1 -1
- package/src/components/baseAlert/index.vue +1 -1
- package/src/components/excelExport/exportFieldDialog.vue +3 -3
- package/src/components/excelExport/index.vue +62 -34
- package/src/components/excelExport/mixins.js +10 -5
- package/src/components/table/util/index.js +4 -0
- package/src/components/table/vxeFilter/index.js +3 -3
- package/src/components/table/vxeFilter/mixin.js +4 -4
- package/src/components/xform/form-designer/form-widget/dialog/importDialogMixin.js +104 -101
- package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import-button-editor.vue +1 -1
- package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +1 -1
- package/src/components/xform/form-render/container-item/data-table-mixin.js +97 -3
- package/src/components/xform/mixins/defaultHandle.js +75 -48
- package/src/layout/components/Sidebar/default.vue +11 -6
- package/src/layout/components/langTool.vue +32 -29
- package/src/store/getters.js +2 -1
- package/src/store/modules/user.js +27 -3
- package/src/utils/vab.js +83 -73
- package/src/views/user/user/edit.vue +45 -0
|
@@ -359,8 +359,8 @@ modules = {
|
|
|
359
359
|
},
|
|
360
360
|
|
|
361
361
|
getWidgetRefByTableParam(tableParam) {
|
|
362
|
-
|
|
363
|
-
|
|
362
|
+
let params = tableParam.column.params;
|
|
363
|
+
let name = params.widget.options.name;
|
|
364
364
|
// let key = this.getRowRefKey(tableParam.row, name);
|
|
365
365
|
return this.getWidgetRefByTableRowData(tableParam.row, name);
|
|
366
366
|
// return this.getWidgetRef(key);
|
|
@@ -782,7 +782,73 @@ modules = {
|
|
|
782
782
|
columnConfig: t,
|
|
783
783
|
editWidget,
|
|
784
784
|
};
|
|
785
|
+
|
|
785
786
|
Object.assign(col.params, params);
|
|
787
|
+
let types = ['input','number', 'text','select','checkbox','radio','status','vabsearch','date']
|
|
788
|
+
if(widget && types.includes(widget.type)){
|
|
789
|
+
const func = (obj)=>{
|
|
790
|
+
let value = obj.row[obj.column.field]
|
|
791
|
+
let fieldWidget = null;
|
|
792
|
+
if(!!obj.column?.params?.widget){
|
|
793
|
+
fieldWidget = this.getRowWidget(obj)
|
|
794
|
+
}
|
|
795
|
+
if(fieldWidget && !fieldWidget.options.hidden){
|
|
796
|
+
let widgetType = fieldWidget.type;
|
|
797
|
+
if(['input','number'].includes(widgetType)){
|
|
798
|
+
return value;
|
|
799
|
+
}
|
|
800
|
+
let widgetRef = this.getWidgetRefByTableParam(obj)
|
|
801
|
+
if('text' === widgetType){
|
|
802
|
+
return widgetRef ? widgetRef.showVaule : value;
|
|
803
|
+
}else if('select' === widgetType){
|
|
804
|
+
return this.getOptionLabel(fieldWidget, value);
|
|
805
|
+
}else if('checkbox' === widgetType){
|
|
806
|
+
return this.getOptionLabel(fieldWidget, value);
|
|
807
|
+
}else if('radio' === widgetType){
|
|
808
|
+
return this.getOptionLabel(fieldWidget, value);
|
|
809
|
+
}else if('status' === widgetType){
|
|
810
|
+
let statusParam = fieldWidget.options.statusParam || [];
|
|
811
|
+
let statusItem = statusParam.find(item => item.value === value)
|
|
812
|
+
return statusItem ? this.$t1(statusItem.label): null;
|
|
813
|
+
}else if('vabsearch' === widgetType){
|
|
814
|
+
let result = null;
|
|
815
|
+
let currentData = obj.row;
|
|
816
|
+
let fieldKeyName = this.getFieldKeyName(fieldWidget);
|
|
817
|
+
let vabSearchName = fieldWidget.options.vabSearchName;
|
|
818
|
+
let multipleChoices = fieldWidget.options.multipleChoices || false;
|
|
819
|
+
let labelField = vabSearchName || fieldKeyName;
|
|
820
|
+
if (!multipleChoices) {
|
|
821
|
+
result = currentData[labelField] ?? null;
|
|
822
|
+
} else {
|
|
823
|
+
if (value) {
|
|
824
|
+
result = value.map(item => item[labelField]).join(",");
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
return result;
|
|
828
|
+
}else if('date' === widgetType){
|
|
829
|
+
let dateType = fieldWidget.options.type;
|
|
830
|
+
if(['date','week'].includes(dateType)){
|
|
831
|
+
return value?value.substring(0,10):null;
|
|
832
|
+
}else if(dateType === 'dates'){
|
|
833
|
+
if(value){
|
|
834
|
+
if(Array.isArray(value)){
|
|
835
|
+
return value.map(item => item.substring(0,10)).join(",");
|
|
836
|
+
}else{
|
|
837
|
+
return value;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
return null;
|
|
841
|
+
}else{
|
|
842
|
+
return value
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
}else{
|
|
846
|
+
return null
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
};
|
|
850
|
+
col.slots.filterVal = func;
|
|
851
|
+
}
|
|
786
852
|
if (!col.children || !col.children.length) {
|
|
787
853
|
if (t.formatS === "render") {
|
|
788
854
|
let r = t.render ? new Function("params", "h", t.render) : null;
|
|
@@ -840,6 +906,35 @@ modules = {
|
|
|
840
906
|
this.rowWidgetList = rowWidgetList;
|
|
841
907
|
return this.$baseLodash.cloneDeep(newColumns);
|
|
842
908
|
},
|
|
909
|
+
//begin
|
|
910
|
+
getOptionLabel(fieldWidget, fieldModel){
|
|
911
|
+
if (fieldModel === null) {
|
|
912
|
+
return null
|
|
913
|
+
} else {
|
|
914
|
+
let resultList = []
|
|
915
|
+
let labelField = fieldWidget.options.labelKey || "label";
|
|
916
|
+
let valueField = fieldWidget.options.valueKey || "value";
|
|
917
|
+
fieldWidget.options.optionItems.forEach(oItem => {
|
|
918
|
+
if ((oItem[valueField] === fieldModel) || (this.findInArray(fieldModel, oItem[valueField])) !== -1) {
|
|
919
|
+
resultList.push(this.$t1(oItem[labelField]))
|
|
920
|
+
}
|
|
921
|
+
})
|
|
922
|
+
return resultList.join(",")
|
|
923
|
+
}
|
|
924
|
+
},
|
|
925
|
+
findInArray: function (e, t) {
|
|
926
|
+
if (!Array.isArray(e)) return -1;
|
|
927
|
+
var i = -1;
|
|
928
|
+
return (
|
|
929
|
+
e.forEach(function (e, n) {
|
|
930
|
+
e === t && (i = n);
|
|
931
|
+
}),
|
|
932
|
+
i
|
|
933
|
+
);
|
|
934
|
+
},
|
|
935
|
+
//end
|
|
936
|
+
|
|
937
|
+
|
|
843
938
|
async initTableList() {
|
|
844
939
|
let that = this;
|
|
845
940
|
let tableOption = null;
|
|
@@ -1558,7 +1653,6 @@ modules = {
|
|
|
1558
1653
|
if (mergeRowEnabled && unikey) {
|
|
1559
1654
|
tableOption.config.spanMethod = this.mergeRowMethod;
|
|
1560
1655
|
}
|
|
1561
|
-
|
|
1562
1656
|
this.$vxeTableUtil.initVxeTable(tableOption).then((opts) => {
|
|
1563
1657
|
this.vxeOption = opts;
|
|
1564
1658
|
if (!isQueryTable) {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// import dayjs from "dayjs";
|
|
2
1
|
import moment from "moment";
|
|
3
2
|
|
|
4
3
|
let modules = {};
|
|
@@ -6,29 +5,44 @@ modules = {
|
|
|
6
5
|
data() {
|
|
7
6
|
return {
|
|
8
7
|
timerMap: {},
|
|
9
|
-
|
|
10
|
-
}
|
|
8
|
+
};
|
|
11
9
|
},
|
|
12
10
|
beforeDestroy() {
|
|
13
11
|
for (let timer in this.timerMap) {
|
|
14
|
-
this.clearInterval(timer)
|
|
12
|
+
this.clearInterval(timer);
|
|
15
13
|
}
|
|
16
14
|
},
|
|
17
15
|
methods: {
|
|
16
|
+
getMoment(date) {
|
|
17
|
+
return moment(date);
|
|
18
|
+
},
|
|
19
|
+
getMomentUtil() {
|
|
20
|
+
return moment;
|
|
21
|
+
},
|
|
22
|
+
utcToCst(utcStr) {
|
|
23
|
+
if (!utcStr) return utcStr;
|
|
24
|
+
return moment.utc(utcStr).local().format("YYYY-MM-DD HH:mm:ss");
|
|
25
|
+
},
|
|
26
|
+
cstToUtc(localTime) {
|
|
27
|
+
if (!localTime) return localTime;
|
|
28
|
+
return moment(localTime).utc().format("YYYY-MM-DD HH:mm:ss");
|
|
29
|
+
},
|
|
30
|
+
addFormatDateTime(date, num, type, format) {
|
|
31
|
+
if (!date) return date;
|
|
32
|
+
if (!type) type = "days";
|
|
33
|
+
if (!format) format = "YYYY-MM-DD HH:mm:ss";
|
|
34
|
+
return moment(date).add(num, type).format(format);
|
|
35
|
+
},
|
|
18
36
|
addFormatDate(date, num) {
|
|
19
37
|
if (!date) return date;
|
|
20
|
-
// return dayjs(date).add(num, "day").format("YYYY-MM-DD");
|
|
21
38
|
return moment(date).add(num, "days").format("YYYY-MM-DD");
|
|
22
|
-
|
|
23
39
|
},
|
|
24
40
|
formatDate(date) {
|
|
25
41
|
if (!date) return date;
|
|
26
|
-
// return dayjs(date).format("YYYY-MM-DD");
|
|
27
42
|
return moment(date).format("YYYY-MM-DD");
|
|
28
43
|
},
|
|
29
44
|
formatDateTime(date, format = "YYYY-MM-DD HH:mm:ss") {
|
|
30
|
-
if (!date) return date
|
|
31
|
-
// return dayjs(date).format(format);
|
|
45
|
+
if (!date) return date;
|
|
32
46
|
return moment(date).format(format);
|
|
33
47
|
},
|
|
34
48
|
getFormEntityData(reqFormData) {
|
|
@@ -42,7 +56,7 @@ modules = {
|
|
|
42
56
|
let formRef = this.getFormRef ? this.getFormRef() : this;
|
|
43
57
|
let formConfig = formRef.formConfig;
|
|
44
58
|
let entity = formConfig.entity;
|
|
45
|
-
if (!entity) return
|
|
59
|
+
if (!entity) return;
|
|
46
60
|
let dataId = formRef?.dataId;
|
|
47
61
|
let reportTemplate = formRef?.reportTemplate;
|
|
48
62
|
let formCode = reportTemplate?.formCode;
|
|
@@ -63,7 +77,7 @@ modules = {
|
|
|
63
77
|
formCode: formCode,
|
|
64
78
|
formVersion: reportTemplate.formVersion,
|
|
65
79
|
taBm: entity,
|
|
66
|
-
data: formData
|
|
80
|
+
data: formData,
|
|
67
81
|
};
|
|
68
82
|
return reqData;
|
|
69
83
|
},
|
|
@@ -71,19 +85,17 @@ modules = {
|
|
|
71
85
|
let formRef = this.getFormRef ? this.getFormRef() : this;
|
|
72
86
|
let formConfig = formRef.formConfig;
|
|
73
87
|
let entity = formConfig.entity;
|
|
74
|
-
if (!entity) return
|
|
88
|
+
if (!entity) return;
|
|
75
89
|
let dataId = formRef?.dataId;
|
|
76
90
|
let reportTemplate = formRef?.reportTemplate;
|
|
77
91
|
let formCode = reportTemplate?.formCode;
|
|
78
|
-
let scriptCode = formConfig.saveScriptCode || "saveUpdate"
|
|
92
|
+
let scriptCode = formConfig.saveScriptCode || "saveUpdate";
|
|
79
93
|
let config = option?.config;
|
|
80
94
|
// formRef.clearValidate();
|
|
81
95
|
// formRef.$forceUpdate();
|
|
82
96
|
// let formDataModel = formRef.formDataModel;
|
|
83
97
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
formRef.validate(valid => {
|
|
98
|
+
formRef.validate((valid) => {
|
|
87
99
|
if (valid) {
|
|
88
100
|
let reqData = this.getReqFormData();
|
|
89
101
|
this.formHttp({
|
|
@@ -93,20 +105,20 @@ modules = {
|
|
|
93
105
|
successMsg: true,
|
|
94
106
|
isConfirm: true,
|
|
95
107
|
confirmText: this.$t1("您确定要保存吗?"),
|
|
96
|
-
success: res => {
|
|
97
|
-
let editFormCode = formConfig.editFormCode
|
|
108
|
+
success: (res) => {
|
|
109
|
+
let editFormCode = formConfig.editFormCode;
|
|
98
110
|
let updateParam = {
|
|
99
|
-
dataId: res.objx
|
|
100
|
-
}
|
|
101
|
-
if(editFormCode){
|
|
111
|
+
dataId: res.objx,
|
|
112
|
+
};
|
|
113
|
+
if (editFormCode) {
|
|
102
114
|
updateParam.formCode = editFormCode;
|
|
103
115
|
}
|
|
104
116
|
|
|
105
117
|
formRef.reloadForm({
|
|
106
|
-
updateParam
|
|
118
|
+
updateParam,
|
|
107
119
|
});
|
|
108
120
|
},
|
|
109
|
-
...config
|
|
121
|
+
...config,
|
|
110
122
|
});
|
|
111
123
|
}
|
|
112
124
|
});
|
|
@@ -116,7 +128,7 @@ modules = {
|
|
|
116
128
|
this.timerMap[timer] = timer;
|
|
117
129
|
},
|
|
118
130
|
clearInterval(timer) {
|
|
119
|
-
clearInterval(timer)
|
|
131
|
+
clearInterval(timer);
|
|
120
132
|
delete this.timerMap[timer];
|
|
121
133
|
},
|
|
122
134
|
getGlobalConfig() {
|
|
@@ -144,7 +156,7 @@ modules = {
|
|
|
144
156
|
* @param {string} [seqField='seq'] - 序列字段名
|
|
145
157
|
* @returns {Array} 更新后的数组
|
|
146
158
|
*/
|
|
147
|
-
deleteNumRows(list, deleteIndex, seqField =
|
|
159
|
+
deleteNumRows(list, deleteIndex, seqField = "seq") {
|
|
148
160
|
if (deleteIndex < 0 || deleteIndex >= list.length) {
|
|
149
161
|
return [...list]; // 返回副本
|
|
150
162
|
}
|
|
@@ -171,7 +183,7 @@ modules = {
|
|
|
171
183
|
* @param {string} [seqField='seq'] - 序列字段名
|
|
172
184
|
* @returns {Array} 更新后的数组
|
|
173
185
|
*/
|
|
174
|
-
insertNumRows(list, newItems, insertIndex = list.length, seqField =
|
|
186
|
+
insertNumRows(list, newItems, insertIndex = list.length, seqField = "seq") {
|
|
175
187
|
// 参数标准化
|
|
176
188
|
const itemsArray = Array.isArray(newItems) ? newItems : [newItems];
|
|
177
189
|
|
|
@@ -182,8 +194,8 @@ modules = {
|
|
|
182
194
|
const newList = [...list];
|
|
183
195
|
|
|
184
196
|
// 准备要插入的项(移除可能的旧序列)
|
|
185
|
-
const itemsToInsert = itemsArray.map(item => {
|
|
186
|
-
const newItem = {...item};
|
|
197
|
+
const itemsToInsert = itemsArray.map((item) => {
|
|
198
|
+
const newItem = { ...item };
|
|
187
199
|
if (newItem[seqField] !== undefined) {
|
|
188
200
|
delete newItem[seqField];
|
|
189
201
|
}
|
|
@@ -214,16 +226,26 @@ modules = {
|
|
|
214
226
|
* @param {string} [superSeqField='super_seq'] - list2中的关联字段名
|
|
215
227
|
* @returns {Object} 包含更新后的list1和list2
|
|
216
228
|
*/
|
|
217
|
-
insertRelRows(
|
|
229
|
+
insertRelRows(
|
|
230
|
+
list1,
|
|
231
|
+
list2,
|
|
232
|
+
newItems,
|
|
233
|
+
subItems = [],
|
|
234
|
+
insertIndex,
|
|
235
|
+
seqField = "seq",
|
|
236
|
+
superSeqField = "super_seq"
|
|
237
|
+
) {
|
|
218
238
|
// 参数标准化
|
|
219
239
|
const itemsArray = Array.isArray(newItems) ? newItems : [newItems];
|
|
220
|
-
const subItemsArray =
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
240
|
+
const subItemsArray =
|
|
241
|
+
Array.isArray(subItems) &&
|
|
242
|
+
subItems.length > 0 &&
|
|
243
|
+
Array.isArray(subItems[0])
|
|
244
|
+
? subItems
|
|
245
|
+
: [subItems];
|
|
224
246
|
|
|
225
247
|
if (insertIndex === null || insertIndex === undefined) {
|
|
226
|
-
insertIndex = list1.length
|
|
248
|
+
insertIndex = list1.length;
|
|
227
249
|
}
|
|
228
250
|
// 边界检查
|
|
229
251
|
insertIndex = Math.max(0, Math.min(insertIndex, list1.length));
|
|
@@ -233,8 +255,8 @@ modules = {
|
|
|
233
255
|
const newList2 = [...list2];
|
|
234
256
|
|
|
235
257
|
// 1. 插入新项(不设置序列)
|
|
236
|
-
const itemsToInsert = itemsArray.map(item => {
|
|
237
|
-
const newItem = {...item};
|
|
258
|
+
const itemsToInsert = itemsArray.map((item) => {
|
|
259
|
+
const newItem = { ...item };
|
|
238
260
|
if (newItem[seqField] !== undefined) {
|
|
239
261
|
delete newItem[seqField]; // 确保不保留旧序列
|
|
240
262
|
}
|
|
@@ -265,7 +287,7 @@ modules = {
|
|
|
265
287
|
}
|
|
266
288
|
|
|
267
289
|
// 4. 更新现有关联字段
|
|
268
|
-
newList2.forEach(item => {
|
|
290
|
+
newList2.forEach((item) => {
|
|
269
291
|
const currentSuperSeq = item[superSeqField];
|
|
270
292
|
if (seqMapping[currentSuperSeq] !== undefined) {
|
|
271
293
|
item[superSeqField] = seqMapping[currentSuperSeq];
|
|
@@ -276,15 +298,15 @@ modules = {
|
|
|
276
298
|
subItemsArray.forEach((subItems, idx) => {
|
|
277
299
|
const superSeq = newSeqs[idx];
|
|
278
300
|
if (Array.isArray(subItems) && subItems.length > 0) {
|
|
279
|
-
subItems.forEach(item => {
|
|
280
|
-
const newItem = {...item};
|
|
301
|
+
subItems.forEach((item) => {
|
|
302
|
+
const newItem = { ...item };
|
|
281
303
|
newItem[superSeqField] = superSeq;
|
|
282
304
|
newList2.push(newItem);
|
|
283
305
|
});
|
|
284
306
|
}
|
|
285
307
|
});
|
|
286
308
|
|
|
287
|
-
return {list1: newList1, list2: newList2};
|
|
309
|
+
return { list1: newList1, list2: newList2 };
|
|
288
310
|
},
|
|
289
311
|
|
|
290
312
|
/**
|
|
@@ -296,10 +318,16 @@ modules = {
|
|
|
296
318
|
* @param {string} [refField='super_seq'] - 关联字段名
|
|
297
319
|
* @returns {Object} 包含更新后的masters和slaves
|
|
298
320
|
*/
|
|
299
|
-
deleteRelRows(
|
|
321
|
+
deleteRelRows(
|
|
322
|
+
masters,
|
|
323
|
+
slaves,
|
|
324
|
+
rowIdx,
|
|
325
|
+
seqField = "seq",
|
|
326
|
+
refField = "super_seq"
|
|
327
|
+
) {
|
|
300
328
|
// 边界检查
|
|
301
329
|
if (rowIdx < 0 || rowIdx >= masters.length) {
|
|
302
|
-
return {masters: [...masters], slaves: [...slaves]};
|
|
330
|
+
return { masters: [...masters], slaves: [...slaves] };
|
|
303
331
|
}
|
|
304
332
|
|
|
305
333
|
// 创建副本
|
|
@@ -327,17 +355,16 @@ modules = {
|
|
|
327
355
|
});
|
|
328
356
|
|
|
329
357
|
// 4. 更新从属数据引用
|
|
330
|
-
newSlaves.forEach(slave => {
|
|
358
|
+
newSlaves.forEach((slave) => {
|
|
331
359
|
const ref = slave[refField];
|
|
332
360
|
if (seqMap[ref] !== undefined) {
|
|
333
361
|
slave[refField] = seqMap[ref];
|
|
334
362
|
}
|
|
335
363
|
});
|
|
336
364
|
|
|
337
|
-
return {list1: newMasters, list2: newSlaves};
|
|
338
|
-
}
|
|
365
|
+
return { list1: newMasters, list2: newSlaves };
|
|
366
|
+
},
|
|
339
367
|
//2个数组的行号处理 end
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
368
|
+
},
|
|
369
|
+
};
|
|
343
370
|
export default modules;
|
|
@@ -173,7 +173,7 @@
|
|
|
173
173
|
v-if="showMenuModal"
|
|
174
174
|
></div>
|
|
175
175
|
<el-dialog
|
|
176
|
-
title="切换组织"
|
|
176
|
+
:title="$t1('切换组织')"
|
|
177
177
|
width="355px"
|
|
178
178
|
custom-class="dialog-style list-dialog"
|
|
179
179
|
v-if="showCompanyDialog"
|
|
@@ -186,7 +186,11 @@
|
|
|
186
186
|
@close="changeCompanyClose"
|
|
187
187
|
>
|
|
188
188
|
<div class="cont">
|
|
189
|
-
<el-input
|
|
189
|
+
<el-input
|
|
190
|
+
:placeholder="$t1('搜索')"
|
|
191
|
+
class="search-btn"
|
|
192
|
+
v-model="filterText"
|
|
193
|
+
></el-input>
|
|
190
194
|
<el-tree
|
|
191
195
|
:props="defaultProps"
|
|
192
196
|
:load="loadNode"
|
|
@@ -414,9 +418,9 @@ export default {
|
|
|
414
418
|
window.open(path);
|
|
415
419
|
},
|
|
416
420
|
});
|
|
417
|
-
} else{
|
|
418
|
-
if (path.indexOf(
|
|
419
|
-
path = path.replace(
|
|
421
|
+
} else {
|
|
422
|
+
if (path.indexOf("token={token}") >= 0) {
|
|
423
|
+
path = path.replace("token={token}", "token=" + getToken());
|
|
420
424
|
}
|
|
421
425
|
window.open(path);
|
|
422
426
|
}
|
|
@@ -610,7 +614,8 @@ export default {
|
|
|
610
614
|
let parentLabel = companyCode ? node.label : null;
|
|
611
615
|
datas.forEach((item) => {
|
|
612
616
|
item.leaf = !item.hasChild;
|
|
613
|
-
let label = item.companyName;
|
|
617
|
+
let label = this.$t1(item.companyName);
|
|
618
|
+
|
|
614
619
|
/*if(companyCode){
|
|
615
620
|
label = label + '('+companyTypeMap[item.companyType]+')'
|
|
616
621
|
}*/
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="item" v-if="i18nEnabled && languageSettings.length>1">
|
|
3
|
-
<el-dropdown class=
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
<div class="item" v-if="i18nEnabled && languageSettings.length > 1">
|
|
3
|
+
<el-dropdown class="lang-box" trigger="click">
|
|
4
|
+
<span class="el-dropdown-link">
|
|
5
|
+
<i class="iconfont icon-duoyuyan"></i
|
|
6
|
+
><i class="el-icon-arrow-down el-icon--right"></i>
|
|
7
|
+
</span>
|
|
8
8
|
<el-dropdown-menu slot="dropdown" class="lang-box-pup">
|
|
9
|
-
<el-dropdown-item
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
<el-dropdown-item
|
|
10
|
+
v-for="(item, index) in languageSettings"
|
|
11
|
+
:key="index"
|
|
12
|
+
:command="item.languageCode"
|
|
13
|
+
@click.native="changeLanguage(item.languageCode)"
|
|
14
|
+
:class="{ cur: currentName == item.languageName }"
|
|
15
|
+
>{{ $t1(item.languageName) }}
|
|
12
16
|
</el-dropdown-item>
|
|
13
17
|
</el-dropdown-menu>
|
|
14
18
|
</el-dropdown>
|
|
@@ -24,13 +28,13 @@ export default {
|
|
|
24
28
|
return {
|
|
25
29
|
languageSettings: [],
|
|
26
30
|
languageSettingMap: {},
|
|
27
|
-
i18nEnabled: settingConfig.i18nEnabled
|
|
28
|
-
}
|
|
31
|
+
i18nEnabled: settingConfig.i18nEnabled,
|
|
32
|
+
};
|
|
29
33
|
},
|
|
30
34
|
computed: {
|
|
31
35
|
currentName() {
|
|
32
|
-
return this.languageSettingMap[this.$i18n.locale]
|
|
33
|
-
}
|
|
36
|
+
return this.languageSettingMap[this.$i18n.locale];
|
|
37
|
+
},
|
|
34
38
|
},
|
|
35
39
|
mounted() {
|
|
36
40
|
this.initLanguageSetting();
|
|
@@ -42,33 +46,33 @@ export default {
|
|
|
42
46
|
url: USER_PREFIX + `/auth/switchLanguage`,
|
|
43
47
|
method: `post`,
|
|
44
48
|
data: {
|
|
45
|
-
|
|
49
|
+
stringOne: command,
|
|
46
50
|
},
|
|
47
51
|
isLoading: true,
|
|
48
52
|
modalStrictly: true,
|
|
49
53
|
loadingTarget: document.body,
|
|
50
|
-
success: res => {
|
|
51
|
-
this.$i18n.locale = command // 设置给本地的i18n插件
|
|
54
|
+
success: (res) => {
|
|
55
|
+
this.$i18n.locale = command; // 设置给本地的i18n插件
|
|
52
56
|
localStorage.setItem("i18n-lang", command);
|
|
53
|
-
this.$message.success(
|
|
54
|
-
location.reload()
|
|
55
|
-
}
|
|
56
|
-
})
|
|
57
|
+
this.$message.success("切换多语言成功");
|
|
58
|
+
location.reload();
|
|
59
|
+
},
|
|
60
|
+
});
|
|
57
61
|
}
|
|
58
62
|
},
|
|
59
63
|
initLanguageSetting() {
|
|
60
64
|
if (settingConfig.i18nEnabled !== true) return;
|
|
61
|
-
let languageSettings = []
|
|
62
|
-
languageSettings.push(...
|
|
65
|
+
let languageSettings = [];
|
|
66
|
+
languageSettings.push(...this.$store.state.user.languageSettings);
|
|
63
67
|
let map = {};
|
|
64
|
-
languageSettings.forEach(item => {
|
|
68
|
+
languageSettings.forEach((item) => {
|
|
65
69
|
map[item.languageCode] = item.languageName;
|
|
66
70
|
});
|
|
67
71
|
this.languageSettingMap = map;
|
|
68
72
|
this.languageSettings = languageSettings;
|
|
69
73
|
},
|
|
70
|
-
}
|
|
71
|
-
}
|
|
74
|
+
},
|
|
75
|
+
};
|
|
72
76
|
</script>
|
|
73
77
|
<style scoped lang="scss">
|
|
74
78
|
/*多语言*/
|
|
@@ -78,7 +82,7 @@ export default {
|
|
|
78
82
|
height: 18px;
|
|
79
83
|
line-height: 18px;
|
|
80
84
|
vertical-align: middle;
|
|
81
|
-
color: #
|
|
85
|
+
color: #fff;
|
|
82
86
|
font-size: 12px;
|
|
83
87
|
|
|
84
88
|
.el-icon--right {
|
|
@@ -86,7 +90,7 @@ export default {
|
|
|
86
90
|
}
|
|
87
91
|
|
|
88
92
|
.el-dropdown-link {
|
|
89
|
-
color: #
|
|
93
|
+
color: #fff;
|
|
90
94
|
|
|
91
95
|
.name {
|
|
92
96
|
display: inline-block;
|
|
@@ -95,7 +99,7 @@ export default {
|
|
|
95
99
|
overflow: hidden;
|
|
96
100
|
vertical-align: middle;
|
|
97
101
|
font-size: 12px;
|
|
98
|
-
line-height: 19px
|
|
102
|
+
line-height: 19px;
|
|
99
103
|
}
|
|
100
104
|
|
|
101
105
|
i {
|
|
@@ -110,7 +114,6 @@ export default {
|
|
|
110
114
|
}
|
|
111
115
|
}
|
|
112
116
|
}
|
|
113
|
-
|
|
114
117
|
}
|
|
115
118
|
|
|
116
119
|
.lang-box-pup .el-dropdown-menu__item.cur {
|
package/src/store/getters.js
CHANGED
|
@@ -19,6 +19,7 @@ const getters = {
|
|
|
19
19
|
isBdAdmin: state => state.user.isBdAdmin,
|
|
20
20
|
userFlag: state => state.user.userFlag,
|
|
21
21
|
fileServerInfo: state => state.user.fileServerInfo,
|
|
22
|
-
loginConfig: state => state.user.loginConfig
|
|
22
|
+
loginConfig: state => state.user.loginConfig,
|
|
23
|
+
utcTransformOffset: state => state.user.utcTransformOffset,// 时区偏移量,单位:小时
|
|
23
24
|
}
|
|
24
25
|
export default getters
|
|
@@ -44,6 +44,7 @@ state = {
|
|
|
44
44
|
userFlag: null,
|
|
45
45
|
fileServerInfo: null,
|
|
46
46
|
loginConfig: null,
|
|
47
|
+
utcTransformOffset: 0,// 时区偏移量,单位:小时
|
|
47
48
|
};
|
|
48
49
|
|
|
49
50
|
mutations = {
|
|
@@ -95,6 +96,9 @@ mutations = {
|
|
|
95
96
|
SET_LOGIN_CONFIG: (state, loginConfig) => {
|
|
96
97
|
state.loginConfig = loginConfig;
|
|
97
98
|
},
|
|
99
|
+
SET_UTC_TRANSFORM_OFFSET: (state, utcTransformOffset) => {
|
|
100
|
+
state.utcTransformOffset = utcTransformOffset;
|
|
101
|
+
},
|
|
98
102
|
};
|
|
99
103
|
|
|
100
104
|
actions = {
|
|
@@ -205,6 +209,25 @@ actions = {
|
|
|
205
209
|
console.error(error);
|
|
206
210
|
}),
|
|
207
211
|
];
|
|
212
|
+
if (settingConfig.utcTransformEnabled) {
|
|
213
|
+
requests.push(
|
|
214
|
+
getParameterVauleByCode({
|
|
215
|
+
data: { code: "utcTransformOffset" }, //UTC时间转换时差
|
|
216
|
+
success: (res) => {
|
|
217
|
+
let value =
|
|
218
|
+
!res.objx || !res.objx.value
|
|
219
|
+
? 0
|
|
220
|
+
: Number(res.objx.value);
|
|
221
|
+
if (isNaN(value)) value = 0;
|
|
222
|
+
commit("SET_UTC_TRANSFORM_OFFSET", value);
|
|
223
|
+
},
|
|
224
|
+
fail: (res) => {
|
|
225
|
+
flag = false;
|
|
226
|
+
reject(res);
|
|
227
|
+
},
|
|
228
|
+
})
|
|
229
|
+
);
|
|
230
|
+
}
|
|
208
231
|
if (settingConfig.i18nEnabled) {
|
|
209
232
|
requests.push(
|
|
210
233
|
languageSettingListPage({
|
|
@@ -332,12 +355,13 @@ actions = {
|
|
|
332
355
|
errorMsg: false,
|
|
333
356
|
success: (res) => {
|
|
334
357
|
let loginConfig = {};
|
|
335
|
-
if(res.objx){
|
|
358
|
+
if (res.objx) {
|
|
336
359
|
loginConfig = JSON.parse(res.objx);
|
|
337
|
-
if(loginConfig.system_name)
|
|
360
|
+
if (loginConfig.system_name)
|
|
361
|
+
document.title = loginConfig.system_name;
|
|
338
362
|
}
|
|
339
363
|
commit("SET_LOGIN_CONFIG", loginConfig);
|
|
340
|
-
}
|
|
364
|
+
},
|
|
341
365
|
}).finally(() => {
|
|
342
366
|
resolve();
|
|
343
367
|
});
|