kz-ui-base 1.0.159 → 1.0.161
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/common/src/components/basics/RightToolbar/index.vue +6 -5
- package/common/src/components/custom/Material/index.vue +25 -27
- package/common/src/components/custom/Material/indexTs.vue +25 -27
- package/components/base/dialog/MultiLanguageDialog.vue +68 -2
- package/components/base/dialog/elTable.vue +2 -2
- package/components/base/dialog/sampleEditDialog.vue +61 -38
- package/components/base/dialog/smapleDialog.vue +12 -12
- package/components/base/dialog/tableForm.vue +6 -6
- package/list-base-page/listBasePageTs.vue +10 -3
- package/package.json +1 -1
- package/views/bd/common/modal/EmployeeModal.vue +26 -22
- package/views/pd/common/modal/technicalStandardModal.vue +3 -3
|
@@ -5,19 +5,19 @@
|
|
|
5
5
|
v-if="searchVisible">
|
|
6
6
|
<el-button size="mini" circle icon="el-icon-search" @click="toggleSearch()"/>
|
|
7
7
|
</el-tooltip> -->
|
|
8
|
-
<el-tooltip class="item" effect="dark" content="
|
|
8
|
+
<el-tooltip class="item" effect="dark" :content="t('common.refresh')" placement="top" v-if="refreshVisible">
|
|
9
9
|
<el-button size="mini" circle icon="el-icon-refresh" @click="refresh()"/>
|
|
10
10
|
</el-tooltip>
|
|
11
|
-
<el-tooltip class="item" effect="dark" :content="sortable ? '
|
|
11
|
+
<el-tooltip class="item" effect="dark" :content="sortable ? t('common.disableSort') : t('common.enableSort')" placement="top" v-if="sortVisible">
|
|
12
12
|
<el-button size="mini" circle icon="el-icon-sort" @click="toggleSortable()"/>
|
|
13
13
|
</el-tooltip>
|
|
14
|
-
<el-tooltip class="item" effect="dark" content="
|
|
14
|
+
<el-tooltip class="item" effect="dark" :content="t('common.showHideColumn')" placement="top" v-if="columns">
|
|
15
15
|
<el-button size="mini" circle icon="el-icon-menu" @click="showColumn()"/>
|
|
16
16
|
</el-tooltip>
|
|
17
17
|
</el-row>
|
|
18
18
|
<el-dialog :title="title" :visible.sync="open" append-to-body :before-close="handleClose">
|
|
19
19
|
<el-transfer
|
|
20
|
-
:titles="['
|
|
20
|
+
:titles="[t('common.show'), t('common.hide')]"
|
|
21
21
|
v-model="value"
|
|
22
22
|
:data="columns"
|
|
23
23
|
@change="dataChange"
|
|
@@ -34,7 +34,7 @@ export default {
|
|
|
34
34
|
// 显隐数据
|
|
35
35
|
value: [],
|
|
36
36
|
// 弹出层标题
|
|
37
|
-
title: "
|
|
37
|
+
title: "",
|
|
38
38
|
// 是否显示弹出层
|
|
39
39
|
sortable: true,
|
|
40
40
|
open: false
|
|
@@ -62,6 +62,7 @@ export default {
|
|
|
62
62
|
}
|
|
63
63
|
},
|
|
64
64
|
created() {
|
|
65
|
+
this.title = this.t('common.showHide');
|
|
65
66
|
let displayHideColumn
|
|
66
67
|
if(localStorage.getItem("displayHideColumn")&&localStorage.getItem("displayHideColumn")!=='{}'){
|
|
67
68
|
displayHideColumn=JSON.parse(localStorage.getItem("displayHideColumn"))
|
|
@@ -11,11 +11,9 @@
|
|
|
11
11
|
>
|
|
12
12
|
<template slot="title">
|
|
13
13
|
<div class="title-text">
|
|
14
|
-
<span class="title-main"
|
|
14
|
+
<span class="title-main">{{ t('common.addFile') }}</span
|
|
15
15
|
><span class="title-supplement"
|
|
16
|
-
|
|
17
|
-
"md", "xmind", "mp4", "xlsx"
|
|
18
|
-
,"bmp","tif","avi","wmv","xls"大小不超过5M。)</span
|
|
16
|
+
>{{ t('common.addFileTip') }}</span
|
|
19
17
|
>
|
|
20
18
|
</div>
|
|
21
19
|
</template>
|
|
@@ -27,7 +25,7 @@
|
|
|
27
25
|
class="material"
|
|
28
26
|
style="height: 500px"
|
|
29
27
|
>
|
|
30
|
-
<el-tab-pane label="
|
|
28
|
+
<el-tab-pane :label="t('common.myFiles')" name="first">
|
|
31
29
|
<el-container>
|
|
32
30
|
<el-header class="container-header">
|
|
33
31
|
<el-row :gutter="20" type="flex" justify="space-between">
|
|
@@ -54,7 +52,7 @@
|
|
|
54
52
|
icon="el-icon-upload2"
|
|
55
53
|
:loading="upload.isUploading"
|
|
56
54
|
>
|
|
57
|
-
|
|
55
|
+
{{ t('common.uploadDirectly') }}
|
|
58
56
|
</el-button>
|
|
59
57
|
</el-upload>
|
|
60
58
|
</el-col>
|
|
@@ -65,14 +63,14 @@
|
|
|
65
63
|
icon="el-icon-folder-add"
|
|
66
64
|
@click="handleAddFolder"
|
|
67
65
|
:loading="upload.isUploading"
|
|
68
|
-
|
|
66
|
+
>{{ t('common.addFolder') }}
|
|
69
67
|
</el-button>
|
|
70
68
|
</el-col>
|
|
71
69
|
</el-row>
|
|
72
70
|
</el-col>
|
|
73
71
|
<el-col :xs="4" :sm="4" :md="4" :lg="4" :xl="4" :pull="2">
|
|
74
72
|
<el-input
|
|
75
|
-
placeholder="
|
|
73
|
+
:placeholder="t('common.searchAllFiles')"
|
|
76
74
|
v-model="form.folderName"
|
|
77
75
|
class="header-search"
|
|
78
76
|
@change="searchChange"
|
|
@@ -233,18 +231,18 @@
|
|
|
233
231
|
</el-main>
|
|
234
232
|
</el-container>
|
|
235
233
|
</el-tab-pane>
|
|
236
|
-
<el-tab-pane label="
|
|
234
|
+
<el-tab-pane :label="t('common.galleryCenter')" name="second"></el-tab-pane>
|
|
237
235
|
</el-tabs>
|
|
238
236
|
</div>
|
|
239
237
|
<div slot="footer" class="dialog-footer dialogTop-footer">
|
|
240
238
|
<el-button class="dialogTop-footer-button" @click="handleClose"
|
|
241
|
-
|
|
239
|
+
>{{ t('common.cancel') }}</el-button
|
|
242
240
|
>
|
|
243
241
|
<el-button
|
|
244
242
|
class="dialogTop-footer-button"
|
|
245
243
|
type="primary"
|
|
246
244
|
@click="onSubmit"
|
|
247
|
-
|
|
245
|
+
>{{ t('common.confirm') }}</el-button
|
|
248
246
|
>
|
|
249
247
|
</div>
|
|
250
248
|
</el-dialog>
|
|
@@ -262,7 +260,7 @@
|
|
|
262
260
|
<template slot="title">
|
|
263
261
|
<div class="minor-title-text">
|
|
264
262
|
<span class="minor-increase"
|
|
265
|
-
|
|
263
|
+
{{ t('common.toBeAdded') }}({{ choiceList.length }}/{{ max }})</span
|
|
266
264
|
>
|
|
267
265
|
</div>
|
|
268
266
|
</template>
|
|
@@ -467,7 +465,7 @@ export default {
|
|
|
467
465
|
handleAddFolder() {
|
|
468
466
|
this.upload.isUploading = true;
|
|
469
467
|
addFolder(this.form).then((response) => {
|
|
470
|
-
this.msgSuccess(
|
|
468
|
+
this.msgSuccess(this.t('common.addSuccess'));
|
|
471
469
|
this.getList();
|
|
472
470
|
this.upload.isUploading = false;
|
|
473
471
|
});
|
|
@@ -540,12 +538,12 @@ export default {
|
|
|
540
538
|
updateMaterialNick(type, item, index) {
|
|
541
539
|
if (type === 0) {
|
|
542
540
|
updateFolder(item).then((response) => {
|
|
543
|
-
this.msgSuccess(
|
|
541
|
+
this.msgSuccess(this.t('common.modifySuccess'));
|
|
544
542
|
this.getList();
|
|
545
543
|
});
|
|
546
544
|
} else if (type === 1) {
|
|
547
545
|
updateMaterial(item).then((response) => {
|
|
548
|
-
this.msgSuccess(
|
|
546
|
+
this.msgSuccess(this.t('common.modifySuccess'));
|
|
549
547
|
this.getList();
|
|
550
548
|
});
|
|
551
549
|
}
|
|
@@ -554,12 +552,12 @@ export default {
|
|
|
554
552
|
imageDelete(type, item, index) {
|
|
555
553
|
this.$confirm(
|
|
556
554
|
type === 0
|
|
557
|
-
?
|
|
558
|
-
:
|
|
559
|
-
|
|
555
|
+
? this.t('common.deleteFolderConfirm')
|
|
556
|
+
: this.t('common.deleteFileConfirm'),
|
|
557
|
+
this.t('common.tip'),
|
|
560
558
|
{
|
|
561
|
-
confirmButtonText:
|
|
562
|
-
cancelButtonText:
|
|
559
|
+
confirmButtonText: this.t('common.confirm'),
|
|
560
|
+
cancelButtonText: this.t('common.cancel'),
|
|
563
561
|
type: "warning",
|
|
564
562
|
center: true,
|
|
565
563
|
}
|
|
@@ -575,13 +573,13 @@ export default {
|
|
|
575
573
|
this.getList();
|
|
576
574
|
this.$message({
|
|
577
575
|
type: "success",
|
|
578
|
-
message:
|
|
576
|
+
message: this.t('common.deleteSuccess'),
|
|
579
577
|
});
|
|
580
578
|
})
|
|
581
579
|
.catch(() => {
|
|
582
580
|
this.$message({
|
|
583
581
|
type: "info",
|
|
584
|
-
message:
|
|
582
|
+
message: this.t('common.deleteCancelled'),
|
|
585
583
|
});
|
|
586
584
|
});
|
|
587
585
|
},
|
|
@@ -590,7 +588,7 @@ export default {
|
|
|
590
588
|
const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
|
|
591
589
|
if (this.upload.whiteList.indexOf(fileSuffix) === -1) {
|
|
592
590
|
this.$message({
|
|
593
|
-
message:
|
|
591
|
+
message: this.t('common.unsupportedFileType'),
|
|
594
592
|
type: "warning",
|
|
595
593
|
});
|
|
596
594
|
return false;
|
|
@@ -598,7 +596,7 @@ export default {
|
|
|
598
596
|
const isLt2M = file.size / 1024 / 1024 < 100;
|
|
599
597
|
if (!isLt2M) {
|
|
600
598
|
this.$message({
|
|
601
|
-
message:
|
|
599
|
+
message: this.t('common.fileSizeLimit'),
|
|
602
600
|
type: "warning",
|
|
603
601
|
});
|
|
604
602
|
return false;
|
|
@@ -613,10 +611,10 @@ export default {
|
|
|
613
611
|
this.upload.fileList = [];
|
|
614
612
|
this.upload.isUploading = false;
|
|
615
613
|
if (response.code != 200) {
|
|
616
|
-
this.$message.error(
|
|
614
|
+
this.$message.error(this.t('common.uploadFailed') + response.msg);
|
|
617
615
|
} else {
|
|
618
616
|
this.$message({
|
|
619
|
-
message:
|
|
617
|
+
message: this.t('common.uploadSuccess'),
|
|
620
618
|
type: "success",
|
|
621
619
|
});
|
|
622
620
|
}
|
|
@@ -626,7 +624,7 @@ export default {
|
|
|
626
624
|
handleFileError(err, file, fileList) {
|
|
627
625
|
this.upload.fileList = [];
|
|
628
626
|
this.upload.isUploading = false;
|
|
629
|
-
this.$message.error(
|
|
627
|
+
this.$message.error(this.t('common.uploadFailed') + err);
|
|
630
628
|
},
|
|
631
629
|
/** 确定 */
|
|
632
630
|
onSubmit() {
|
|
@@ -11,11 +11,9 @@
|
|
|
11
11
|
>
|
|
12
12
|
<template slot="title">
|
|
13
13
|
<div class="title-text">
|
|
14
|
-
<span class="title-main"
|
|
14
|
+
<span class="title-main">{{ t('common.addFile') }}</span
|
|
15
15
|
><span class="title-supplement"
|
|
16
|
-
|
|
17
|
-
"md", "xmind", "mp4", "xlsx"
|
|
18
|
-
,"bmp","tif","avi","wmv","xls"大小不超过5M。)</span
|
|
16
|
+
>{{ t('common.addFileTip') }}</span
|
|
19
17
|
>
|
|
20
18
|
</div>
|
|
21
19
|
</template>
|
|
@@ -27,7 +25,7 @@
|
|
|
27
25
|
class="material"
|
|
28
26
|
style="height: 500px"
|
|
29
27
|
>
|
|
30
|
-
<el-tab-pane label="
|
|
28
|
+
<el-tab-pane :label="t('common.myFiles')" name="first">
|
|
31
29
|
<el-container>
|
|
32
30
|
<el-header class="container-header">
|
|
33
31
|
<el-row :gutter="20" type="flex" justify="space-between">
|
|
@@ -54,7 +52,7 @@
|
|
|
54
52
|
icon="el-icon-upload2"
|
|
55
53
|
:loading="upload.isUploading"
|
|
56
54
|
>
|
|
57
|
-
|
|
55
|
+
{{ t('common.uploadDirectly') }}
|
|
58
56
|
</el-button>
|
|
59
57
|
</el-upload>
|
|
60
58
|
</el-col>
|
|
@@ -65,14 +63,14 @@
|
|
|
65
63
|
icon="el-icon-folder-add"
|
|
66
64
|
@click="handleAddFolder"
|
|
67
65
|
:loading="upload.isUploading"
|
|
68
|
-
|
|
66
|
+
>{{ t('common.addFolder') }}
|
|
69
67
|
</el-button>
|
|
70
68
|
</el-col>
|
|
71
69
|
</el-row>
|
|
72
70
|
</el-col>
|
|
73
71
|
<el-col :xs="4" :sm="4" :md="4" :lg="4" :xl="4" :pull="2">
|
|
74
72
|
<el-input
|
|
75
|
-
placeholder="
|
|
73
|
+
:placeholder="t('common.searchAllFiles')"
|
|
76
74
|
v-model="form.folderName"
|
|
77
75
|
class="header-search"
|
|
78
76
|
@change="searchChange"
|
|
@@ -233,18 +231,18 @@
|
|
|
233
231
|
</el-main>
|
|
234
232
|
</el-container>
|
|
235
233
|
</el-tab-pane>
|
|
236
|
-
<el-tab-pane label="
|
|
234
|
+
<el-tab-pane :label="t('common.galleryCenter')" name="second"></el-tab-pane>
|
|
237
235
|
</el-tabs>
|
|
238
236
|
</div>
|
|
239
237
|
<div slot="footer" class="dialog-footer dialogTop-footer">
|
|
240
238
|
<el-button class="dialogTop-footer-button" @click="handleClose"
|
|
241
|
-
|
|
239
|
+
>{{ t('common.cancel') }}</el-button
|
|
242
240
|
>
|
|
243
241
|
<el-button
|
|
244
242
|
class="dialogTop-footer-button"
|
|
245
243
|
type="primary"
|
|
246
244
|
@click="onSubmit"
|
|
247
|
-
|
|
245
|
+
>{{ t('common.confirm') }}</el-button
|
|
248
246
|
>
|
|
249
247
|
</div>
|
|
250
248
|
</el-dialog>
|
|
@@ -262,7 +260,7 @@
|
|
|
262
260
|
<template slot="title">
|
|
263
261
|
<div class="minor-title-text">
|
|
264
262
|
<span class="minor-increase"
|
|
265
|
-
|
|
263
|
+
{{ t('common.toBeAdded') }}({{ choiceList.length }}/{{ max }})</span
|
|
266
264
|
>
|
|
267
265
|
</div>
|
|
268
266
|
</template>
|
|
@@ -465,7 +463,7 @@ export default class material extends Vue {
|
|
|
465
463
|
public handleAddFolder() {
|
|
466
464
|
this.upload.isUploading = true;
|
|
467
465
|
addFolder(this.form).then((response) => {
|
|
468
|
-
(this as any).msgSuccess(
|
|
466
|
+
(this as any).msgSuccess((this as any).t('common.addSuccess'));
|
|
469
467
|
this.getList();
|
|
470
468
|
this.upload.isUploading = false;
|
|
471
469
|
});
|
|
@@ -536,12 +534,12 @@ export default class material extends Vue {
|
|
|
536
534
|
public updateMaterialNick(type, item, index) {
|
|
537
535
|
if (type === 0) {
|
|
538
536
|
updateFolder(item).then((response) => {
|
|
539
|
-
(this as any).msgSuccess(
|
|
537
|
+
(this as any).msgSuccess((this as any).t('common.modifySuccess'));
|
|
540
538
|
this.getList();
|
|
541
539
|
});
|
|
542
540
|
} else if (type === 1) {
|
|
543
541
|
updateMaterial(item).then((response) => {
|
|
544
|
-
(this as any).msgSuccess(
|
|
542
|
+
(this as any).msgSuccess((this as any).t('common.modifySuccess'));
|
|
545
543
|
this.getList();
|
|
546
544
|
});
|
|
547
545
|
}
|
|
@@ -551,12 +549,12 @@ export default class material extends Vue {
|
|
|
551
549
|
(this as any)
|
|
552
550
|
.$confirm(
|
|
553
551
|
type === 0
|
|
554
|
-
?
|
|
555
|
-
:
|
|
556
|
-
|
|
552
|
+
? (this as any).t('common.deleteFolderConfirm')
|
|
553
|
+
: (this as any).t('common.deleteFileConfirm'),
|
|
554
|
+
(this as any).t('common.tip'),
|
|
557
555
|
{
|
|
558
|
-
confirmButtonText:
|
|
559
|
-
cancelButtonText:
|
|
556
|
+
confirmButtonText: (this as any).t('common.confirm'),
|
|
557
|
+
cancelButtonText: (this as any).t('common.cancel'),
|
|
560
558
|
type: "warning",
|
|
561
559
|
center: true,
|
|
562
560
|
}
|
|
@@ -572,13 +570,13 @@ export default class material extends Vue {
|
|
|
572
570
|
this.getList();
|
|
573
571
|
(this as any).$message({
|
|
574
572
|
type: "success",
|
|
575
|
-
message:
|
|
573
|
+
message: (this as any).t('common.deleteSuccess'),
|
|
576
574
|
});
|
|
577
575
|
})
|
|
578
576
|
.catch(() => {
|
|
579
577
|
(this as any).$message({
|
|
580
578
|
type: "info",
|
|
581
|
-
message:
|
|
579
|
+
message: (this as any).t('common.deleteCancelled'),
|
|
582
580
|
});
|
|
583
581
|
});
|
|
584
582
|
}
|
|
@@ -587,7 +585,7 @@ export default class material extends Vue {
|
|
|
587
585
|
const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
|
|
588
586
|
if (this.upload.whiteList.indexOf(fileSuffix) === -1) {
|
|
589
587
|
(this as any).$message({
|
|
590
|
-
message:
|
|
588
|
+
message: (this as any).t('common.unsupportedFileType'),
|
|
591
589
|
type: "warning",
|
|
592
590
|
});
|
|
593
591
|
return false;
|
|
@@ -595,7 +593,7 @@ export default class material extends Vue {
|
|
|
595
593
|
const isLt2M = file.size / 1024 / 1024 < 100;
|
|
596
594
|
if (!isLt2M) {
|
|
597
595
|
(this as any).$message({
|
|
598
|
-
message:
|
|
596
|
+
message: (this as any).t('common.fileSizeLimit'),
|
|
599
597
|
type: "warning",
|
|
600
598
|
});
|
|
601
599
|
return false;
|
|
@@ -611,10 +609,10 @@ export default class material extends Vue {
|
|
|
611
609
|
this.upload.fileList = [];
|
|
612
610
|
this.upload.isUploading = false;
|
|
613
611
|
if (response.code != 200) {
|
|
614
|
-
(this as any).$message.error(
|
|
612
|
+
(this as any).$message.error((this as any).t('common.uploadFailed') + response.msg);
|
|
615
613
|
} else {
|
|
616
614
|
(this as any).$message({
|
|
617
|
-
message:
|
|
615
|
+
message: (this as any).t('common.uploadSuccess'),
|
|
618
616
|
type: "success",
|
|
619
617
|
});
|
|
620
618
|
}
|
|
@@ -624,7 +622,7 @@ export default class material extends Vue {
|
|
|
624
622
|
public handleFileError(err, file, fileList) {
|
|
625
623
|
this.upload.fileList = [];
|
|
626
624
|
this.upload.isUploading = false;
|
|
627
|
-
(this as any).$message.error(
|
|
625
|
+
(this as any).$message.error((this as any).t('common.uploadFailed') + err);
|
|
628
626
|
}
|
|
629
627
|
/** 确定 */
|
|
630
628
|
public onSubmit() {
|
|
@@ -96,7 +96,7 @@ export default {
|
|
|
96
96
|
*/
|
|
97
97
|
getFieldValueByMap(row, field) {
|
|
98
98
|
// 如果直接能找到字段,直接返回
|
|
99
|
-
if (row[field] !== undefined && row[field] !== null) {
|
|
99
|
+
if (row[field] !== undefined && row[field] !== null && row[field] !== '') {
|
|
100
100
|
return row[field]
|
|
101
101
|
}
|
|
102
102
|
// 如果找不到,尝试通过 dataLangFieldMap 映射
|
|
@@ -104,7 +104,7 @@ export default {
|
|
|
104
104
|
if (fieldMap) {
|
|
105
105
|
// 查找映射关系中 value 等于 field 的 key
|
|
106
106
|
const mappedKey = Object.keys(fieldMap).find(key => fieldMap[key] === field)
|
|
107
|
-
if (mappedKey && row[mappedKey] !== undefined && row[mappedKey] !== null) {
|
|
107
|
+
if (mappedKey && row[mappedKey] !== undefined && row[mappedKey] !== null && row[mappedKey] !== '') {
|
|
108
108
|
return row[mappedKey]
|
|
109
109
|
}
|
|
110
110
|
}
|
|
@@ -119,6 +119,7 @@ export default {
|
|
|
119
119
|
const data = this.config.data.map((row, index) => {
|
|
120
120
|
const item = {
|
|
121
121
|
id: this.getFieldValueByMap(row, this.config.dataLangIdField) || row.configId,
|
|
122
|
+
// 使用 getFieldValueByMap 获取原始值(会处理字段映射)
|
|
122
123
|
value: this.getFieldValueByMap(row, columnName) || '-',
|
|
123
124
|
configKey: row.configKey
|
|
124
125
|
}
|
|
@@ -137,6 +138,7 @@ export default {
|
|
|
137
138
|
this.tableDataMap[columnName] = this.config.data.map((row, index) => {
|
|
138
139
|
const item = {
|
|
139
140
|
id: this.getFieldValueByMap(row, this.config.dataLangIdField) || row.configId,
|
|
141
|
+
// 使用 getFieldValueByMap 获取原始值(会处理字段映射)
|
|
140
142
|
value: this.getFieldValueByMap(row, columnName) || '-',
|
|
141
143
|
configKey: row.configKey
|
|
142
144
|
}
|
|
@@ -159,6 +161,8 @@ export default {
|
|
|
159
161
|
}))
|
|
160
162
|
// 语言加载完成后初始化表格数据
|
|
161
163
|
this.initTableData()
|
|
164
|
+
// 批量查询翻译并回填
|
|
165
|
+
this.fetchAndFillTranslations()
|
|
162
166
|
}
|
|
163
167
|
}).catch(error => {
|
|
164
168
|
console.error('获取语言列表失败:', error)
|
|
@@ -169,6 +173,68 @@ export default {
|
|
|
169
173
|
]
|
|
170
174
|
// 语言加载完成后初始化表格数据
|
|
171
175
|
this.initTableData()
|
|
176
|
+
// 批量查询翻译并回填
|
|
177
|
+
this.fetchAndFillTranslations()
|
|
178
|
+
})
|
|
179
|
+
},
|
|
180
|
+
/** 批量获取翻译并回填 - 按每个语言调用接口 */
|
|
181
|
+
fetchAndFillTranslations() {
|
|
182
|
+
if (!this.config.data || this.config.data.length === 0 || this.languages.length === 0) {
|
|
183
|
+
return
|
|
184
|
+
}
|
|
185
|
+
const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}')
|
|
186
|
+
const tenantId = userInfo.tenantId
|
|
187
|
+
|
|
188
|
+
// 构建请求参数 - 公共部分
|
|
189
|
+
const recordIds = this.config.data.map((item) =>
|
|
190
|
+
String(this.getFieldValueByMap(item, this.config.dataLangIdField))
|
|
191
|
+
).filter((id) => id && id !== "" && id !== "undefined" && id !== "null")
|
|
192
|
+
|
|
193
|
+
if (recordIds.length === 0) {
|
|
194
|
+
return
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// 【重要】循环每个语言,分别调用接口回填
|
|
198
|
+
this.languages.forEach(lang => {
|
|
199
|
+
const params = {
|
|
200
|
+
entityName: this.config.entityName,
|
|
201
|
+
recordIds: recordIds,
|
|
202
|
+
columnNames: this.config.dataLangColumnFields,
|
|
203
|
+
locale: lang.value,
|
|
204
|
+
tenantId: tenantId
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// 批量查询翻译接口 - 单语言
|
|
208
|
+
request({
|
|
209
|
+
url: '/system/api/i18n/translation/batch-get-multi',
|
|
210
|
+
method: 'post',
|
|
211
|
+
data: params
|
|
212
|
+
}).then(response => {
|
|
213
|
+
if (response.code === 200 && response.data) {
|
|
214
|
+
this.fillTranslationsByLocale(response.data, lang.value)
|
|
215
|
+
}
|
|
216
|
+
}).catch(error => {
|
|
217
|
+
console.error(`获取${lang.label}翻译失败:`, error)
|
|
218
|
+
})
|
|
219
|
+
})
|
|
220
|
+
},
|
|
221
|
+
/** 按指定语言回填到对应的 input 列 */
|
|
222
|
+
fillTranslationsByLocale(translationMap, currentLocale) {
|
|
223
|
+
// translationMap 格式:{"1": {"dictName": "用户性别"}}
|
|
224
|
+
// currentLocale: "zh_CN" / "en_US"
|
|
225
|
+
this.config.dataLangColumnFields.forEach(columnName => {
|
|
226
|
+
const tableData = this.tableDataMap[columnName] || []
|
|
227
|
+
tableData.forEach((rowData, rowIndex) => {
|
|
228
|
+
const originalRow = this.config.data[rowIndex]
|
|
229
|
+
const recordId = String(this.getFieldValueByMap(originalRow, this.config.dataLangIdField))
|
|
230
|
+
|
|
231
|
+
// 如果这条数据有翻译,放到对应语言的 input 中
|
|
232
|
+
if (translationMap[recordId] && translationMap[recordId][columnName]) {
|
|
233
|
+
const translationValue = translationMap[recordId][columnName]
|
|
234
|
+
// currentLocale = "zh_CN" 对应 rowData["zh_CN"]
|
|
235
|
+
rowData[currentLocale] = translationValue
|
|
236
|
+
}
|
|
237
|
+
})
|
|
172
238
|
})
|
|
173
239
|
},
|
|
174
240
|
handleClose() {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
:data="listData"
|
|
7
7
|
:listCustomOpMenus="listCustomOpMenus"
|
|
8
8
|
>
|
|
9
|
-
<el-table-column type="index" label="
|
|
9
|
+
<el-table-column type="index" :label="t('common.serialNumber')" width="50" align="center">
|
|
10
10
|
<template scope="scope">
|
|
11
11
|
<span>{{
|
|
12
12
|
(listQueryParams.pageNum - 1) * listQueryParams.pageSize +
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
|
|
122
122
|
<el-table-column
|
|
123
123
|
v-if="listSetting && listSetting.isShowOpColumn"
|
|
124
|
-
label="
|
|
124
|
+
:label="t('common.operation')"
|
|
125
125
|
align="center"
|
|
126
126
|
min-width="160"
|
|
127
127
|
class-name="small-padding fixed-width"
|
|
@@ -41,18 +41,18 @@
|
|
|
41
41
|
type="primary"
|
|
42
42
|
:loading="setting.submitLoading"
|
|
43
43
|
@click="submitForm"
|
|
44
|
-
|
|
44
|
+
>{{ t('common.confirm') }}</el-button
|
|
45
45
|
>
|
|
46
|
-
<el-button @click="cancel"
|
|
46
|
+
<el-button @click="cancel">{{ t('common.cancel') }}</el-button>
|
|
47
47
|
</div> -->
|
|
48
48
|
<div slot="footer" class="dialog-footer">
|
|
49
49
|
<el-button
|
|
50
50
|
type="primary"
|
|
51
51
|
:loading="setting.submitLoading"
|
|
52
52
|
@click="submitForm"
|
|
53
|
-
|
|
53
|
+
>{{ t('common.confirm') }}</el-button
|
|
54
54
|
>
|
|
55
|
-
<el-button @click="cancel"
|
|
55
|
+
<el-button @click="cancel">{{ t('common.cancel') }}</el-button>
|
|
56
56
|
</div>
|
|
57
57
|
</div>
|
|
58
58
|
</template>
|
|
@@ -96,7 +96,7 @@ export default {
|
|
|
96
96
|
name: "basic",
|
|
97
97
|
visable: true,
|
|
98
98
|
icon: "ion-plus-round",
|
|
99
|
-
text: "
|
|
99
|
+
text: "",
|
|
100
100
|
type: "area",
|
|
101
101
|
},
|
|
102
102
|
{
|
|
@@ -117,20 +117,20 @@ export default {
|
|
|
117
117
|
// 列信息
|
|
118
118
|
columns: [
|
|
119
119
|
{
|
|
120
|
-
text:
|
|
120
|
+
text: "",
|
|
121
121
|
property: "noticeTitle",
|
|
122
122
|
displayType: "TextBox",
|
|
123
123
|
visible: true,
|
|
124
|
-
placeholder: "
|
|
124
|
+
placeholder: "", //占位符文案 默认不传 不传就显示text的文案
|
|
125
125
|
setting: {
|
|
126
|
-
default: "
|
|
126
|
+
default: "",
|
|
127
127
|
},
|
|
128
128
|
// inputType: "number", // 输入类型默认不传
|
|
129
129
|
// maxLength: "10", // 输入长度限制
|
|
130
130
|
area: "basic",
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
|
-
text:
|
|
133
|
+
text: "",
|
|
134
134
|
property: "noticeType",
|
|
135
135
|
displayType: "DropDownList",
|
|
136
136
|
setting: {
|
|
@@ -142,7 +142,7 @@ export default {
|
|
|
142
142
|
area: "basic",
|
|
143
143
|
},
|
|
144
144
|
{
|
|
145
|
-
text:
|
|
145
|
+
text: "",
|
|
146
146
|
property: "noticeType",
|
|
147
147
|
displayType: "DropDownList",
|
|
148
148
|
setting: {
|
|
@@ -154,7 +154,7 @@ export default {
|
|
|
154
154
|
area: "basic",
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
|
-
text:
|
|
157
|
+
text: "",
|
|
158
158
|
property: "noticeType",
|
|
159
159
|
displayType: "DropDownList",
|
|
160
160
|
setting: {
|
|
@@ -166,7 +166,7 @@ export default {
|
|
|
166
166
|
area: "basic",
|
|
167
167
|
},
|
|
168
168
|
{
|
|
169
|
-
text:
|
|
169
|
+
text: "",
|
|
170
170
|
property: "noticeType",
|
|
171
171
|
displayType: "DropDownList",
|
|
172
172
|
setting: {
|
|
@@ -178,7 +178,7 @@ export default {
|
|
|
178
178
|
area: "basic",
|
|
179
179
|
},
|
|
180
180
|
{
|
|
181
|
-
text:
|
|
181
|
+
text: "",
|
|
182
182
|
property: "noticeType",
|
|
183
183
|
displayType: "DropDownList",
|
|
184
184
|
setting: {
|
|
@@ -190,7 +190,7 @@ export default {
|
|
|
190
190
|
area: "basic",
|
|
191
191
|
},
|
|
192
192
|
{
|
|
193
|
-
text:
|
|
193
|
+
text: "",
|
|
194
194
|
property: "noticeType",
|
|
195
195
|
displayType: "DropDownList",
|
|
196
196
|
setting: {
|
|
@@ -202,7 +202,7 @@ export default {
|
|
|
202
202
|
area: "basic",
|
|
203
203
|
},
|
|
204
204
|
{
|
|
205
|
-
text:
|
|
205
|
+
text: "",
|
|
206
206
|
property: "noticeType",
|
|
207
207
|
displayType: "DropDownList",
|
|
208
208
|
setting: {
|
|
@@ -214,7 +214,7 @@ export default {
|
|
|
214
214
|
area: "basic",
|
|
215
215
|
},
|
|
216
216
|
{
|
|
217
|
-
text:
|
|
217
|
+
text: "",
|
|
218
218
|
property: "noticeType",
|
|
219
219
|
displayType: "DropDownList",
|
|
220
220
|
setting: {
|
|
@@ -226,7 +226,7 @@ export default {
|
|
|
226
226
|
area: "basic",
|
|
227
227
|
},
|
|
228
228
|
{
|
|
229
|
-
text:
|
|
229
|
+
text: "",
|
|
230
230
|
property: "noticeType",
|
|
231
231
|
displayType: "DropDownList",
|
|
232
232
|
setting: {
|
|
@@ -238,7 +238,7 @@ export default {
|
|
|
238
238
|
area: "basic",
|
|
239
239
|
},
|
|
240
240
|
{
|
|
241
|
-
text:
|
|
241
|
+
text: "",
|
|
242
242
|
property: "noticeType",
|
|
243
243
|
displayType: "DropDownList",
|
|
244
244
|
setting: {
|
|
@@ -250,7 +250,7 @@ export default {
|
|
|
250
250
|
area: "basic",
|
|
251
251
|
},
|
|
252
252
|
{
|
|
253
|
-
text:
|
|
253
|
+
text: "",
|
|
254
254
|
property: "noticeType",
|
|
255
255
|
displayType: "DropDownList",
|
|
256
256
|
setting: {
|
|
@@ -262,7 +262,7 @@ export default {
|
|
|
262
262
|
area: "basic",
|
|
263
263
|
},
|
|
264
264
|
{
|
|
265
|
-
text:
|
|
265
|
+
text: "",
|
|
266
266
|
property: "noticeType",
|
|
267
267
|
displayType: "DropDownList",
|
|
268
268
|
setting: {
|
|
@@ -274,7 +274,7 @@ export default {
|
|
|
274
274
|
area: "basic",
|
|
275
275
|
},
|
|
276
276
|
{
|
|
277
|
-
text:
|
|
277
|
+
text: "",
|
|
278
278
|
property: "noticeType",
|
|
279
279
|
displayType: "DropDownList",
|
|
280
280
|
setting: {
|
|
@@ -286,7 +286,7 @@ export default {
|
|
|
286
286
|
area: "basic",
|
|
287
287
|
},
|
|
288
288
|
{
|
|
289
|
-
text:
|
|
289
|
+
text: "",
|
|
290
290
|
property: "noticeType",
|
|
291
291
|
displayType: "DropDownList",
|
|
292
292
|
setting: {
|
|
@@ -298,7 +298,7 @@ export default {
|
|
|
298
298
|
area: "basic",
|
|
299
299
|
},
|
|
300
300
|
{
|
|
301
|
-
text:
|
|
301
|
+
text: "",
|
|
302
302
|
property: "noticeType",
|
|
303
303
|
displayType: "DropDownList",
|
|
304
304
|
setting: {
|
|
@@ -310,7 +310,7 @@ export default {
|
|
|
310
310
|
area: "basic",
|
|
311
311
|
},
|
|
312
312
|
{
|
|
313
|
-
text:
|
|
313
|
+
text: "",
|
|
314
314
|
property: "noticeType",
|
|
315
315
|
displayType: "DropDownList",
|
|
316
316
|
setting: {
|
|
@@ -322,7 +322,7 @@ export default {
|
|
|
322
322
|
area: "basic",
|
|
323
323
|
},
|
|
324
324
|
{
|
|
325
|
-
text:
|
|
325
|
+
text: "",
|
|
326
326
|
property: "noticeType",
|
|
327
327
|
displayType: "DropDownList",
|
|
328
328
|
setting: {
|
|
@@ -334,7 +334,7 @@ export default {
|
|
|
334
334
|
area: "basic",
|
|
335
335
|
},
|
|
336
336
|
{
|
|
337
|
-
text:
|
|
337
|
+
text: "",
|
|
338
338
|
property: "noticeType",
|
|
339
339
|
displayType: "DropDownList",
|
|
340
340
|
setting: {
|
|
@@ -349,16 +349,16 @@ export default {
|
|
|
349
349
|
// 表单校验
|
|
350
350
|
rules: {
|
|
351
351
|
noticeTitle: [
|
|
352
|
-
{ required: true, message: "
|
|
352
|
+
{ required: true, message: "", trigger: "blur" },
|
|
353
353
|
{
|
|
354
354
|
min: 2,
|
|
355
355
|
max: 20,
|
|
356
|
-
message: "
|
|
356
|
+
message: "",
|
|
357
357
|
trigger: "blur",
|
|
358
358
|
},
|
|
359
359
|
],
|
|
360
360
|
noticeType: [
|
|
361
|
-
{ required: true, message: "
|
|
361
|
+
{ required: true, message: "", trigger: "blur" },
|
|
362
362
|
],
|
|
363
363
|
},
|
|
364
364
|
//可编辑表格配置
|
|
@@ -396,13 +396,13 @@ export default {
|
|
|
396
396
|
},
|
|
397
397
|
{
|
|
398
398
|
prop: "noticeTitle",
|
|
399
|
-
text: "
|
|
399
|
+
text: "",
|
|
400
400
|
attr: { width: "180" },
|
|
401
401
|
edit: true,
|
|
402
402
|
},
|
|
403
403
|
{
|
|
404
404
|
prop: "noticeType",
|
|
405
|
-
text: "
|
|
405
|
+
text: "",
|
|
406
406
|
attr: { minWidth: "110" },
|
|
407
407
|
edit: true,
|
|
408
408
|
type: "select",
|
|
@@ -413,19 +413,19 @@ export default {
|
|
|
413
413
|
},
|
|
414
414
|
{
|
|
415
415
|
prop: "remark",
|
|
416
|
-
text: "
|
|
416
|
+
text: "",
|
|
417
417
|
attr: { minWidth: "110" },
|
|
418
418
|
edit: true,
|
|
419
419
|
},
|
|
420
420
|
{
|
|
421
421
|
prop: "noticeContent",
|
|
422
|
-
text: "
|
|
422
|
+
text: "",
|
|
423
423
|
attr: { minWidth: "110" },
|
|
424
424
|
edit: true,
|
|
425
425
|
},
|
|
426
426
|
{
|
|
427
427
|
prop: "product",
|
|
428
|
-
text: "
|
|
428
|
+
text: "",
|
|
429
429
|
attr: { minWidth: "110" },
|
|
430
430
|
edit: true,
|
|
431
431
|
type: "checkbox",
|
|
@@ -436,7 +436,7 @@ export default {
|
|
|
436
436
|
},
|
|
437
437
|
{
|
|
438
438
|
prop: "date",
|
|
439
|
-
text: "
|
|
439
|
+
text: "",
|
|
440
440
|
attr: { minWidth: "110" },
|
|
441
441
|
edit: true,
|
|
442
442
|
type: "date",
|
|
@@ -444,14 +444,14 @@ export default {
|
|
|
444
444
|
},
|
|
445
445
|
{
|
|
446
446
|
prop: "status",
|
|
447
|
-
text: "
|
|
447
|
+
text: "",
|
|
448
448
|
attr: { minWidth: "110" },
|
|
449
449
|
edit: true,
|
|
450
450
|
type: "switch",
|
|
451
451
|
},
|
|
452
452
|
{
|
|
453
453
|
prop: "search",
|
|
454
|
-
text: "
|
|
454
|
+
text: "",
|
|
455
455
|
attr: { minWidth: "110" },
|
|
456
456
|
edit: true,
|
|
457
457
|
type: "mixInput",
|
|
@@ -459,7 +459,7 @@ export default {
|
|
|
459
459
|
console.log(row);
|
|
460
460
|
},
|
|
461
461
|
},
|
|
462
|
-
{ prop: "opt", text: "
|
|
462
|
+
{ prop: "opt", text: "", attr: { minWidth: "110" }, edit: true },
|
|
463
463
|
],
|
|
464
464
|
data: [],
|
|
465
465
|
},
|
|
@@ -468,6 +468,7 @@ export default {
|
|
|
468
468
|
watch: {},
|
|
469
469
|
created() {
|
|
470
470
|
console.log(this.entity);
|
|
471
|
+
this.initI18n();
|
|
471
472
|
//有可编辑表格的情况下
|
|
472
473
|
if (this.tableSetting.visible) {
|
|
473
474
|
/** 查询列表 */
|
|
@@ -487,6 +488,28 @@ export default {
|
|
|
487
488
|
mounted() {},
|
|
488
489
|
activated() {},
|
|
489
490
|
methods: {
|
|
491
|
+
initI18n() {
|
|
492
|
+
this.areaSetting[0].text = this.t('common.basicInfo');
|
|
493
|
+
this.columns[0].text = this.t('common.announcementTitle');
|
|
494
|
+
this.columns[0].placeholder = this.t('common.customPlaceholder');
|
|
495
|
+
this.columns[0].setting.default = this.t('common.defaultTitle');
|
|
496
|
+
this.columns[1].text = this.t('common.announcementType');
|
|
497
|
+
for (let i = 2; i < this.columns.length; i++) {
|
|
498
|
+
this.columns[i].text = this.t('common.announcementTitle');
|
|
499
|
+
}
|
|
500
|
+
this.rules.noticeTitle[0].message = this.t('common.announcementTitleRequired');
|
|
501
|
+
this.rules.noticeTitle[1].message = this.t('common.announcementTitleLength');
|
|
502
|
+
this.rules.noticeType[0].message = this.t('common.announcementTypeRequired');
|
|
503
|
+
this.tableSetting.columns[1].text = this.t('common.announcementTitle');
|
|
504
|
+
this.tableSetting.columns[2].text = this.t('common.announcementType');
|
|
505
|
+
this.tableSetting.columns[3].text = this.t('common.remark');
|
|
506
|
+
this.tableSetting.columns[4].text = this.t('common.customHtml');
|
|
507
|
+
this.tableSetting.columns[5].text = this.t('common.product');
|
|
508
|
+
this.tableSetting.columns[6].text = this.t('common.date');
|
|
509
|
+
this.tableSetting.columns[7].text = this.t('common.locked');
|
|
510
|
+
this.tableSetting.columns[8].text = this.t('common.search');
|
|
511
|
+
this.tableSetting.columns[9].text = this.t('common.operation');
|
|
512
|
+
},
|
|
490
513
|
//当前绑定实体字段值变更事件
|
|
491
514
|
onChangeEvent(args) {
|
|
492
515
|
console.log(args);
|
|
@@ -91,35 +91,35 @@ export default class MaterialsEditDialog extends Vue {
|
|
|
91
91
|
name: "basic",
|
|
92
92
|
visable: true,
|
|
93
93
|
icon: "ion-plus-round",
|
|
94
|
-
text:
|
|
94
|
+
text: (this as any).t('common.basicInfo'),
|
|
95
95
|
type: "area",
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
name: "tab1",
|
|
99
99
|
visable: true,
|
|
100
100
|
icon: "ion-plus-round",
|
|
101
|
-
text:
|
|
101
|
+
text: (this as any).t('common.callingData'),
|
|
102
102
|
type: "tab",
|
|
103
103
|
},
|
|
104
104
|
];
|
|
105
105
|
// 列信息
|
|
106
106
|
columns = [
|
|
107
107
|
{
|
|
108
|
-
text:
|
|
108
|
+
text: (this as any).t('common.date'),
|
|
109
109
|
property: "noticeTitle",
|
|
110
110
|
displayType: "TextBox",
|
|
111
111
|
visible: true,
|
|
112
112
|
area: "basic",
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
|
-
text:
|
|
115
|
+
text: (this as any).t('common.shift'),
|
|
116
116
|
property: "noticeTitle",
|
|
117
117
|
displayType: "TextBox",
|
|
118
118
|
visible: true,
|
|
119
119
|
area: "basic",
|
|
120
120
|
},
|
|
121
121
|
{
|
|
122
|
-
text:
|
|
122
|
+
text: (this as any).t('common.planNo'),
|
|
123
123
|
property: "noticeTitle",
|
|
124
124
|
displayType: "TextBox",
|
|
125
125
|
visible: true,
|
|
@@ -127,7 +127,7 @@ export default class MaterialsEditDialog extends Vue {
|
|
|
127
127
|
width: 24,
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
|
-
text:
|
|
130
|
+
text: (this as any).t('common.infoTip'),
|
|
131
131
|
property: "noticeTitle",
|
|
132
132
|
displayType: "TextBox",
|
|
133
133
|
visible: true,
|
|
@@ -138,16 +138,16 @@ export default class MaterialsEditDialog extends Vue {
|
|
|
138
138
|
// 表单校验
|
|
139
139
|
rules = {
|
|
140
140
|
noticeTitle: [
|
|
141
|
-
{ required: true, message:
|
|
141
|
+
{ required: true, message: (this as any).t('common.announcementTitleRequired'), trigger: "blur" },
|
|
142
142
|
{
|
|
143
143
|
min: 2,
|
|
144
144
|
max: 20,
|
|
145
|
-
message:
|
|
145
|
+
message: (this as any).t('common.announcementTitleLength'),
|
|
146
146
|
trigger: "blur",
|
|
147
147
|
},
|
|
148
148
|
],
|
|
149
149
|
noticeType: [
|
|
150
|
-
{ required: true, message:
|
|
150
|
+
{ required: true, message: (this as any).t('common.announcementTypeRequired'), trigger: "blur" },
|
|
151
151
|
],
|
|
152
152
|
};
|
|
153
153
|
loading = false;
|
|
@@ -155,10 +155,10 @@ export default class MaterialsEditDialog extends Vue {
|
|
|
155
155
|
isMultiple = true;
|
|
156
156
|
// 列表列信息
|
|
157
157
|
listColumns = [
|
|
158
|
-
{ text:
|
|
159
|
-
{ text:
|
|
158
|
+
{ text: (this as any).t('common.username'), property: "userName", displayType: "TextBox" },
|
|
159
|
+
{ text: (this as any).t('common.nickname'), property: "nickName", displayType: "TextBox" },
|
|
160
160
|
{
|
|
161
|
-
text:
|
|
161
|
+
text: (this as any).t('common.user'),
|
|
162
162
|
property: "test7",
|
|
163
163
|
displayType: "dropDownList",
|
|
164
164
|
setting: { type: "User", displayMode: "form" },
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
v-if="column.displayType == 'TextBox'"
|
|
31
31
|
size="small"
|
|
32
32
|
v-model="scope.row[column.property]"
|
|
33
|
-
placeholder="
|
|
33
|
+
:placeholder="t('common.pleaseEnterContent')"
|
|
34
34
|
></el-input>
|
|
35
35
|
|
|
36
36
|
<dropDownList
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
</template>
|
|
82
82
|
|
|
83
83
|
<el-table-column
|
|
84
|
-
label="
|
|
84
|
+
:label="t('common.operation')"
|
|
85
85
|
align="center"
|
|
86
86
|
min-width="160"
|
|
87
87
|
class-name="small-padding fixed-width"
|
|
@@ -92,16 +92,16 @@
|
|
|
92
92
|
size="mini"
|
|
93
93
|
type="text"
|
|
94
94
|
@click="deleteSingle(scope.$index)"
|
|
95
|
-
|
|
95
|
+
>{{ t('common.delete') }}</el-button
|
|
96
96
|
>
|
|
97
97
|
</template>
|
|
98
98
|
</el-table-column>
|
|
99
99
|
</el-table>
|
|
100
100
|
</el-form>
|
|
101
101
|
<div style="margin-top: 8px" v-if="listSetting.buttonShow">
|
|
102
|
-
<el-button type="primary" size="mini" @click="newAdd"
|
|
102
|
+
<el-button type="primary" size="mini" @click="newAdd">{{ t('common.addData') }}</el-button>
|
|
103
103
|
<el-button @click="deleteAll" type="danger" size="mini"
|
|
104
|
-
|
|
104
|
+
>{{ t('common.deleteSelected') }}</el-button
|
|
105
105
|
>
|
|
106
106
|
</div>
|
|
107
107
|
</div>
|
|
@@ -166,7 +166,7 @@ export default class TableForm extends Vue {
|
|
|
166
166
|
}
|
|
167
167
|
deleteAll() {
|
|
168
168
|
if (this.multipleSelectAry.length == 0) {
|
|
169
|
-
(this as any).$message.error(
|
|
169
|
+
(this as any).$message.error((this as any).t('common.pleaseSelectDeleteData'));
|
|
170
170
|
}
|
|
171
171
|
this.model.listData = this.model.listData.filter((item, index) => {
|
|
172
172
|
return !this.multipleSelectAry.includes(index);
|
|
@@ -440,7 +440,7 @@
|
|
|
440
440
|
plain
|
|
441
441
|
icon="el-icon-connection"
|
|
442
442
|
size="mini"
|
|
443
|
-
:disabled="
|
|
443
|
+
:disabled="!currentEntities || currentEntities.length === 0"
|
|
444
444
|
@click="handleMultiLanguage"
|
|
445
445
|
>
|
|
446
446
|
{{ t('config.switch_multi_language') }}
|
|
@@ -1403,6 +1403,8 @@ export default class listBasePage extends Vue {
|
|
|
1403
1403
|
dataLangIdField: undefined,
|
|
1404
1404
|
data: []
|
|
1405
1405
|
};
|
|
1406
|
+
// 原始数据副本(用于多语言对话框展示原始值)
|
|
1407
|
+
originalListData = [];
|
|
1406
1408
|
// 树名称
|
|
1407
1409
|
treeShapeName = undefined;
|
|
1408
1410
|
defaultProps = {
|
|
@@ -2188,6 +2190,8 @@ export default class listBasePage extends Vue {
|
|
|
2188
2190
|
)
|
|
2189
2191
|
.then((response) => {
|
|
2190
2192
|
this.listData = (response as any).rows;
|
|
2193
|
+
// 保存原始数据副本
|
|
2194
|
+
this.originalListData = JSON.parse(JSON.stringify((response as any).rows));
|
|
2191
2195
|
|
|
2192
2196
|
this.listQueryParams.total = Number((response as any).total);
|
|
2193
2197
|
this.contentLoading = false;
|
|
@@ -2753,8 +2757,11 @@ export default class listBasePage extends Vue {
|
|
|
2753
2757
|
//this.setOpMenuEnable();
|
|
2754
2758
|
this.currentEntities = selection;
|
|
2755
2759
|
this.setOpMenuEnable();
|
|
2756
|
-
// 更新多语言配置的数据
|
|
2757
|
-
this.
|
|
2760
|
+
// 更新多语言配置的数据 - 使用原始数据而不是已翻译的数据
|
|
2761
|
+
const selectedOriginalData = this.originalListData.filter(item =>
|
|
2762
|
+
selection.some(selected => selected[this.multiLanguageConfig.dataLangIdField] === item[this.multiLanguageConfig.dataLangIdField])
|
|
2763
|
+
);
|
|
2764
|
+
this.multiLanguageConfig.data = selectedOriginalData;
|
|
2758
2765
|
}
|
|
2759
2766
|
// 表单重置
|
|
2760
2767
|
reset() {
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<base-dialog
|
|
3
3
|
:visible.sync="visible"
|
|
4
4
|
width="960px"
|
|
5
|
-
:title="t('
|
|
5
|
+
:title="t('common.employeeSelectTitle')"
|
|
6
6
|
append-to-body
|
|
7
7
|
@on-confirm="handleConfirm"
|
|
8
8
|
@on-cancel="handleCancel"
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
>
|
|
19
19
|
<el-row class="mb8">
|
|
20
20
|
<el-col :span="8">
|
|
21
|
-
<el-form-item :label="t('
|
|
22
|
-
<el-select v-model="listQueryParams.siteId" :placeholder="t('
|
|
21
|
+
<el-form-item :label="t('common.site')" prop="siteId">
|
|
22
|
+
<el-select v-model="listQueryParams.siteId" :placeholder="t('common.pleaseSelect')" @change="siteChangeEvent" :disabled="siteDisabled">
|
|
23
23
|
<el-option
|
|
24
24
|
v-for="item in siteOptions"
|
|
25
25
|
:key="item.id"
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
</el-form-item>
|
|
32
32
|
</el-col>
|
|
33
33
|
<el-col :span="8">
|
|
34
|
-
<el-form-item :label="t('
|
|
34
|
+
<el-form-item :label="t('common.deptName')" prop="deptId">
|
|
35
35
|
<el-cascader
|
|
36
36
|
v-model="listQueryParams.deptId"
|
|
37
37
|
:options="deptOptions"
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
</el-form-item>
|
|
46
46
|
</el-col>
|
|
47
47
|
<el-col :span="8">
|
|
48
|
-
<el-form-item :label="t('
|
|
49
|
-
<el-select v-model="listQueryParams.postId" :placeholder="t('
|
|
48
|
+
<el-form-item :label="t('common.postName')" prop="postId">
|
|
49
|
+
<el-select v-model="listQueryParams.postId" :placeholder="t('common.pleaseSelect')" clearable>
|
|
50
50
|
<el-option
|
|
51
51
|
v-for="item in postOptions"
|
|
52
52
|
:key="item.postId"
|
|
@@ -60,12 +60,12 @@
|
|
|
60
60
|
</el-row>
|
|
61
61
|
<el-row class="mb8">
|
|
62
62
|
<el-col :span="8">
|
|
63
|
-
<el-form-item :label="t('
|
|
63
|
+
<el-form-item :label="t('common.employeeNo')" prop="employeeNo">
|
|
64
64
|
<el-input v-model="listQueryParams.employeeNo" clearable/>
|
|
65
65
|
</el-form-item>
|
|
66
66
|
</el-col>
|
|
67
67
|
<el-col :span="8">
|
|
68
|
-
<el-form-item :label="t('
|
|
68
|
+
<el-form-item :label="t('common.employeeName')" prop="employeeName">
|
|
69
69
|
<el-input v-model="listQueryParams.employeeName" clearable/>
|
|
70
70
|
</el-form-item>
|
|
71
71
|
</el-col>
|
|
@@ -76,13 +76,13 @@
|
|
|
76
76
|
icon="el-icon-search"
|
|
77
77
|
size="mini"
|
|
78
78
|
@click="handleQuery"
|
|
79
|
-
>{{ t('
|
|
79
|
+
>{{ t('common.query') }}
|
|
80
80
|
</el-button>
|
|
81
81
|
<el-button
|
|
82
82
|
icon="el-icon-refresh"
|
|
83
83
|
size="mini"
|
|
84
84
|
@click="resetQuery"
|
|
85
|
-
>{{ t('
|
|
85
|
+
>{{ t('common.reset') }}
|
|
86
86
|
</el-button>
|
|
87
87
|
</el-form-item>
|
|
88
88
|
</el-col>
|
|
@@ -103,10 +103,10 @@
|
|
|
103
103
|
@selection-change="onSelectionChange"
|
|
104
104
|
>
|
|
105
105
|
<el-table-column type="selection" min-width="50" align="center" />
|
|
106
|
-
<el-table-column prop="employeeNo" :label="t('
|
|
107
|
-
<el-table-column prop="employeeName" :label="t('
|
|
108
|
-
<el-table-column prop="deptName" :label="t('
|
|
109
|
-
<el-table-column prop="postName" :label="t('
|
|
106
|
+
<el-table-column prop="employeeNo" :label="t('common.employeeNo')" min-width="100" align="left" show-overflow-tooltip />
|
|
107
|
+
<el-table-column prop="employeeName" :label="t('common.employeeName')" min-width="100" align="left" show-overflow-tooltip />
|
|
108
|
+
<el-table-column prop="deptName" :label="t('common.deptName')" min-width="100" align="left" show-overflow-tooltip/>
|
|
109
|
+
<el-table-column prop="postName" :label="t('common.postName')" min-width="100" align="left" show-overflow-tooltip/>
|
|
110
110
|
</el-table>
|
|
111
111
|
<pagination
|
|
112
112
|
:total="listQueryParams.total"
|
|
@@ -184,11 +184,7 @@ export default {
|
|
|
184
184
|
deptOptionIds: [],
|
|
185
185
|
siteOptions: [],
|
|
186
186
|
postOptions: [],
|
|
187
|
-
rules: {
|
|
188
|
-
siteId: [
|
|
189
|
-
{ required: true, message: this.t('employeeModal.placeholder.siteId'), trigger: 'blur' }
|
|
190
|
-
]
|
|
191
|
-
},
|
|
187
|
+
rules: {},
|
|
192
188
|
relatedDeptId: undefined
|
|
193
189
|
}
|
|
194
190
|
},
|
|
@@ -196,9 +192,17 @@ export default {
|
|
|
196
192
|
watch: {},
|
|
197
193
|
mounted() {},
|
|
198
194
|
created() {
|
|
195
|
+
this.initRules()
|
|
199
196
|
this.init()
|
|
200
197
|
},
|
|
201
198
|
methods: {
|
|
199
|
+
initRules() {
|
|
200
|
+
this.rules = {
|
|
201
|
+
siteId: [
|
|
202
|
+
{ required: true, message: this.t('common.pleaseSelectSite'), trigger: 'blur' }
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
},
|
|
202
206
|
async init() {
|
|
203
207
|
if (this.siteId) {
|
|
204
208
|
this.$set(this.listQueryParams, "siteId", this.siteId)
|
|
@@ -261,7 +265,7 @@ export default {
|
|
|
261
265
|
},
|
|
262
266
|
getList() {
|
|
263
267
|
if (!this.relatedDeptId) {
|
|
264
|
-
this.msgError(this.t('
|
|
268
|
+
this.msgError(this.t('common.siteNotRelatedDept'));
|
|
265
269
|
return
|
|
266
270
|
}
|
|
267
271
|
this.loading = true
|
|
@@ -295,7 +299,7 @@ export default {
|
|
|
295
299
|
},
|
|
296
300
|
handleConfirm() {
|
|
297
301
|
if (!this.multipleSelection || this.multipleSelection.length === 0) {
|
|
298
|
-
this.msgError(this.t('
|
|
302
|
+
this.msgError(this.t('common.pleaseSelectOneEmployee'));
|
|
299
303
|
} else {
|
|
300
304
|
if(this.multipleChoice) {
|
|
301
305
|
this.confirm(this.multipleSelection)
|
|
@@ -315,7 +319,7 @@ export default {
|
|
|
315
319
|
if(!selectOption) return;
|
|
316
320
|
this.relatedDeptId = selectOption.relatedDeptId;
|
|
317
321
|
if(!this.relatedDeptId){
|
|
318
|
-
this.msgError(this.t('
|
|
322
|
+
this.msgError(this.t('common.siteNotRelatedDept'));
|
|
319
323
|
return;
|
|
320
324
|
}
|
|
321
325
|
this.getDept(this.relatedDeptId);
|
|
@@ -277,8 +277,8 @@
|
|
|
277
277
|
</el-col>
|
|
278
278
|
</el-row>
|
|
279
279
|
<div v-if="value && value.btnShow" class="dialog-footer">
|
|
280
|
-
<el-button type="primary" @click="submitForm"
|
|
281
|
-
<el-button @click="cancel"
|
|
280
|
+
<el-button type="primary" @click="submitForm">{{ t('common.confirm') }}</el-button>
|
|
281
|
+
<el-button @click="cancel">{{ t('common.cancel') }}</el-button>
|
|
282
282
|
</div>
|
|
283
283
|
</div>
|
|
284
284
|
</template>
|
|
@@ -405,7 +405,7 @@ export default class StandardList extends ListBasePage {
|
|
|
405
405
|
//是否显示下拉滑块
|
|
406
406
|
dropDownSliders: false,
|
|
407
407
|
//搜索框标题
|
|
408
|
-
title:
|
|
408
|
+
title: this.t('common.pleaseEnterDeptOrPost'),
|
|
409
409
|
};
|
|
410
410
|
//操作菜单设定
|
|
411
411
|
opMenus = [
|