n20-common-lib 2.9.13 → 2.9.14

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 (130) hide show
  1. package/nstc-g6/components/NstcCharts/NstcCharts.vue +16 -8
  2. package/package.json +8 -5
  3. package/src/assets/css/approve-card.scss +1 -1
  4. package/src/assets/css/date-quarter.scss +8 -0
  5. package/src/assets/css/expandable-pane.scss +7 -0
  6. package/src/assets/css/file-upload-table.scss +2 -3
  7. package/src/assets/css/font-icon.scss +3 -1
  8. package/src/assets/css/message.scss +6 -6
  9. package/src/assets/css/normalize.scss +4 -1
  10. package/src/assets/css/table.scss +16 -11
  11. package/src/assets/iconFont/SIMSUN.ttf +0 -0
  12. package/src/assets/iconFont/font.css +4 -0
  13. package/src/components/AIButton/index.vue +101 -0
  14. package/src/components/AdvancedFilter/formItemRender.vue +7 -4
  15. package/src/components/AdvancedFilter/index.vue +6 -7
  16. package/src/components/Anchor/index.vue +1 -0
  17. package/src/components/ApprovalButtons/index.vue +404 -82
  18. package/src/components/ApprovalButtons/indexApp.vue +1102 -0
  19. package/src/components/ApprovalButtons/selectSpr.vue +128 -0
  20. package/src/components/ApprovalButtons/setCarboncopyProp.vue +1 -1
  21. package/src/components/ApprovalButtons/setRejectToProp.vue +45 -5
  22. package/src/components/ApprovalButtons/showAppOpi.vue +265 -8
  23. package/src/components/ApprovalButtons/showOtherAttrNew.vue +161 -0
  24. package/src/components/ApprovalCard/index.vue +190 -44
  25. package/src/components/ApprovalCard/indexApp.vue +592 -0
  26. package/src/components/ApprovalRecord/approvalImgPro/child.vue +1 -1
  27. package/src/components/ApprovalRecord/approvalImgPro/index.vue +42 -5
  28. package/src/components/ApprovalRecord/index.vue +23 -6
  29. package/src/components/ApprovalRecord/indexApp.vue +79 -0
  30. package/src/components/AttachmentPass/index.vue +286 -0
  31. package/src/components/Button/button-group.vue +3 -1
  32. package/src/components/CascaderArea/index.vue +5 -6
  33. package/src/components/DatePicker/por.vue +31 -1
  34. package/src/components/DateSelect/quarterDatePicker.vue +23 -1
  35. package/src/components/Descriptions/index.vue +7 -3
  36. package/src/components/Dialog/index.vue +4 -0
  37. package/src/components/Diff/index.vue +4 -2
  38. package/src/components/DynamicField/DynamicField.vue +29 -6
  39. package/src/components/DynamicField/DynamicFieldMixin.js +13 -5
  40. package/src/components/DynamicField/DynamicFieldOptions.vue +135 -62
  41. package/src/components/DynamicField/DynamicTable.vue +11 -1
  42. package/src/components/DynamicField/contentPop.vue +110 -0
  43. package/src/components/DynamicField/tableList.vue +5 -1
  44. package/src/components/DynamicField/tableView.vue +143 -0
  45. package/src/components/ECharts/index.vue +15 -9
  46. package/src/components/Expandable/main.vue +17 -2
  47. package/src/components/FileImport/index.vue +4 -5
  48. package/src/components/FileUploadTable/FileUploadTableV3.vue +937 -0
  49. package/src/components/FileUploadTable/aiCheckDialog.vue +139 -0
  50. package/src/components/FileUploadTable/index.vue +251 -33
  51. package/src/components/FileUploadTable/jytg.svg +6 -0
  52. package/src/components/FileUploadTable/wsc.svg +3 -0
  53. package/src/components/FileUploadTable/ysc.svg +3 -0
  54. package/src/components/HandlingAdvice/index.vue +191 -0
  55. package/src/components/InputAccount/index.vue +105 -0
  56. package/src/components/InputNumber/index.vue +16 -4
  57. package/src/components/InputNumber/numberRange.vue +14 -0
  58. package/src/components/InputSearch/index.vue +8 -0
  59. package/src/components/Layout/HeaderWrap/changePwd.vue +50 -23
  60. package/src/components/Layout/HeaderWrap/index.vue +2 -2
  61. package/src/components/Layout/HeaderWrap/indexN.vue +296 -119
  62. package/src/components/Layout/SubContent/index.vue +45 -14
  63. package/src/components/Layout/indexN.vue +26 -5
  64. package/src/components/LoginTemporary/form.vue +126 -34
  65. package/src/components/LoginTemporary/index.vue +14 -3
  66. package/src/components/LoginTemporary/indexN.vue +35 -13
  67. package/src/components/Preview/index.vue +199 -0
  68. package/src/components/SelectDatePickerPro/customDatePicker.vue +7 -0
  69. package/src/components/SelectDatePickerPro/halfYearPicker.vue +165 -0
  70. package/src/components/SelectDatePickerPro/index.vue +44 -4
  71. package/src/components/SelectDatePickerPro/quarterDatePicker.vue +32 -10
  72. package/src/components/SelectTree/index.vue +10 -4
  73. package/src/components/SelectTree/pro.vue +3 -0
  74. package/src/components/ShowColumn/index copy 2.vue +545 -0
  75. package/src/components/ShowColumn/index copy.vue +566 -0
  76. package/src/components/ShowColumn/index.vue +11 -7
  77. package/src/components/Statis/statisItem.vue +8 -7
  78. package/src/components/Table/filters.js +13 -0
  79. package/src/components/Table/index.vue +4 -4
  80. package/src/components/TablePro/filterContent.vue +18 -8
  81. package/src/components/TablePro/index.js +41 -1
  82. package/src/components/TablePro/index.vue +117 -6
  83. package/src/components/TableProOperateColumn/OperateBtns.vue +11 -53
  84. package/src/components/TableProOperateColumn/OperateBtns_copy.vue +141 -0
  85. package/src/components/TableProOperateColumn/childrenOperateBtn.vue +108 -0
  86. package/src/components/TableProOperateColumn/index.vue +3 -6
  87. package/src/components/TableSetSize/index.vue +1 -1
  88. package/src/components/Tree/index.vue +21 -5
  89. package/src/components/Upload/index.vue +25 -10
  90. package/src/components/Upload/uploadMsg.vue +30 -25
  91. package/src/components/operatingStatus/index.vue +3 -4
  92. package/src/directives/VTitle/index.js +15 -5
  93. package/src/directives/watermark/index.js +140 -56
  94. package/src/i18n.json +146 -18
  95. package/src/index.js +31 -3
  96. package/src/plugins/Sign/CaMap.js +47 -8
  97. package/src/plugins/Sign/Itrus/index.js +1 -1
  98. package/src/plugins/Sign/Itrus/sign_3720.js +2 -1
  99. package/src/plugins/Sign/NetSM3/index.js +20 -11
  100. package/src/plugins/Sign/NetV3/index.js +163 -22
  101. package/src/plugins/Sign/SkfSign/index.js +55 -52
  102. package/src/plugins/Sign/bjca/index.js +229 -9
  103. package/src/plugins/Sign/hnca/index.js +5064 -0
  104. package/src/plugins/Sign/index.js +155 -103
  105. package/src/plugins/Sign/kySign/base64.js +160 -0
  106. package/src/plugins/Sign/kySign/hex.js +92 -0
  107. package/src/plugins/Sign/kySign/index.js +186 -0
  108. package/src/plugins/Sign/kySign/skf.js +937 -0
  109. package/src/plugins/Sign/kySign/test.html +463 -0
  110. package/src/plugins/Sign/sdca/index.js +73 -0
  111. package/src/plugins/Sign/sign.js +72 -52
  112. package/src/plugins/Sign/signV3/InfosecNetSignCNGAgent.min.js +1 -0
  113. package/src/plugins/Sign/signV3/sign.js +187 -0
  114. package/src/plugins/Sign/sign_back.js +172 -0
  115. package/src/utils/accountFormat.js +7 -0
  116. package/src/utils/asyncGetRelaNos.js +79 -46
  117. package/src/utils/axios.js +3 -5
  118. package/src/utils/i18n/index.js +1 -1
  119. package/src/utils/importGlobal.js +23 -12
  120. package/style/fonts/SIMSUN.5e0c362c.ttf +0 -0
  121. package/style/index.css +2 -2
  122. package/theme/blue.css +2 -2
  123. package/theme/cctcRed.css +2 -2
  124. package/theme/fonts/SIMSUN.5e0c362c.ttf +0 -0
  125. package/theme/green.css +2 -2
  126. package/theme/lightBlue.css +2 -2
  127. package/theme/orange.css +2 -2
  128. package/theme/purple.css +2 -2
  129. package/theme/red.css +2 -2
  130. package/theme/yellow.css +2 -2
@@ -34,9 +34,12 @@
34
34
  }}</span>
35
35
  <el-button type="text" icon="el-icon-full-screen" style="font-size: 16px" @click="scaleReset" />
36
36
  </div>
37
- <el-popover ref="title-pop" v-model="msgV" trigger="manual" placement="top">
37
+ <el-popover ref="title-pop" v-model="msgV" trigger="hover" placement="top">
38
38
  <div class="activiti-msg">
39
39
  <div v-if="assigneeEnd" class="m-t-ss m-b-ss">
40
+ <div class="flex-box flex-r">
41
+ <el-button type="text" @click="uploadList(assigneeEnd)">{{ '导出' | $lc }}</el-button>
42
+ </div>
40
43
  <table cellspacing="0" style="border-collapse: collapse; min-width: 460px">
41
44
  <tr>
42
45
  <td class="text-c">{{ '已审批人' | $lc }}</td>
@@ -46,7 +49,7 @@
46
49
  </tr>
47
50
  <tr v-for="(item, i) in assigneeEnd" :key="i">
48
51
  <td>{{ item.assignee }}</td>
49
- <td class="text-c">{{ item.optResult }}</td>
52
+ <td class="text-c">{{ item.optName }}</td>
50
53
  <td>{{ item.suggestion }}</td>
51
54
  <td>{{ item.endTime }}</td>
52
55
  </tr>
@@ -128,10 +131,10 @@
128
131
  </div>
129
132
  </el-popover>
130
133
 
131
- <el-popover ref="child-pop" popper-class="n20-approval-child" v-model="childV" trigger="manual" placement="bottom">
132
- <div v-click-outside="clickOut" v-if="childV">
134
+ <el-popover ref="child-pop" v-model="childV" popper-class="n20-approval-child" trigger="manual" placement="bottom">
135
+ <div v-if="childV" v-click-outside="clickOut">
133
136
  <div>{{ childTitle }}</div>
134
- <child :data-pro="childDataPro"></child>
137
+ <child :data-pro="childDataPro" />
135
138
  </div>
136
139
  </el-popover>
137
140
  </div>
@@ -279,6 +282,31 @@ export default {
279
282
  document.body.removeEventListener('click', this.addTaskFn)
280
283
  },
281
284
  methods: {
285
+ // 导出
286
+ uploadList(assigneeEnd) {
287
+ axios
288
+ .post(
289
+ '/bems/activiti/sample/importTaskFlowHistory',
290
+ {
291
+ taskName: '',
292
+ detailList: assigneeEnd.map((item) => {
293
+ return {
294
+ assignee: item.assignee,
295
+ optResult: item.optName,
296
+ suggestion: item.suggestion,
297
+ endTime: item.endTime
298
+ }
299
+ })
300
+ },
301
+ {
302
+ responseType: 'blob',
303
+ timeout: 600000 // 针对单个请求设置超时时间
304
+ }
305
+ )
306
+ .then((res) => {
307
+ this.$downloadBlob(res, res.name)
308
+ })
309
+ },
282
310
  addTaskFn() {
283
311
  this.addTaskV = false
284
312
  },
@@ -325,6 +353,8 @@ export default {
325
353
  this.setRejectLink(from, to, $lc('驳回至'))
326
354
  } else if (type === '4') {
327
355
  this.setPropelLink(from, to, $lc('推进至'))
356
+ } else if (type === '5') {
357
+ this.setRejectLink(from, to, $lc('撤回至上一步'))
328
358
  }
329
359
  }
330
360
  },
@@ -545,6 +575,9 @@ export default {
545
575
  } else if (this.dataPro.taskDefIdMap[id] /*已审批*/) {
546
576
  this.assigneeEnd = this.dataPro.taskDefIdMap[id]
547
577
  this.$nextTick(() => {
578
+ this.assigneeEnd = this.assigneeEnd?.filter((item) => {
579
+ return item.isShow !== '0'
580
+ })
548
581
  this.$refs['title-pop'].doDestroy()
549
582
  this.$refs['title-pop'].referenceElm = ev.currentTarget
550
583
  this.msgV = true
@@ -564,8 +597,12 @@ export default {
564
597
  } else {
565
598
  this.assignee = undefined
566
599
  this.assigneeEnd = list
600
+ this.taskCandidate = undefined
567
601
  }
568
602
  this.$nextTick(() => {
603
+ this.assigneeEnd = this.assigneeEnd?.filter((item) => {
604
+ return item.isShow !== '0'
605
+ })
569
606
  this.$refs['title-pop'].doDestroy()
570
607
  this.$refs['title-pop'].referenceElm = task
571
608
  this.msgV = true
@@ -16,7 +16,12 @@
16
16
  append-to-body
17
17
  top="10vh"
18
18
  >
19
- <approvalCard class="p-a" :proc-inst-id="procInstIdC" style="height: 70vh; overflow: auto" />
19
+ <approvalCard
20
+ :api-prefix="apiPrefix"
21
+ class="p-a"
22
+ :proc-inst-id="procInstIdC"
23
+ style="height: 70vh; overflow: auto"
24
+ />
20
25
  </el-dialog>
21
26
  <el-dialog
22
27
  v-drag
@@ -31,12 +36,20 @@
31
36
  </el-dialog>
32
37
  </div>
33
38
  <div v-else>
34
- <expandableWrap title="审批记录">
39
+ <expandableWrap :title="'审批记录' | $lc">
35
40
  <template slot="tips">
36
- <el-button size="mini" plain @click="imgV = true">流程图查看</el-button>
41
+ <el-button size="mini" plain @click="imgV = true">{{ '流程图查看' | $lc }}</el-button>
37
42
  </template>
38
- <approvalCard :procInstId="procInstIdC" />
39
- <el-dialog v-drag title="查看流程" :visible.sync="imgV" width="65%" class="p-a-0" append-to-body top="10vh">
43
+ <approvalCard :api-prefix="apiPrefix" :proc-inst-id="procInstIdC" />
44
+ <el-dialog
45
+ v-drag
46
+ :title="'查看流程' | $lc"
47
+ :visible.sync="imgV"
48
+ width="65%"
49
+ class="p-a-0"
50
+ append-to-body
51
+ top="10vh"
52
+ >
40
53
  <approvalImg class="text-c p-a" style="height: 70vh; overflow: auto" />
41
54
  </el-dialog>
42
55
  </expandableWrap>
@@ -56,6 +69,10 @@ export default {
56
69
  approvalImg
57
70
  },
58
71
  props: {
72
+ apiPrefix: {
73
+ type: String,
74
+ default: undefined
75
+ },
59
76
  procInstId: {
60
77
  type: String,
61
78
  default: undefined
@@ -78,7 +95,7 @@ export default {
78
95
  }
79
96
  },
80
97
  mounted() {
81
- getJsonc('/server-config.jsonc').then(({ approvalMode }) => {
98
+ getJsonc('portal/server-config.jsonc').then(({ approvalMode }) => {
82
99
  this.approvalMode = approvalMode
83
100
  })
84
101
  }
@@ -0,0 +1,79 @@
1
+ /* 审批记录 */
2
+ <template>
3
+ <div>
4
+ <div class="flex-box flex-r m-b-s">
5
+ <el-button type="text" size="mini" :disabled="false" @click="cardV = true">{{ '审批进度查看' | $lc }}</el-button>
6
+ </div>
7
+ <el-dialog
8
+ v-drag
9
+ :title="'审批记录' | $lc"
10
+ :visible.sync="cardV"
11
+ width="90%"
12
+ class="p-a-0"
13
+ append-to-body
14
+ top="10vh"
15
+ >
16
+ <approvalCard
17
+ :api-prefix="apiPrefix"
18
+ class="p-a"
19
+ :proc-inst-id="procInstIdC"
20
+ style="height: 70vh; overflow: auto"
21
+ />
22
+ </el-dialog>
23
+ <el-dialog
24
+ v-drag
25
+ :title="'查看流程' | $lc"
26
+ :visible.sync="imgV"
27
+ width="80%"
28
+ class="p-a-0"
29
+ append-to-body
30
+ top="10vh"
31
+ >
32
+ <approvalImg class="text-c p-a" :proc-inst-id="procInstIdC" style="height: 70vh; overflow: auto" />
33
+ </el-dialog>
34
+ </div>
35
+ </template>
36
+
37
+ <script>
38
+ import approvalCard from '../ApprovalCard/indexApp.vue'
39
+ import approvalImg from './approvalImg.vue'
40
+ import getJsonc from '../../assets/getJsonc'
41
+ export default {
42
+ name: 'ApprovalRecord',
43
+ components: {
44
+ approvalCard,
45
+ approvalImg
46
+ },
47
+ props: {
48
+ apiPrefix: {
49
+ type: String,
50
+ default: undefined
51
+ },
52
+ procInstId: {
53
+ type: String,
54
+ default: undefined
55
+ },
56
+ buttonMode: {
57
+ type: Boolean,
58
+ default: true
59
+ }
60
+ },
61
+ data() {
62
+ return {
63
+ cardV: false,
64
+ imgV: false,
65
+ approvalMode: undefined
66
+ }
67
+ },
68
+ computed: {
69
+ procInstIdC() {
70
+ return this.procInstId || this.$route.query.processInstanceId
71
+ }
72
+ },
73
+ mounted() {
74
+ getJsonc('portal/server-config.jsonc').then(({ approvalMode }) => {
75
+ this.approvalMode = approvalMode
76
+ })
77
+ }
78
+ }
79
+ </script>
@@ -0,0 +1,286 @@
1
+ <template>
2
+ <Dialog v-drag :visible.sync="visibleC" width="75%" title="补传附件" v-bind="$attrs" v-on="$listeners">
3
+ <el-form ref="form" :model="paramValues" label-width="8em" class="label-width-14em">
4
+ <el-form-item
5
+ v-for="item in defaultModel"
6
+ :key="item.value"
7
+ :label="item.label"
8
+ :prop="item.value"
9
+ :rules="item.rules"
10
+ >
11
+ <el-select
12
+ v-if="item.type === 'select'"
13
+ v-model="paramValues[item.value]"
14
+ value-key="label"
15
+ class="input-w"
16
+ placeholder="请选择"
17
+ v-bind="item.props"
18
+ v-on="item.on"
19
+ >
20
+ <el-option
21
+ v-for="option in item.options"
22
+ :key="option.value"
23
+ :label="option[item.props.label || 'label']"
24
+ :value="option[item.props.value || 'value']"
25
+ />
26
+ </el-select>
27
+ <el-date-picker
28
+ v-if="item.type === 'date'"
29
+ v-model="paramValues[item.value]"
30
+ type="date"
31
+ class="input-w"
32
+ value-format="yyyy-MM-dd"
33
+ placeholder="请选择"
34
+ v-bind="item.props"
35
+ v-on="item.on"
36
+ />
37
+ <el-input
38
+ v-if="item.type === 'text'"
39
+ v-model="paramValues[item.value]"
40
+ v-bind="item.props"
41
+ placeholder="请选择"
42
+ v-on="item.on"
43
+ />
44
+ </el-form-item>
45
+ </el-form>
46
+ <FileUploadTable
47
+ ref="FileUploadTable"
48
+ action="/api/neams/eamsbaserecord/batchSavejson"
49
+ :data-porp="dataPorp"
50
+ :upload-http-request="uploadRequest"
51
+ :table-data="tableData"
52
+ @add-row="addRow"
53
+ @delete-rows="deleteRows"
54
+ @down-rows="downRows"
55
+ >
56
+ <el-table-column slot="slotCol" label="归档名称" width="140" prop="archiveName" show-overflow-tooltip />
57
+ </FileUploadTable>
58
+ <slot name="dialogFoot"></slot>
59
+ </Dialog>
60
+ </template>
61
+
62
+ <script>
63
+ import axios from '../../utils/axios'
64
+ import { $lc } from '../../utils/i18n/index'
65
+ import { dayjs } from '../../utils/date.js'
66
+ import Dialog from '../Dialog/index.vue'
67
+ import FileUploadTable from '../FileUploadTable/index.vue'
68
+ export default {
69
+ name: 'AttachmentPass',
70
+ components: {
71
+ Dialog,
72
+ FileUploadTable
73
+ },
74
+ props: {
75
+ visible: {
76
+ type: Boolean,
77
+ default: false
78
+ },
79
+ paramModel: {
80
+ type: Array,
81
+ default: () => []
82
+ },
83
+ apiPrefix: {
84
+ type: String,
85
+ default: undefined
86
+ },
87
+ uploadParams: {
88
+ type: Object,
89
+ default: () => ({})
90
+ },
91
+ paramValues: {
92
+ type: Object,
93
+ default: () => ({})
94
+ },
95
+ customStr: {
96
+ type: String,
97
+ default: ''
98
+ }
99
+ },
100
+ data() {
101
+ return {
102
+ tableData: [],
103
+ dataPorp: {
104
+ keys: {
105
+ rowKey: 'beid',
106
+ type: 'attno', // 附件类型
107
+ name: 'name', // 附件名称
108
+ url: 'beid', // 上传文件返回的文件地址
109
+ time: 'date', // 附件上传时间
110
+ user: 'user' // 附件上传人
111
+ }
112
+ }
113
+ }
114
+ },
115
+ computed: {
116
+ visibleC: {
117
+ get() {
118
+ return this.visible
119
+ },
120
+ set(val) {
121
+ this.$emit('update:visible', val)
122
+ }
123
+ },
124
+ defaultModel: {
125
+ get() {
126
+ return this.paramModel
127
+ },
128
+ set(val) {
129
+ this.$emit('update:paramModel', val)
130
+ }
131
+ }
132
+ },
133
+ watch: {
134
+ 'uploadParams.bussValue': {
135
+ handler(val) {
136
+ this.getSelectList()
137
+ },
138
+ immediate: true,
139
+ deep: true
140
+ }
141
+ },
142
+ methods: {
143
+ setTableData(data) {
144
+ this.tableData = data
145
+ },
146
+ // 附件类型获取
147
+ async getSelectList() {
148
+ const { code, data } = await axios.post(
149
+ this.apiPrefix
150
+ ? `${this.apiPrefix}/neams/eamsattachfile/getByBussValues`
151
+ : `/neams/eamsattachfile/getByBussValues`,
152
+ Array.isArray(this.uploadParams.bussValue) ? this.uploadParams.bussValue : [this.uploadParams.bussValue]
153
+ )
154
+ if (code === 200) {
155
+ this.uploadFlag = true
156
+ this.dataPorp.typeOptions = data.map((item) => ({ ...item, type: item.attno, label: item.attname }))
157
+ }
158
+ },
159
+ async downRows(rows) {
160
+ const filesId = rows.map(({ beid }) => beid).filter(Boolean)
161
+ if (!filesId.length) {
162
+ return this.$message.warning('请勾选附件')
163
+ }
164
+ const res = await axios.post(
165
+ this.apiPrefix
166
+ ? `${this.apiPrefix}/neams/eamsbaserecord/batchDownloadFiles`
167
+ : `/neams/eamsbaserecord/batchDownloadFiles`,
168
+ filesId.map((beid) => ({ beid })),
169
+ {
170
+ responseType: 'blob'
171
+ }
172
+ )
173
+ if (res) {
174
+ this.$downloadBlob(res, `附件.zip`)
175
+ }
176
+ },
177
+ getTableData() {
178
+ return this.tableData
179
+ },
180
+ addRow() {
181
+ const dynamicParams = this.customStr
182
+ .split('&')
183
+ .map((key) => this.paramValues[key] || '')
184
+ .join('')
185
+
186
+ this.$refs.form.validate((valid) => {
187
+ if (!valid) return
188
+ // 自行添加
189
+ this.tableData.splice(0, 0, {
190
+ id: 'n' + Math.random(),
191
+ type: '',
192
+ name: '',
193
+ date: '',
194
+ user: sessionStorage.getItem('userNo'),
195
+ archiveName: dynamicParams,
196
+ _fileData: {
197
+ /* 上传时附带的额外参数 */
198
+ }
199
+ })
200
+ })
201
+ },
202
+ async deleteRows(rows) {
203
+ if (!rows.length) {
204
+ return this.$message({
205
+ message: $lc('请先勾选要删除的数据!'),
206
+ type: 'warning',
207
+ showClose: true
208
+ })
209
+ }
210
+
211
+ const filesId = rows.filter((item) => item.beid).map((item) => item.beid)
212
+
213
+ if (filesId.length > 0) {
214
+ const res = await axios.post(
215
+ this.apiPrefix ? `${this.apiPrefix}/neams/eamsbaserecord/delete` : `/neams/eamsbaserecord/delete`,
216
+ filesId
217
+ )
218
+
219
+ if (res.code === 200) {
220
+ this.tableData = this.tableData.filter((item) => !filesId.includes(item.beid)) || []
221
+ this.$message.success('删除成功')
222
+ }
223
+ }
224
+
225
+ const ids = rows.map((item) => item.id)
226
+ this.tableData = this.tableData.filter((item) => !ids.includes(item.id) || item.beid) || []
227
+ },
228
+ uploadRequest(options, row) {
229
+ // row.typeName =
230
+ let { file } = options
231
+ let data = new FormData()
232
+ data.append('file', file)
233
+ data.append(
234
+ 'data',
235
+ JSON.stringify({
236
+ syscode: this.uploadParams.syscode,
237
+ appno: this.uploadParams.appno, //模块名
238
+ bussValue: this.uploadParams.bussValue, // 业务品种
239
+ attno: row ? row.attno : this.dataPorp.typeOptions[0].attno, // 附件类型
240
+ bussId: this.uploadParams.bussId, // 业务ID
241
+ cltno: this.uploadParams.cltno,
242
+ memo: file.name,
243
+ recordname: file.name,
244
+ fileSize: file.size,
245
+ archiveName: row.archiveName,
246
+ ...this.paramValues
247
+ })
248
+ )
249
+ data.append('date', dayjs().format('YYYY-MM-DD HH:mm:ss') + ',2099-12-31 23:59:59')
250
+
251
+ let pro = new Promise((resolve, reject) => {
252
+ axios
253
+ .post(
254
+ this.apiPrefix
255
+ ? `${this.apiPrefix}/neams/eamsbaserecord/batchSavejson?r=${Math.random()}`
256
+ : `/neams/eamsbaserecord/batchSavejson?r=${Math.random()}`,
257
+ data,
258
+ {
259
+ headers: {
260
+ 'Content-Type': 'multipart/form-data'
261
+ },
262
+ timeout: 900000,
263
+ loading: false,
264
+ noMsg: true
265
+ }
266
+ )
267
+ .then((res) => {
268
+ resolve(res)
269
+ })
270
+ .catch((err) => {
271
+ reject(err)
272
+ })
273
+ })
274
+ return pro
275
+ },
276
+ setOptions(key, opts) {
277
+ let item = this.defaultModel.find((f) => f.value === key)
278
+ if (item) {
279
+ item.options = opts || []
280
+ }
281
+ }
282
+ }
283
+ }
284
+ </script>
285
+
286
+ <style lang="less" scoped></style>
@@ -141,7 +141,9 @@ export default {
141
141
  if (btnt.includes('back')) {
142
142
  btns.push({ emit: 'back', label: $lc('返回'), plain: true })
143
143
  }
144
-
144
+ if (btnt.includes('zsbf')) {
145
+ btns.push({ emit: 'zsbf', label: $lc('证书颁发'), plain: true })
146
+ }
145
147
  return btns
146
148
  }
147
149
  }
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <el-cascader
3
- v-title
4
3
  ref="el-cascader"
4
+ v-title
5
5
  :value="value"
6
6
  v-bind="$attrs"
7
7
  :options="areaTree"
@@ -13,7 +13,6 @@
13
13
  </template>
14
14
 
15
15
  <script>
16
- import cloneDeep from 'lodash/cloneDeep'
17
16
  window._china_area_tree_ = undefined
18
17
  export default {
19
18
  name: 'CascaderArea',
@@ -64,7 +63,7 @@ export default {
64
63
  label: 'regionName',
65
64
  children: 'children',
66
65
  expandTrigger: 'hover',
67
- checkStrictly: this.isUrban ? false : true
66
+ checkStrictly: !this.isUrban
68
67
  }
69
68
  return Object.assign(_prop, this.props)
70
69
  },
@@ -99,7 +98,7 @@ export default {
99
98
  )
100
99
  .then(({ data }) => {
101
100
  if (data) {
102
- let result = cloneDeep(data)
101
+ let result = JSON.parse(JSON.stringify(data))
103
102
  if (this.isUrban) {
104
103
  window[this.urbanKey] = isUrbanFn(result)
105
104
  this.areaTree = window[this.urbanKey]
@@ -121,7 +120,7 @@ export default {
121
120
 
122
121
  const treeFn = (data) => {
123
122
  return data?.map((res) => {
124
- if (!['3', '4', '5'].includes(res.regionLevel)) {
123
+ if (!['3', '4', '5'].includes(res.regionLevel) && res.hasChildren) {
125
124
  res.disabled = true
126
125
  }
127
126
 
@@ -136,7 +135,7 @@ const treeFn = (data) => {
136
135
 
137
136
  const isUrbanFn = (data) => {
138
137
  return data?.map((res) => {
139
- if (res.regionLevel === '2') {
138
+ if (res.regionLevel === '2' || !res.children?.length) {
140
139
  res.children = null
141
140
  } else {
142
141
  res.children = isUrbanFn(res.children)
@@ -3,7 +3,15 @@
3
3
  ref="date-picker"
4
4
  v-model="valueC"
5
5
  class="n20-date-editor"
6
- :class="{ 'has-value': clearable && valueC, [this.$attrs && this.$attrs['rule-form']]: !valueC }"
6
+ :class="{
7
+ 'has-value': clearable && valueC,
8
+ [this.$attrs && this.$attrs['rule-form']]: !valueC
9
+ }"
10
+ :popper-class="
11
+ !clearable && type === 'datetimerange'
12
+ ? 'clearable-datetimerange' + ' ' + $attrs['popper-class']
13
+ : $attrs['popper-class']
14
+ "
7
15
  :type="type"
8
16
  :value-format="valueFormat"
9
17
  :placeholder="'选择日期' | $lc"
@@ -112,6 +120,17 @@ let shortcuts_1 = [
112
120
  end.setHours(23, 59, 59)
113
121
  picker.$emit('pick', [start, end])
114
122
  }
123
+ },
124
+ {
125
+ text: $lc('最近三年'),
126
+ onClick(picker) {
127
+ const start = new Date()
128
+ const end = new Date()
129
+ start.setFullYear(start.getFullYear() - 3)
130
+ start.setHours(0, 0, 0)
131
+ end.setHours(23, 59, 59)
132
+ picker.$emit('pick', [start, end])
133
+ }
115
134
  }
116
135
  ]
117
136
 
@@ -160,6 +179,17 @@ let shortcuts_2 = [
160
179
  picker.$emit('pick', [start, end])
161
180
  }
162
181
  },
182
+ {
183
+ text: $lc('最近三年'),
184
+ onClick(picker) {
185
+ const start = new Date()
186
+ const end = new Date()
187
+ start.setFullYear(start.getFullYear() - 3)
188
+ start.setHours(0, 0, 0)
189
+ end.setHours(23, 59, 59)
190
+ picker.$emit('pick', [start, end])
191
+ }
192
+ },
163
193
  {
164
194
  text: $lc('今天开始'),
165
195
  onClick(picker) {
@@ -154,7 +154,9 @@ export default {
154
154
  },
155
155
  get() {
156
156
  if (this.value) {
157
- return `${dayjs(this.value.startDate).year()} 年 ${dayjs(this.value.endDate).quarter()} 季度`
157
+ return `${dayjs(this.value.startDate).year()} 年 第${this.getChinese(
158
+ dayjs(this.value.endDate).quarter()
159
+ )}季度`
158
160
  } else {
159
161
  return this.value
160
162
  }
@@ -166,6 +168,26 @@ export default {
166
168
  // this.getDefaultTime()
167
169
  },
168
170
  methods: {
171
+ getChinese(val) {
172
+ let value = ''
173
+ switch (val) {
174
+ case 1:
175
+ value = '一'
176
+ break
177
+ case 2:
178
+ value = '二'
179
+ break
180
+ case 3:
181
+ value = '三'
182
+ break
183
+ case 4:
184
+ value = '四'
185
+ break
186
+ default:
187
+ break
188
+ }
189
+ return value
190
+ },
169
191
  prev() {
170
192
  this.year = this.year * 1 - 1
171
193
  },
@@ -10,9 +10,10 @@
10
10
  <script>
11
11
  export default {
12
12
  name: 'Descriptions',
13
- data() {
14
- return {
15
- column: 2
13
+ props: {
14
+ column: {
15
+ type: Number,
16
+ default: 2
16
17
  }
17
18
  },
18
19
  created() {
@@ -34,6 +35,9 @@ export default {
34
35
  } else if (wW > 1920) {
35
36
  this.column = 4
36
37
  }
38
+ },
39
+ destroyResize() {
40
+ window.removeEventListener('resize', this.resize)
37
41
  }
38
42
  }
39
43
  }