n20-common-lib 3.2.53 → 3.2.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n20-common-lib",
3
- "version": "3.2.53",
3
+ "version": "3.2.55",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "vue-cli-service serve",
@@ -162,39 +162,41 @@
162
162
  </div>
163
163
  <!-- 审批按钮 -->
164
164
  <div v-if="authList.includes('byAddTask') && !addTaskList.length" class="text-c">
165
- <el-button type="primary" @click="showAdvancePop">{{ btnsNames['approval'] }}</el-button>
166
- <el-button type="primary" @click="approvalToV = true">{{ btnsNames['approval'] }}{{ '至' | $lc }}</el-button>
167
- <el-button plain @click="rejectToB">{{ btnsNames['rejectTo'] }}</el-button>
168
- <el-button plain @click="rejectFn">{{ btnsNames['reject'] }}</el-button>
169
- <el-button type="danger" plain @click="discardFn">{{ btnsNames['discard'] }}</el-button>
165
+ <el-button type="primary" @click="showAdvancePop">{{ $lc(btnsNames['approval']) }}</el-button>
166
+ <el-button type="primary" @click="approvalToV = true">{{ $lc(btnsNames['approval']) }}{{ '至' | $lc }}</el-button>
167
+ <el-button plain @click="rejectToB">{{ $lc(btnsNames['rejectTo']) }}</el-button>
168
+ <el-button plain @click="rejectFn">{{ $lc(btnsNames['reject']) }}</el-button>
169
+ <el-button type="danger" plain @click="discardFn">{{ $lc(btnsNames['discard']) }}</el-button>
170
170
  <el-button plain @click="goFrom">{{ '返 回' | $lc }}</el-button>
171
171
  </div>
172
172
 
173
173
  <div v-else-if="!authList.includes('byAddTask')" class="text-c">
174
174
  <!-- 特殊会签按钮 START -->
175
175
  <el-button v-if="authList.includes('pass')" type="primary" @click="checkFlowFn">{{
176
- btnsNames['pass']
176
+ $lc(btnsNames['pass'])
177
177
  }}</el-button>
178
- <el-button v-if="authList.includes('refuse')" plain @click="rejectFn">{{ btnsNames['refuse'] }}</el-button>
179
- <el-button v-if="authList.includes('takeOff')" plain @click="qjFn">{{ btnsNames['takeOff'] }}</el-button>
178
+ <el-button v-if="authList.includes('refuse')" plain @click="rejectFn">{{ $lc(btnsNames['refuse']) }}</el-button>
179
+ <el-button v-if="authList.includes('takeOff')" plain @click="qjFn">{{ $lc(btnsNames['takeOff']) }}</el-button>
180
180
  <!-- END -->
181
181
  <el-button v-if="authList.includes('approval')" type="primary" @click="showAdvancePop">{{
182
- btnsNames['approval']
182
+ $lc(btnsNames['approval'])
183
183
  }}</el-button>
184
184
  <el-button v-if="authList.includes('approval') && nextApproval && nextBtn" type="primary" @click="approvalNext">
185
- {{ btnsNames['approval'] }}{{ '并审批下一条' | $lc }}</el-button
185
+ {{ $lc(btnsNames['approval']) }}{{ '并审批下一条' | $lc }}</el-button
186
186
  >
187
187
  <el-button v-if="showApprovalTo && showApproveTo" type="primary" @click="approvalToV = true"
188
- >{{ btnsNames['approval'] }}{{ '至' | $lc }}</el-button
188
+ >{{ $lc(btnsNames['approval']) }}{{ '至' | $lc }}</el-button
189
189
  >
190
- <el-button v-if="authList.includes('rejectTo')" plain @click="rejectToB">{{ btnsNames['rejectTo'] }}</el-button>
191
- <el-button v-if="authList.includes('reject')" plain @click="rejectFn">{{ btnsNames['reject'] }}</el-button>
190
+ <el-button v-if="authList.includes('rejectTo')" plain @click="rejectToB">{{
191
+ $lc(btnsNames['rejectTo'])
192
+ }}</el-button>
193
+ <el-button v-if="authList.includes('reject')" plain @click="rejectFn">{{ $lc(btnsNames['reject']) }}</el-button>
192
194
  <el-button v-if="authList.includes('rejectPre')" plain @click="rejectPreFn">{{
193
- btnsNames['rejectPre']
195
+ $lc(btnsNames['rejectPre'])
194
196
  }}</el-button>
195
197
 
196
198
  <el-button v-if="authList.includes('discard')" type="danger" plain @click="discardFn">{{
197
- btnsNames['discard']
199
+ $lc(btnsNames['discard'])
198
200
  }}</el-button>
199
201
  <el-button plain @click="goFrom">{{ '返 回' | $lc }}</el-button>
200
202
  </div>
@@ -517,14 +519,14 @@ export default {
517
519
  checkSum: 0,
518
520
  mustUploadWidget: false,
519
521
  btnsNames: {
520
- pass: $lc('通过'),
521
- refuse: $lc('拒绝'),
522
- takeOff: $lc('请假'),
523
- reject: $lc('驳回至申请人'),
524
- rejectPre: $lc('驳回至上一节点'),
525
- approval: $lc('批 准'),
526
- discard: $lc('作 废'),
527
- rejectTo: $lc('驳回至')
522
+ pass: '通过',
523
+ refuse: '拒绝',
524
+ takeOff: '请假',
525
+ reject: '驳回至申请人',
526
+ rejectPre: '驳回至上一节点',
527
+ approval: '批 准',
528
+ discard: '作 废',
529
+ rejectTo: '驳回至'
528
530
  }
529
531
  }
530
532
  },
@@ -711,7 +713,7 @@ export default {
711
713
  // 自定义按钮
712
714
  if (data.customBtnName && data.customBtnName.length > 0) {
713
715
  data.customBtnName.forEach((item) => {
714
- this.btnsNames[item.key] = item.optionName
716
+ this.$set(this.btnsNames, item.key, item.optionName)
715
717
  })
716
718
  }
717
719
  let { taskDefKey, menuAuthority } = data
@@ -140,11 +140,11 @@
140
140
  </div>
141
141
  <!-- 审批按钮 -->
142
142
  <div v-if="authList.includes('byAddTask') && !addTaskList.length" class="text-c">
143
- <el-button type="primary" @click="showAdvancePop">{{ btnsNames['approval'] }}</el-button>
144
- <!-- <el-button type="primary" @click="approvalToV = true">{{ btnsNames['approval'] }}{{ '至' | $lc }}</el-button>
145
- <el-button plain @click="rejectToB">{{ btnsNames['rejectTo'] }}</el-button> -->
146
- <el-button plain @click="rejectFn">{{ btnsNames['reject'] }}</el-button>
147
- <!-- <el-button type="danger" plain @click="discardFn">{{ btnsNames['discard'] }}</el-button>
143
+ <el-button type="primary" @click="showAdvancePop">{{ $lc(btnsNames['approval']) }}</el-button>
144
+ <!-- <el-button type="primary" @click="approvalToV = true">{{ $lc(btnsNames['approval']) }}{{ '至' | $lc }}</el-button>
145
+ <el-button plain @click="rejectToB">{{ $lc(btnsNames['rejectTo']) }}</el-button> -->
146
+ <el-button plain @click="rejectFn">{{ $lc(btnsNames['reject']) }}</el-button>
147
+ <!-- <el-button type="danger" plain @click="discardFn">{{ $lc(btnsNames['discard']) }}</el-button>
148
148
  <el-button plain @click="goFrom">{{ '返 回' | $lc }}</el-button> -->
149
149
  </div>
150
150
 
@@ -154,31 +154,29 @@
154
154
  </div>
155
155
  <!-- 特殊会签按钮 START -->
156
156
  <el-button v-if="authList.includes('pass')" type="primary" @click="checkFlowFn">{{
157
- btnsNames['pass']
157
+ $lc(btnsNames['pass'])
158
158
  }}</el-button>
159
- <el-button v-if="authList.includes('refuse')" plain @click="rejectFn">{{ btnsNames['refuse'] }}</el-button>
160
- <el-button v-if="authList.includes('takeOff')" plain @click="qjFn">{{ btnsNames['takeOff'] }}</el-button>
159
+ <el-button v-if="authList.includes('refuse')" plain @click="rejectFn">{{
160
+ $lc(btnsNames['refuse'])
161
+ }}</el-button>
162
+ <el-button v-if="authList.includes('takeOff')" plain @click="qjFn">{{ $lc(btnsNames['takeOff']) }}</el-button>
161
163
  <!-- END -->
162
164
  <el-button v-if="authList.includes('approval') && approveBtns" type="primary" @click="showAdvancePop">{{
163
- btnsNames['approval']
165
+ $lc(btnsNames['approval'])
164
166
  }}</el-button>
165
167
  <!-- <el-button v-if="authList.includes('approval') && nextApproval && nextBtn" type="primary" @click="approvalNext">
166
- {{ btnsNames['approval'] }}{{ '并审批下一条' | $lc }}</el-button
168
+ {{ $lc(btnsNames['approval']) }}{{ '并审批下一条' | $lc }}</el-button
167
169
  >
168
170
  <el-button v-if="showApprovalTo" type="primary" @click="approvalToV = true"
169
- >{{ btnsNames['approval'] }}{{ '至' | $lc }}</el-button
171
+ >{{ $lc(btnsNames['approval']) }}{{ '至' | $lc }}</el-button
170
172
  >
171
- <el-button v-if="authList.includes('rejectTo')" plain @click="rejectToB">{{ btnsNames['rejectTo'] }}</el-button> -->
173
+ <el-button v-if="authList.includes('rejectTo')" plain @click="rejectToB">{{ $lc(btnsNames['rejectTo']) }}</el-button> -->
172
174
  <el-button v-if="authList.includes('reject') && approveBtns" plain @click="rejectFn">{{
173
- btnsNames['reject']
174
- }}</el-button>
175
- <!-- <el-button v-if="authList.includes('rejectPre')" plain @click="rejectPreFn">{{
176
- btnsNames['rejectPre']
175
+ $lc(btnsNames['reject'])
177
176
  }}</el-button>
177
+ <!-- <el-button v-if="authList.includes('rejectPre')" plain @click="rejectPreFn">{{ $lc(btnsNames['rejectPre']) }}</el-button>
178
178
 
179
- <el-button v-if="authList.includes('discard')" type="danger" plain @click="discardFn">{{
180
- btnsNames['discard']
181
- }}</el-button>
179
+ <el-button v-if="authList.includes('discard')" type="danger" plain @click="discardFn">{{ $lc(btnsNames['discard']) }}</el-button>
182
180
  <el-button plain @click="goFrom">{{ '返 回' | $lc }}</el-button> -->
183
181
  </div>
184
182
  <!-- 设置抄送用户 -->
@@ -496,14 +494,14 @@ export default {
496
494
  checkSum: 0,
497
495
  mustUploadWidget: false,
498
496
  btnsNames: {
499
- pass: $lc('通过'),
500
- refuse: $lc('拒绝'),
501
- takeOff: $lc('请假'),
502
- reject: $lc('驳回'),
503
- rejectPre: $lc('驳回至上一节点'),
504
- approval: $lc('批 准'),
505
- discard: $lc('作 废'),
506
- rejectTo: $lc('驳回至')
497
+ pass: '通过',
498
+ refuse: '拒绝',
499
+ takeOff: '请假',
500
+ reject: '驳回',
501
+ rejectPre: '驳回至上一节点',
502
+ approval: '批 准',
503
+ discard: '作 废',
504
+ rejectTo: '驳回至'
507
505
  },
508
506
  approveBtns: true
509
507
  }
@@ -645,7 +643,7 @@ export default {
645
643
  // 自定义按钮
646
644
  if (data.customBtnName && data.customBtnName.length > 0) {
647
645
  data.customBtnName.forEach((item) => {
648
- this.btnsNames[item.key] = item.optionName
646
+ this.$set(this.btnsNames, item.key, item.optionName)
649
647
  })
650
648
  }
651
649
  let { taskDefKey, menuAuthority } = data
@@ -447,10 +447,10 @@ export default {
447
447
  type: String,
448
448
  default: 'left-right'
449
449
  },
450
- seeTypes: {
451
- type: RegExp,
452
- default: /\.(jpg|png|gif|svg|pdf|swf|xlsx|xls|docx|doc|txt)$/i
453
- }
450
+ seeTypes: {
451
+ type: RegExp,
452
+ default: () => /\.(jpg|png|gif|svg|pdf|swf|xlsx|xls|docx|doc|txt)$/i
453
+ }
454
454
  },
455
455
  data() {
456
456
  this.viewerOptions = {
@@ -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(
@@ -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>
@@ -11,8 +11,8 @@
11
11
  trigger="click"
12
12
  class="m-r-s"
13
13
  >
14
- <el-button slot="reference" class="botton" :class="{ activiti: selectedItem !== $lc('无视图') }">
15
- <div class="flex-box flex-v m-r">
14
+ <el-button slot="reference" class="botton view-button" :class="{ activiti: selectedItem !== $lc('无视图') }">
15
+ <div class="flex-box flex-v">
16
16
  <i class="v3-icon-inbox"></i>
17
17
  <div class="popover-title" style="margin: 0 8px" :title="selectedItem">{{ selectedItem }}</div>
18
18
  <i class="n20-icon-xiala-moren"></i>
@@ -70,7 +70,10 @@
70
70
  <el-button
71
71
  v-if="isFilter"
72
72
  icon="v3-icon-filter"
73
- class="m-r-s botton"
73
+ class="m-r-s botton filter-button"
74
+ :class="{ 'is-filter-expanded': filterExpanded }"
75
+ tabindex="-1"
76
+ @mousedown.native.prevent
74
77
  @click="filterExpanded = !filterExpanded"
75
78
  >{{ '筛选' | $lc }}</el-button
76
79
  >
@@ -219,10 +222,10 @@
219
222
  </template>
220
223
 
221
224
  <script>
222
- import { $lc } from '../../utils/i18n/index'
223
225
  import advancedQuery from './advancedQuery.vue'
224
226
 
225
227
  import axios from '../../utils/axios.js'
228
+ import { $lc } from '../../utils/i18n/index'
226
229
  import ClAdvancedFilter from '../AdvancedFilter/index.vue'
227
230
  import ClDialog from '../Dialog/index.vue'
228
231
  import ClDragList from '../DragList/index.vue'
@@ -515,10 +518,10 @@ export default {
515
518
  item.type === 'daterange'
516
519
  ? [item.startDate, item.endDate]
517
520
  : item.type === 'numberrange'
518
- ? [item.startValue, item.endValue]
519
- : item.slotFields?.length
520
- ? item.slotFields
521
- : [item.value]
521
+ ? [item.startValue, item.endValue]
522
+ : item.slotFields?.length
523
+ ? item.slotFields
524
+ : [item.value]
522
525
 
523
526
  keys.forEach((k) => allFilterKeys.add(k))
524
527
  if (item.required) {
@@ -818,4 +821,21 @@ export default {
818
821
  padding: 0 !important;
819
822
  border-bottom: none !important;
820
823
  }
824
+
825
+ .filter-button,
826
+ .view-button {
827
+ padding: 8px 12px !important;
828
+ height: 32px;
829
+ }
830
+
831
+ .filter-button {
832
+ display: inline-flex;
833
+ align-items: center;
834
+ justify-content: center;
835
+ }
836
+
837
+ .filter-button.is-filter-expanded {
838
+ color: var(--color-blue-6, #007aff);
839
+ background: var(--color-blue-1, #e8f7ff);
840
+ }
821
841
  </style>
package/src/i18n.json CHANGED
@@ -11821,5 +11821,12 @@
11821
11821
  "vi": "Quay lại bước trước",
11822
11822
  "ja": "前のステップに戻る",
11823
11823
  "zh-hk": "撤回至上一步"
11824
+ },
11825
+ "未知": {
11826
+ "en": "Unknown",
11827
+ "th": "ไม่ทราบ",
11828
+ "vi": "Không xác định",
11829
+ "ja": "不明",
11830
+ "zh-hk": "未知"
11824
11831
  }
11825
- }
11832
+ }