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
@@ -0,0 +1,161 @@
1
+ <template>
2
+ <div class="w-100p flex-column">
3
+ <div v-for="(item, i) in otherAttData" :key="i" class="flex-box flex-v">
4
+ <el-form-item
5
+ class="m-r-ss m-b-s"
6
+ :class="item.cfgHasRemark === '1' ? 'flex-auto' : 'flex-1'"
7
+ :label="item.cfgName"
8
+ >
9
+ <span slot="label">
10
+ <span v-if="required" style="color: red">*</span>
11
+ {{ item.cfgName }}
12
+ </span>
13
+ <el-input
14
+ v-if="['11'].includes(item.cfgType)"
15
+ v-model="item.cfgVal"
16
+ :type="'text'"
17
+ placeholder="请输入"
18
+ class="input-w"
19
+ clearable
20
+ />
21
+ <el-select
22
+ v-if="['21'].includes(item.cfgType)"
23
+ v-model="item.cfgVal"
24
+ class="flex-item input-w"
25
+ clearable
26
+ @change="(val) => changeFn(val, item)"
27
+ >
28
+ <el-option v-for="(row, i) in JSON.parse(item.cfgJson)" :key="i" :label="row.value" :value="row.code" />
29
+ </el-select>
30
+ <el-select
31
+ v-if="['31'].includes(item.cfgType)"
32
+ v-model="item.selectList"
33
+ multiple
34
+ collapse-tags
35
+ class="flex-item input-w"
36
+ clearable
37
+ @change="(val) => changeFn(val, item)"
38
+ >
39
+ <el-option v-for="(row, i) in JSON.parse(item.cfgJson)" :key="i" :label="row.value" :value="row.code" />
40
+ </el-select>
41
+ <el-radio-group
42
+ v-if="item.cfgType === '22'"
43
+ v-model="item.cfgVal"
44
+ class="input-w"
45
+ @change="(val) => changeFn(val, item)"
46
+ >
47
+ <el-radio v-for="(row, i) in JSON.parse(item.cfgJson)" :key="i" :label="row.code">{{ row.value }}</el-radio>
48
+ </el-radio-group>
49
+ <el-checkbox-group
50
+ v-if="item.cfgType === '32'"
51
+ v-model="item.checkList"
52
+ class="input-w"
53
+ @change="(val) => changeFn(val, item)"
54
+ >
55
+ <el-checkbox v-for="(row, i) in JSON.parse(item.cfgJson || '[]')" :key="i" :label="row.code">{{
56
+ row.value
57
+ }}</el-checkbox>
58
+ </el-checkbox-group>
59
+ <el-date-picker
60
+ v-if="item.cfgType === '33'"
61
+ v-model="item.cfgVal"
62
+ value-format="yyyy-MM-dd"
63
+ type="date"
64
+ class="input-w"
65
+ placeholder="选择日期"
66
+ />
67
+ </el-form-item>
68
+ <el-input
69
+ v-if="['12'].includes(item.cfgType)"
70
+ v-model="item.cfgVal"
71
+ :type="'textarea'"
72
+ placeholder="请输入"
73
+ class="w-100p m-r-ss m-b-s flex-1"
74
+ clearable
75
+ />
76
+ <el-input
77
+ v-if="item.cfgHasRemark === '1' && !['11', '12'].includes(item.cfgType)"
78
+ v-model="item.cfgRemark"
79
+ class="w-100p m-r-ss m-b-s flex-1"
80
+ placeholder="请输入备注"
81
+ />
82
+ </div>
83
+ </div>
84
+ </template>
85
+
86
+ <script>
87
+ import axios from '../../utils/axios'
88
+ export default {
89
+ props: {
90
+ taskId: {
91
+ type: [String, Number],
92
+ default: ''
93
+ },
94
+ form: {
95
+ type: Object,
96
+ default: () => ({})
97
+ },
98
+ otherAttDataA: {
99
+ type: Array,
100
+ default: () => {
101
+ return []
102
+ }
103
+ },
104
+ required: {
105
+ type: Boolean,
106
+ default: false
107
+ }
108
+ },
109
+ data() {
110
+ return {
111
+ checkList: [],
112
+ selectList: [],
113
+ otherAttData: []
114
+ }
115
+ },
116
+ mounted() {
117
+ this.getData(this.otherAttDataA)
118
+ },
119
+ methods: {
120
+ getData(data) {
121
+ if (data.length) {
122
+ this.otherAttData = data
123
+ }
124
+ if (this.taskId) {
125
+ axios.post(`/bems/admin/customization/${this.taskId}`, null, { loading: false }).then(({ data }) => {
126
+ if (data && data.length) {
127
+ this.otherAttData = data || []
128
+ }
129
+ })
130
+ }
131
+ },
132
+ changeFn(val, item) {
133
+ if (['31', '32'].includes(item.cfgType)) {
134
+ const cfgJson = JSON.parse(item.cfgJson)
135
+ item.cfgText = val
136
+ ?.map((s) => cfgJson?.find((row) => row.code === s)?.value)
137
+ ?.filter((s) => s)
138
+ .join(',')
139
+ item.cfgVal = val?.join(',')
140
+ }
141
+ if (['22', '21'].includes(item.cfgType)) {
142
+ const cfgJson = JSON.parse(item.cfgJson)
143
+ item.cfgText = cfgJson.find((row) => row.code === val)?.value
144
+ item.cfgVal = val
145
+ }
146
+ },
147
+ getOtherAttData() {
148
+ return this.otherAttData?.map((item) => {
149
+ return {
150
+ cfgName: item.cfgName,
151
+ cfgKey: item.cfgKey,
152
+ cfgVal: Array.isArray(item.cfgVal) ? item.cfgVal.join(',') : item.cfgVal,
153
+ cfgText: Array.isArray(item.cfgText) ? item.cfgText.join(',') : item.cfgText,
154
+ cfgHasRemark: item.cfgHasRemark,
155
+ cfgRemark: item.cfgRemark
156
+ }
157
+ })
158
+ }
159
+ }
160
+ }
161
+ </script>
@@ -10,14 +10,18 @@
10
10
  <div>
11
11
  <div v-if="item.result === 0" class="flex-box flex-v">
12
12
  <div v-title="item.assignee" class="w-full n20-worker p-r-s text-ellipsis" :show-overflow-tooltip="true">
13
- {{ item.assignee }}
13
+ {{ $lc(item.assignee) }}
14
14
  </div>
15
15
  </div>
16
16
  <div v-if="item.result === 5" class="flex-box">
17
- <div class="result-left-name" :class="item | typeF(status, 'color-')">{{ $lc(item.resultName) }}</div>
17
+ <div class="result-left-name" :class="item | typeF(status, 'color-')">
18
+ {{ $lc(item.resultName) }}
19
+ </div>
18
20
  </div>
19
21
  <div v-else class="flex-box">
20
- <div class="result-left-name" :class="item | typeF(status, 'color-')">{{ $lc(item.resultName) }}</div>
22
+ <div class="result-left-name" :class="item | typeF(status, 'color-')">
23
+ {{ $lc(item.resultName) }}
24
+ </div>
21
25
  <div
22
26
  v-title="item.assignee"
23
27
  class="flex-box flex-item n20-worker m-r-s text-ellipsis"
@@ -31,6 +35,23 @@
31
35
  >
32
36
  {{ item.memberName }}
33
37
  </div>
38
+ <div
39
+ v-title="item.deptName"
40
+ :show-overflow-tooltip="true"
41
+ class="flex-item n20-worker m-r-s text-ellipsis"
42
+ style="width: 250px"
43
+ >
44
+ {{ item.deptName }}
45
+ </div>
46
+ <div
47
+ v-if="item.job"
48
+ v-title="item.job"
49
+ :show-overflow-tooltip="true"
50
+ class="flex-item n20-worker m-r-s text-ellipsis"
51
+ style="width: 250px"
52
+ >
53
+ {{ item.job }}
54
+ </div>
34
55
  <div
35
56
  v-title="item.roleName"
36
57
  class="flex-item n20-worker text-ellipsis"
@@ -51,29 +72,33 @@
51
72
  <div
52
73
  v-if="item.result !== 0 && item.appOrPc !== null && item.appOrPc !== '' && item.appOrPc !== undefined"
53
74
  >
54
- {{ item.appOrPc === '1' ? 'PC端审批' : 'App端审批' }}
75
+ {{ item.appOrPc === '1' ? 'PC端审批' : item.appOrPc === '2' ? '外部系统审批' : 'App端审批' | $lc }}
55
76
  </div>
56
- <div class="m-l-s" v-if="item.showConnect === '1'">
77
+ <div v-if="item.showConnect === '1'" class="m-l-s">
57
78
  <span class="pointer color-ccc f-s-s" @click="seeDetail(item)"
58
- >查看详情 <i class="el-icon-arrow-right"></i
79
+ >{{ '查看详情' | $lc }} <i class="el-icon-arrow-right"></i
59
80
  ></span>
60
81
  </div>
61
82
  </div>
62
83
  </div>
63
84
 
64
85
  <div v-if="item.ccUserName" class="n20-description-c m-t">{{ '抄送人:' | $lc }}{{ item.ccUserName }}</div>
65
- <div v-if="item.addTaskName" class="n20-description-c m-t">
66
- {{ '加签审批人:' | $lc }}{{ item.addTaskName }}
86
+ <div class="n20-description-c m-t flex-box flex-v">
87
+ <el-tag v-if="item.addTaskTag" class="m-r-s" effect="plain" type="info">{{
88
+ item.addTaskTag | remarkF(remarkOpt)
89
+ }}</el-tag>
90
+ <span v-if="item.addTaskName">{{ '加签审批人:' | $lc }}{{ item.addTaskName }}</span>
67
91
  </div>
92
+
68
93
  <template v-if="item.resultName !== '撤回' || showCtdMsg">
69
94
  <div v-if="item.subProcInitId" class="n20-description-c n20-description-bgc m-t p-a-s">
70
95
  <span class="color-primary pointer" @click="seeApproveChild(item.subProcInitId)"
71
96
  >{{ item.suggestion }}<i class="n20-icon-shouqizhedie f-s-m"></i
72
97
  ></span>
73
98
 
74
- <div class="n20-approve-wrap-children" v-if="showChildTimeline">
99
+ <div v-if="showChildTimeline" class="n20-approve-wrap-children">
75
100
  <el-timeline :reverse="true">
76
- <el-timeline-item
101
+ <div
77
102
  v-for="(row, i) in approvalChildrenData"
78
103
  :key="i"
79
104
  :type="row | typeF(status)"
@@ -83,7 +108,7 @@
83
108
  <div>{{ row.endTime | dataF }}</div>
84
109
  <div>{{ row.endTime | timeF }}</div>
85
110
  </div>
86
- <div>
111
+ <template>
87
112
  <div v-if="row.result === 0" class="flex-box flex-v">
88
113
  <div
89
114
  v-title="row.assignee"
@@ -115,6 +140,14 @@
115
140
  >
116
141
  {{ row.memberName }}
117
142
  </div>
143
+ <div
144
+ v-title="row.deptName"
145
+ :show-overflow-tooltip="true"
146
+ class="flex-item n20-worker m-r-s text-ellipsis"
147
+ style="width: 250px"
148
+ >
149
+ {{ row.deptName }}
150
+ </div>
118
151
  <div
119
152
  v-title="row.roleName"
120
153
  class="flex-item n20-worker text-ellipsis"
@@ -140,20 +173,101 @@
140
173
  <div v-if="row.addTaskName" class="n20-description-c m-t">
141
174
  {{ '加签审批人:' | $lc }}{{ row.addTaskName }}
142
175
  </div>
143
- <template v-if="row.resultName !== '撤回' || showCtdMsg">
176
+ <div v-if="row.resultName !== '撤回' || showCtdMsg">
144
177
  <div v-if="row.suggestion" class="n20-description-c n20-description-bgc m-t p-a-s">
145
178
  <span v-if="row.result !== status.waiting">{{ '审批意见:' | $lc }}</span>
146
- <span>{{ row.suggestion }} </span>
179
+ <span style="line-height: 22px">{{ row.suggestion }} </span>
147
180
  </div>
148
- </template>
149
- </div>
150
- </el-timeline-item>
181
+ <div
182
+ v-if="row.flowHistoryCfgs && row.flowHistoryCfgs.length"
183
+ class="n20-description-c m-t p-a-s"
184
+ >
185
+ <span
186
+ v-if="row.result !== status.waiting"
187
+ class="color-primary pointer"
188
+ @click="showFlowHistoryChild = !showFlowHistoryChild"
189
+ >{{ '审查意见:' | $lc }} <i class="n20-icon-shouqizhedie f-s-m"></i
190
+ ></span>
191
+ <div v-show="showFlowHistoryChild" class="n20-description-bgc p-a-s">
192
+ <div v-for="(s, i) in row.flowHistoryCfgs" :key="i">
193
+ {{ s.cfgName }}:{{ s.cfgText ? s.cfgText : s.cfgVal }}
194
+ </div>
195
+ </div>
196
+ </div>
197
+ </div>
198
+ <div
199
+ v-if="row.flowHisFileList"
200
+ class="n20-description-c n20-description-bgc"
201
+ style="margin-top: 0 !important"
202
+ >
203
+ <span>{{ '附件信息' | $lc }}:</span>
204
+ <div class="flex-box">
205
+ <div
206
+ v-for="(res, i) in row.flowHisFileList"
207
+ :key="i"
208
+ class="m-a-ss color-primary pointer"
209
+ @click="preview(res)"
210
+ >
211
+ {{ res.fileName }}
212
+ </div>
213
+ </div>
214
+ <Dialog
215
+ v-drag
216
+ class="p-a-0"
217
+ :title="'附件预览' | $lc"
218
+ :visible.sync="visibleP"
219
+ top="2vh"
220
+ width="96%"
221
+ :close-on-click-modal="false"
222
+ @close="closeSee"
223
+ >
224
+ <span class="file-upload-table_preview-pn">
225
+ <el-button plain size="mini" @click="downFile(seeRow)">下载</el-button>
226
+ </span>
227
+ <div v-if="visibleP" class="p-a" style="height: 82vh">
228
+ <!-- <ViewerImg v-if="imgType.test(previewName)" :options="viewerOptions" style="height: 100%">
229
+ <img :src="previewUrl" :alt="previewName" style="display: none" />
230
+ </ViewerImg> -->
231
+ <component
232
+ :is="previewSameOrg ? 'object' : 'div'"
233
+ :key="previewUrl"
234
+ :data="previewUrl"
235
+ style="width: 100%; height: 100%"
236
+ >
237
+ <div class="flex-column flex-c flex-v" style="height: 100%">
238
+ <i class="el-icon-s-release" style="font-size: 60px; color: #999"></i>
239
+ <span style="margin-top: 16px">
240
+ {{ '不支持在线预览,请' | $lc
241
+ }}<el-link type="primary" @click="downFile(seeRow)">{{ '下载' | $lc }}</el-link
242
+ >{{ '到本地查看' | $lc }}
243
+ </span>
244
+ </div>
245
+ </component>
246
+ </div>
247
+ </Dialog>
248
+ </div>
249
+ </template>
250
+ </div>
151
251
  </el-timeline>
152
252
  </div>
153
253
  </div>
154
254
  <div v-if="!item.subProcInitId && item.suggestion" class="n20-description-c n20-description-bgc m-t p-a-s">
155
255
  <span v-if="item.result !== status.waiting">{{ '审批意见:' | $lc }}</span>
156
- <span>{{ item.suggestion }} </span>
256
+ <span style="line-height: 22px">{{ item.suggestion }} </span>
257
+ </div>
258
+ <div v-if="item.flowHistoryCfgs && item.flowHistoryCfgs.length" class="n20-description-c m-t p-a-s">
259
+ <span
260
+ v-if="item.result !== status.waiting"
261
+ class="color-primary pointer"
262
+ @click="showFlowHistory = !showFlowHistory"
263
+ >{{ '审查意见:' | $lc }}<i class="n20-icon-shouqizhedie f-s-m"></i
264
+ ></span>
265
+ <div v-show="showFlowHistory" class="n20-description-bgc p-a-s">
266
+ <div v-for="(s, i) in item.flowHistoryCfgs" :key="i" class="p-b-s">
267
+ <div>{{ s.cfgName }}:{{ s.cfgText ? s.cfgText : s.cfgVal }}</div>
268
+ <div>{{ s.cfgRemark }}</div>
269
+ </div>
270
+ </div>
157
271
  </div>
158
272
  <div v-if="item.flowHisFileList" class="n20-description-c n20-description-bgc m-t p-a-s">
159
273
  <span>{{ '附件信息' | $lc }}:</span>
@@ -181,12 +295,11 @@
181
295
  <el-button plain size="mini" @click="downFile(seeRow)">下载</el-button>
182
296
  </span>
183
297
  <div v-if="visibleP" class="p-a" style="height: 82vh">
184
- <ViewerImg v-if="imgType.test(previewName)" :options="viewerOptions" style="height: 100%">
298
+ <!-- <ViewerImg v-if="imgType.test(previewName)" :options="viewerOptions" style="height: 100%">
185
299
  <img :src="previewUrl" :alt="previewName" style="display: none" />
186
- </ViewerImg>
300
+ </ViewerImg> -->
187
301
  <component
188
302
  :is="previewSameOrg ? 'object' : 'div'"
189
- v-else
190
303
  :key="previewUrl"
191
304
  :data="previewUrl"
192
305
  style="width: 100%; height: 100%"
@@ -244,6 +357,8 @@ export default {
244
357
  return prefix + 'danger'
245
358
  case status.end:
246
359
  return prefix + 'primary'
360
+ case status.revocation:
361
+ return prefix + 'warning'
247
362
  default:
248
363
  return undefined
249
364
  }
@@ -257,9 +372,16 @@ export default {
257
372
  let t = _t || ''
258
373
  let ts = t.split(' ') || ['', '']
259
374
  return ts[1]
375
+ },
376
+ remarkF(val, list) {
377
+ return list?.find((item) => item.code === val)?.name || val
260
378
  }
261
379
  },
262
380
  props: {
381
+ apiPrefix: {
382
+ type: String,
383
+ default: undefined
384
+ },
263
385
  close: {
264
386
  type: Boolean,
265
387
  default: false
@@ -272,7 +394,8 @@ export default {
272
394
  approval: 2,
273
395
  reject: 3,
274
396
  invalid: 4,
275
- end: 5
397
+ end: 5,
398
+ revocation: 6
276
399
  })
277
400
  },
278
401
  approvalData: {
@@ -296,6 +419,7 @@ export default {
296
419
  navbar: false,
297
420
  button: false,
298
421
  title: true,
422
+
299
423
  toolbar: {
300
424
  zoomIn: true,
301
425
  zoomOut: true,
@@ -311,17 +435,20 @@ export default {
311
435
  }
312
436
  }
313
437
  return {
438
+ remarkOpt: [],
314
439
  showChildTimeline: false,
315
440
  approvalChildrenData: [],
316
441
  // 显示撤回意见,默认不显示
317
442
  showCtdMsg: window._approvalExtend['card.countermand.suggestion'] === true,
318
443
  visibleP: false,
319
444
  previewUrl: '',
320
- imgType: /\.(jpg|png|gif|svg)$/i,
445
+ imgType: /\.(jpg|png1|gif|svg)$/i,
321
446
  previewName: '',
322
447
  previewSameOrg: false,
323
448
  seeTypes: /\.(jpg|png|gif|svg|pdf|swf|xlsx|xls|docx|doc)$/i,
324
- seeRow: {}
449
+ seeRow: {},
450
+ showFlowHistory: true,
451
+ showFlowHistoryChild: true
325
452
  }
326
453
  },
327
454
  async created() {
@@ -334,7 +461,7 @@ export default {
334
461
  async seeDetail(item) {
335
462
  const { appUrl = {} } = await getJsonc('activiti/server-config.jsonc', null, true)
336
463
  if (appUrl[item._details.appNo]) {
337
- let path = appUrl[item._details.appNo] + $l('/') + item._details.typeCode
464
+ let path = appUrl[item._details.appNo] + '/' + item._details.typeCode
338
465
  linkPush(path, {
339
466
  taskId: item._details.taskId,
340
467
  typeCode: item._details.typeCode,
@@ -363,9 +490,12 @@ export default {
363
490
  },
364
491
  { loading: !this.hideLoading }
365
492
  )
493
+
366
494
  let approvalData = []
367
495
  data?.forEach((item) => {
368
496
  let _item = {
497
+ job: item.job || '',
498
+ isShow: item.isShow, //是否显示
369
499
  endTime: item.endTime || '',
370
500
  assignee: item.assignee,
371
501
  suggestion: item.suggestion,
@@ -377,17 +507,27 @@ export default {
377
507
  subProcInitId: item.subProcInitId, // 子流程id
378
508
  appOrPc: item.appOrPc, // 终端标识 1 PC 2 APP
379
509
  showConnect: item.showConnect, // 是否显示查看详情
380
- _details: item
510
+ _details: item,
511
+ deptName: item.deptName, // 部门
512
+ addTaskTag: item.addTaskTag, // 加签备注
513
+ flowHistoryCfgs: item.flowHistoryCfgs // 自定义字段
514
+ }
515
+ if (_item.addTaskTag && this.remarkOpt?.length === 0) {
516
+ this.getMdmDataDoc()
381
517
  }
382
518
  let resultName = item.optResult || ''
383
519
  resultName = resultName.split('-')
384
520
  resultName = resultName[resultName.length - 1]
385
521
  _item.resultName = resultName === $lc('推进') ? $lc('批准') : resultName
522
+ _item.resultNameA = resultName === $lc('推进') ? $lc('批准') : resultName
523
+ if (item.optName) {
524
+ _item.resultName = item.optName
525
+ }
386
526
  if (item.taskName === $lc('开始')) {
387
527
  _item.result = 1
388
- } else if (_item.resultName === $lc('加签推进')) {
528
+ } else if (_item.resultNameA === $lc('加签推进')) {
389
529
  _item.result = 2
390
- } else if (_item.resultName === $lc('作废')) {
530
+ } else if (_item.resultNameA === $lc('作废')) {
391
531
  _item.result = 4
392
532
  } else if (item.taskName === $lc('结束')) {
393
533
  _item.result = 5
@@ -403,7 +543,18 @@ export default {
403
543
 
404
544
  approvalData.push(_item)
405
545
  })
406
- return approvalData
546
+ return (
547
+ approvalData?.filter((item) => {
548
+ return item.isShow !== '0'
549
+ }) || []
550
+ )
551
+ },
552
+ // 获取数据字典加签备注
553
+ async getMdmDataDoc() {
554
+ const { code, data } = await axios.get(`/bems/1.0/mdmDataDoc?t=${Math.random()}`, { typeCode: 'ADD_TASK_TAG' })
555
+ if (code === 200) {
556
+ this.remarkOpt = data || []
557
+ }
407
558
  },
408
559
  async preview(row) {
409
560
  this.visibleP = true
@@ -418,22 +569,17 @@ export default {
418
569
  this.visibleP = false
419
570
  },
420
571
  async downFile(row) {
421
- const blob = await axios.get(`/api/neams/eamsbaserecord/download/${row.beid}`, null, {
422
- responseType: 'blob',
423
- loading: false
424
- })
425
- let url = URL.createObjectURL(blob)
426
- if (url) {
427
- let aDom = document.createElement('a')
428
- aDom.href = url
429
- aDom.download = row.fileName
430
- aDom.click()
431
-
432
- this.$nextTick(() => {
433
- aDom = undefined
434
- url && URL.revokeObjectURL(url)
435
- })
436
- }
572
+ const blob = await axios.get(
573
+ this.apiPrefix
574
+ ? this.apiPrefix + `/neams/eamsbaserecord/download/${row.beid}`
575
+ : `/neams/eamsbaserecord/download/${row.beid}`,
576
+ null,
577
+ {
578
+ responseType: 'blob',
579
+ loading: false
580
+ }
581
+ )
582
+ this.$downloadBlob(blob, blob.name)
437
583
  }
438
584
  }
439
585
  }