vue2-client 1.14.41 → 1.14.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env +1 -1
- package/package.json +1 -1
- package/src/base-client/components/common/XReport/XReport.vue +1 -1
- package/src/base-client/components/common/XTab/XTab.vue +22 -7
- package/src/base-client/components/common/XTable/XTable.vue +3 -1
- package/src/base-client/components/common/XUploadFilesView/index.vue +485 -0
- package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +9 -9
- package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
- package/src/base-client/components/his/XTreeRows/TreeNode.vue +100 -100
- package/src/base-client/components/his/XTreeRows/XTreeRows.vue +197 -197
- package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
- package/src/base-client/components/his/threeTestOrders/textBox.vue +50 -102
- package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +376 -386
- package/src/pages/WorkflowDetail/WorkFlowDemo.vue +1 -1
- package/src/pages/WorkflowDetail/WorkflowDetail.vue +151 -50
- package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +244 -131
- package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +188 -139
- package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +3 -2
- package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +0 -36
- package/src/base-client/components/TreeList/TreeList.vue +0 -91
- package/src/base-client/components/TreeList/TreeNode.vue +0 -81
- package/src/base-client/components/common/XCardSet/XTiltle.vue +0 -191
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
3
|
<!-- 上方流程显示 -->
|
|
4
|
-
<a-card :bordered="false" :loading="loading"
|
|
4
|
+
<a-card :bordered="false" :loading="loading">
|
|
5
5
|
<!-- 项目进度流程 -->
|
|
6
6
|
<work-flow-timeline
|
|
7
7
|
:current-step-id="currentStepId"
|
|
@@ -12,75 +12,93 @@
|
|
|
12
12
|
change-able
|
|
13
13
|
@activeStep="activeStep"/>
|
|
14
14
|
</a-card>
|
|
15
|
-
<!--
|
|
16
|
-
<
|
|
17
|
-
<a-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
>
|
|
32
|
-
<a-descriptions-item
|
|
33
|
-
v-for="(value,key) in formCompletedDataPreview.data"
|
|
34
|
-
:key="key"
|
|
35
|
-
>
|
|
36
|
-
<span slot="label" style="color: #000">{{ key }}</span>
|
|
37
|
-
<div style="white-space: pre-wrap">{{ value }}</div>
|
|
38
|
-
</a-descriptions-item>
|
|
39
|
-
</a-descriptions>
|
|
40
|
-
<div v-if="formCompletedDataPreview.note">
|
|
41
|
-
<div class="ant-descriptions-title complete-data-title">备注</div>
|
|
42
|
-
<p style="white-space: pre-wrap">{{ formCompletedDataPreview.note }}</p>
|
|
43
|
-
</div>
|
|
44
|
-
<div v-if="formCompletedDataPreview.images.length">
|
|
45
|
-
<div class="ant-descriptions-title complete-data-title">图片</div>
|
|
46
|
-
<image-item :images="formCompletedDataPreview.images" @preview="handlePreviewFile"/>
|
|
47
|
-
</div>
|
|
48
|
-
<div v-if="formCompletedDataPreview.files.length">
|
|
49
|
-
<div class="ant-descriptions-title complete-data-title">附件</div>
|
|
50
|
-
<file-item :files="formCompletedDataPreview.files" @preview="handlePreviewFile"/>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
15
|
+
<!-- 无权访问的提示 -->
|
|
16
|
+
<template v-if="!canSubmit">
|
|
17
|
+
<a-result status="403" title="无权操作" sub-title="您没有访问该步骤的权限.">
|
|
18
|
+
</a-result>
|
|
19
|
+
</template>
|
|
20
|
+
<template v-else>
|
|
21
|
+
<!-- 流程被退回的提示 -->
|
|
22
|
+
<template v-if="currentStep && currentStep.back && !(beforeStepActive || workflowState)">
|
|
23
|
+
<a-alert type="info" show-icon style="margin-bottom: 14px">
|
|
24
|
+
<div slot="message">
|
|
25
|
+
<span style="font-weight: bold">流程被退回</span>
|
|
26
|
+
<span style="margin-left: 14px; font-size: 14px; color: rgba(0, 0, 0, 0.65)">请重新填写信息发起提交</span>
|
|
27
|
+
</div>
|
|
28
|
+
<div slot="description">
|
|
29
|
+
<div>操作人:{{ currentStep.back.f_operator }} 操作时间:{{ currentStep.back.f_date }}</div>
|
|
30
|
+
<div>原因:{{ currentStep.back.f_notes }}</div>
|
|
53
31
|
</div>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
32
|
+
</a-alert>
|
|
33
|
+
</template>
|
|
34
|
+
<!-- 步骤内容主体 -->
|
|
35
|
+
<a-tabs default-active-key="1" @change="note = ''" type="card">
|
|
36
|
+
<template v-if="beforeStepActive || workflowState">
|
|
37
|
+
<a-tab-pane key="0" tab="步骤详情">
|
|
38
|
+
<a-card :bordered="false" :loading="loadingHistory">
|
|
39
|
+
<!-- 当前步骤历史记录 -->
|
|
40
|
+
<template v-if="formCompletedDataPreview">
|
|
41
|
+
<a-descriptions
|
|
42
|
+
v-show="formCompletedDataPreview.data"
|
|
43
|
+
:column="{ xxl: 4, xl: 3, lg: 3, md: 3, sm: 2, xs: 1 }"
|
|
44
|
+
title="步骤历史记录"
|
|
45
|
+
bordered
|
|
46
|
+
>
|
|
47
|
+
<a-descriptions-item
|
|
48
|
+
v-for="(value,key) in formCompletedDataPreview.data"
|
|
49
|
+
:key="key"
|
|
50
|
+
>
|
|
51
|
+
<span slot="label" style="color: #000">{{ key }}</span>
|
|
52
|
+
<div style="white-space: pre-wrap">{{ value }}</div>
|
|
53
|
+
</a-descriptions-item>
|
|
54
|
+
</a-descriptions>
|
|
55
|
+
<div v-if="formCompletedDataPreview.note">
|
|
56
|
+
<div class="ant-descriptions-title complete-data-title">备注</div>
|
|
57
|
+
<p style="white-space: pre-wrap">{{ formCompletedDataPreview.note }}</p>
|
|
58
|
+
</div>
|
|
59
|
+
<div v-if="formCompletedDataPreview.images.length">
|
|
60
|
+
<div class="ant-descriptions-title complete-data-title">图片</div>
|
|
61
|
+
<image-item :images="formCompletedDataPreview.images" @preview="handlePreviewFile"/>
|
|
64
62
|
</div>
|
|
65
|
-
<div
|
|
66
|
-
<div
|
|
67
|
-
<
|
|
68
|
-
<div>退回原因:{{ currentStep.back.f_notes }}</div>
|
|
63
|
+
<div v-if="formCompletedDataPreview.files.length">
|
|
64
|
+
<div class="ant-descriptions-title complete-data-title">附件</div>
|
|
65
|
+
<file-item :files="formCompletedDataPreview.files" @preview="handlePreviewFile"/>
|
|
69
66
|
</div>
|
|
70
|
-
</
|
|
71
|
-
<!--
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
67
|
+
</template>
|
|
68
|
+
<!-- 当前步骤无记录 -->
|
|
69
|
+
<template v-else>
|
|
70
|
+
<a-result status="404" title="暂无数据" sub-title="该步骤暂无数据。">
|
|
71
|
+
</a-result>
|
|
72
|
+
</template>
|
|
73
|
+
</a-card>
|
|
74
|
+
</a-tab-pane>
|
|
75
|
+
</template>
|
|
76
|
+
<template v-else>
|
|
77
|
+
<a-tab-pane key="1" tab="业务操作">
|
|
78
|
+
<a-card :bordered="false" :loading="loadingHistory">
|
|
79
|
+
<template v-if="showTab">
|
|
80
|
+
<x-tab :local-config="tabDesigner" :body-style="{ padding: 0 }" :tabBarGutter="24" default-active-key="workFlowTab">
|
|
81
|
+
<a-tab-pane
|
|
82
|
+
:forceRender="true"
|
|
83
|
+
v-if="showForm"
|
|
84
|
+
slot="extraBeforeTabs"
|
|
85
|
+
key="workFlowTab"
|
|
86
|
+
tab="表单"
|
|
87
|
+
>
|
|
88
|
+
<x-add-native-form
|
|
89
|
+
ref="xAddForm"
|
|
90
|
+
@onSubmit="submitForm"/>
|
|
91
|
+
</a-tab-pane>
|
|
92
|
+
</x-tab>
|
|
93
|
+
</template>
|
|
94
|
+
<template v-else>
|
|
95
|
+
<template v-if="showForm">
|
|
96
|
+
<x-add-native-form
|
|
97
|
+
ref="xAddForm"
|
|
98
|
+
@onSubmit="submitForm"/>
|
|
99
|
+
</template>
|
|
100
|
+
</template>
|
|
101
|
+
<a-divider />
|
|
84
102
|
<a-form v-if="!lastStep" label-align="left" :label-col="{ span: 3 }" :wrapper-col="{ span: 13 }">
|
|
85
103
|
<a-form-item v-if="showStepNextBtn" label="操作类型" required>
|
|
86
104
|
<a-radio-group v-model="operationType" @change="handleOperationTypeChange">
|
|
@@ -88,7 +106,7 @@
|
|
|
88
106
|
<a-radio value="skip">{{ stepNextBtnTitle }}</a-radio>
|
|
89
107
|
</a-radio-group>
|
|
90
108
|
</a-form-item>
|
|
91
|
-
<a-form-item label="
|
|
109
|
+
<a-form-item label="下一环节处理人" required v-if="needSelectPerson">
|
|
92
110
|
<a-select
|
|
93
111
|
v-model="checkedChargePerson"
|
|
94
112
|
placeholder="请选择或搜索"
|
|
@@ -112,12 +130,12 @@
|
|
|
112
130
|
placeholder="请选择"/>
|
|
113
131
|
</a-form-item>
|
|
114
132
|
</a-form>
|
|
133
|
+
<a-divider />
|
|
115
134
|
<!-- 备注信息 -->
|
|
116
|
-
<div class="line"></div>
|
|
117
135
|
<a-textarea
|
|
118
136
|
v-model="note"
|
|
119
137
|
:auto-size="{ minRows: 3, maxRows: 5 }"
|
|
120
|
-
placeholder="
|
|
138
|
+
placeholder="填写本环节备注事项"
|
|
121
139
|
/>
|
|
122
140
|
<!-- 当前步骤完成后,控制流程按钮 -->
|
|
123
141
|
<div style="text-align: center">
|
|
@@ -147,7 +165,7 @@
|
|
|
147
165
|
type="primary"
|
|
148
166
|
@click="nextClick"
|
|
149
167
|
>
|
|
150
|
-
|
|
168
|
+
完成提交
|
|
151
169
|
<a-icon type="right"/>
|
|
152
170
|
</a-button>
|
|
153
171
|
</a-popover>
|
|
@@ -160,7 +178,7 @@
|
|
|
160
178
|
type="primary"
|
|
161
179
|
@click="stepNextClick"
|
|
162
180
|
>
|
|
163
|
-
|
|
181
|
+
跳过
|
|
164
182
|
</a-button>
|
|
165
183
|
</a-popover>
|
|
166
184
|
<a-button
|
|
@@ -168,55 +186,51 @@
|
|
|
168
186
|
type="primary"
|
|
169
187
|
@click="lastStepNextClick"
|
|
170
188
|
>
|
|
171
|
-
|
|
189
|
+
确认完成
|
|
172
190
|
</a-button>
|
|
173
191
|
</template>
|
|
174
192
|
</a-space>
|
|
175
193
|
</a-radio-group>
|
|
176
194
|
</div>
|
|
177
|
-
</
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
</a-
|
|
210
|
-
</a-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
<
|
|
214
|
-
</a-
|
|
215
|
-
</
|
|
216
|
-
<!-- 文件预览 -->
|
|
217
|
-
<a-modal v-model="previewFileVisible" :footer="null" :dialog-style="{ top: '20px' }" width="85%" :z-index="1001">
|
|
218
|
-
<file-preview :path="filePath"/>
|
|
219
|
-
</a-modal>
|
|
195
|
+
</a-card>
|
|
196
|
+
</a-tab-pane>
|
|
197
|
+
</template>
|
|
198
|
+
<!-- 退回 -->
|
|
199
|
+
<a-tab-pane v-if="canSubmit && !beforeStepActive && showPrevBtn && !workflowState" key="2" tab="退回">
|
|
200
|
+
<a-form layout="vertical">
|
|
201
|
+
<a-form-item label="退回原因" :wrapper-col="{ span: 10 }" required>
|
|
202
|
+
<a-textarea
|
|
203
|
+
v-model="note"
|
|
204
|
+
:auto-size="{ minRows: 4, maxRows: 10 }"
|
|
205
|
+
placeholder="请填写退回原因 / 备注"
|
|
206
|
+
/>
|
|
207
|
+
</a-form-item>
|
|
208
|
+
<a-form-item :wrapper-col="{ offset: 4 }">
|
|
209
|
+
<a-popover :title="preBtnTitle">
|
|
210
|
+
<template slot="content">
|
|
211
|
+
<p v-for="(item,index) in preBtnText" :key="index">{{ item }}</p>
|
|
212
|
+
</template>
|
|
213
|
+
<a-button
|
|
214
|
+
type="danger"
|
|
215
|
+
@click="preClick"
|
|
216
|
+
>
|
|
217
|
+
<a-icon type="left"/>
|
|
218
|
+
退回
|
|
219
|
+
</a-button>
|
|
220
|
+
</a-popover>
|
|
221
|
+
</a-form-item>
|
|
222
|
+
</a-form>
|
|
223
|
+
</a-tab-pane>
|
|
224
|
+
<a-tab-pane v-if="canSubmit && !beforeStepActive && showPrevBtn && !workflowState" key="3" tab="工单拆分">
|
|
225
|
+
<!-- 分配工单 -->
|
|
226
|
+
<workflow-list-resolution :workflow-project-id="workflowId" :details="details"></workflow-list-resolution>
|
|
227
|
+
</a-tab-pane>
|
|
228
|
+
</a-tabs>
|
|
229
|
+
<!-- 文件预览 -->
|
|
230
|
+
<a-modal v-model="previewFileVisible" :footer="null" :dialog-style="{ top: '20px' }" width="85%" :z-index="1001">
|
|
231
|
+
<file-preview :path="filePath"/>
|
|
232
|
+
</a-modal>
|
|
233
|
+
</template>
|
|
220
234
|
</div>
|
|
221
235
|
</template>
|
|
222
236
|
|
|
@@ -238,10 +252,12 @@ import { commonApi } from '@vue2-client/services/api'
|
|
|
238
252
|
import { executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
|
|
239
253
|
import * as util from '@vue2-client/utils/util'
|
|
240
254
|
import { getConfigByNameAsync, runLogic } from '@vue2-client/services/api/common'
|
|
255
|
+
import XTab from '@vue2-client/base-client/components/common/XTab/XTab.vue'
|
|
241
256
|
|
|
242
257
|
export default {
|
|
243
258
|
name: 'WorkFlowHandle',
|
|
244
259
|
components: {
|
|
260
|
+
XTab,
|
|
245
261
|
WorkflowListResolution,
|
|
246
262
|
XAddNativeForm,
|
|
247
263
|
WorkFlowTimeline,
|
|
@@ -254,10 +270,23 @@ export default {
|
|
|
254
270
|
computed: {
|
|
255
271
|
...mapState('account', { currUser: 'user' }),
|
|
256
272
|
canSubmit () {
|
|
273
|
+
// 对于超级管理员直接认为可以提交
|
|
274
|
+
if (this.currUser.ename === '1') {
|
|
275
|
+
return true
|
|
276
|
+
}
|
|
277
|
+
// currentStepId可能还没初始化,此处拿不到先返回false
|
|
278
|
+
if (!this.currentStepId) {
|
|
279
|
+
return false
|
|
280
|
+
}
|
|
257
281
|
const step = this.stepsForChild[this.currentStepId - 1]
|
|
258
|
-
|
|
259
282
|
// 检查角色和部门权限
|
|
260
283
|
if (step && step.properties && step.properties.chargePerson) {
|
|
284
|
+
// chargePerson 改造 旧数据类型是 {chrgePerson: {role: '1', department: '1'}}
|
|
285
|
+
// 如果是旧的格式 转换成新的格式后再作处理
|
|
286
|
+
if (step.properties.chargePerson.role || step.properties.chargePerson.department) {
|
|
287
|
+
step.properties.chargePerson.needSelectPerson = true
|
|
288
|
+
step.properties.chargePerson.personList = [{ type: step.properties.chargePerson.role ? 'role' : 'department', name: step.properties.chargePerson.role || step.properties.chargePerson.department }]
|
|
289
|
+
}
|
|
261
290
|
if (step.properties.chargePerson.personList && step.properties.chargePerson.personList.length > 0) {
|
|
262
291
|
// 使用some方法判断当前人员是否满足任一条件
|
|
263
292
|
return step.properties.chargePerson.personList.some(item => {
|
|
@@ -286,6 +315,10 @@ export default {
|
|
|
286
315
|
return {
|
|
287
316
|
// 显示供用户填写的当前步骤表单
|
|
288
317
|
showForm: false,
|
|
318
|
+
// 显示步骤的tab页
|
|
319
|
+
showTab: false,
|
|
320
|
+
// tab页的配置
|
|
321
|
+
tabDesigner: undefined,
|
|
289
322
|
// 当前步骤表单标题
|
|
290
323
|
formTitle: '',
|
|
291
324
|
// 当前步骤表单定义Json
|
|
@@ -631,6 +664,7 @@ export default {
|
|
|
631
664
|
}
|
|
632
665
|
this.isLastStep(this.currentStepId)
|
|
633
666
|
if (!this.lastStep) {
|
|
667
|
+
// 设置下一步的操作人
|
|
634
668
|
this.setChargePersonOptions(this.currentStepId + 1)
|
|
635
669
|
}
|
|
636
670
|
this.workflowControl()
|
|
@@ -665,18 +699,31 @@ export default {
|
|
|
665
699
|
}
|
|
666
700
|
)
|
|
667
701
|
},
|
|
668
|
-
//
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
this
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
702
|
+
// 获取当前步骤定义内容,构建组件
|
|
703
|
+
buildComp () {
|
|
704
|
+
const properties = this.stepsDefine[this.currentStep.id - 1].properties
|
|
705
|
+
// 表单的渲染
|
|
706
|
+
if (properties.form && properties.form.formJson) {
|
|
707
|
+
this.stepDefine = properties.form.formJson
|
|
708
|
+
this.showForm = true
|
|
709
|
+
this.$nextTick(() => {
|
|
710
|
+
this.$refs.xAddForm && this.$refs.xAddForm.init({
|
|
711
|
+
businessType: '修改',
|
|
712
|
+
formItems: this.stepDefine,
|
|
713
|
+
layout: properties.form.xAddFormLayout,
|
|
714
|
+
showSubmitBtn: false
|
|
715
|
+
})
|
|
678
716
|
})
|
|
679
|
-
}
|
|
717
|
+
} else {
|
|
718
|
+
this.showForm = false
|
|
719
|
+
}
|
|
720
|
+
// Tab的渲染
|
|
721
|
+
this.tabDesigner = properties.tabDesigner
|
|
722
|
+
if (this.tabDesigner) {
|
|
723
|
+
this.showTab = true
|
|
724
|
+
} else {
|
|
725
|
+
this.showTab = false
|
|
726
|
+
}
|
|
680
727
|
},
|
|
681
728
|
// 根据当前节点,判断之后流程,以及按钮的显示
|
|
682
729
|
workflowControl () {
|
|
@@ -778,7 +825,7 @@ export default {
|
|
|
778
825
|
} else {
|
|
779
826
|
this.loadingHistory = false
|
|
780
827
|
this.beforeStepActive = false
|
|
781
|
-
this.
|
|
828
|
+
this.buildComp()
|
|
782
829
|
}
|
|
783
830
|
},
|
|
784
831
|
// 获取已经完成步骤的数据
|
|
@@ -908,7 +955,8 @@ export default {
|
|
|
908
955
|
// 从指定步骤设置负责人下拉选择框
|
|
909
956
|
async setChargePersonOptions (stepId) {
|
|
910
957
|
this.checkedChargePerson = undefined
|
|
911
|
-
const
|
|
958
|
+
const define = this.stepsDefine[stepId - 1]
|
|
959
|
+
const defineProperties = define.properties
|
|
912
960
|
// chargePerson 改造 旧数据类型是 {chrgePerson: {role: '1', department: '1'}}
|
|
913
961
|
// 新数据类型是
|
|
914
962
|
// "chargePerson": {
|
|
@@ -925,6 +973,11 @@ export default {
|
|
|
925
973
|
// "needSelectPerson": true
|
|
926
974
|
// }
|
|
927
975
|
const chargePerson = defineProperties.chargePerson
|
|
976
|
+
if (!chargePerson) {
|
|
977
|
+
this.needSelectPerson = false
|
|
978
|
+
this.chargePersonOptions = []
|
|
979
|
+
return
|
|
980
|
+
}
|
|
928
981
|
// 如果是旧的格式 转换成新的格式后再作处理
|
|
929
982
|
if (chargePerson.role || chargePerson.department) {
|
|
930
983
|
chargePerson.needSelectPerson = true
|
|
@@ -947,14 +1000,14 @@ export default {
|
|
|
947
1000
|
filteredUsers = allUser.filter(user =>
|
|
948
1001
|
user.rolestr && user.rolestr.includes(personItem.name)
|
|
949
1002
|
).map(user => {
|
|
950
|
-
return { label: user.label, value: user.
|
|
1003
|
+
return { label: user.label, value: user.value }
|
|
951
1004
|
})
|
|
952
1005
|
} else if (personItem.type === 'department') {
|
|
953
1006
|
// 根据部门获取人员
|
|
954
1007
|
filteredUsers = allUser.filter(user =>
|
|
955
1008
|
user.depname === personItem.name
|
|
956
1009
|
).map(user => {
|
|
957
|
-
return { label: user.label, value: user.
|
|
1010
|
+
return { label: user.label, value: user.value }
|
|
958
1011
|
})
|
|
959
1012
|
}
|
|
960
1013
|
|
|
@@ -1008,15 +1061,11 @@ export default {
|
|
|
1008
1061
|
}
|
|
1009
1062
|
</script>
|
|
1010
1063
|
<style lang="less" scoped>
|
|
1011
|
-
.line {
|
|
1012
|
-
width: 100%;
|
|
1013
|
-
height: 5px;
|
|
1014
|
-
border-bottom: rgb(240, 240, 240) solid 1px;
|
|
1015
|
-
margin-bottom: 30px;
|
|
1016
|
-
}
|
|
1017
|
-
|
|
1018
1064
|
.complete-data-title {
|
|
1019
1065
|
margin-top: 8px;
|
|
1020
1066
|
margin-bottom: 8px;
|
|
1021
1067
|
}
|
|
1068
|
+
:deep(.ant-result){
|
|
1069
|
+
padding: 0;
|
|
1070
|
+
}
|
|
1022
1071
|
</style>
|
|
@@ -124,7 +124,7 @@ export default {
|
|
|
124
124
|
return
|
|
125
125
|
}
|
|
126
126
|
if (stepId > this.currentStepId) {
|
|
127
|
-
return this.$message.
|
|
127
|
+
return this.$message.warn('请先完成当前步骤')
|
|
128
128
|
}
|
|
129
129
|
this.$emit('activeStep', stepId)
|
|
130
130
|
this.displayStepId = stepId
|
|
@@ -142,6 +142,7 @@ export default {
|
|
|
142
142
|
<style lang="less" scoped>
|
|
143
143
|
.timeline {
|
|
144
144
|
/deep/ .ant-steps-dot {
|
|
145
|
+
margin-bottom: 6px;
|
|
145
146
|
.ant-steps-item-tail {
|
|
146
147
|
top: 7px;
|
|
147
148
|
margin-left: 106px;
|
|
@@ -152,7 +153,7 @@ export default {
|
|
|
152
153
|
}
|
|
153
154
|
.ant-steps-item-content {
|
|
154
155
|
width: 200px;
|
|
155
|
-
margin-top:
|
|
156
|
+
margin-top: 24px;
|
|
156
157
|
.ant-steps-item-description {
|
|
157
158
|
text-align: left;
|
|
158
159
|
margin: 6px 0 0 60px;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
export default {
|
|
3
|
-
props: {
|
|
4
|
-
weekDays: {
|
|
5
|
-
type: Array,
|
|
6
|
-
default: () => []
|
|
7
|
-
}
|
|
8
|
-
},
|
|
9
|
-
computed: {
|
|
10
|
-
columns () {
|
|
11
|
-
const baseColumns = [
|
|
12
|
-
{ title: '序号', dataIndex: 'index', width: 60 },
|
|
13
|
-
{ title: '科室', dataIndex: 'department', width: 120 },
|
|
14
|
-
{ title: '医生', dataIndex: 'doctor', width: 100 },
|
|
15
|
-
{ title: '上/下/晚', dataIndex: 'shiftType', width: 80 },
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
// 增加防御判断,确保 weekDays 存在
|
|
19
|
-
const dayColumns = this.weekDays.length > 0
|
|
20
|
-
? this.weekDays.map((day, dayIndex) => ({
|
|
21
|
-
title: `${day.label} ${day.date}`,
|
|
22
|
-
dataIndex: `shifts-${dayIndex}`, // 改为字符串形式
|
|
23
|
-
dayIndex: dayIndex,
|
|
24
|
-
width: 120,
|
|
25
|
-
}))
|
|
26
|
-
: []
|
|
27
|
-
|
|
28
|
-
const tailColumns = [
|
|
29
|
-
{ title: '排班数', dataIndex: 'count', width: 80 }
|
|
30
|
-
]
|
|
31
|
-
|
|
32
|
-
return [...baseColumns, ...dayColumns, ...tailColumns]
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
</script>
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="tree-container">
|
|
3
|
-
<div class="tree-list">
|
|
4
|
-
<tree-node
|
|
5
|
-
v-for="node in treeData"
|
|
6
|
-
:key="node.id"
|
|
7
|
-
:node="node"
|
|
8
|
-
@toggle="toggleNode"/>
|
|
9
|
-
</div>
|
|
10
|
-
</div>
|
|
11
|
-
</template>
|
|
12
|
-
|
|
13
|
-
<script>
|
|
14
|
-
import TreeNode from './TreeNode.vue'
|
|
15
|
-
|
|
16
|
-
export default {
|
|
17
|
-
name: 'TreeList',
|
|
18
|
-
components: {
|
|
19
|
-
TreeNode
|
|
20
|
-
},
|
|
21
|
-
data() {
|
|
22
|
-
return {
|
|
23
|
-
treeData: [
|
|
24
|
-
{
|
|
25
|
-
id: '1',
|
|
26
|
-
title: '体征',
|
|
27
|
-
expanded: false,
|
|
28
|
-
children: [
|
|
29
|
-
{
|
|
30
|
-
id: '1-1',
|
|
31
|
-
title: '一般情况'
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
id: '1-2',
|
|
35
|
-
title: '皮肤粘膜'
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
id: '1-3',
|
|
39
|
-
title: '头颈',
|
|
40
|
-
expanded: false,
|
|
41
|
-
children: [
|
|
42
|
-
{
|
|
43
|
-
id: '1-3-1',
|
|
44
|
-
title: '头部'
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
id: '1-3-2',
|
|
48
|
-
title: '颈部'
|
|
49
|
-
}
|
|
50
|
-
]
|
|
51
|
-
}
|
|
52
|
-
]
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
methods: {
|
|
58
|
-
toggleNode(node) {
|
|
59
|
-
node.expanded = !node.expanded
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
</script>
|
|
64
|
-
|
|
65
|
-
<style scoped>
|
|
66
|
-
.tree-container {
|
|
67
|
-
width: 240px;
|
|
68
|
-
height: 400px;
|
|
69
|
-
border: 1px solid #e8e8e8;
|
|
70
|
-
overflow-y: auto;
|
|
71
|
-
padding: 8px;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/* 自定义滚动条样式 */
|
|
75
|
-
.tree-container::-webkit-scrollbar {
|
|
76
|
-
width: 6px;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.tree-container::-webkit-scrollbar-thumb {
|
|
80
|
-
background-color: #ccc;
|
|
81
|
-
border-radius: 3px;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.tree-container::-webkit-scrollbar-track {
|
|
85
|
-
background-color: #f5f5f5;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.tree-list {
|
|
89
|
-
font-size: 14px;
|
|
90
|
-
}
|
|
91
|
-
</style>
|