n20-common-lib 2.22.60 → 2.22.62

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 (109) 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/AIButton/index.vue +1 -1
  71. package/src/components/ApprovalButtons/index.vue +1 -1
  72. package/src/components/ApprovalButtons/indexApp.vue +1 -1
  73. package/src/components/ApprovalButtons/selectSpr.vue +2 -2
  74. package/src/components/ApprovalButtons/showOtherAttrNew.vue +1 -1
  75. package/src/components/ApprovalRecord/approvalImg.vue +1 -1
  76. package/src/components/AttachmentPass/index.vue +1 -1
  77. package/src/components/DateSelect/index.vue +1 -1
  78. package/src/components/DateSelect/quarterDatePicker.vue +15 -12
  79. package/src/components/DynamicField/DynamicFieldOptions.vue +1 -1
  80. package/src/components/DynamicField/tableList.vue +1 -1
  81. package/src/components/ElectronicArchive/index.vue +3 -3
  82. package/src/components/FileUploadTable/FileUploadTableV3.vue +1 -1
  83. package/src/components/FileUploadTable/index.vue +95 -37
  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/SelectDatePickerPro/halfYearPicker.vue +14 -8
  89. package/src/components/SelectDatePickerPro/index.vue +1 -1
  90. package/src/components/SelectDatePickerPro/quarterDatePicker.vue +17 -13
  91. package/src/components/TableSetSize/index.vue +2 -2
  92. package/src/components/operatingStatus/index.vue +1 -1
  93. package/src/i18n.json +742 -28
  94. package/src/plugins/Print/print-js/src/js/init.js +2 -1
  95. package/src/plugins/SetMenuTree/setmenutree.vue +3 -3
  96. package/src/plugins/SetMenuTree/utils.js +2 -1
  97. package/src/plugins/Sign/Itrus/index.js +3 -1
  98. package/src/plugins/Sign/Itrus/sign_3720.js +5 -1
  99. package/src/plugins/Sign/NetSM3/index.js +3 -1
  100. package/src/plugins/Sign/SkfSign/index.js +3 -1
  101. package/src/plugins/Sign/bjca/index.js +3 -1
  102. package/src/plugins/Sign/hnca/index.js +1 -2
  103. package/src/plugins/Sign/kySign/index.js +3 -1
  104. package/src/plugins/Sign/netca/netca.base.1.1.0.js +6 -1
  105. package/src/plugins/Sign/sign.js +4 -2
  106. package/src/plugins/Sign/signV3/sign.js +4 -2
  107. package/src/plugins/Sign/sign_back.js +3 -1
  108. package/src/utils/xls2json.js +2 -1
  109. 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"
@@ -294,7 +298,7 @@
294
298
  :multiple="true"
295
299
  :show-file-list="true"
296
300
  :action="apiPrefix ? apiPrefix + action : action"
297
- :data="_batchFileData || fileData"
301
+ :data="batchFileData || fileData"
298
302
  :headers="headers"
299
303
  :accept="fileAccept"
300
304
  :size="fileSize"
@@ -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'
@@ -514,7 +520,8 @@ export default {
514
520
  officeStatus: false,
515
521
  batchUploading: false,
516
522
  // 批量上传使用的文件数据(避免直接修改计算属性)
517
- _batchFileData: null
523
+ batchFileData: null,
524
+ sortable: null
518
525
  }
519
526
  },
520
527
  computed: {
@@ -557,32 +564,65 @@ export default {
557
564
  },
558
565
  immediate: true,
559
566
  deep: true
567
+ },
568
+ tableKey() {
569
+ this.initSortable()
560
570
  }
561
571
  },
562
572
  mounted() {
563
573
  this.getConfiguration()
574
+ this.initSortable()
575
+ },
576
+ beforeDestroy() {
577
+ this.destroySortable()
564
578
  },
565
579
  methods: {
566
- // 点击附件名称表头排序(替代原拖动排序)
567
- onSortChange({ prop, order }) {
568
- // 仅处理附件名称列;order 为 null(取消排序)时不处理
569
- if (prop !== this.keys.name || !order) {
570
- return
571
- }
572
- const nameKey = this.keys.name
573
- // 与显示一致:去除扩展名后再比较
574
- const stripName = (v) => (v == null ? '' : String(v).replace(/\.[A-z0-9]+$/, ''))
575
- const dir = order === 'ascending' ? 1 : -1
576
- const sorted = [...this.tableData].sort(
577
- (a, b) => stripName(a[nameKey]).localeCompare(stripName(b[nameKey]), 'zh-CN', { numeric:true }) * dir
578
- )
579
- // 原地更新 tableData(沿用现有 splice 修改 prop 数组的模式)
580
- this.tableData.splice(0, this.tableData.length, ...sorted)
581
- this.$emit('sort', this.tableData.slice())
582
- this.saveFileSort().catch(() => {
583
- this.$message.error($lc('附件排序保存失败'))
580
+ initSortable() {
581
+ this.$nextTick(() => {
582
+ this.destroySortable()
583
+
584
+ const $tbody = this.$refs.elTable?.$el?.querySelector('.el-table__body-wrapper > table > tbody')
585
+ if (!$tbody) {
586
+ return
587
+ }
588
+
589
+ this.sortable = Sortable.create($tbody, {
590
+ handle: '.file-upload-table__drag-handle',
591
+ ghostClass: 'file-upload-table__sortable-ghost',
592
+ setData(dataTransfer) {
593
+ dataTransfer.setData('Text', '')
594
+ },
595
+ onEnd: ({ oldIndex, newIndex }) => {
596
+ if (
597
+ oldIndex === newIndex ||
598
+ oldIndex === undefined ||
599
+ newIndex === undefined ||
600
+ oldIndex < 0 ||
601
+ newIndex < 0
602
+ ) {
603
+ return
604
+ }
605
+
606
+ const targetRow = this.tableData.splice(oldIndex, 1)[0]
607
+ if (!targetRow) {
608
+ return
609
+ }
610
+ this.tableData.splice(newIndex, 0, targetRow)
611
+ // 先调用保存排序接口,确保即使 $emit 抛出异常也能执行
612
+ this.saveFileSort().catch(() => {
613
+ this.$message.error($lc('附件排序保存失败'))
614
+ })
615
+ this.$emit('sort', this.tableData.slice())
616
+ }
617
+ })
584
618
  })
585
619
  },
620
+ destroySortable() {
621
+ if (this.sortable) {
622
+ this.sortable.destroy()
623
+ this.sortable = null
624
+ }
625
+ },
586
626
  async saveFileSort() {
587
627
  const sortList = this.tableData
588
628
  .map((row, index) => ({
@@ -595,9 +635,12 @@ export default {
595
635
  return
596
636
  }
597
637
 
638
+ // 排序请求每次数据不同,跳过 axios 请求去重和 loading,
639
+ // 避免短时间内第二次拖拽排序被错误合并到第一次请求
598
640
  await axios.post(
599
641
  this.apiPrefix ? `${this.apiPrefix}/neams/eamsbaserecord/fileSort` : '/neams/eamsbaserecord/fileSort',
600
- sortList
642
+ sortList,
643
+ { loading: false }
601
644
  )
602
645
  },
603
646
  // ai校验取消
@@ -633,7 +676,7 @@ export default {
633
676
  })
634
677
  } else {
635
678
  if (!this.AIOptions.bussType) {
636
- this.$message.error($lc("请先配置bussType"))
679
+ this.$message.error($lc('请先配置bussType'))
637
680
  return false
638
681
  }
639
682
  let { data, code } = await axios.post(
@@ -657,7 +700,7 @@ export default {
657
700
  // ai识别
658
701
  async AiFn(row) {
659
702
  if (!this.AIOptions.bussType) {
660
- this.$message.error($lc("请先配置bussType"))
703
+ this.$message.error($lc('请先配置bussType'))
661
704
  return false
662
705
  }
663
706
  const { data, code } = await axios.post(
@@ -744,7 +787,7 @@ export default {
744
787
  if (code === 200) {
745
788
  let aDom = document.createElement('a')
746
789
  aDom.href = data
747
- aDom.download = '批量附件.pdf'
790
+ aDom.download = `${$lc('批量附件')}.pdf`
748
791
  aDom.click()
749
792
 
750
793
  this.$nextTick(() => {
@@ -762,7 +805,7 @@ export default {
762
805
  let fileData = this.fileData || {}
763
806
  let dto = JSON.parse(fileData.data || '{}')
764
807
  dto[this.keys.type] = this.bathType
765
- this._batchFileData = {
808
+ this.batchFileData = {
766
809
  ...fileData,
767
810
  data: JSON.stringify(dto)
768
811
  }
@@ -826,11 +869,7 @@ export default {
826
869
  return
827
870
  }
828
871
  let placeholderIndex = this.tableData.findIndex(
829
- (item) =>
830
- item[this.keys.type] === type &&
831
- !item[this.keys.url] &&
832
- !item[this.keys.name] &&
833
- !item._name
872
+ (item) => item[this.keys.type] === type && !item[this.keys.url] && !item[this.keys.name] && !item._name
834
873
  )
835
874
  if (placeholderIndex > -1) {
836
875
  this.tableData.splice(placeholderIndex, 1)
@@ -1010,9 +1049,11 @@ export default {
1010
1049
  type: 'error',
1011
1050
  confirmButtonText: $lc('确认'),
1012
1051
  cancelButtonText: $lc('取消')
1013
- }).then(() => {
1014
- this.$emit('delete-rows', this.selectionList)
1015
- }).catch(() => undefined)
1052
+ })
1053
+ .then(() => {
1054
+ this.$emit('delete-rows', this.selectionList)
1055
+ })
1056
+ .catch(() => undefined)
1016
1057
  },
1017
1058
 
1018
1059
  async getFileInfo(row, type) {
@@ -1246,4 +1287,21 @@ export default {
1246
1287
  right: 46px;
1247
1288
  top: 10px;
1248
1289
  }
1290
+
1291
+ .file-upload-table__drag-handle {
1292
+ display: inline-block;
1293
+ color: #909399;
1294
+ font-size: 16px;
1295
+ cursor: move;
1296
+ }
1297
+
1298
+ .file-upload-table__drag-handle:hover {
1299
+ color: #606266;
1300
+ }
1301
+
1302
+ .file-upload-table__sortable-ghost {
1303
+ opacity: 0.8;
1304
+ color: #fff !important;
1305
+ background: #42b983 !important;
1306
+ }
1249
1307
  </style>
@@ -150,7 +150,7 @@ export default {
150
150
  })
151
151
  for (const i of _this.checkedList) {
152
152
  if (!this.LOGIN_MODE) this.LOGIN_MODE = i
153
- else this.LOGIN_MODE += $lc(',') + i
153
+ else this.LOGIN_MODE += ',' + i
154
154
  }
155
155
  },
156
156
  getdata(list) {
@@ -159,7 +159,7 @@ export default {
159
159
  if (i.pmName === 'LOGIN_MODE') {
160
160
  _this.LOGIN_MODE = i.pmValue
161
161
  _this.LOGIN_MODE_ID = i.pmId
162
- _this.checkedList = i.pmValue.split($lc(','))
162
+ _this.checkedList = i.pmValue.split(',')
163
163
  } else if (i.pmName === 'MAIN_PAGE_TEXT') {
164
164
  _this.loginModel.MAIN_PAGE_TEXT = i.pmValue
165
165
  _this.MAIN_PAGE_TEXT_ID = i.pmId
@@ -202,7 +202,9 @@ export default {
202
202
  if (type) {
203
203
  if (this.imgSize < size) {
204
204
  await this.$confirm(
205
- `当前图片尺寸大于建议大小(${screen.width}*${screen.height}),将以填充的方式进行处理,是否继续?`,
205
+ `${$lc('当前图片尺寸大于建议大小(')}${screen.width}*${screen.height}${$lc(
206
+ '),将以填充的方式进行处理,是否继续?'
207
+ )}`,
206
208
  $lc("提示"),
207
209
  {
208
210
  type: 'warning'
@@ -211,7 +213,9 @@ export default {
211
213
  this.$refs.bgUpload.$refs.upload.submit()
212
214
  } else if (this.imgSize >= size) {
213
215
  await this.$confirm(
214
- `当前图片尺寸小于建议大小(${screen.width}*${screen.height}),可能会发生失真,是否继续?`,
216
+ `${$lc('当前图片尺寸小于建议大小(')}${screen.width}*${screen.height}${$lc(
217
+ '),可能会发生失真,是否继续?'
218
+ )}`,
215
219
  $lc("提示"),
216
220
  {
217
221
  type: 'warning'
@@ -222,7 +226,9 @@ export default {
222
226
  } else {
223
227
  if (this.logoSize < size) {
224
228
  await this.$confirm(
225
- `当前图片尺寸大于建议大小(108*30px),将以填充的方式进行处理,是否继续?`,
229
+ `${$lc('当前图片尺寸大于建议大小(')}108*30px${$lc(
230
+ '),将以填充的方式进行处理,是否继续?'
231
+ )}`,
226
232
  $lc("提示"),
227
233
  {
228
234
  type: 'warning'
@@ -230,9 +236,13 @@ export default {
230
236
  )
231
237
  this.$refs.logUpload.$refs.upload.submit()
232
238
  } else if (this.logoSize >= size) {
233
- await this.$confirm(`当前图片尺寸小于建议大小(108*30px),可能会发生失真,是否继续?`, $lc("提示"), {
234
- type: 'warning'
235
- })
239
+ await this.$confirm(
240
+ `${$lc('当前图片尺寸小于建议大小(')}108*30px${$lc('),可能会发生失真,是否继续?')}`,
241
+ $lc("提示"),
242
+ {
243
+ type: 'warning'
244
+ }
245
+ )
236
246
  this.$refs.logUpload.$refs.upload.submit()
237
247
  }
238
248
  }
@@ -318,7 +328,7 @@ export default {
318
328
  }
319
329
  for (const i of e) {
320
330
  if (!this.LOGIN_MODE) this.LOGIN_MODE = i
321
- else this.LOGIN_MODE += $lc(',') + i
331
+ else this.LOGIN_MODE += ',' + i
322
332
  }
323
333
  }
324
334
  }
@@ -404,9 +404,7 @@ export default {
404
404
  { loading: this.loadingSub }
405
405
  )
406
406
  .then(() => {
407
- this.$message.success(
408
- `${typeName}: ${this.form[type]} 验证码发送成功`
409
- )
407
+ this.$message.success(`${typeName}: ${this.form[type]} ${$lc('验证码发送成功')}`)
410
408
  })
411
409
  .catch(() => {
412
410
  clearTimeout(this.setTimeNum)
@@ -471,7 +469,7 @@ export default {
471
469
  })
472
470
  } else {
473
471
  // 当重新请求大于3次,抛出错误
474
- this.$message.warning(`登录失败,请重新登录!`)
472
+ this.$message.warning($lc('登录失败,请重新登录!'))
475
473
  this.getAzCount = 0
476
474
  reject()
477
475
  }
@@ -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="$lc('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>
@@ -80,19 +80,19 @@ export default {
80
80
  const lengthToFirstPassword = (rule, value, callback) => {
81
81
  if (value) {
82
82
  if (this.dataForm.maxLength < value.length || this.dataForm.minLength > value.length) {
83
- callback(new Error(`密码长度为${this.dataForm.minLength}-${this.dataForm.maxLength}!`))
83
+ callback(new Error(`${$lc('密码长度为')}${this.dataForm.minLength}-${this.dataForm.maxLength}!`))
84
84
  } else if (
85
85
  Number(this.dataForm.passwordStrength) === 2 &&
86
86
  !/^(((?=.*[0-9])(?=.*[a-zA-Z])|(?=.*[0-9])(?=.*[^\s0-9a-zA-Z])|(?=.*[a-zA-Z])(?=.*[^\s0-9a-zA-Z]))[^\s]+)$/.test(
87
87
  value
88
88
  )
89
89
  ) {
90
- callback(new Error(`密码至少包括数字,字母,特殊符号其中两种`))
90
+ callback(new Error($lc('密码至少包括数字,字母,特殊符号其中两种')))
91
91
  } else if (
92
92
  Number(this.dataForm.passwordStrength) === 3 &&
93
93
  !/^(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*])[\da-zA-Z~!@#$%^&*]{0,}$/.test(value)
94
94
  ) {
95
- callback(new Error(`密码同时包括包括数字,字母,特殊符号三种`))
95
+ callback(new Error($lc('密码同时包括包括数字,字母,特殊符号三种')))
96
96
  } else {
97
97
  callback()
98
98
  }
@@ -216,12 +216,12 @@ export default {
216
216
  noMsg: true
217
217
  })
218
218
  .then(() => {
219
- this.$message.success(`${typeName}: ${this.updateForm[type]} 验证码发送成功`)
219
+ this.$message.success(`${typeName}: ${this.updateForm[type]} ${$lc('验证码发送成功')}`)
220
220
  })
221
221
  .catch(() => {
222
222
  clearTimeout(this.setTimeNum)
223
223
  this.codeNum = $lc("验证码")
224
- this.$message.warning(`${typeName}: ${this.updateForm[type]} 验证码发送失败`)
224
+ this.$message.warning(`${typeName}: ${this.updateForm[type]} ${$lc('验证码发送失败')}`)
225
225
  })
226
226
  }
227
227
  })
@@ -269,7 +269,7 @@ export default {
269
269
  data.sign = this.sign
270
270
  data.certDn = this.certDn
271
271
  axios.post(`/bems/prod_1.0/uas/api/authorization/password/reset`, data, { loading: false }).then((res) => {
272
- this.$message.success(`密码更新成功!`)
272
+ this.$message.success($lc('密码更新成功!'))
273
273
  this.type = 'phone'
274
274
  })
275
275
  })
@@ -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
- <span role="button" class="el-date-picker__header-label" @click="handleYear">{{ year }}{{ '年' | $lc }}</span>
18
+ <span role="button" class="el-date-picker__header-label" @click="handleYear">{{ formatYear(year) }}</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>
@@ -30,14 +30,14 @@
30
30
  class="half-year-picker__btn"
31
31
  :class="halfYear === 1 ? 'isactive' : ''"
32
32
  @click="selectHalfYear(0)"
33
- >{{ year }}{{ '年 上半年' | $lc }}</el-button
33
+ >{{ formatHalfYear(year, true) }}</el-button
34
34
  >
35
35
  <el-button
36
36
  type="text"
37
37
  class="half-year-picker__btn"
38
38
  :class="halfYear === 2 ? 'isactive' : ''"
39
39
  @click="selectHalfYear(1)"
40
- >{{ year }}{{ '年 下半年' | $lc }}</el-button
40
+ >{{ formatHalfYear(year, false) }}</el-button
41
41
  >
42
42
  </div>
43
43
  <div v-else class="n20-quarter-date-picker__year__grid">
@@ -49,7 +49,7 @@
49
49
  :class="year === item ? 'color-primary' : ''"
50
50
  class="n20-quarter-date-picker__btn"
51
51
  @click="selectYear(item)"
52
- >{{ item }}{{ '年' | $lc }}</el-button
52
+ >{{ formatYear(item) }}</el-button
53
53
  >
54
54
  </div>
55
55
  </div>
@@ -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 = this.formatHalfYear(year, startMonth === '01')
108
108
  } else {
109
109
  this.showValue = ''
110
110
  }
@@ -113,6 +113,12 @@ export default {
113
113
  }
114
114
  },
115
115
  methods: {
116
+ formatYear(year) {
117
+ return $lc('YEAR年').replace('YEAR', year)
118
+ },
119
+ formatHalfYear(year, firstHalf) {
120
+ return $lc(firstHalf ? 'YEAR年上半年' : 'YEAR年下半年').replace('YEAR', year)
121
+ },
116
122
  selectYear(i) {
117
123
  this.year = i
118
124
  this.isHalfYear = true
@@ -133,7 +139,7 @@ export default {
133
139
  this.halfYear = i + 1
134
140
  let arr = [`${this.year}-${i === 0 ? '01' : '07'}`, `${this.year}-${i === 0 ? '06' : '12'}`]
135
141
  this.showHalfYear = false
136
- this.showValue = `${this.year} 年 ${i === 0 ? $lc("上半年") : $lc("下半年")}`
142
+ this.showValue = this.formatHalfYear(this.year, i === 0)
137
143
  // 6月最后一天是30 12月最后一天是31
138
144
  this.$emit('input', { startDate: arr[0] + '-01', endDate: i === 0 ? arr[1] + '-30' : arr[1] + '-31' })
139
145
  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
- <span role="button" class="el-date-picker__header-label" @click="handleYear">{{ year }}{{ '年' | $lc }}</span>
19
+ <span role="button" class="el-date-picker__header-label" @click="handleYear">{{ formatYear(year) }}</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>
@@ -34,7 +34,7 @@
34
34
  class="n20-quarter-date-picker__btn"
35
35
  :class="this.season == 1 ? 'isactive' : ''"
36
36
  @click="selectSeason(0)"
37
- >{{ year }}{{ '年' | $lc }} {{ '第一季度' | $lc }}</el-button
37
+ >{{ formatQuarter(year, 1) }}</el-button
38
38
  >
39
39
  <el-button
40
40
  type="text"
@@ -43,7 +43,7 @@
43
43
  class="n20-quarter-date-picker__btn"
44
44
  :class="this.season == 2 ? 'isactive' : ''"
45
45
  @click="selectSeason(1)"
46
- >{{ year }}{{ '年' | $lc }} {{ '第二季度' | $lc }}</el-button
46
+ >{{ formatQuarter(year, 2) }}</el-button
47
47
  >
48
48
  <el-button
49
49
  type="text"
@@ -52,7 +52,7 @@
52
52
  class="n20-quarter-date-picker__btn"
53
53
  :class="this.season == 3 ? 'isactive' : ''"
54
54
  @click="selectSeason(2)"
55
- >{{ year }}{{ '年' | $lc }} {{ '第三季度' | $lc }}</el-button
55
+ >{{ formatQuarter(year, 3) }}</el-button
56
56
  >
57
57
  <el-button
58
58
  :disabled="isDisabled(year, '4')"
@@ -61,7 +61,7 @@
61
61
  class="n20-quarter-date-picker__btn"
62
62
  :class="this.season == 4 ? 'isactive' : ''"
63
63
  @click="selectSeason(3)"
64
- >{{ year }}{{ '年' | $lc }} {{ '第四季度' | $lc }}</el-button
64
+ >{{ formatQuarter(year, 4) }}</el-button
65
65
  >
66
66
  </div>
67
67
  <div v-else class="n20-quarter-date-picker__year__grid">
@@ -73,7 +73,7 @@
73
73
  :class="year === item ? 'color-primary' : ''"
74
74
  class="n20-quarter-date-picker__btn"
75
75
  @click="selectYear(item)"
76
- >{{ item }}{{ '年' | $lc }}</el-button
76
+ >{{ formatYear(item) }}</el-button
77
77
  >
78
78
  </div>
79
79
  </div>
@@ -153,8 +153,9 @@ export default {
153
153
  showValue: {
154
154
  set(value) {
155
155
  if (value) {
156
- const regex = /(\d{4}) 年 (\d) 季度/
156
+ const regex = /(\d{4})\s*年\s*第?([1-4])季度/
157
157
  const match = value.match(regex)
158
+ if (!match) return
158
159
  const [, year, quarter] = match
159
160
  switch (quarter) {
160
161
  case '1':
@@ -178,9 +179,7 @@ export default {
178
179
  },
179
180
  get() {
180
181
  if (this.value.startDate && this.value.endDate) {
181
- return `${dayjs(this.value.startDate).year()} 年 第${this.getChinese(
182
- dayjs(this.value.endDate).quarter()
183
- )}季度`
182
+ return this.formatQuarter(dayjs(this.value.startDate).year(), dayjs(this.value.endDate).quarter())
184
183
  } else {
185
184
  return ''
186
185
  }
@@ -192,6 +191,12 @@ export default {
192
191
  // this.getDefaultTime()
193
192
  },
194
193
  methods: {
194
+ formatYear(year) {
195
+ return $lc('YEAR年').replace('YEAR', year)
196
+ },
197
+ formatQuarter(year, quarter) {
198
+ return $lc('YEAR年第QUARTER季度').replace('YEAR', year).replace('QUARTER', quarter)
199
+ },
195
200
  getChinese(val) {
196
201
  let value = ''
197
202
  switch (val) {
@@ -234,7 +239,6 @@ export default {
234
239
  that.season = i + 1
235
240
  let arr = that.valueArr[i].split(' - ')
236
241
  that.showSeason = false
237
- this.showValue = `${this.year} 年 ${this.season} 季度`
238
242
  that.$emit('input', { startDate: this.year + '-' + arr[0], endDate: this.year + '-' + arr[1] })
239
243
  that.$emit('change', { startDate: this.year + '-' + arr[0], endDate: this.year + '-' + arr[1] }) // 每次选择时间都将当前选择时间发送到父组件
240
244
  },
@@ -2,11 +2,11 @@
2
2
  <div class="el-table-set-size flex-box">
3
3
  <div class="el-table-set-size-item m-r-0" :class="sizeC === 'mini' && 'active'" @click="setSize('mini')">
4
4
  <img class="icon-mini" src="./mini.png" />
5
- <div class="text-mini">{{ _lang === 'zh' ? '小行距' : 'mini' }}</div>
5
+ <div class="text-mini">{{ $lc('小行距') }}</div>
6
6
  </div>
7
7
  <div class="el-table-set-size-item" :class="sizeC === 'small' && 'active'" @click="setSize('small')">
8
8
  <img class="icon-small" src="./small.png" />
9
- <div class="text-small">{{ _lang === 'zh' ? '中行距' : 'small' }}</div>
9
+ <div class="text-small">{{ $lc('中行距') }}</div>
10
10
  </div>
11
11
  </div>
12
12
  </template>
@@ -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>