n20-common-lib 3.2.54 → 3.2.56

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 (119) hide show
  1. package/nstc-g6/components/Calendar/src/main.vue +1 -1
  2. package/nstc-g6/components/Form/AutocompleteCustom/index.vue +3 -1
  3. package/nstc-g6/components/Form/BusinessSpecific/InputWithUnit.vue +5 -4
  4. package/nstc-g6/components/Form/BusinessSpecific/SelectTreeDialog.vue +18 -15
  5. package/nstc-g6/components/Form/Component.vue +1 -1
  6. package/nstc-g6/components/Form/ComponentSecond.vue +1 -1
  7. package/nstc-g6/components/Form/DatepickerCustom/index.vue +3 -3
  8. package/nstc-g6/components/Form/InputAndDialog/src/main.vue +5 -4
  9. package/nstc-g6/components/Form/InputCustom/index.vue +3 -2
  10. package/nstc-g6/components/Form/IntervalinputCustom/index.vue +2 -1
  11. package/nstc-g6/components/Form/ItemSecond.vue +2 -2
  12. package/nstc-g6/components/Form/SelectAccount/src/main.vue +9 -8
  13. package/nstc-g6/components/Form/SelectAndDialog/src/main.vue +5 -4
  14. package/nstc-g6/components/Form/SelectCashFlow/src/main.vue +7 -6
  15. package/nstc-g6/components/Form/SelectCustom/index.vue +3 -2
  16. package/nstc-g6/components/Form/SelectSubject/src/main.vue +8 -7
  17. package/nstc-g6/components/Form/SelectindialogCustom/index.vue +3 -2
  18. package/nstc-g6/components/Form/UploadCustom/index.vue +4 -3
  19. package/nstc-g6/components/Form/configs.js +2 -1
  20. package/nstc-g6/components/Form/configsSecond.js +2 -1
  21. package/nstc-g6/components/Form/payeePersonSelect/src/main.vue +15 -18
  22. package/nstc-g6/components/FormGroup/src/main.vue +9 -6
  23. package/nstc-g6/components/FormGroup/src/validate.js +3 -1
  24. package/nstc-g6/components/InputTag/InputTag.vue +1 -1
  25. package/nstc-g6/components/NstcConfirm/NstcConfirm.vue +5 -4
  26. package/nstc-g6/components/NstcDialog/NstcDialog.vue +5 -2
  27. package/nstc-g6/components/NstcDialogTable/NstcDialogTable.vue +5 -3
  28. package/nstc-g6/components/NstcDropdownTree/NstcDropdownTree.vue +5 -4
  29. package/nstc-g6/components/NstcElectronicFile/NstcElectronicFile.vue +32 -30
  30. package/nstc-g6/components/NstcExcelCustomImport/NstcExcelCustomImport.vue +17 -15
  31. package/nstc-g6/components/NstcExcelExport/NstcExcelExport.vue +3 -2
  32. package/nstc-g6/components/NstcExcelImport/NstcExcelImport.vue +18 -16
  33. package/nstc-g6/components/NstcExcelImportN/NstcExcelImportN.vue +17 -15
  34. package/nstc-g6/components/NstcFileUpload/NstcFileUpload.vue +39 -37
  35. package/nstc-g6/components/NstcForm/AutocompleteCustom/index.vue +3 -1
  36. package/nstc-g6/components/NstcForm/BusinessSpecific/InputWithUnit.vue +5 -4
  37. package/nstc-g6/components/NstcForm/BusinessSpecific/SelectTreeDialog.vue +16 -15
  38. package/nstc-g6/components/NstcForm/Component.vue +1 -1
  39. package/nstc-g6/components/NstcForm/ComponentSecond.vue +1 -1
  40. package/nstc-g6/components/NstcForm/DatepickerCustom/index.vue +3 -3
  41. package/nstc-g6/components/NstcForm/InputAndDialog/NstcInputAndDialog.vue +5 -4
  42. package/nstc-g6/components/NstcForm/InputCustom/index.vue +3 -2
  43. package/nstc-g6/components/NstcForm/IntervalInputCustom/index.vue +2 -1
  44. package/nstc-g6/components/NstcForm/ItemSecond.vue +2 -2
  45. package/nstc-g6/components/NstcForm/SelectAccount/NstcSelectAccount.vue +11 -10
  46. package/nstc-g6/components/NstcForm/SelectAndDialog/NstcSelectAndDialog.vue +5 -4
  47. package/nstc-g6/components/NstcForm/SelectCashFlow/NstcSelectCashFlow.vue +9 -8
  48. package/nstc-g6/components/NstcForm/SelectCustom/index.vue +3 -2
  49. package/nstc-g6/components/NstcForm/SelectSubject/NstcSelectSubject.vue +10 -9
  50. package/nstc-g6/components/NstcForm/SelectindialogCustom/index.vue +4 -3
  51. package/nstc-g6/components/NstcForm/UploadCustom/index.vue +4 -3
  52. package/nstc-g6/components/NstcForm/configs.js +2 -1
  53. package/nstc-g6/components/NstcForm/configsSecond.js +2 -1
  54. package/nstc-g6/components/NstcForm/payeePersonSelect/NstcPayeePerson.vue +15 -14
  55. package/nstc-g6/components/NstcPagination/NstcPagination.vue +9 -7
  56. package/nstc-g6/components/NstcScreenFull/NstcScreenFull.vue +3 -1
  57. package/nstc-g6/components/NstcSelectTree/NstcSelectTree.vue +6 -5
  58. package/nstc-g6/components/NstcSelectTreeList/NstcSelectTreeList.vue +4 -3
  59. package/nstc-g6/components/NstcTable/NstcTable.vue +3 -2
  60. package/nstc-g6/components/NstcTableSet/NstcTableSet.vue +16 -14
  61. package/nstc-g6/components/NstcThemePicker/NstcThemePicker.vue +3 -1
  62. package/nstc-g6/components/NstcWorkBench/NstcWorkBench.vue +36 -32
  63. package/nstc-g6/components/Search/NstcSearch.vue +8 -6
  64. package/nstc-g6/components/approvelTwo/main.vue +6 -5
  65. package/nstc-g6/components/approvelTwo/progress.vue +2 -2
  66. package/nstc-g6/index.js +3 -1
  67. package/nstc-g6/utils/dateAndValidator.js +8 -6
  68. package/nstc-g6/utils/vendor/Export2Zip.js +2 -1
  69. package/package.json +1 -1
  70. package/src/components/ApprovalButtons/index.vue +2 -4
  71. package/src/components/ApprovalButtons/indexApp.vue +1 -1
  72. package/src/components/ApprovalButtons/selectSpr.vue +3 -3
  73. package/src/components/ApprovalButtons/showOtherAttr.vue +1 -1
  74. package/src/components/ApprovalCard/index.vue +4 -4
  75. package/src/components/ApprovalRecord/approvalImg.vue +2 -1
  76. package/src/components/AttachmentPass/index.vue +1 -1
  77. package/src/components/DateChoose/index.vue +3 -3
  78. package/src/components/DateSelect/index.vue +1 -1
  79. package/src/components/DateSelect/quarterDatePicker.vue +5 -5
  80. package/src/components/DynamicField/DynamicFieldOptions.vue +4 -4
  81. package/src/components/DynamicField/tableList.vue +1 -1
  82. package/src/components/ElectronicArchive/index.vue +1 -1
  83. package/src/components/FileUploadTable/index.vue +89 -35
  84. package/src/components/LoginSetting/index.vue +19 -9
  85. package/src/components/LoginTemporary/form.vue +2 -4
  86. package/src/components/LoginTemporary/index.vue +1 -1
  87. package/src/components/LoginTemporary/retrievePw.vue +8 -8
  88. package/src/components/Pivot/ChartView.vue +1 -1
  89. package/src/components/Pivot/TableView.vue +1 -1
  90. package/src/components/Pivot/index.vue +11 -7
  91. package/src/components/ProFilterView/index.vue +4 -3
  92. package/src/components/SelectDatePickerPro/halfYearPicker.vue +4 -4
  93. package/src/components/SelectDatePickerPro/index.vue +1 -1
  94. package/src/components/SelectDatePickerPro/quarterDatePicker.vue +5 -5
  95. package/src/components/TableSetSize/index.vue +2 -2
  96. package/src/components/Upload/index.vue +1 -1
  97. package/src/components/operatingStatus/index.vue +1 -1
  98. package/src/components/v3/UploadList/index.vue +1 -1
  99. package/src/i18n.json +802 -4
  100. package/src/plugins/Print/print-js/src/js/init.js +2 -1
  101. package/src/plugins/SetMenuTree/setmenutree.vue +3 -3
  102. package/src/plugins/SetMenuTree/utils.js +2 -1
  103. package/src/plugins/Sign/Itrus/index.js +12 -9
  104. package/src/plugins/Sign/Itrus/sign_3720.js +13 -8
  105. package/src/plugins/Sign/NetSM3/index.js +14 -11
  106. package/src/plugins/Sign/NetV3/index.js +17 -16
  107. package/src/plugins/Sign/SkfSign/index.js +14 -11
  108. package/src/plugins/Sign/bjca/index.js +21 -18
  109. package/src/plugins/Sign/cfca/index.js +10 -9
  110. package/src/plugins/Sign/hnca/index.js +11 -11
  111. package/src/plugins/Sign/index.js +2 -1
  112. package/src/plugins/Sign/kySign/index.js +13 -10
  113. package/src/plugins/Sign/netca/index.js +8 -7
  114. package/src/plugins/Sign/sdca/index.js +16 -15
  115. package/src/plugins/Sign/sign.js +13 -10
  116. package/src/plugins/Sign/signV3/sign.js +17 -14
  117. package/src/plugins/Sign/sign_back.js +13 -10
  118. package/src/utils/xls2json.js +2 -1
  119. package/src/utils/xlsx2json.js +2 -1
@@ -32,11 +32,15 @@
32
32
  :height="height"
33
33
  border
34
34
  @selection-change="(selection) => (selectionList = selection)"
35
- @sort-change="onSortChange"
36
35
  >
37
36
  <slot name="selection-column">
38
37
  <el-table-column type="selection" width="50" align="center" />
39
38
  </slot>
39
+ <el-table-column :label="'排序' | $lc" width="50" align="center">
40
+ <template slot-scope="{ row }">
41
+ <i class="n20-icon-tuodong file-upload-table__drag-handle" :data-row-key="row[keys.rowKey]"></i>
42
+ </template>
43
+ </el-table-column>
40
44
  <template v-if="dataPorp.slotHeader">
41
45
  <el-table-column
42
46
  v-for="item in dataPorp.slotHeader"
@@ -320,13 +324,15 @@
320
324
  </template>
321
325
 
322
326
  <script>
323
- import aiCheckDialog from './aiCheckDialog.vue'
324
- import getJsonc from '../../assets/getJsonc.js'
325
327
  import _axios from 'axios'
326
328
  import dayjs from 'dayjs'
329
+ import Sortable from 'sortablejs'
330
+ import 'viewerjs/dist/viewer.css'
327
331
  import XEUtils from 'xe-utils'
328
332
 
329
- import 'viewerjs/dist/viewer.css'
333
+ import aiCheckDialog from './aiCheckDialog.vue'
334
+
335
+ import getJsonc from '../../assets/getJsonc.js'
330
336
  import auth from '../../utils/auth'
331
337
  import axios from '../../utils/axios'
332
338
  import { $lc } from '../../utils/i18n/index'
@@ -402,7 +408,7 @@ export default {
402
408
  },
403
409
  action: {
404
410
  type: String,
405
- default: '/bems/1.0/attach'
411
+ default: '/neams/eamsbaserecord/batchSavejson'
406
412
  },
407
413
  batchPrintMethod: {
408
414
  type: Function,
@@ -510,7 +516,8 @@ export default {
510
516
  officeStatus: false,
511
517
  batchUploading: false,
512
518
  // 批量上传使用的文件数据(避免直接修改计算属性)
513
- _batchFileData: null
519
+ _batchFileData: null,
520
+ sortable: null
514
521
  }
515
522
  },
516
523
  computed: {
@@ -553,32 +560,64 @@ export default {
553
560
  },
554
561
  immediate: true,
555
562
  deep: true
563
+ },
564
+ tableKey() {
565
+ this.initSortable()
556
566
  }
557
567
  },
558
568
  mounted() {
559
569
  this.getConfiguration()
570
+ this.initSortable()
571
+ },
572
+ beforeDestroy() {
573
+ this.destroySortable()
560
574
  },
561
575
  methods: {
562
- // 点击附件名称表头排序(替代原拖动排序)
563
- onSortChange({ prop, order }) {
564
- // 仅处理附件名称列;order 为 null(取消排序)时不处理
565
- if (prop !== this.keys.name || !order) {
566
- return
567
- }
568
- const nameKey = this.keys.name
569
- // 与显示一致:去除扩展名后再比较
570
- const stripName = (v) => (v == null ? '' : String(v).replace(/\.[A-z0-9]+$/, ''))
571
- const dir = order === 'ascending' ? 1 : -1
572
- const sorted = [...this.tableData].sort(
573
- (a, b) => stripName(a[nameKey]).localeCompare(stripName(b[nameKey]), 'zh-CN', { numeric:true }) * dir
574
- )
575
- // 原地更新 tableData(沿用现有 splice 修改 prop 数组的模式)
576
- this.tableData.splice(0, this.tableData.length, ...sorted)
577
- this.$emit('sort', this.tableData.slice())
578
- this.saveFileSort().catch(() => {
579
- this.$message.error($lc('附件排序保存失败'))
576
+ initSortable() {
577
+ this.$nextTick(() => {
578
+ this.destroySortable()
579
+
580
+ const $tbody = this.$refs.elTable?.$el?.querySelector('.el-table__body-wrapper > table > tbody')
581
+ if (!$tbody) {
582
+ return
583
+ }
584
+
585
+ this.sortable = Sortable.create($tbody, {
586
+ handle: '.file-upload-table__drag-handle',
587
+ ghostClass: 'file-upload-table__sortable-ghost',
588
+ setData(dataTransfer) {
589
+ dataTransfer.setData('Text', '')
590
+ },
591
+ onEnd: ({ oldIndex, newIndex }) => {
592
+ if (
593
+ oldIndex === newIndex ||
594
+ oldIndex === undefined ||
595
+ newIndex === undefined ||
596
+ oldIndex < 0 ||
597
+ newIndex < 0
598
+ ) {
599
+ return
600
+ }
601
+
602
+ const targetRow = this.tableData.splice(oldIndex, 1)[0]
603
+ if (!targetRow) {
604
+ return
605
+ }
606
+ this.tableData.splice(newIndex, 0, targetRow)
607
+ this.$emit('sort', this.tableData.slice())
608
+ this.saveFileSort().catch(() => {
609
+ this.$message.error($lc('附件排序保存失败'))
610
+ })
611
+ }
612
+ })
580
613
  })
581
614
  },
615
+ destroySortable() {
616
+ if (this.sortable) {
617
+ this.sortable.destroy()
618
+ this.sortable = null
619
+ }
620
+ },
582
621
  async saveFileSort() {
583
622
  const sortList = this.tableData
584
623
  .map((row, index) => ({
@@ -629,7 +668,7 @@ export default {
629
668
  })
630
669
  } else {
631
670
  if (!this.AIOptions.bussType) {
632
- this.$message.error($lc("请先配置bussType"))
671
+ this.$message.error($lc('请先配置bussType'))
633
672
  return false
634
673
  }
635
674
  let { data, code } = await axios.post(
@@ -653,7 +692,7 @@ export default {
653
692
  // ai识别
654
693
  async AiFn(row) {
655
694
  if (!this.AIOptions.bussType) {
656
- this.$message.error($lc("请先配置bussType"))
695
+ this.$message.error($lc('请先配置bussType'))
657
696
  return false
658
697
  }
659
698
  const { data, code } = await axios.post(
@@ -740,7 +779,7 @@ export default {
740
779
  if (code === 200) {
741
780
  let aDom = document.createElement('a')
742
781
  aDom.href = data
743
- aDom.download = '批量附件.pdf'
782
+ aDom.download = $lc('批量附件.pdf')
744
783
  aDom.click()
745
784
 
746
785
  this.$nextTick(() => {
@@ -822,11 +861,7 @@ export default {
822
861
  return
823
862
  }
824
863
  let placeholderIndex = this.tableData.findIndex(
825
- (item) =>
826
- item[this.keys.type] === type &&
827
- !item[this.keys.url] &&
828
- !item[this.keys.name] &&
829
- !item._name
864
+ (item) => item[this.keys.type] === type && !item[this.keys.url] && !item[this.keys.name] && !item._name
830
865
  )
831
866
  if (placeholderIndex > -1) {
832
867
  this.tableData.splice(placeholderIndex, 1)
@@ -1006,9 +1041,11 @@ export default {
1006
1041
  type: 'error',
1007
1042
  confirmButtonText: $lc('确认'),
1008
1043
  cancelButtonText: $lc('取消')
1009
- }).then(() => {
1010
- this.$emit('delete-rows', this.selectionList)
1011
- }).catch(() => undefined)
1044
+ })
1045
+ .then(() => {
1046
+ this.$emit('delete-rows', this.selectionList)
1047
+ })
1048
+ .catch(() => undefined)
1012
1049
  },
1013
1050
 
1014
1051
  async getFileInfo(row, type) {
@@ -1231,4 +1268,21 @@ export default {
1231
1268
  right: 46px;
1232
1269
  top: 10px;
1233
1270
  }
1271
+
1272
+ .file-upload-table__drag-handle {
1273
+ display: inline-block;
1274
+ color: #909399;
1275
+ font-size: 16px;
1276
+ cursor: move;
1277
+ }
1278
+
1279
+ .file-upload-table__drag-handle:hover {
1280
+ color: #606266;
1281
+ }
1282
+
1283
+ .file-upload-table__sortable-ghost {
1284
+ opacity: 0.8;
1285
+ color: #fff !important;
1286
+ background: #42b983 !important;
1287
+ }
1234
1288
  </style>
@@ -149,7 +149,7 @@ export default {
149
149
  })
150
150
  for (const i of _this.checkedList) {
151
151
  if (!this.LOGIN_MODE) this.LOGIN_MODE = i
152
- else this.LOGIN_MODE += $lc(',') + i
152
+ else this.LOGIN_MODE += ',' + i
153
153
  }
154
154
  },
155
155
  getdata(list) {
@@ -158,7 +158,7 @@ export default {
158
158
  if (i.pmName === 'LOGIN_MODE') {
159
159
  _this.LOGIN_MODE = i.pmValue
160
160
  _this.LOGIN_MODE_ID = i.pmId
161
- _this.checkedList = i.pmValue.split($lc(','))
161
+ _this.checkedList = i.pmValue.split(',')
162
162
  } else if (i.pmName === 'MAIN_PAGE_TEXT') {
163
163
  _this.loginModel.MAIN_PAGE_TEXT = i.pmValue
164
164
  _this.MAIN_PAGE_TEXT_ID = i.pmId
@@ -201,7 +201,9 @@ export default {
201
201
  if (type) {
202
202
  if (this.imgSize < size) {
203
203
  await this.$confirm(
204
- `当前图片尺寸大于建议大小(${screen.width}*${screen.height}),将以填充的方式进行处理,是否继续?`,
204
+ `${$lc('当前图片尺寸大于建议大小(')}${screen.width}*${screen.height}${$lc(
205
+ '),将以填充的方式进行处理,是否继续?'
206
+ )}`,
205
207
  $lc('提示'),
206
208
  {
207
209
  type: 'warning'
@@ -210,7 +212,9 @@ export default {
210
212
  this.$refs.bgUpload.$refs.upload.submit()
211
213
  } else if (this.imgSize >= size) {
212
214
  await this.$confirm(
213
- `当前图片尺寸小于建议大小(${screen.width}*${screen.height}),可能会发生失真,是否继续?`,
215
+ `${$lc('当前图片尺寸小于建议大小(')}${screen.width}*${screen.height}${$lc(
216
+ '),可能会发生失真,是否继续?'
217
+ )}`,
214
218
  $lc('提示'),
215
219
  {
216
220
  type: 'warning'
@@ -221,7 +225,9 @@ export default {
221
225
  } else {
222
226
  if (this.logoSize < size) {
223
227
  await this.$confirm(
224
- `当前图片尺寸大于建议大小(108*30px),将以填充的方式进行处理,是否继续?`,
228
+ `${$lc('当前图片尺寸大于建议大小(')}108*30px${$lc(
229
+ '),将以填充的方式进行处理,是否继续?'
230
+ )}`,
225
231
  $lc('提示'),
226
232
  {
227
233
  type: 'warning'
@@ -229,9 +235,13 @@ export default {
229
235
  )
230
236
  this.$refs.logUpload.$refs.upload.submit()
231
237
  } else if (this.logoSize >= size) {
232
- await this.$confirm(`当前图片尺寸小于建议大小(108*30px),可能会发生失真,是否继续?`, $lc('提示'), {
233
- type: 'warning'
234
- })
238
+ await this.$confirm(
239
+ `${$lc('当前图片尺寸小于建议大小(')}108*30px${$lc('),可能会发生失真,是否继续?')}`,
240
+ $lc('提示'),
241
+ {
242
+ type: 'warning'
243
+ }
244
+ )
235
245
  this.$refs.logUpload.$refs.upload.submit()
236
246
  }
237
247
  }
@@ -317,7 +327,7 @@ export default {
317
327
  }
318
328
  for (const i of e) {
319
329
  if (!this.LOGIN_MODE) this.LOGIN_MODE = i
320
- else this.LOGIN_MODE += $lc(',') + i
330
+ else this.LOGIN_MODE += ',' + i
321
331
  }
322
332
  }
323
333
  }
@@ -403,9 +403,7 @@ export default {
403
403
  { loading: this.loadingSub }
404
404
  )
405
405
  .then(() => {
406
- this.$message.success(
407
- `${typeName}: ${this.form[type]} 验证码发送成功`
408
- )
406
+ this.$message.success(`${typeName}: ${this.form[type]} ${$lc('验证码发送成功')}`)
409
407
  })
410
408
  .catch(() => {
411
409
  clearTimeout(this.setTimeNum)
@@ -470,7 +468,7 @@ export default {
470
468
  })
471
469
  } else {
472
470
  // 当重新请求大于3次,抛出错误
473
- this.$message.warning(`登录失败,请重新登录!`)
471
+ this.$message.warning($lc('登录失败,请重新登录!'))
474
472
  this.getAzCount = 0
475
473
  reject()
476
474
  }
@@ -44,7 +44,7 @@
44
44
  <a
45
45
  class="login-form-download el-icon-bottom"
46
46
  href="https://down.360safe.com/se/360se13.1.5101.0.exe"
47
- download="启程浏览器.exe"
47
+ :download="`${$lc('启程浏览器')}.exe`"
48
48
  >{{ '下载' | $lc }}</a
49
49
  >
50
50
  <span>{{ '启程浏览器' | $lc }}</span>
@@ -31,12 +31,12 @@
31
31
  <el-form-item class="m-b" :label="'账号' | $lc">
32
32
  <el-input v-model="username" :placeholder="'请输入账号' | $lc" />
33
33
  </el-form-item>
34
- <el-form-item class="m-b" label="uk验证" prop="code">
34
+ <el-form-item class="m-b" :label="$lc('UK验证')" prop="code">
35
35
  <br />
36
36
  <div v-if="checkCert" class="filed-tips">{{ '该账号未开启UK校验!' | $lc }}</div>
37
37
  <div v-if="ukCode !== 1">
38
38
  <div :class="ukCode ? 'success-tips' : 'filed-tips'">
39
- {{ ukCode ? '验证成功!' : '验证失败!' }}
39
+ {{ $lc(ukCode ? '验证成功!' : '验证失败!') }}
40
40
  </div>
41
41
  <div v-show="!ukCode" class="filed-tips">{{ '自助找回密码失败,请联系管理员' | $lc }}</div>
42
42
  </div>
@@ -79,19 +79,19 @@ export default {
79
79
  const lengthToFirstPassword = (rule, value, callback) => {
80
80
  if (value) {
81
81
  if (this.dataForm.maxLength < value.length || this.dataForm.minLength > value.length) {
82
- callback(new Error(`密码长度为${this.dataForm.minLength}-${this.dataForm.maxLength}!`))
82
+ callback(new Error(`${$lc('密码长度为')}${this.dataForm.minLength}-${this.dataForm.maxLength}!`))
83
83
  } else if (
84
84
  Number(this.dataForm.passwordStrength) === 2 &&
85
85
  !/^(((?=.*[0-9])(?=.*[a-zA-Z])|(?=.*[0-9])(?=.*[^\s0-9a-zA-Z])|(?=.*[a-zA-Z])(?=.*[^\s0-9a-zA-Z]))[^\s]+)$/.test(
86
86
  value
87
87
  )
88
88
  ) {
89
- callback(new Error(`密码至少包括数字,字母,特殊符号其中两种`))
89
+ callback(new Error($lc('密码至少包括数字,字母,特殊符号其中两种')))
90
90
  } else if (
91
91
  Number(this.dataForm.passwordStrength) === 3 &&
92
92
  !/^(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*])[\da-zA-Z~!@#$%^&*]{0,}$/.test(value)
93
93
  ) {
94
- callback(new Error(`密码同时包括包括数字,字母,特殊符号三种`))
94
+ callback(new Error($lc('密码同时包括包括数字,字母,特殊符号三种')))
95
95
  } else {
96
96
  callback()
97
97
  }
@@ -215,12 +215,12 @@ export default {
215
215
  noMsg: true
216
216
  })
217
217
  .then(() => {
218
- this.$message.success(`${typeName}: ${this.updateForm[type]} 验证码发送成功`)
218
+ this.$message.success(`${typeName}: ${this.updateForm[type]} ${$lc('验证码发送成功')}`)
219
219
  })
220
220
  .catch(() => {
221
221
  clearTimeout(this.setTimeNum)
222
222
  this.codeNum = $lc('验证码')
223
- this.$message.warning(`${typeName}: ${this.updateForm[type]} 验证码发送失败`)
223
+ this.$message.warning(`${typeName}: ${this.updateForm[type]} ${$lc('验证码发送失败')}`)
224
224
  })
225
225
  }
226
226
  })
@@ -268,7 +268,7 @@ export default {
268
268
  data.sign = this.sign
269
269
  data.certDn = this.certDn
270
270
  axios.post(`/bems/prod_1.0/uas/api/authorization/password/reset`, data, { loading: false }).then((res) => {
271
- this.$message.success(`密码更新成功!`)
271
+ this.$message.success($lc('密码更新成功!'))
272
272
  this.type = 'phone'
273
273
  })
274
274
  })
@@ -6,7 +6,7 @@
6
6
  <div ref="chartContainer" class="chart-container"></div>
7
7
  </div>
8
8
  <div v-else class="empty-state">
9
- <Empty type="noData2" :height="200" :width="200" content="暂无数据" />
9
+ <Empty type="noData2" :height="200" :width="200" :content="$lc('暂无数据')" />
10
10
  </div>
11
11
  </div>
12
12
  </template>
@@ -87,7 +87,7 @@
87
87
 
88
88
  <!-- 空状态 -->
89
89
  <template #empty>
90
- <Empty type="noData2" :height="200" :width="200" content="暂无数据" />
90
+ <Empty type="noData2" :height="200" :width="200" :content="$lc('暂无数据')" />
91
91
  </template>
92
92
  </vxe-table>
93
93
  </div>
@@ -617,7 +617,7 @@ export default {
617
617
  const metrics = (this.currentReport.metrics || []).filter((m) => m && m.prop)
618
618
  if (metrics.length === 0) return ''
619
619
  const firstMetric = this.columns.find((c) => c.prop === metrics[0].prop)
620
- return firstMetric ? `${firstMetric.label}(人民币)` : ''
620
+ return firstMetric ? `${firstMetric.label}${$lc('(人民币)')}` : ''
621
621
  },
622
622
 
623
623
  // 获取第一个维度标签
@@ -682,7 +682,9 @@ export default {
682
682
  html += `<div style="display:flex;align-items:center;justify-content:space-between;gap:24px;margin-top:4px;">`
683
683
  html += `<div style="display:flex;align-items:center;gap:8px;">`
684
684
  html += `<span style="font-size:12px;color:#1d2129;font-weight:600;font-family:'Open Sans',sans-serif;">${value}</span>`
685
- html += `<span style="font-size:12px;color:#4e5969;font-family:'PingFang SC',sans-serif;">${groupCount} 笔</span>`
685
+ html += `<span style="font-size:12px;color:#4e5969;font-family:'PingFang SC',sans-serif;">${groupCount} ${$lc(
686
+ '笔'
687
+ )}</span>`
686
688
  html += `</div>`
687
689
  html += `</div>`
688
690
 
@@ -704,7 +706,9 @@ export default {
704
706
  html += `</div>`
705
707
  html += `<div style="display:flex;align-items:center;gap:8px;">`
706
708
  html += `<span style="font-size:12px;color:#1d2129;font-weight:600;font-family:'Open Sans',sans-serif;">${value}</span>`
707
- html += `<span style="font-size:12px;color:#4e5969;font-family:'PingFang SC',sans-serif;">${groupCount} 笔</span>`
709
+ html += `<span style="font-size:12px;color:#4e5969;font-family:'PingFang SC',sans-serif;">${groupCount} ${$lc(
710
+ '笔'
711
+ )}</span>`
708
712
  html += `</div>`
709
713
  html += `</div>`
710
714
  })
@@ -1236,7 +1240,7 @@ export default {
1236
1240
  // 添加新报表
1237
1241
  addNewReport() {
1238
1242
  const newReport = this.getDefaultReport()
1239
- newReport.name = `报表清单 ${this.reportList.length + 1}`
1243
+ newReport.name = `${$lc('报表清单')} ${this.reportList.length + 1}`
1240
1244
  this.reportList.push(newReport)
1241
1245
  this.currentReportIndex = this.reportList.length - 1
1242
1246
  this.saveToStorage()
@@ -1269,9 +1273,9 @@ export default {
1269
1273
  },
1270
1274
 
1271
1275
  handleDeleteReport(report) {
1272
- this.$confirm(`确定要删除报表"${report.name}"吗?`, $lc("提示"), {
1273
- confirmButtonText: $lc("确定"),
1274
- cancelButtonText: $lc("取消"),
1276
+ this.$confirm($lc('确定要删除报表“NAME”吗?').replace('NAME', report.name), $lc('提示'), {
1277
+ confirmButtonText: $lc('确定'),
1278
+ cancelButtonText: $lc('取消'),
1275
1279
  type: 'warning'
1276
1280
  })
1277
1281
  .then(() => {
@@ -58,10 +58,11 @@
58
58
  <i class="v3-icon-find"></i>
59
59
  <div style="margin-left: 8px">
60
60
  {{
61
- `视图数据范围(${
61
+ $lc('视图数据范围(N)').replace(
62
+ 'N',
62
63
  (selectItem.keyIds && selectItem.keyIds.length) ||
63
- (this.conditionGroups && this.conditionGroups.length)
64
- })`
64
+ (this.conditionGroups && this.conditionGroups.length)
65
+ )
65
66
  }}
66
67
  </div>
67
68
  </div>
@@ -11,14 +11,14 @@
11
11
  <div class="el-date-picker__header el-date-picker__header--bordered">
12
12
  <button
13
13
  type="button"
14
- aria-label="前一年"
14
+ :aria-label="$lc('前一年')"
15
15
  class="el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left"
16
16
  @click="prev"
17
17
  ></button>
18
18
  <span role="button" class="el-date-picker__header-label" @click="handleYear">{{ year }}{{ '年' | $lc }}</span>
19
19
  <button
20
20
  type="button"
21
- aria-label="后一年"
21
+ :aria-label="$lc('后一年')"
22
22
  class="el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right"
23
23
  @click="next"
24
24
  ></button>
@@ -104,7 +104,7 @@ export default {
104
104
  const [, year, startMonth] = startDateMatch
105
105
  this.year = year
106
106
  this.halfYear = startMonth === '01' ? 1 : 2
107
- this.showValue = `${year} 年 ${startMonth === '01' ? $lc("上半年") : $lc("下半年")}`
107
+ this.showValue = `${year} ${$lc('')} ${startMonth === '01' ? $lc("上半年") : $lc("下半年")}`
108
108
  } else {
109
109
  this.showValue = ''
110
110
  }
@@ -133,7 +133,7 @@ export default {
133
133
  this.halfYear = i + 1
134
134
  let arr = [`${this.year}-${i === 0 ? '01' : '07'}`, `${this.year}-${i === 0 ? '06' : '12'}`]
135
135
  this.showHalfYear = false
136
- this.showValue = `${this.year} 年 ${i === 0 ? $lc("上半年") : $lc("下半年")}`
136
+ this.showValue = `${this.year} ${$lc('')} ${i === 0 ? $lc("上半年") : $lc("下半年")}`
137
137
  // 6月最后一天是30 12月最后一天是31
138
138
  this.$emit('input', { startDate: arr[0] + '-01', endDate: i === 0 ? arr[1] + '-30' : arr[1] + '-31' })
139
139
  this.$emit('change', { startDate: arr[0] + '-01', endDate: i === 0 ? arr[1] + '-30' : arr[1] + '-31' })
@@ -19,7 +19,7 @@
19
19
  v-if="type === $lc('周') && selectList.includes(type)"
20
20
  key="week"
21
21
  v-model="week"
22
- format="yyyy 第 WW 周"
22
+ :format="$lc('yyyy 第 WW 周')"
23
23
  type="week"
24
24
  v-bind="$attrs"
25
25
  :picker-options="attrs"
@@ -12,14 +12,14 @@
12
12
  <div class="el-date-picker__header el-date-picker__header--bordered">
13
13
  <button
14
14
  type="button"
15
- aria-label="前一年"
15
+ :aria-label="$lc('前一年')"
16
16
  class="el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left"
17
17
  @click="prev"
18
18
  ></button>
19
19
  <span role="button" class="el-date-picker__header-label" @click="handleYear">{{ year }}{{ '年' | $lc }}</span>
20
20
  <button
21
21
  type="button"
22
- aria-label="后一年"
22
+ :aria-label="$lc('后一年')"
23
23
  class="el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right"
24
24
  @click="next"
25
25
  ></button>
@@ -177,9 +177,9 @@ export default {
177
177
  },
178
178
  get() {
179
179
  if (this.value.startDate && this.value.endDate) {
180
- return `${dayjs(this.value.startDate).year()} 年 第${this.getChinese(
180
+ return `${dayjs(this.value.startDate).year()} ${$lc('')} ${$lc('第')}${this.getChinese(
181
181
  dayjs(this.value.endDate).quarter()
182
- )}季度`
182
+ )}${$lc('季度')}`
183
183
  } else {
184
184
  return ''
185
185
  }
@@ -233,7 +233,7 @@ export default {
233
233
  that.season = i + 1
234
234
  let arr = that.valueArr[i].split(' - ')
235
235
  that.showSeason = false
236
- this.showValue = `${this.year} 年 ${this.season} 季度`
236
+ this.showValue = `${this.year} ${$lc('')} ${this.season} ${$lc('季度')}`
237
237
  that.$emit('input', { startDate: this.year + '-' + arr[0], endDate: this.year + '-' + arr[1] })
238
238
  that.$emit('change', { startDate: this.year + '-' + arr[0], endDate: this.year + '-' + arr[1] }) // 每次选择时间都将当前选择时间发送到父组件
239
239
  },
@@ -8,8 +8,8 @@
8
8
  @mouseleave="hoverIconKey = null"
9
9
  ></i>
10
10
  <el-dropdown-menu slot="dropdown">
11
- <el-dropdown-item command="small">{{ _lang === 'zh' ? '默认' : 'small' }}</el-dropdown-item>
12
- <el-dropdown-item command="mini">{{ _lang === 'zh' ? '紧凑' : 'mini' }}</el-dropdown-item>
11
+ <el-dropdown-item command="small">{{ $lc('默认') }}</el-dropdown-item>
12
+ <el-dropdown-item command="mini">{{ $lc('紧凑') }}</el-dropdown-item>
13
13
  </el-dropdown-menu>
14
14
  </el-dropdown>
15
15
  </template>
@@ -245,7 +245,7 @@ export default {
245
245
  sizeNum = parseFloat(size)
246
246
  }
247
247
  if (file.size > sizeNum) {
248
- this.$message.error($lc('文件大小不能超过 ') + size + '!')
248
+ this.$message.error($lc('文件大小不能超过') + ' ' + size + '!')
249
249
  return false
250
250
  }
251
251
  }
@@ -3,7 +3,7 @@
3
3
  <el-carousel-item v-for="tip in tips" :key="tip.id">
4
4
  <div v-if="tip.isShow === '1'" v-title:br="list" :class="`tip_color_${tip.style || 'default'}`">
5
5
  {{ tip.busNname }}{{ enumData[tip.busState] }}{{ tip.busCode.includes('CENTER') ? '(' + tip.currency + ')' : ''
6
- }}{{ tip.isError === '1' ? '(有异常)' : '' }}
6
+ }}{{ tip.isError === '1' ? $lc('(有异常)') : '' }}
7
7
  </div>
8
8
  </el-carousel-item>
9
9
  </el-carousel>
@@ -13,7 +13,7 @@
13
13
  </div>
14
14
  <el-divider direction="vertical"></el-divider>
15
15
  <el-button type="text" class="toggle-btn" @click="toggleCollapse">
16
- {{ showAllTypes ? '收起未传类型' : '展开全部' }}
16
+ {{ $lc(showAllTypes ? '收起未传类型' : '展开全部') }}
17
17
  <i :class="['el-icon-arrow-down', { 'is-reverse': showAllTypes }]"></i>
18
18
  </el-button>
19
19
  </div>