vue2-client 1.22.7 → 1.22.8

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 (88) hide show
  1. package/.env.his +19 -19
  2. package/.idea/CopilotChatHistory.xml +39 -0
  3. package/.idea/MarsCodeWorkspaceAppSettings.xml +8 -0
  4. package/.idea/af-vue2-client.iml +7 -4
  5. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  6. package/.idea/migrateChatHistory.xml +10 -0
  7. package/package.json +1 -1
  8. package/src/base-client/components/common/HIS/HForm/HForm.vue +1186 -1186
  9. package/src/base-client/components/common/XFormTable/demo.vue +134 -53
  10. package/src/base-client/components/common/XInspectionDetailDrawer/components/InspectionSummary.vue +8 -0
  11. package/src/base-client/components/common/XInspectionDetailDrawer/services/inspectionService.js +6 -1
  12. package/src/base-client/components/common/XMarkdownViewer/demo.vue +102 -102
  13. package/src/base-client/components/his/XTransfer/index.md +327 -327
  14. package/src/pages/WorkflowDetail/WorkFlowDemo4.vue +127 -0
  15. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +417 -417
  16. package/.history/.eslintrc_20260521171150.js +0 -74
  17. package/.history/.eslintrc_20260521171213.js +0 -74
  18. package/.history/src/base-client/components/common/HIS/HAddNativeForm/HAddNativeForm_20260601154443.vue +0 -726
  19. package/.history/src/base-client/components/common/HIS/HAddNativeForm/HAddNativeForm_20260601154700.vue +0 -478
  20. package/.history/src/base-client/components/common/HIS/HButtons/HButtons_20260512175435.vue +0 -706
  21. package/.history/src/base-client/components/common/HIS/HButtons/HButtons_20260512175450.vue +0 -694
  22. package/.history/src/base-client/components/common/HIS/HButtons/HButtons_20260611152602.vue +0 -755
  23. package/.history/src/base-client/components/common/HIS/HForm/HForm_20260513145941.vue +0 -524
  24. package/.history/src/base-client/components/common/HIS/HForm/HForm_20260513153133.vue +0 -731
  25. package/.history/src/base-client/components/common/HIS/HForm/HForm_20260513160316.vue +0 -525
  26. package/.history/src/base-client/components/common/HIS/HForm/HForm_20260601144150.vue +0 -1046
  27. package/.history/src/base-client/components/common/HIS/HFormTable/HFormTable_20260310142713.vue +0 -512
  28. package/.history/src/base-client/components/common/HIS/HFormTable/HFormTable_20260310145118.vue +0 -511
  29. package/.history/src/base-client/components/common/HIS/HFormTable/HFormTable_20260311094834.vue +0 -696
  30. package/.history/src/base-client/components/common/HIS/HFormTable/HFormTable_20260320143028.vue +0 -693
  31. package/.history/src/base-client/components/common/HIS/HFormTable/HFormTable_20260409101450.vue +0 -677
  32. package/.history/src/base-client/components/common/HIS/HTab/HTab_20260508164645.vue +0 -758
  33. package/.history/src/base-client/components/common/HIS/HTab/HTab_20260508164714.vue +0 -693
  34. package/.history/src/base-client/components/common/HIS/HTab/HTab_20260508171651.vue +0 -716
  35. package/.history/src/base-client/components/common/HIS/HTab/HTab_20260509133717.vue +0 -695
  36. package/.history/src/base-client/components/common/HIS/HTab/HTab_20260509171115.vue +0 -664
  37. package/.history/src/base-client/components/common/XAddNativeForm/XAddNativeForm_20260513140637.vue +0 -1455
  38. package/.history/src/base-client/components/common/XAddNativeForm/XAddNativeForm_20260513140935.vue +0 -1441
  39. package/.history/src/base-client/components/common/XAddNativeForm/XAddNativeForm_20260513150818.vue +0 -1441
  40. package/.history/src/base-client/components/common/XAddNativeForm/XAddNativeForm_20260513153119.vue +0 -1442
  41. package/.history/src/base-client/components/common/XAddNativeForm/XAddNativeForm_20260513153126.vue +0 -1486
  42. package/.history/src/base-client/components/common/XForm/XFormItem_20260513140854.vue +0 -1607
  43. package/.history/src/base-client/components/common/XMarkdownViewer/XMarkdownViewer_20260519140403.vue +0 -643
  44. package/.history/src/base-client/components/common/XMarkdownViewer/XMarkdownViewer_20260519140829.vue +0 -628
  45. package/.history/src/base-client/components/common/XMarkdownViewer/demo_20260519142824.vue +0 -104
  46. package/.history/src/base-client/components/common/XMarkdownViewer/demo_20260519143155.vue +0 -102
  47. package/.history/src/base-client/components/common/XReportGrid/XReport_20260309171231.vue +0 -1241
  48. package/.history/src/base-client/components/common/XReportGrid/XReport_20260309171441.vue +0 -1223
  49. package/.history/src/base-client/components/his/HAi/HAi_20260612174826.vue +0 -472
  50. package/.history/src/base-client/components/his/HAi/HAi_20260612175839.vue +0 -538
  51. package/.history/src/base-client/components/his/HAi/HAi_20260615103331.vue +0 -650
  52. package/.history/src/base-client/components/his/XHDescriptions/XHDescriptions_20260424134504.vue +0 -1469
  53. package/.history/src/base-client/components/his/XSidebar/XSidebar_20260610171133.vue +0 -788
  54. package/.history/src/base-client/components/his/XSidebar/XSidebar_20260610171151.vue +0 -780
  55. package/.history/src/base-client/components/his/XTransfer/XTransfer_20260511170841.vue +0 -585
  56. package/.history/src/base-client/components/his/XTransfer/XTransfer_20260511171138.vue +0 -787
  57. package/.history/src/base-client/components/his/XTransfer/XTransfer_20260512141830.vue +0 -739
  58. package/.history/src/components/STable/index_20260409155138.js +0 -806
  59. package/.history/src/components/STable/index_20260409155218.js +0 -814
  60. package/.history/src/expression/core/Expression_20260305164427.js +0 -1371
  61. package/.history/src/expression/core/Expression_20260305170258.js +0 -1358
  62. package/.history/src/expression/core/Program_20260305111830.js +0 -944
  63. package/.history/src/expression/core/Program_20260305112041.js +0 -931
  64. package/.history/src/logic/LogicRunner_20260304154306.js +0 -170
  65. package/.history/src/logic/LogicRunner_20260304155553.js +0 -112
  66. package/.history/src/logic/LogicRunner_20260305105834.js +0 -112
  67. package/.history/src/logic/LogicRunner_20260305112718.js +0 -129
  68. package/.history/src/logic/LogicRunner_20260305182436.js +0 -133
  69. package/.history/src/logic/LogicRunner_20260306151301.js +0 -213
  70. package/.history/src/logic/LogicRunner_20260306152419.js +0 -213
  71. package/.history/src/logic/plugins/common/DateTools_20260305154159.js +0 -61
  72. package/.history/src/logic/plugins/common/DateTools_20260305154217.js +0 -44
  73. package/.history/src/logic/plugins/common/DateTools_20260305161014.js +0 -44
  74. package/.history/src/logic/plugins/common/HttpTools_20260305164352.js +0 -80
  75. package/.history/src/logic/plugins/common/HttpTools_20260305170258.js +0 -75
  76. package/.history/src/logic/plugins/common/HttpTools_20260305171634.js +0 -75
  77. package/.history/src/logic/plugins/common/HttpTools_20260306152419.js +0 -72
  78. package/.history/src/services/api/restTools_20260427142149.js +0 -245
  79. package/.history/src/services/api/restTools_20260427142853.js +0 -230
  80. package/.history/src/services/api/restTools_20260519135558.js +0 -230
  81. package/.history/src/services/api/restTools_20260519140825.js +0 -230
  82. package/.history/src/services/api/restTools_20260519151223.js +0 -230
  83. package/.history/src/utils/indexedDB_20260306150918.js +0 -593
  84. package/.history/src/utils/indexedDB_20260306151301.js +0 -586
  85. package/.idea/codeStyles/Project.xml +0 -62
  86. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  87. package/.idea/misc.xml +0 -6
  88. package/preview-input-box.html +0 -180
@@ -1,417 +1,417 @@
1
- <template>
2
- <div id="ApplyBaseInformation">
3
- <a-card :loading="loading" :bordered="false" class="info-card-container">
4
- <div class="info-cards-wrapper">
5
- <!-- 正在进行 -->
6
- <div class="info-card">
7
- <div class="info-icon" :class="details.f_state === 1 ? 'status-completed' : 'status-progress'">
8
- <a-icon type="appstore" theme="filled" />
9
- </div>
10
- <div class="info-content">
11
- <div v-if="showProjectPerson" class="info-title">
12
- {{ details.f_entry_name }}
13
- <a-popover placement="bottom">
14
- <template slot="content">
15
- <div v-if="details.person.f_projectadmin">项目经理:{{ details.person.f_projectadmin }}</div>
16
- <div v-if="details.person.f_shangwuren">客户经理:{{ details.person.f_shangwuren }}</div>
17
- <div v-if="details.person.f_salemanager">销售经理:{{ details.person.f_salemanager }}</div>
18
- <div v-if="details.person.f_egionaladministrator">大区经理:{{ details.person.f_egionaladministrator }}</div>
19
- </template>
20
- <a-icon type="info-circle" class="info-icon-small" />
21
- </a-popover>
22
- </div>
23
- <div v-else class="info-title">{{ details.f_task_name }}</div>
24
- <div class="info-label" :class="details.f_state === 1 ? 'status-completed-text' : 'status-progress-text'">
25
- {{ `工单状态:${details.f_state === 1 ? '完工' : '正在进行'}` }}
26
- </div>
27
- </div>
28
- </div>
29
-
30
- <!-- 流程信息 -->
31
- <div v-show="details.f_state !== 1" class="info-card">
32
- <div class="info-icon workflow-icon">
33
- <a-icon type="profile" theme="filled" />
34
- </div>
35
- <div class="info-content">
36
- <div class="info-title">{{ details.f_workflow_define_name }}</div>
37
- <div class="info-label">{{ `当前流程节点:${details.f_sub_state}` }}</div>
38
- </div>
39
- </div>
40
-
41
- <!-- 创建日期 -->
42
- <div class="info-card">
43
- <div class="info-icon date-icon">
44
- <a-icon type="carry-out" theme="filled" />
45
- </div>
46
- <div class="info-content">
47
- <div class="info-title">{{ format(details.f_workflow_date, 'yyyy-MM-dd') }}</div>
48
- <div class="info-label">创建日期</div>
49
- </div>
50
- </div>
51
-
52
- <!-- 截止时间 -->
53
- <div class="info-card" title="若要修改完成时间,请通知部门领导进行修改!">
54
- <div class="info-icon time-icon">
55
- <a-icon type="clock-circle" theme="filled" />
56
- <a-dropdown>
57
- <a-icon type="down" class="dropdown-icon" />
58
- <a-menu slot="overlay">
59
- <a-menu-item @click="showChangeRecord">修改记录</a-menu-item>
60
- </a-menu>
61
- </a-dropdown>
62
- </div>
63
- <div class="info-content">
64
- <div class="info-title">
65
- {{ format(details.f_complete_time, 'yyyy-MM-dd') }}
66
- <!-- 修改任务时间 -->
67
- <a-popover v-if="isCreatedBy" v-model="openCompleteTime" title="修改任务时间" trigger="click">
68
- <template slot="content">
69
- <a-form-item label="任务整体完成时间" :label-col="{ span: 10 }" :wrapper-col="{ span: 14 }">
70
- <a-date-picker
71
- v-model="completeTime"
72
- :disabled-date="disabledDate"
73
- :show-today="false"
74
- :allow-clear="false"
75
- value-format="YYYY-MM-DD HH:mm:ss"
76
- >
77
- </a-date-picker>
78
- </a-form-item>
79
- <a-form-item label="当前环节截止时间" :label-col="{ span: 10 }" :wrapper-col="{ span: 14 }">
80
- <a-date-picker
81
- v-model="overdueTime"
82
- :disabled-date="disabledDate"
83
- :show-today="false"
84
- value-format="YYYY-MM-DD 17:00:00"
85
- >
86
- </a-date-picker>
87
- </a-form-item>
88
- <a-form-item label="修改原因" :label-col="{ span: 10 }" :wrapper-col="{ span: 14 }">
89
- <a-textarea
90
- v-model="note"
91
- :auto-size="{ minRows: 3, maxRows: 5 }"
92
- placeholder="修改原因"
93
- />
94
- </a-form-item>
95
- <div style="text-align: right">
96
- <a-button type="primary" size="small" @click="saveCompleteTime">确定</a-button>
97
- </div>
98
- </template>
99
- <a-icon type="edit" theme="filled" class="edit-icon" />
100
- </a-popover>
101
- </div>
102
- <div class="info-label">截止时间</div>
103
- </div>
104
- </div>
105
-
106
- <!-- 第五个 -->
107
- <div v-show="details.f_workflow_parentid" @click="ordRecord" class="info-card">
108
- <div class="info-icon parent-icon">
109
- <a-icon type="profile" theme="filled" />
110
- </div>
111
- <div class="info-content">
112
- <div class="info-title">{{ details.f_workflow_parentid }}</div>
113
- <div class="info-label">父级工单编号</div>
114
- </div>
115
- </div>
116
- </div>
117
- </a-card>
118
-
119
- <!-- 完成时间修改记录 -->
120
- <a-modal v-model="changeRecordVisible" title="完成时间修改记录" :footer="null" :z-index="1001" :width="1500">
121
- <a-table row-key="id" :columns="changeRecordColumns" :data-source="changeRecordDataSource" :loading="changeRecordLoading"></a-table>
122
- </a-modal>
123
-
124
- <!-- 父级工单 -->
125
- <a-modal v-model="masterWorkOrderVisible" title="主工单" :footer="null" :z-index="1001" :width="1500">
126
- <work-order-parent-details :workflow-id="details.f_workflow_parentid"></work-order-parent-details>
127
- </a-modal>
128
- </div>
129
- </template>
130
-
131
- <script>
132
- import { mapState } from 'vuex'
133
- import { formatDate } from '@vue2-client/utils/util'
134
- import { postByServiceName } from '@vue2-client/services/api/restTools'
135
- import moment from 'moment'
136
- import { workFlowViewApi } from '@vue2-client/services/api/workFlow'
137
- import WorkOrderParentDetails from '@vue2-client/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails'
138
-
139
- export default {
140
- name: 'WorkflowBaseInformation',
141
- components: { WorkOrderParentDetails },
142
- computed: {
143
- ...mapState('account', { currUser: 'user' }),
144
- ...mapState('setting', ['isMobile']),
145
- showProjectPerson: function () {
146
- if (!this.details.person) {
147
- return false
148
- }
149
- return Object.keys(this.details.person).length !== 0
150
- }
151
- },
152
- mounted () {
153
- this.init()
154
- },
155
- data () {
156
- return {
157
- // 控制加载
158
- loading: true,
159
- // 是否显示日期编辑
160
- openCompleteTime: false,
161
- // 完成时间
162
- completeTime: undefined,
163
- // 当前环节截止时间
164
- overdueTime: undefined,
165
- // 修改原因
166
- note: '',
167
- // 当前用户是否为创建人
168
- isCreatedBy: false,
169
- // 是否显示完成时间修改记录
170
- changeRecordVisible: false,
171
- // 是否显示完成时间修改记录
172
- masterWorkOrderVisible: false,
173
- // 完成时间修改记录表格列
174
- changeRecordColumns: [
175
- { dataIndex: 'f_workflow_id', title: '任务id' },
176
- { dataIndex: 'f_complete_oldtime', title: '原整体完成时间' },
177
- { dataIndex: 'f_set_time', title: '修改后完成时间', customRender (text) { return formatDate(text, 'yyyy-MM-dd') } },
178
- { dataIndex: 'f_name', title: '节点名称' },
179
- { dataIndex: 'f_handler', title: '节点处理人' },
180
- { dataIndex: 'f_deadline_old', title: '原节点截止时间' },
181
- { dataIndex: 'f_deadline', title: '节点修改后时间' },
182
- { dataIndex: 'f_operator', title: '修改人' },
183
- { dataIndex: 'f_operation_time', title: '操作时间' },
184
- { dataIndex: 'f_note', title: '修改原因' }
185
- ],
186
- // 完成时间修改记录
187
- changeRecordDataSource: [],
188
- // 完成时间修改记录加载状态
189
- changeRecordLoading: false
190
- }
191
- },
192
- props: {
193
- visible: {
194
- type: Boolean,
195
- required: true
196
- },
197
- details: {
198
- type: Object,
199
- required: true
200
- }
201
- },
202
- methods: {
203
- init () {
204
- this.loading = this.details.f_entry_name === undefined
205
- // this.isCreatedBy = this.currUser.roles.includes('14524271')
206
- this.completeTime = undefined
207
- this.overdueTime = undefined
208
- },
209
- // 日期格式化
210
- format (date, format) {
211
- return formatDate(date, format)
212
- },
213
- disabledDate (date) {
214
- return date.isBefore(moment(), 'day')
215
- },
216
- saveCompleteTime () {
217
- if (!this.completeTime) {
218
- this.$message.info('整体完成时间不能为空')
219
- return
220
- }
221
- if (this.note == '') {
222
- this.$message.info('修改原因不能为空!')
223
- return
224
- }
225
- if (moment(this.completeTime).isBefore(this.overdueTime, 'day')) {
226
- this.$message.info('当前环节截止时间不能晚于整体完成时间')
227
- return
228
- }
229
- postByServiceName(workFlowViewApi.updateWorkFlowCompleteTime, {
230
- workflowId: this.details.id,
231
- completeTime: this.completeTime,
232
- overdueTime: this.overdueTime,
233
- name: this.currUser.name,
234
- note: this.note
235
- }).then(() => {
236
- this.$message.success('修改成功')
237
- this.details.f_complete_time = this.completeTime
238
- this.openCompleteTime = false
239
- })
240
- },
241
- showChangeRecord () {
242
- this.changeRecordLoading = true
243
- this.changeRecordVisible = true
244
- postByServiceName(workFlowViewApi.getWorkFlowCompleteTimeChange, {
245
- workflowId: this.details.id
246
- }).then(res => {
247
- this.changeRecordDataSource = res
248
- this.changeRecordLoading = false
249
- })
250
- },
251
- ordRecord () {
252
- this.masterWorkOrderVisible = true
253
- }
254
- },
255
- watch: {
256
- visible (newVal) {
257
- if (newVal) {
258
- this.init()
259
- }
260
- }
261
- }
262
- }
263
- </script>
264
-
265
- <style lang="less">
266
- #ApplyBaseInformation {
267
- .info-card-container {
268
- background: transparent;
269
-
270
- .ant-card-body {
271
- padding: 0;
272
- }
273
- }
274
-
275
- .info-cards-wrapper {
276
- display: flex;
277
- flex-wrap: wrap;
278
- gap: 16px;
279
-
280
- .info-card {
281
- flex: 1;
282
- min-width: 180px;
283
- background-color: #fff;
284
- border-radius: 8px;
285
- padding: 16px;
286
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
287
- display: flex;
288
- align-items: center;
289
- transition: all 0.2s ease;
290
- cursor: default;
291
- border: 1px solid #eaedf2;
292
-
293
- &:hover {
294
- box-shadow: 0 3px 6px rgba(0, 0, 0, 0.08);
295
- }
296
-
297
- .info-icon {
298
- display: flex;
299
- align-items: center;
300
- justify-content: center;
301
- width: 46px;
302
- height: 46px;
303
- border-radius: 8px;
304
- font-size: 22px;
305
- margin-right: 14px;
306
- color: #fff;
307
- flex-shrink: 0;
308
- position: relative;
309
-
310
- &.status-completed {
311
- background-color: #ebad59;
312
- }
313
-
314
- &.status-progress {
315
- background-color: #5B6B8F;
316
- }
317
-
318
- &.date-icon {
319
- background-color: #4CAF50;
320
- }
321
-
322
- &.workflow-icon {
323
- background-color: #FF9800;
324
- }
325
-
326
- &.time-icon {
327
- background-color: #F44336;
328
- }
329
-
330
- &.parent-icon {
331
- background-color: #2196F3;
332
- }
333
-
334
- .dropdown-icon {
335
- position: absolute;
336
- right: -8px;
337
- bottom: -8px;
338
- color: #8392a5;
339
- font-size: 14px;
340
- background: #fff;
341
- border-radius: 50%;
342
- width: 20px;
343
- height: 20px;
344
- display: flex;
345
- align-items: center;
346
- justify-content: center;
347
- border: 1px solid #eaedf2;
348
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
349
- cursor: pointer;
350
-
351
- &:hover {
352
- color: #5B6B8F;
353
- }
354
- }
355
- }
356
-
357
- .info-content {
358
- flex: 1;
359
- min-width: 0;
360
-
361
- .info-title {
362
- font-size: 20px;
363
- font-weight: 600;
364
- color: #2c3e50;
365
- margin-bottom: 6px;
366
- white-space: nowrap;
367
- overflow: hidden;
368
- text-overflow: ellipsis;
369
- display: flex;
370
- align-items: center;
371
- line-height: 1.3;
372
-
373
- .info-icon-small {
374
- margin-left: 6px;
375
- color: #8392a5;
376
- font-size: 16px;
377
- cursor: pointer;
378
-
379
- &:hover {
380
- color: #5B6B8F;
381
- }
382
- }
383
-
384
- .edit-icon {
385
- margin-left: 6px;
386
- color: #8392a5;
387
- font-size: 16px;
388
- cursor: pointer;
389
-
390
- &:hover {
391
- color: #5B6B8F;
392
- }
393
- }
394
- }
395
-
396
- .info-label {
397
- font-size: 14px;
398
- color: #8392a5;
399
- line-height: 1.4;
400
-
401
- &.status-completed-text {
402
- color: #ebad59;
403
- font-size: 14px;
404
- line-height: 1.4;
405
- }
406
-
407
- &.status-progress-text {
408
- color: #8392a5;
409
- font-size: 14px;
410
- line-height: 1.4;
411
- }
412
- }
413
- }
414
- }
415
- }
416
- }
417
- </style>
1
+ <template>
2
+ <div id="ApplyBaseInformation">
3
+ <a-card :loading="loading" :bordered="false" class="info-card-container">
4
+ <div class="info-cards-wrapper">
5
+ <!-- 正在进行 -->
6
+ <div class="info-card">
7
+ <div class="info-icon" :class="details.f_state === 1 ? 'status-completed' : 'status-progress'">
8
+ <a-icon type="appstore" theme="filled" />
9
+ </div>
10
+ <div class="info-content">
11
+ <div v-if="showProjectPerson" class="info-title">
12
+ {{ details.f_entry_name }}
13
+ <a-popover placement="bottom">
14
+ <template slot="content">
15
+ <div v-if="details.person.f_projectadmin">项目经理:{{ details.person.f_projectadmin }}</div>
16
+ <div v-if="details.person.f_shangwuren">客户经理:{{ details.person.f_shangwuren }}</div>
17
+ <div v-if="details.person.f_salemanager">销售经理:{{ details.person.f_salemanager }}</div>
18
+ <div v-if="details.person.f_egionaladministrator">大区经理:{{ details.person.f_egionaladministrator }}</div>
19
+ </template>
20
+ <a-icon type="info-circle" class="info-icon-small" />
21
+ </a-popover>
22
+ </div>
23
+ <div v-else class="info-title">{{ details.f_task_name }}</div>
24
+ <div class="info-label" :class="details.f_state === 1 ? 'status-completed-text' : 'status-progress-text'">
25
+ {{ `工单状态:${details.f_state === 1 ? '完工' : '正在进行'}` }}
26
+ </div>
27
+ </div>
28
+ </div>
29
+
30
+ <!-- 流程信息 -->
31
+ <div v-show="details.f_state !== 1" class="info-card">
32
+ <div class="info-icon workflow-icon">
33
+ <a-icon type="profile" theme="filled" />
34
+ </div>
35
+ <div class="info-content">
36
+ <div class="info-title">{{ details.f_workflow_define_name }}</div>
37
+ <div class="info-label">{{ `当前流程节点:${details.f_sub_state}` }}</div>
38
+ </div>
39
+ </div>
40
+
41
+ <!-- 创建日期 -->
42
+ <div class="info-card">
43
+ <div class="info-icon date-icon">
44
+ <a-icon type="carry-out" theme="filled" />
45
+ </div>
46
+ <div class="info-content">
47
+ <div class="info-title">{{ format(details.f_workflow_date, 'yyyy-MM-dd') }}</div>
48
+ <div class="info-label">创建日期</div>
49
+ </div>
50
+ </div>
51
+
52
+ <!-- 截止时间 -->
53
+ <div class="info-card" title="若要修改完成时间,请通知部门领导进行修改!">
54
+ <div class="info-icon time-icon">
55
+ <a-icon type="clock-circle" theme="filled" />
56
+ <a-dropdown>
57
+ <a-icon type="down" class="dropdown-icon" />
58
+ <a-menu slot="overlay">
59
+ <a-menu-item @click="showChangeRecord">修改记录</a-menu-item>
60
+ </a-menu>
61
+ </a-dropdown>
62
+ </div>
63
+ <div class="info-content">
64
+ <div class="info-title">
65
+ {{ format(details.f_complete_time, 'yyyy-MM-dd') }}
66
+ <!-- 修改任务时间 -->
67
+ <a-popover v-if="isCreatedBy" v-model="openCompleteTime" title="修改任务时间" trigger="click">
68
+ <template slot="content">
69
+ <a-form-item label="任务整体完成时间" :label-col="{ span: 10 }" :wrapper-col="{ span: 14 }">
70
+ <a-date-picker
71
+ v-model="completeTime"
72
+ :disabled-date="disabledDate"
73
+ :show-today="false"
74
+ :allow-clear="false"
75
+ value-format="YYYY-MM-DD HH:mm:ss"
76
+ >
77
+ </a-date-picker>
78
+ </a-form-item>
79
+ <a-form-item label="当前环节截止时间" :label-col="{ span: 10 }" :wrapper-col="{ span: 14 }">
80
+ <a-date-picker
81
+ v-model="overdueTime"
82
+ :disabled-date="disabledDate"
83
+ :show-today="false"
84
+ value-format="YYYY-MM-DD 17:00:00"
85
+ >
86
+ </a-date-picker>
87
+ </a-form-item>
88
+ <a-form-item label="修改原因" :label-col="{ span: 10 }" :wrapper-col="{ span: 14 }">
89
+ <a-textarea
90
+ v-model="note"
91
+ :auto-size="{ minRows: 3, maxRows: 5 }"
92
+ placeholder="修改原因"
93
+ />
94
+ </a-form-item>
95
+ <div style="text-align: right">
96
+ <a-button type="primary" size="small" @click="saveCompleteTime">确定</a-button>
97
+ </div>
98
+ </template>
99
+ <a-icon type="edit" theme="filled" class="edit-icon" />
100
+ </a-popover>
101
+ </div>
102
+ <div class="info-label">截止时间</div>
103
+ </div>
104
+ </div>
105
+
106
+ <!-- 第五个 -->
107
+ <div v-show="details.f_workflow_parentid" @click="ordRecord" class="info-card">
108
+ <div class="info-icon parent-icon">
109
+ <a-icon type="profile" theme="filled" />
110
+ </div>
111
+ <div class="info-content">
112
+ <div class="info-title">{{ details.f_workflow_parentid }}</div>
113
+ <div class="info-label">父级工单编号</div>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </a-card>
118
+
119
+ <!-- 完成时间修改记录 -->
120
+ <a-modal v-model="changeRecordVisible" title="完成时间修改记录" :footer="null" :z-index="1001" :width="1500">
121
+ <a-table row-key="id" :columns="changeRecordColumns" :data-source="changeRecordDataSource" :loading="changeRecordLoading"></a-table>
122
+ </a-modal>
123
+
124
+ <!-- 父级工单 -->
125
+ <a-modal v-model="masterWorkOrderVisible" title="主工单" :footer="null" :z-index="1001" :width="1500">
126
+ <work-order-parent-details :workflow-id="details.f_workflow_parentid"></work-order-parent-details>
127
+ </a-modal>
128
+ </div>
129
+ </template>
130
+
131
+ <script>
132
+ import { mapState } from 'vuex'
133
+ import { formatDate } from '@vue2-client/utils/util'
134
+ import { postByServiceName } from '@vue2-client/services/api/restTools'
135
+ import moment from 'moment'
136
+ import { workFlowViewApi } from '@vue2-client/services/api/workFlow'
137
+ import WorkOrderParentDetails from '@vue2-client/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails'
138
+
139
+ export default {
140
+ name: 'WorkflowBaseInformation',
141
+ components: { WorkOrderParentDetails },
142
+ computed: {
143
+ ...mapState('account', { currUser: 'user' }),
144
+ ...mapState('setting', ['isMobile']),
145
+ showProjectPerson: function () {
146
+ if (!this.details.person) {
147
+ return false
148
+ }
149
+ return Object.keys(this.details.person).length !== 0
150
+ }
151
+ },
152
+ mounted () {
153
+ this.init()
154
+ },
155
+ data () {
156
+ return {
157
+ // 控制加载
158
+ loading: true,
159
+ // 是否显示日期编辑
160
+ openCompleteTime: false,
161
+ // 完成时间
162
+ completeTime: undefined,
163
+ // 当前环节截止时间
164
+ overdueTime: undefined,
165
+ // 修改原因
166
+ note: '',
167
+ // 当前用户是否为创建人
168
+ isCreatedBy: false,
169
+ // 是否显示完成时间修改记录
170
+ changeRecordVisible: false,
171
+ // 是否显示完成时间修改记录
172
+ masterWorkOrderVisible: false,
173
+ // 完成时间修改记录表格列
174
+ changeRecordColumns: [
175
+ { dataIndex: 'f_workflow_id', title: '任务id' },
176
+ { dataIndex: 'f_complete_oldtime', title: '原整体完成时间' },
177
+ { dataIndex: 'f_set_time', title: '修改后完成时间', customRender (text) { return formatDate(text, 'yyyy-MM-dd') } },
178
+ { dataIndex: 'f_name', title: '节点名称' },
179
+ { dataIndex: 'f_handler', title: '节点处理人' },
180
+ { dataIndex: 'f_deadline_old', title: '原节点截止时间' },
181
+ { dataIndex: 'f_deadline', title: '节点修改后时间' },
182
+ { dataIndex: 'f_operator', title: '修改人' },
183
+ { dataIndex: 'f_operation_time', title: '操作时间' },
184
+ { dataIndex: 'f_note', title: '修改原因' }
185
+ ],
186
+ // 完成时间修改记录
187
+ changeRecordDataSource: [],
188
+ // 完成时间修改记录加载状态
189
+ changeRecordLoading: false
190
+ }
191
+ },
192
+ props: {
193
+ visible: {
194
+ type: Boolean,
195
+ required: true
196
+ },
197
+ details: {
198
+ type: Object,
199
+ required: true
200
+ }
201
+ },
202
+ methods: {
203
+ init () {
204
+ this.loading = this.details.f_entry_name === undefined
205
+ // this.isCreatedBy = this.currUser.roles.includes('14524271')
206
+ this.completeTime = undefined
207
+ this.overdueTime = undefined
208
+ },
209
+ // 日期格式化
210
+ format (date, format) {
211
+ return formatDate(date, format)
212
+ },
213
+ disabledDate (date) {
214
+ return date.isBefore(moment(), 'day')
215
+ },
216
+ saveCompleteTime () {
217
+ if (!this.completeTime) {
218
+ this.$message.info('整体完成时间不能为空')
219
+ return
220
+ }
221
+ if (this.note == '') {
222
+ this.$message.info('修改原因不能为空!')
223
+ return
224
+ }
225
+ if (moment(this.completeTime).isBefore(this.overdueTime, 'day')) {
226
+ this.$message.info('当前环节截止时间不能晚于整体完成时间')
227
+ return
228
+ }
229
+ postByServiceName(workFlowViewApi.updateWorkFlowCompleteTime, {
230
+ workflowId: this.details.id,
231
+ completeTime: this.completeTime,
232
+ overdueTime: this.overdueTime,
233
+ name: this.currUser.name,
234
+ note: this.note
235
+ }).then(() => {
236
+ this.$message.success('修改成功')
237
+ this.details.f_complete_time = this.completeTime
238
+ this.openCompleteTime = false
239
+ })
240
+ },
241
+ showChangeRecord () {
242
+ this.changeRecordLoading = true
243
+ this.changeRecordVisible = true
244
+ postByServiceName(workFlowViewApi.getWorkFlowCompleteTimeChange, {
245
+ workflowId: this.details.id
246
+ }).then(res => {
247
+ this.changeRecordDataSource = res
248
+ this.changeRecordLoading = false
249
+ })
250
+ },
251
+ ordRecord () {
252
+ this.masterWorkOrderVisible = true
253
+ }
254
+ },
255
+ watch: {
256
+ visible (newVal) {
257
+ if (newVal) {
258
+ this.init()
259
+ }
260
+ }
261
+ }
262
+ }
263
+ </script>
264
+
265
+ <style lang="less">
266
+ #ApplyBaseInformation {
267
+ .info-card-container {
268
+ background: transparent;
269
+
270
+ .ant-card-body {
271
+ padding: 0;
272
+ }
273
+ }
274
+
275
+ .info-cards-wrapper {
276
+ display: flex;
277
+ flex-wrap: wrap;
278
+ gap: 16px;
279
+
280
+ .info-card {
281
+ flex: 1;
282
+ min-width: 180px;
283
+ background-color: #fff;
284
+ border-radius: 8px;
285
+ padding: 16px;
286
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
287
+ display: flex;
288
+ align-items: center;
289
+ transition: all 0.2s ease;
290
+ cursor: default;
291
+ border: 1px solid #eaedf2;
292
+
293
+ &:hover {
294
+ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.08);
295
+ }
296
+
297
+ .info-icon {
298
+ display: flex;
299
+ align-items: center;
300
+ justify-content: center;
301
+ width: 46px;
302
+ height: 46px;
303
+ border-radius: 8px;
304
+ font-size: 22px;
305
+ margin-right: 14px;
306
+ color: #fff;
307
+ flex-shrink: 0;
308
+ position: relative;
309
+
310
+ &.status-completed {
311
+ background-color: #ebad59;
312
+ }
313
+
314
+ &.status-progress {
315
+ background-color: #5B6B8F;
316
+ }
317
+
318
+ &.date-icon {
319
+ background-color: #4CAF50;
320
+ }
321
+
322
+ &.workflow-icon {
323
+ background-color: #FF9800;
324
+ }
325
+
326
+ &.time-icon {
327
+ background-color: #F44336;
328
+ }
329
+
330
+ &.parent-icon {
331
+ background-color: #2196F3;
332
+ }
333
+
334
+ .dropdown-icon {
335
+ position: absolute;
336
+ right: -8px;
337
+ bottom: -8px;
338
+ color: #8392a5;
339
+ font-size: 14px;
340
+ background: #fff;
341
+ border-radius: 50%;
342
+ width: 20px;
343
+ height: 20px;
344
+ display: flex;
345
+ align-items: center;
346
+ justify-content: center;
347
+ border: 1px solid #eaedf2;
348
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
349
+ cursor: pointer;
350
+
351
+ &:hover {
352
+ color: #5B6B8F;
353
+ }
354
+ }
355
+ }
356
+
357
+ .info-content {
358
+ flex: 1;
359
+ min-width: 0;
360
+
361
+ .info-title {
362
+ font-size: 20px;
363
+ font-weight: 600;
364
+ color: #2c3e50;
365
+ margin-bottom: 6px;
366
+ white-space: nowrap;
367
+ overflow: hidden;
368
+ text-overflow: ellipsis;
369
+ display: flex;
370
+ align-items: center;
371
+ line-height: 1.3;
372
+
373
+ .info-icon-small {
374
+ margin-left: 6px;
375
+ color: #8392a5;
376
+ font-size: 16px;
377
+ cursor: pointer;
378
+
379
+ &:hover {
380
+ color: #5B6B8F;
381
+ }
382
+ }
383
+
384
+ .edit-icon {
385
+ margin-left: 6px;
386
+ color: #8392a5;
387
+ font-size: 16px;
388
+ cursor: pointer;
389
+
390
+ &:hover {
391
+ color: #5B6B8F;
392
+ }
393
+ }
394
+ }
395
+
396
+ .info-label {
397
+ font-size: 14px;
398
+ color: #8392a5;
399
+ line-height: 1.4;
400
+
401
+ &.status-completed-text {
402
+ color: #ebad59;
403
+ font-size: 14px;
404
+ line-height: 1.4;
405
+ }
406
+
407
+ &.status-progress-text {
408
+ color: #8392a5;
409
+ font-size: 14px;
410
+ line-height: 1.4;
411
+ }
412
+ }
413
+ }
414
+ }
415
+ }
416
+ }
417
+ </style>