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
@@ -1,7 +1,33 @@
1
1
  /* 审批按钮组 */
2
2
  <template>
3
3
  <div :class="prefixCls">
4
- <el-form ref="approveBtnGroup" label-position="right" :label-width="_lang === 'zh' ? '6em' : '10em'">
4
+ <!-- 自定义项 -->
5
+ <ExpandablePane
6
+ v-if="taskId && showBtn && authList.includes('isShowOtherAtt')"
7
+ title="自定义项"
8
+ :default-expand="false"
9
+ >
10
+ <el-form ref="approveBtnGroup" label-position="right" :label-width="_lang === 'zh' ? '12em' : '12em'">
11
+ <div
12
+ class="p-b-lg p-t-lg p-r-lg"
13
+ style="max-height: 150px; overflow-y: auto; border: 1px dashed var(--border-color-base); border-radius: 5px"
14
+ >
15
+ <show-other-att-new ref="showOtherAttNew" :task-id="taskId" :form="customizationDtos" :required="true" />
16
+ </div>
17
+ </el-form>
18
+ </ExpandablePane>
19
+
20
+ <div class="n20-form-expandable-pane">
21
+ <div class="n20-title flex-box flex-lr flex-v" :class="titleClass">
22
+ <span class="n20-tips flex-item">
23
+ <slot name="title">
24
+ <span>{{ $lc('流程处理') }}</span>
25
+ </slot>
26
+ </span>
27
+ </div>
28
+ </div>
29
+ <!-- 抄送加签 -->
30
+ <el-form ref="approveBtnGroup" label-position="right" :label-width="_lang === 'zh' ? '6em' : '12em'">
5
31
  <div v-if="taskId && showBtn" class="flex-box">
6
32
  <el-form-item v-if="authList.includes('isCarboncopy')" :label="'抄送' | $lc" class="flex-1 m-b-s">
7
33
  <el-input
@@ -42,11 +68,7 @@
42
68
  :label="'向前加签' | $lc"
43
69
  value="2"
44
70
  />
45
- <el-option
46
- v-if="addTaskMode === '1' || authList.includes('isAddtask') || preAddTask"
47
- :label="'向后加签' | $lc"
48
- value="1"
49
- />
71
+ <el-option v-if="authList.includes('isAddtask') || preAddTask" :label="'向后加签' | $lc" value="1" />
50
72
  </template>
51
73
  </el-select>
52
74
 
@@ -74,18 +96,33 @@
74
96
  clearable
75
97
  @focus="setAddtaskV = true"
76
98
  />
99
+ <el-select v-model="addTaskTag" class="m-l-ss" clearable>
100
+ <el-option v-for="item in remarkOpt" :key="item.code" :label="item.name" :value="item.code" />
101
+ </el-select>
77
102
  </div>
78
103
  </el-form-item>
79
104
  </div>
80
- <div class="flex-box">
105
+
106
+ <el-form-item :label="'审批意见' | $lc" :error="errMsg" :required="requiredC">
107
+ <el-input
108
+ ref="msg-input"
109
+ v-model="messageC"
110
+ type="textarea"
111
+ :placeholder="`${$lc('请输入操作意见(')}${messageMax}${
112
+ requiredC
113
+ ? $lc('字以内),批准该意见为必填,驳回/作废该意见为必填!')
114
+ : $lc('字以内),批准该意见为非必填,驳回/作废该意见为必填!')
115
+ }`"
116
+ :maxlength="messageMax"
117
+ show-word-limit
118
+ :autosize="{ minRows: 2 }"
119
+ />
81
120
  <template v-if="taskId && showBtn">
82
121
  <show-app-opi
83
122
  v-if="opiAndUser || authList.includes('showAppOpi')"
84
- class="flex-1 m-l-s"
85
123
  :task-id="taskId"
86
124
  :message.sync="messageC"
87
125
  :and-user="opiAndUser"
88
- style="width: 20%"
89
126
  />
90
127
  <show-other-att
91
128
  v-if="authList.includes('showOtherAtt')"
@@ -95,23 +132,12 @@
95
132
  style="width: 18%"
96
133
  />
97
134
  </template>
98
- <el-form-item class="flex-1" :label="'审批意见' | $lc" :error="errMsg" :required="requiredC" style="width: 70%">
99
- <el-input
100
- ref="msg-input"
101
- v-model="messageC"
102
- type="textarea"
103
- :placeholder="`${$lc('请输入操作意见(')}${messageMax}${
104
- requiredC
105
- ? $lc('字以内),批准该意见为必填,驳回/作废该意见为必填!')
106
- : $lc('字以内),批准该意见为非必填,驳回/作废该意见为必填!')
107
- }`"
108
- :maxlength="messageMax"
109
- show-word-limit
110
- :autosize="{ rows: 1 }"
111
- />
112
- </el-form-item>
113
- </div>
114
- <el-form-item v-if="fileKit || fileKitT" :label="$lc('附加上传')">
135
+ </el-form-item>
136
+ <el-form-item v-if="fileKitT">
137
+ <span slot="label">
138
+ <span v-if="mustUploadWidget" style="color: red">*</span>
139
+ {{ $lc('附件上传') }}
140
+ </span>
115
141
  <cl-upload
116
142
  class="upload-224"
117
143
  :file-name.sync="fileName"
@@ -120,47 +146,59 @@
120
146
  :file-url.sync="fileUrl"
121
147
  :on-success="onSuccess"
122
148
  :on-remove="onRemove"
123
- action="/api/neams/eamsbaserecord/batchSavejson"
149
+ show-file-list
150
+ :action="
151
+ apiPrefix ? apiPrefix + `/neams/eamsbaserecord/batchSavejson` : `/neams/eamsbaserecord/batchSavejson`
152
+ "
124
153
  msg-type="message"
125
154
  />
126
155
  </el-form-item>
127
156
  </el-form>
157
+ <!-- 加签按钮 -->
128
158
  <div v-if="authList.includes('byAddTask') && addTaskList.length > 0" class="text-c">
129
159
  <el-button v-if="authList.includes('approval')" type="primary" @click="checkFlowFn">{{
130
160
  '加 签' | $lc
131
161
  }}</el-button>
132
162
  </div>
163
+ <!-- 审批按钮 -->
133
164
  <div v-if="authList.includes('byAddTask') && !addTaskList.length" class="text-c">
134
- <el-button type="primary" @click="checkFlowFn">{{ '批 准' | $lc }}</el-button>
135
- <el-button type="primary" @click="approvalToV = true">{{ '批准至' | $lc }}</el-button>
136
- <el-button plain @click="rejectToB">{{ '驳回至' | $lc }}</el-button>
137
- <el-button plain @click="rejectFn">{{ '驳回至发起人' | $lc }}</el-button>
138
- <!-- <el-button v-if="authList.includes('rejectPre')" plain @click="rejectPreFn">{{
139
- '驳回至上一节点' | $lc
140
- }}</el-button> -->
141
-
142
- <el-button type="danger" plain @click="discardFn">{{ '作 废' | $lc }}</el-button>
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>
143
170
  <el-button plain @click="goFrom">{{ '返 回' | $lc }}</el-button>
144
171
  </div>
172
+
145
173
  <div v-else-if="!authList.includes('byAddTask')" class="text-c">
146
- <el-button v-if="authList.includes('approval')" type="primary" @click="checkFlowFn">{{
147
- '批 ' | $lc
174
+ <!-- 特殊会签按钮 START -->
175
+ <el-button v-if="authList.includes('pass')" type="primary" @click="checkFlowFn">{{
176
+ btnsNames['pass']
148
177
  }}</el-button>
149
- <el-button v-if="authList.includes('approval') && nextApproval && nextBtn" type="primary" @click="approvalNext">{{
150
- '批准并审批下一条' | $lc
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>
180
+ <!-- END -->
181
+ <el-button v-if="authList.includes('approval')" type="primary" @click="showAdvancePop">{{
182
+ btnsNames['approval']
151
183
  }}</el-button>
152
- <el-button v-if="showApprovalTo" type="primary" @click="approvalToV = true">{{ '批准至' | $lc }}</el-button>
153
- <el-button v-if="authList.includes('rejectTo')" plain @click="rejectToB">{{ '驳回至' | $lc }}</el-button>
154
- <el-button v-if="authList.includes('reject')" plain @click="rejectFn">{{ '驳回至发起人' | $lc }}</el-button>
184
+ <el-button v-if="authList.includes('approval') && nextApproval && nextBtn" type="primary" @click="approvalNext">
185
+ {{ btnsNames['approval'] }}{{ '并审批下一条' | $lc }}</el-button
186
+ >
187
+ <el-button v-if="showApprovalTo" type="primary" @click="approvalToV = true"
188
+ >{{ btnsNames['approval'] }}{{ '至' | $lc }}</el-button
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>
155
192
  <el-button v-if="authList.includes('rejectPre')" plain @click="rejectPreFn">{{
156
- '驳回至上一节点' | $lc
193
+ btnsNames['rejectPre']
157
194
  }}</el-button>
158
195
 
159
196
  <el-button v-if="authList.includes('discard')" type="danger" plain @click="discardFn">{{
160
- '作 废' | $lc
197
+ btnsNames['discard']
161
198
  }}</el-button>
162
199
  <el-button plain @click="goFrom">{{ '返 回' | $lc }}</el-button>
163
200
  </div>
201
+ <!-- 设置抄送用户 -->
164
202
  <cl-dialog
165
203
  v-drag
166
204
  :visible.sync="setCarboncopyV"
@@ -171,6 +209,7 @@
171
209
  >
172
210
  <carboncopy-prop :carbon-copy-list="carbonCopyList" @close="setCarboncopyV = false" @confirm="setCarboncopyOk" />
173
211
  </cl-dialog>
212
+ <!-- 设置加签用户 -->
174
213
  <cl-dialog
175
214
  v-drag
176
215
  :visible.sync="setAddtaskV"
@@ -186,19 +225,63 @@
186
225
  @confirm="setAddtaskOk"
187
226
  />
188
227
  </cl-dialog>
228
+ <!-- 驳回至节点 -->
189
229
  <cl-dialog v-drag :visible.sync="rejectToV" :title="'驳回至节点' | $lc" width="960px" append-to-body top="7.5vh">
190
- <reject-to-prop :task-id="taskId" @close="rejectToV = false" @confirm="rejectToFn" />
230
+ <reject-to-prop
231
+ :task-id="taskId"
232
+ :show-retrace-flow="isShowRetrace"
233
+ @close="rejectToV = false"
234
+ @confirm="rejectToFn"
235
+ />
191
236
  </cl-dialog>
237
+ <!-- 批准至节点 -->
192
238
  <cl-dialog v-drag :visible.sync="approvalToV" :title="'批准至节点' | $lc" width="960px" append-to-body top="7.5vh">
193
239
  <reject-to-prop :task-id="taskId" type="approvalTo" @close="approvalToV = false" @confirm="approvalToFn" />
194
240
  </cl-dialog>
195
- <cl-dialog v-drag :visible.sync="verifyV" :title="'校验结果' | $lc" width="960px" append-to-body top="7.5vh">
241
+ <!-- 驳回发起人是否重走流程 -->
242
+ <cl-dialog
243
+ v-drag
244
+ :visible.sync="showFlowDialog"
245
+ :title="'驳回发起人是否重走流程' | $lc"
246
+ width="400px"
247
+ append-to-body
248
+ center-dialog
249
+ >
250
+ <el-radio-group v-model="isJump">
251
+ <el-radio label="0">{{ '重走流程' | $lc }}</el-radio>
252
+ <el-radio label="1"
253
+ >{{ '不重走流程' | $lc }}
254
+ <i v-title="tips" class="n20-icon-xinxitishi" style="color: var(--color-warning)"></i
255
+ ></el-radio>
256
+ </el-radio-group>
257
+ <div slot="footer">
258
+ <el-button type="primary" @click="handleIsJumpSave">{{ '确定' | $lc }}</el-button>
259
+ <el-button @click="showFlowDialog = false">{{ '取消' | $lc }}</el-button>
260
+ </div>
261
+ </cl-dialog>
262
+ <!-- 校验结果 -->
263
+ <cl-dialog
264
+ v-drag
265
+ :visible.sync="verifyV"
266
+ :title="isWyfk ? '异常提醒' : '校验结果' | $lc"
267
+ width="960px"
268
+ append-to-body
269
+ top="7.5vh"
270
+ >
196
271
  <div class="m-t m-b">
197
- <span class="m-r-ss">{{ '结果统计:' | $lc }}</span> {{ '共计校验' | $lc }}<span>{{ verifyMsg.checkSum }}</span
198
- >{{ '条,其中通过' | $lc }}<span class="color-success">{{ verifyMsg.checkSum - verifyMsg.errorCount }}</span
199
- >{{ '条,未通过' | $lc }}<span class="color-danger">{{ verifyMsg.errorCount }}</span
272
+ <span class="m-r-ss">{{ '结果统计:' | $lc }}</span>
273
+ {{ '共计校验' | $lc }}<span>{{ verifyMsg.checkSum }}</span
274
+ >{{ '条,其中通过' | $lc }}<span class="color-success">{{ verifyMsg.sucessCount }}</span> {{ $l('条,待确认')
275
+ }}<span class="color-warning">{{ verifyMsg.tobeConfirmedCount }}</span> {{ '条,未通过' | $lc
276
+ }}<span class="color-danger">{{ verifyMsg.errorCount }}</span
200
277
  >{{ '条,未通过详情如下:' | $lc }}
201
278
  </div>
279
+ <el-tag v-if="isWyfk && verifyMsg.tobeConfirmedCount > 0" type="warning" size="small" class="m-b-s">
280
+ {{ '风险指令' | $lc }}
281
+ </el-tag>
282
+ <el-tag v-if="isWyfk && verifyMsg.errorCount > 0" size="small" type="danger" class="m-b-s"
283
+ >{{ '异常指令' | $lc }}
284
+ </el-tag>
202
285
  <el-table :data="verifyMsg.checkFlowVoList" border max-height="400">
203
286
  <el-table-column type="index" :label="'序号' | $lc" align="center" width="50" />
204
287
  <el-table-column prop="businessId" :label="'业务流水号' | $lc" align="center" width="120" />
@@ -218,25 +301,45 @@
218
301
  </div>
219
302
  </template>
220
303
  </el-table-column>
221
- <el-table-column prop="errorMsg" :label="'不通过原因' | $lc" />
304
+ <el-table-column
305
+ v-if="isWyfk"
306
+ prop="errorMsg"
307
+ :label="verifyMsg.tobeConfirmedCount > 0 ? '风险命中原因' : '异常原因' | $lc"
308
+ />
309
+ <el-table-column v-else prop="errorMsg" :label="'不通过原因' | $lc" />
222
310
  </el-table>
223
311
  <span slot="footer">
224
312
  <div v-if="promptType === '1'">
225
- <el-button type="primary" @click="onContinue">{{ $l('继续审批') }}</el-button>
313
+ <el-button v-if="checkSum !== errorCount" type="primary" @click="onContinue">{{
314
+ $l(isWyfk ? '核实无误' : '继续审批')
315
+ }}</el-button>
226
316
  <el-button plain @click="onceCancelFn">{{ $l('取消') }}</el-button>
227
- <div class="m-t-s color-danger f-s-s">
228
- {{ $l('*点击【继续审批】将提交校验通过和待确认数据,未通过数据需要到待审核详情页处理。') }}
317
+ <div v-if="checkSum !== errorCount" class="m-t-s color-danger f-s-s">
318
+ <span v-if="isWyfk">
319
+ {{ $l('*点击【核实无误】将提交校验通过和待确认数据,未通过数据需要到待审核详情页处理。') }}</span
320
+ >
321
+ <span v-else>{{
322
+ $l('*点击【继续审批】将提交校验通过和待确认数据,未通过数据需要到待审核详情页处理。')
323
+ }}</span>
229
324
  </div>
230
325
  </div>
231
326
  <div v-if="promptType === '2'">
327
+ <el-button v-if="checkSum !== errorCount" type="primary" @click="onContinue">{{
328
+ $l(isWyfk ? '核实无误' : '继续审批')
329
+ }}</el-button>
232
330
  <el-button plain @click="onceCancelFn">{{ $l('取消') }}</el-button>
233
331
  </div>
234
332
  </span>
235
333
  </cl-dialog>
334
+ <!-- 选择审批人 -->
335
+ <cl-dialog v-drag :visible.sync="setSpr" :title="'设置下一步' | $lc" width="1100px" append-to-body top="7.5vh">
336
+ <selectSpr :select-spr-list="selectSprList" @close="setSpr = false" @confirm="selectSprListFn" />
337
+ </cl-dialog>
236
338
  </div>
237
339
  </template>
238
340
 
239
341
  <script>
342
+ import selectSpr from './selectSpr.vue'
240
343
  import getJsonc from '../../assets/getJsonc.js'
241
344
  import { closeTagsForBackPage } from '../../plugins/CompatibleOld'
242
345
  import axios from '../../utils/axios'
@@ -249,6 +352,8 @@ import CarboncopyProp from './setCarboncopyProp.vue'
249
352
  import RejectToProp from './setRejectToProp.vue'
250
353
  import ShowAppOpi from './showAppOpi.vue'
251
354
  import ShowOtherAtt from './showOtherAttr.vue'
355
+ import ShowOtherAttNew from './showOtherAttrNew.vue'
356
+ import ExpandablePane from '../Expandable/main.vue'
252
357
  import { toExaminePath } from './specialHandle'
253
358
  const prefixCls = 'n20-approval-Button'
254
359
  // window._approvalExtend = { 'addtask.chdUserInfo.extend': {}, 'appOpi.queryAppOpiAndUser.exist': undefined, 'card.countermand.suggestion': false }
@@ -260,14 +365,22 @@ if (!window._approvalExtend['addtask.chdUserInfo.extend']) {
260
365
  export default {
261
366
  name: 'ApprovalButtons',
262
367
  components: {
368
+ selectSpr,
263
369
  ClDialog,
264
370
  ClUpload,
265
371
  CarboncopyProp,
266
372
  RejectToProp,
267
373
  ShowAppOpi,
268
- ShowOtherAtt
374
+ ShowOtherAtt,
375
+ ShowOtherAttNew,
376
+ ExpandablePane
269
377
  },
270
378
  props: {
379
+ // 是否需要校验
380
+ isCheck: {
381
+ type: Boolean,
382
+ default: true
383
+ },
271
384
  message: {
272
385
  type: String,
273
386
  default: ''
@@ -316,6 +429,9 @@ export default {
316
429
  }
317
430
  }
318
431
  },
432
+ apiPrefix: {
433
+ type: String
434
+ },
319
435
  /**
320
436
  * 是否上传审批附件
321
437
  */
@@ -343,6 +459,12 @@ export default {
343
459
  data() {
344
460
  this.msgisSync = !!this.$listeners['update:message']
345
461
  return {
462
+ attributes: undefined,
463
+ isWyfk: false,
464
+ nextEgwOutgoingNodeId: undefined,
465
+ nextNodeApproveUnos: undefined,
466
+ selectSprList: undefined,
467
+ setSpr: false,
346
468
  requiredC: false,
347
469
  prefixCls,
348
470
  messageIn: '',
@@ -357,6 +479,7 @@ export default {
357
479
  setAddtaskV: false,
358
480
  addTaskList: [],
359
481
  addTaskType: '1',
482
+ addTaskTag: '',
360
483
  preAddTask: false,
361
484
  addTaskWay: undefined,
362
485
  rejectToV: false,
@@ -365,13 +488,36 @@ export default {
365
488
  opiAndUser: false,
366
489
  addTaskMode: '0',
367
490
  otherAtt: {},
491
+ customizationDtos: {},
368
492
  fileDtos: [],
369
493
  fileName: '',
370
494
  fileUrl: '',
371
495
  todoList: [],
372
496
  verifyV: false,
373
497
  verifyMsg: {},
374
- promptType: '0'
498
+ promptType: '0',
499
+ remarkOpt: [],
500
+ isShowRetrace: undefined,
501
+ isJump: undefined,
502
+ showFlowDialog: false,
503
+ IsShowUploadWidget: false,
504
+ showCustomItem: false,
505
+ isTakeOff: undefined,
506
+ sucessCount: 0,
507
+ errorCount: 0,
508
+ tobeConfirmedCount: 0,
509
+ checkSum: 0,
510
+ mustUploadWidget: false,
511
+ btnsNames: {
512
+ pass: this.$l('通过'),
513
+ refuse: this.$l('拒绝'),
514
+ takeOff: this.$l('请假'),
515
+ reject: this.$l('驳回至发起人'),
516
+ rejectPre: this.$l('驳回至上一节点'),
517
+ approval: this.$l('批 准'),
518
+ discard: this.$l('作 废'),
519
+ rejectTo: this.$l('驳回至')
520
+ }
375
521
  }
376
522
  },
377
523
  computed: {
@@ -392,8 +538,11 @@ export default {
392
538
  },
393
539
  fileKitT: {
394
540
  get() {
395
- return window.fileKit
541
+ return this.IsShowUploadWidget || this.fileKit || window.fileKit
396
542
  }
543
+ },
544
+ tips() {
545
+ return $lc(`此模式下被回退节点提交后将绕过中间已办节点,造成流程不严谨,谨慎使用!`)
397
546
  }
398
547
  },
399
548
  created() {
@@ -405,16 +554,86 @@ export default {
405
554
  this.getHasQueryAppOpiAndUser()
406
555
  this.nextApproval && this.getTodoList()
407
556
  this.getConfiguration()
557
+ this.getIsShowUploadWidget()
408
558
  },
409
559
  methods: {
560
+ // 查询选择审批人
561
+ async showAdvancePop() {
562
+ // 附件上传校验
563
+ if (this.mustUploadWidget && this.fileDtos.length === 0) {
564
+ this.$message.warning($lc(`请先上传附件`))
565
+ return false
566
+ }
567
+ this.beforeFn(this.beforeRatify, async () => {
568
+ try {
569
+ const res = await this.$axios.post(
570
+ '/bems/activiti/admin/todo/showAdvancePop',
571
+ {
572
+ isAgentcy: this.$route.query.isAgentcy,
573
+ taskId: this.$route.query.taskId
574
+ },
575
+ {
576
+ loading: false,
577
+ noMsg: true
578
+ }
579
+ )
580
+ // 如果返回正常 且有返回值 且showNextEgwOutgoingNodeName跟showNextNodeAssignee有一个为true
581
+ if (res.code === 200 && res.data && (res.data.showNextEgwOutgoingNodeName || res.data.showNextNodeAssignee)) {
582
+ this.setSpr = true
583
+ this.selectSprList = res.data
584
+ } else {
585
+ this.checkFlowFn()
586
+ }
587
+ } catch (error) {
588
+ console.log(error)
589
+ this.checkFlowFn()
590
+ }
591
+ })
592
+ },
593
+ // 选择审批人
594
+ selectSprListFn(data) {
595
+ console.log(data)
596
+ this.nextEgwOutgoingNodeId = data.nextEgwOutgoingNodeId
597
+ this.nextNodeApproveUnos = data.nextNodeApproveUnos
598
+ this.setSpr = false
599
+ this.checkFlowFn()
600
+ },
601
+ async getIsShowUploadWidget() {
602
+ const { processInstanceId: procInstId, taskId } = this.$route.query
603
+ let { code, data } = await this.$axios.get(
604
+ `/bems/activiti/admin/todo/isShowUploadWidget/${procInstId}/${taskId}`,
605
+ null,
606
+ {
607
+ loading: false,
608
+ noMsg: true
609
+ }
610
+ )
611
+ if (code === 200) {
612
+ if (Object.prototype.toString.call(data) === '[object Object]') {
613
+ this.IsShowUploadWidget = data.showUploadWidget
614
+ this.mustUploadWidget = data.mustUploadWidget
615
+ } else {
616
+ this.IsShowUploadWidget = data
617
+ }
618
+ }
619
+ console.log(code, data)
620
+ },
410
621
  // 意见是否必填
411
622
  getConfiguration() {
412
623
  getJsonc('portal/server-config.jsonc', null, true)
413
624
  .then(({ opinionRequired }) => {
414
625
  this.requiredC = opinionRequired ?? this.required
626
+ // 读取该工作流是否意见必填
627
+ if (this.$route.query.remarkIsMust !== undefined) {
628
+ this.requiredC = this.$route.query.remarkIsMust === '1'
629
+ }
415
630
  })
416
631
  .catch(() => {
417
632
  this.requiredC = this.required
633
+ // 读取该工作流是否意见必填
634
+ if (this.$route.query.remarkIsMust !== undefined) {
635
+ this.requiredC = this.$route.query.remarkIsMust === '1'
636
+ }
418
637
  })
419
638
  },
420
639
  getTodoList() {
@@ -432,14 +651,16 @@ export default {
432
651
  // 获取加签方式的模式
433
652
  getAddTaskMode() {
434
653
  axios
435
- .get(`/bems/activiti/sample/getAddTaskMode`, null, { loading: false, noMsg: true })
654
+ .get(`/bems/activiti/sample/getAddTaskMode`, null, {
655
+ loading: false,
656
+ noMsg: true
657
+ })
436
658
  .then(({ data, code }) => {
437
659
  if (code === 200) {
438
660
  this.addTaskMode = data
439
661
  }
440
662
  })
441
663
  },
442
-
443
664
  // 换回到发起页
444
665
  goFrom() {
445
666
  let pathname = location.pathname
@@ -453,7 +674,6 @@ export default {
453
674
  closeTagsForBackPage(pathname)
454
675
  })
455
676
  },
456
-
457
677
  // 动态获取按钮
458
678
  getBtns() {
459
679
  if (!this.taskId || !this.showBtn) return false
@@ -464,6 +684,12 @@ export default {
464
684
  noMsg: true
465
685
  })
466
686
  .then(({ data = {} }) => {
687
+ // 自定义按钮
688
+ if (data.customBtnName && data.customBtnName.length > 0) {
689
+ data.customBtnName.forEach((item) => {
690
+ this.btnsNames[item.key] = item.optionName
691
+ })
692
+ }
467
693
  let { taskDefKey, menuAuthority } = data
468
694
 
469
695
  this.taskDefKey = taskDefKey
@@ -476,6 +702,9 @@ export default {
476
702
  if (!(this.authList.includes('isAddtask') || this.authList.includes('isAddForwardTask'))) {
477
703
  this.getHasPreAddTask()
478
704
  }
705
+ if (this.authList.includes('isAddtask') || this.authList.includes('isAddForwardTask') || this.preAddTask) {
706
+ this.getMdmDataDoc()
707
+ }
479
708
  })
480
709
  .catch(() => {
481
710
  this.authList = this.btnList
@@ -500,7 +729,10 @@ export default {
500
729
  getHasPreAddTask() {
501
730
  if (this.showBtn && window._approvalExtend['appOpi.addTaskWay.exist'] === undefined) {
502
731
  axios
503
- .get('/bems/activiti/online/addTaskWay', null, { loading: false, noMsg: true })
732
+ .get('/bems/activiti/online/addTaskWay', null, {
733
+ loading: false,
734
+ noMsg: true
735
+ })
504
736
  .then(() => {
505
737
  this.preAddTask = window._approvalExtend['appOpi.addTaskWay.exist'] = true
506
738
  })
@@ -515,7 +747,10 @@ export default {
515
747
  getHasQueryAppOpiAndUser() {
516
748
  if (this.showBtn && window._approvalExtend['appOpi.queryAppOpiAndUser.exist'] === undefined) {
517
749
  axios
518
- .post('/bems/activiti/actAppOpi/queryAppOpiAndUser', null, { loading: false, noMsg: true })
750
+ .post('/bems/activiti/actAppOpi/queryAppOpiAndUser', null, {
751
+ loading: false,
752
+ noMsg: true
753
+ })
519
754
  .then(() => {
520
755
  this.opiAndUser = window._approvalExtend['appOpi.queryAppOpiAndUser.exist'] = true
521
756
  })
@@ -529,8 +764,16 @@ export default {
529
764
  // 获取提交参数
530
765
  getParam() {
531
766
  let { typeCode, taskId, groupNo, isAgentcy, isCheck } = this.$route.query
767
+ let customizationDtos
768
+ if (this.authList.includes('isShowOtherAtt')) {
769
+ customizationDtos = this.$refs['showOtherAttNew']?.getOtherAttData()
770
+ }
532
771
  return [
533
772
  {
773
+ attributes: this.attributes,
774
+ nextNodeApproveUnos: this.nextNodeApproveUnos,
775
+ nextEgwOutgoingNodeId: this.nextEgwOutgoingNodeId,
776
+ isTakeOff: this.isTakeOff,
534
777
  typeCode,
535
778
  taskId,
536
779
  groupNo,
@@ -542,14 +785,27 @@ export default {
542
785
  signText: this.signText,
543
786
  plainText: this.plainText,
544
787
  fileDtos: this.fileDtos,
545
- carbonCopyUserDtoList: this.carbonCopyList.map((c) => ({ userNo: c.uno, userName: c.uname })),
546
- addTaskList: this.addTaskList.map((c) => ({ userNo: c.uno, userName: c.uname })),
788
+ carbonCopyUserDtoList: this.carbonCopyList.map((c) => ({
789
+ userNo: c.uno,
790
+ userName: c.uname
791
+ })),
792
+ addTaskList: this.addTaskList.map((c) => ({
793
+ userNo: c.uno,
794
+ userName: c.uname
795
+ })),
547
796
  addTaskType: this.addTaskType,
797
+ addTaskTag: this.addTaskTag,
548
798
  addTaskWay: this.addTaskWay,
799
+ customizationDtos,
800
+ isJump: this.isJump,
549
801
  ...this.otherAtt
550
802
  }
551
803
  ]
552
804
  },
805
+ // 添加自定义参数
806
+ setParam(obj) {
807
+ Object.assign(this.otherAtt, obj)
808
+ },
553
809
  // 提交后的提示
554
810
  thenMsg(data = {}, str = $lc('操作')) {
555
811
  let { failCount, failList = {} } = data
@@ -568,6 +824,7 @@ export default {
568
824
  this.$message.error(str + $lc('失败'))
569
825
  }
570
826
  } else {
827
+ this.$emit('afterFn', str)
571
828
  this.$message.success(str + $lc('成功'))
572
829
  setTimeout(this.goFrom, 300)
573
830
  }
@@ -594,24 +851,56 @@ export default {
594
851
  F.then && F.then(callFn)
595
852
  }
596
853
  },
854
+ // 查询是否配置 允许不重走流程
855
+ async getIsShowRetraceFlow() {
856
+ try {
857
+ let { processInstanceId: procInstId } = this.$route.query
858
+ const { code, data } = await axios.get(
859
+ `/bems/activiti/admin/todo/isShowRetraceFlowOptions/${procInstId}/${this.taskId}`,
860
+ null,
861
+ {
862
+ loading: false,
863
+ noMsg: true
864
+ }
865
+ )
866
+ return code === 200 && data
867
+ } catch (error) {
868
+ console.error('查询是否配置允许不重走流程接口错误:', error)
869
+ return false
870
+ }
871
+ },
597
872
  // 驳回
598
- rejectFn() {
873
+ async rejectFn() {
599
874
  if (!this.messageC) {
600
- return this.errMsgFn($lc('驳回'))
875
+ return this.errMsgFn(this.authList.includes('refuse') ? $lc('拒绝') : $lc('驳回'))
601
876
  }
877
+ this.showFlowDialog = await this.getIsShowRetraceFlow()
878
+
879
+ if (!this.showFlowDialog) {
880
+ this.beforeFn(this.beforeReject, () => {
881
+ axios.post('/bems/activiti/admin/todo/reject', this.getParam()).then(({ data }) => {
882
+ this.thenMsg(data, this.authList.includes('refuse') ? $lc('拒绝') : $lc('驳回至发起人'))
883
+ })
884
+ })
885
+ }
886
+ },
887
+ handleIsJumpSave() {
888
+ this.showFlowDialog = false
602
889
  this.beforeFn(this.beforeReject, () => {
603
890
  axios.post('/bems/activiti/admin/todo/reject', this.getParam()).then(({ data }) => {
604
891
  this.thenMsg(data, $lc('驳回至发起人'))
605
892
  })
606
893
  })
607
894
  },
608
- rejectToB() {
895
+ async rejectToB() {
609
896
  if (!this.messageC) {
610
897
  return this.errMsgFn($lc('驳回'))
611
898
  }
899
+ this.isShowRetrace = await this.getIsShowRetraceFlow()
612
900
  this.rejectToV = true
613
901
  },
614
- rejectToFn(taskId) {
902
+ rejectToFn(taskId, isJump) {
903
+ this.isJump = isJump
615
904
  this.rejectToV = false
616
905
  let param = this.getParam()
617
906
  param.forEach((item) => {
@@ -635,9 +924,21 @@ export default {
635
924
  })
636
925
  },
637
926
  onContinue() {
927
+ if (this.isWyfk) {
928
+ this.attributes = {
929
+ ebsPaymentRiskWarning: '核实无误'
930
+ }
931
+ } else {
932
+ this.attributes = undefined
933
+ }
638
934
  this.verifyV = false
639
935
  this.approvalFn()
640
936
  },
937
+ qjFn() {
938
+ this.isTakeOff = '1'
939
+ this.checkFlowFn()
940
+ },
941
+
641
942
  async checkFlowFn() {
642
943
  if (this.requiredC && !this.messageC) {
643
944
  return this.errMsgFn(
@@ -648,13 +949,17 @@ export default {
648
949
  return this.addErrFn()
649
950
  }
650
951
  let { isCheck, taskId, appNo, groupNo, typeCode, orderId, isAgentcy } = this.$route.query
651
- if (isCheck === '1') {
952
+ this.isWyfk = ['PUBLIC_PAYMENT', 'BATCH_PERSON_PAYMENT'].includes(typeCode)
953
+ if (isCheck === '1' && this.isCheck) {
652
954
  let params = {
653
955
  plainText: '',
654
956
  signText: '',
655
957
  isCheck,
656
958
  auditAdvanceDtos: [
657
959
  {
960
+ isTakeOff: this.isTakeOff,
961
+ nextNodeApproveUnos: this.nextNodeApproveUnos,
962
+ nextEgwOutgoingNodeId: this.nextEgwOutgoingNodeId,
658
963
  appNo,
659
964
  taskId,
660
965
  groupNo,
@@ -668,16 +973,24 @@ export default {
668
973
  const { code, data } = await this.$axios.post(`/bems/activiti/admin/todo/checkFlowNew`, params)
669
974
  if (code === 200) {
670
975
  this.promptType = data.promptType
976
+ // 成功 失败 待确认 提交数据
977
+ this.sucessCount = data.sucessCount
978
+ this.errorCount = data.errorCount
979
+ this.tobeConfirmedCount = data.tobeConfirmedCount
980
+ this.checkSum = data.checkSum
671
981
  switch (data.promptType) {
672
982
  case '0':
673
983
  this.approvalFn()
674
984
  break
675
985
  case '1':
676
- this.verifyV = true
677
- this.verifyMsg = data
678
- break
679
986
  case '2':
680
- this.verifyV = true
987
+ // 只有通过的数据
988
+ if (this.sucessCount === this.checkSum) {
989
+ this.approvalFn()
990
+ } else {
991
+ this.verifyV = true
992
+ this.verifyMsg = data
993
+ }
681
994
  break
682
995
  }
683
996
  }
@@ -698,14 +1011,11 @@ export default {
698
1011
  if (this.addTaskList.length > 0 && !this.addTaskType) {
699
1012
  return this.addErrFn()
700
1013
  }
701
-
702
- this.beforeFn(this.beforeRatify, () => {
703
- axios.post('/bems/activiti/admin/todo/advance', this.getParam()).then(({ data }) => {
704
- this.thenMsg(
705
- data,
706
- this.authList.includes('byAddTask') && this.addTaskList.length > 0 ? $lc('加签') : $lc('批准')
707
- )
708
- })
1014
+ axios.post('/bems/activiti/admin/todo/advance', this.getParam()).then(({ data }) => {
1015
+ this.thenMsg(
1016
+ data,
1017
+ this.authList.includes('byAddTask') && this.addTaskList.length > 0 ? $lc('加签') : $lc('批准')
1018
+ )
709
1019
  })
710
1020
  },
711
1021
  approvalNext() {
@@ -778,6 +1088,16 @@ export default {
778
1088
  })
779
1089
  })
780
1090
  },
1091
+ // 获取数据字典加签备注
1092
+ async getMdmDataDoc() {
1093
+ const { code, data } = await this.$axios.get(`/bems/1.0/mdmDataDoc`, {
1094
+ typeCode: 'ADD_TASK_TAG'
1095
+ })
1096
+ if (code === 200) {
1097
+ this.remarkOpt = data || []
1098
+ }
1099
+ },
1100
+
781
1101
  // 作废
782
1102
  discardFn() {
783
1103
  if (!this.messageC) {
@@ -815,10 +1135,12 @@ export default {
815
1135
  })
816
1136
  },
817
1137
  onRemove(file, fileList) {
1138
+ this.fileName = ''
818
1139
  this.fileDtos = this.getFileDtos(fileList)
819
1140
  },
820
- onSuccess(file, row, fileList) {
1141
+ onSuccess(response, file, fileList) {
821
1142
  this.fileDtos = this.getFileDtos(fileList)
1143
+ this.fileName = file.name || ''
822
1144
  }
823
1145
  }
824
1146
  }