vue2-client 1.14.57 → 1.14.58

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 (27) hide show
  1. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +509 -0
  2. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +524 -0
  3. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +524 -0
  4. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +524 -0
  5. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +1320 -0
  6. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +1332 -0
  7. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +1331 -0
  8. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +1331 -0
  9. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +1331 -0
  10. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +1339 -0
  11. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +36 -0
  12. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +1 -0
  13. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +2 -1
  14. package/package.json +1 -1
  15. package/src/base-client/components/TreeList/TreeList.vue +91 -0
  16. package/src/base-client/components/TreeList/TreeNode.vue +81 -0
  17. package/src/base-client/components/common/XCardSet/XTiltle.vue +191 -0
  18. package/src/base-client/components/common/XTab/XTab.vue +2 -2
  19. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  20. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  21. package/src/base-client/components/his/XTreeRows/TreeNode.vue +100 -100
  22. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +197 -197
  23. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  24. package/src/base-client/components/his/threeTestOrders/textBox.vue +463 -463
  25. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  26. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +261 -261
  27. package/src/router/async/router.map.js +2 -2
@@ -1,261 +1,261 @@
1
- <template>
2
- <div class="timeline" ref="timelineContent" style="white-space: nowrap; overflow-x: auto">
3
- <a-steps
4
- :current="currentStepId"
5
- :initial="1">
6
- <template #progressDot="{index}">
7
- <span v-if="!changeAble" class="step-label in-steps"><i :class="['step-icon', getStepIconColor(index)]"></i></span>
8
- <span v-else :key="displayStepId" :class="['step-icon-filled digital', getStepIconColor(index)]">
9
- <a-icon v-if="index < currentStepId || state" type="check-circle" theme="filled" :class="['step-icon-filled icon', getStepIconColor(index)]" />
10
- <span v-else :class="['step-icon-filled digital', getStepIconColor(index)]">{{ index }}</span>
11
- </span>
12
- </template>
13
- <a-step
14
- v-for="item in steps"
15
- :key="item.id"
16
- class="step-item"
17
- @click.stop="onStepClick(item.id)"
18
- >
19
- <template #title>
20
- <h3 v-if="item.name">{{ item.name }}</h3>
21
- </template>
22
- <template #description>
23
- <div>
24
- <p v-if="item.handler">负责人:
25
- <trim-text-tail :text="item.handler" :length="14"/>
26
- </p>
27
- <p v-if="item.date">填报时间:{{ formatDate(item.date, 'yyyy-MM-dd hh:mm') }}</p>
28
- <p v-if="item.deadline" :class="{ 'text-red': item.id === currentStepId && isOverdue }">截止时间:{{ formatDate(item.deadline, 'yyyy-MM-dd hh:mm') }}</p>
29
- <p v-if="item.note">备注:
30
- <trim-text-tail :text="item.note" :length="15"/>
31
- </p>
32
- </div>
33
- </template>
34
- </a-step>
35
- </a-steps>
36
- </div>
37
- </template>
38
-
39
- <script>
40
- import { formatDate } from '@vue2-client/utils/util'
41
- import TrimTextTail from './TrimTextTail'
42
-
43
- export default {
44
- components: { TrimTextTail },
45
- name: 'WorkFlowTimeline',
46
- props: {
47
- workflowId: {
48
- type: String,
49
- required: true
50
- },
51
- currentStepId: {
52
- type: Number,
53
- required: false,
54
- default: 1
55
- },
56
- activeStepId: {
57
- type: Number,
58
- required: false,
59
- default: 1
60
- },
61
- state: {
62
- type: [Boolean, Number],
63
- required: false,
64
- default: false
65
- },
66
- steps: {
67
- type: Array,
68
- required: true
69
- },
70
- changeAble: {
71
- type: Boolean,
72
- required: false,
73
- default: false
74
- }
75
- },
76
- data () {
77
- return {
78
- // 当前显示的步骤 id
79
- displayStepId: 1,
80
- // 当前任务是否逾期
81
- isOverdue: false
82
- }
83
- },
84
- mounted () {
85
- this.init()
86
- const timelineContent = this.$refs.timelineContent
87
- timelineContent.onmousewheel = function (e) {
88
- timelineContent.scrollLeft -= e.wheelDelta
89
- e.preventDefault()
90
- }
91
- },
92
- beforeDestroy () {
93
- this.$refs.timelineContent.onmousewheel = null
94
- },
95
- methods: {
96
- init () {
97
- this.displayStepId = this.activeStepId
98
- const deadline = this.steps.find(step => step.id === this.currentStepId).deadline
99
- this.isOverdue = !this.state && this.formatDate(new Date(), 'yyyy-MM-dd hh:mm') > deadline
100
- this.$emit('activeStep', this.displayStepId)
101
- },
102
- // 判断id是否为流程中最后一个
103
- isLastStep (stepId) {
104
- return stepId >= this.steps.length
105
- },
106
- // 动态展示时间线节点颜色
107
- getStepIconColor (stepId) {
108
- if (this.changeAble && stepId === this.displayStepId) {
109
- return 'yellow'
110
- } else if (!this.changeAble && stepId === this.currentStepId) {
111
- return this.state ? 'blue' : 'green'
112
- }
113
- if (stepId < this.currentStepId || this.state) {
114
- return 'blue'
115
- }
116
- if (stepId === this.currentStepId) {
117
- return this.isOverdue ? 'red' : 'blue'
118
- }
119
- return 'gray'
120
- },
121
- onStepClick (stepId) {
122
- if (!this.changeAble || stepId === this.displayStepId) {
123
- return
124
- }
125
- if (stepId > this.currentStepId) {
126
- return this.$message.warn('请先完成当前步骤')
127
- }
128
- this.$emit('activeStep', stepId)
129
- this.displayStepId = stepId
130
- },
131
- formatDate,
132
- },
133
- watch: {
134
- activeStepId: function (newVal) {
135
- this.displayStepId = newVal
136
- }
137
- }
138
- }
139
- </script>
140
-
141
- <style lang="less" scoped>
142
- .timeline {
143
- /deep/ .ant-steps-dot {
144
- margin-bottom: 6px;
145
- .ant-steps-item-tail {
146
- top: 7px;
147
- margin-left: 106px;
148
- width: calc(100% - 23px);
149
- }
150
- .ant-steps-item-icon {
151
- margin-left: 90px;
152
- width: 8px;
153
- height: 8px;
154
- line-height: 8px;
155
- }
156
- .ant-steps-item-content {
157
- min-width: 200px;
158
- margin-top: 24px;
159
- .ant-steps-item-description {
160
- text-align: left;
161
- background: #fff;
162
- border-radius: 4px;
163
- padding: 12px;
164
- position: relative;
165
-
166
- p {
167
- position: relative;
168
- padding: 8px 0;
169
- margin: 0;
170
- font-size: 13px;
171
- color: #595959;
172
- line-height: 1.5;
173
- white-space: nowrap;
174
- overflow: visible;
175
-
176
- &:first-child {
177
- border-top: 1px dotted #e8e8e8;
178
- }
179
-
180
- &:not(:last-child) {
181
- border-bottom: 1px dashed #f0f0f0;
182
- }
183
-
184
- &:last-child {
185
- padding-bottom: 0;
186
- }
187
- }
188
- }
189
- }
190
- &.ant-steps {
191
- padding-top: 8px;
192
- }
193
- }
194
- /deep/ .ant-steps-item-title {
195
- font-size: 14px;
196
- h3 {
197
- margin-bottom: 0;
198
- }
199
- }
200
- @red: rgb(255, 77, 79);
201
- .step-icon-filled {
202
- position: absolute;
203
- top: -2px;
204
- left: -6px;
205
- @blue: rgb(24, 144, 255);
206
- @yellow: rgb(255, 164, 39);
207
- @gray: rgb(191, 191, 191);
208
- &.digital {
209
- width: 28px;
210
- line-height: 28px;
211
- border-radius: 50%;
212
- color: #ffffff;
213
- &.blue {
214
- background: @blue;
215
- }
216
- &.yellow {
217
- background: @yellow;
218
- }
219
- &.gray {
220
- background: @gray;
221
- }
222
- &.red {
223
- background: @red;
224
- }
225
- }
226
- &.icon {
227
- font-size: 28px;
228
- &.blue {
229
- color: @blue;
230
- }
231
- &.yellow {
232
- color: @yellow;
233
- }
234
- &.gray {
235
- color: @gray;
236
- }
237
- }
238
- }
239
- .step-item {
240
- cursor: pointer;
241
- &:hover {
242
- .ant-steps-item-description {
243
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
244
- transform: translateY(-1px);
245
- transition: all 0.3s ease;
246
- }
247
- p {
248
- color: #262626;
249
- }
250
- }
251
- .text-red {
252
- color: @red !important;
253
- }
254
- }
255
- .next-step-overdue {
256
- /deep/ .ant-steps-item-tail::after {
257
- background: @red;
258
- }
259
- }
260
- }
261
- </style>
1
+ <template>
2
+ <div class="timeline" ref="timelineContent" style="white-space: nowrap; overflow-x: auto">
3
+ <a-steps
4
+ :current="currentStepId"
5
+ :initial="1">
6
+ <template #progressDot="{index}">
7
+ <span v-if="!changeAble" class="step-label in-steps"><i :class="['step-icon', getStepIconColor(index)]"></i></span>
8
+ <span v-else :key="displayStepId" :class="['step-icon-filled digital', getStepIconColor(index)]">
9
+ <a-icon v-if="index < currentStepId || state" type="check-circle" theme="filled" :class="['step-icon-filled icon', getStepIconColor(index)]" />
10
+ <span v-else :class="['step-icon-filled digital', getStepIconColor(index)]">{{ index }}</span>
11
+ </span>
12
+ </template>
13
+ <a-step
14
+ v-for="item in steps"
15
+ :key="item.id"
16
+ class="step-item"
17
+ @click.stop="onStepClick(item.id)"
18
+ >
19
+ <template #title>
20
+ <h3 v-if="item.name">{{ item.name }}</h3>
21
+ </template>
22
+ <template #description>
23
+ <div>
24
+ <p v-if="item.handler">负责人:
25
+ <trim-text-tail :text="item.handler" :length="14"/>
26
+ </p>
27
+ <p v-if="item.date">填报时间:{{ formatDate(item.date, 'yyyy-MM-dd hh:mm') }}</p>
28
+ <p v-if="item.deadline" :class="{ 'text-red': item.id === currentStepId && isOverdue }">截止时间:{{ formatDate(item.deadline, 'yyyy-MM-dd hh:mm') }}</p>
29
+ <p v-if="item.note">备注:
30
+ <trim-text-tail :text="item.note" :length="15"/>
31
+ </p>
32
+ </div>
33
+ </template>
34
+ </a-step>
35
+ </a-steps>
36
+ </div>
37
+ </template>
38
+
39
+ <script>
40
+ import { formatDate } from '@vue2-client/utils/util'
41
+ import TrimTextTail from './TrimTextTail'
42
+
43
+ export default {
44
+ components: { TrimTextTail },
45
+ name: 'WorkFlowTimeline',
46
+ props: {
47
+ workflowId: {
48
+ type: String,
49
+ required: true
50
+ },
51
+ currentStepId: {
52
+ type: Number,
53
+ required: false,
54
+ default: 1
55
+ },
56
+ activeStepId: {
57
+ type: Number,
58
+ required: false,
59
+ default: 1
60
+ },
61
+ state: {
62
+ type: [Boolean, Number],
63
+ required: false,
64
+ default: false
65
+ },
66
+ steps: {
67
+ type: Array,
68
+ required: true
69
+ },
70
+ changeAble: {
71
+ type: Boolean,
72
+ required: false,
73
+ default: false
74
+ }
75
+ },
76
+ data () {
77
+ return {
78
+ // 当前显示的步骤 id
79
+ displayStepId: 1,
80
+ // 当前任务是否逾期
81
+ isOverdue: false
82
+ }
83
+ },
84
+ mounted () {
85
+ this.init()
86
+ const timelineContent = this.$refs.timelineContent
87
+ timelineContent.onmousewheel = function (e) {
88
+ timelineContent.scrollLeft -= e.wheelDelta
89
+ e.preventDefault()
90
+ }
91
+ },
92
+ beforeDestroy () {
93
+ this.$refs.timelineContent.onmousewheel = null
94
+ },
95
+ methods: {
96
+ init () {
97
+ this.displayStepId = this.activeStepId
98
+ const deadline = this.steps.find(step => step.id === this.currentStepId).deadline
99
+ this.isOverdue = !this.state && this.formatDate(new Date(), 'yyyy-MM-dd hh:mm') > deadline
100
+ this.$emit('activeStep', this.displayStepId)
101
+ },
102
+ // 判断id是否为流程中最后一个
103
+ isLastStep (stepId) {
104
+ return stepId >= this.steps.length
105
+ },
106
+ // 动态展示时间线节点颜色
107
+ getStepIconColor (stepId) {
108
+ if (this.changeAble && stepId === this.displayStepId) {
109
+ return 'yellow'
110
+ } else if (!this.changeAble && stepId === this.currentStepId) {
111
+ return this.state ? 'blue' : 'green'
112
+ }
113
+ if (stepId < this.currentStepId || this.state) {
114
+ return 'blue'
115
+ }
116
+ if (stepId === this.currentStepId) {
117
+ return this.isOverdue ? 'red' : 'blue'
118
+ }
119
+ return 'gray'
120
+ },
121
+ onStepClick (stepId) {
122
+ if (!this.changeAble || stepId === this.displayStepId) {
123
+ return
124
+ }
125
+ if (stepId > this.currentStepId) {
126
+ return this.$message.warn('请先完成当前步骤')
127
+ }
128
+ this.$emit('activeStep', stepId)
129
+ this.displayStepId = stepId
130
+ },
131
+ formatDate,
132
+ },
133
+ watch: {
134
+ activeStepId: function (newVal) {
135
+ this.displayStepId = newVal
136
+ }
137
+ }
138
+ }
139
+ </script>
140
+
141
+ <style lang="less" scoped>
142
+ .timeline {
143
+ /deep/ .ant-steps-dot {
144
+ margin-bottom: 6px;
145
+ .ant-steps-item-tail {
146
+ top: 7px;
147
+ margin-left: 106px;
148
+ width: calc(100% - 23px);
149
+ }
150
+ .ant-steps-item-icon {
151
+ margin-left: 90px;
152
+ width: 8px;
153
+ height: 8px;
154
+ line-height: 8px;
155
+ }
156
+ .ant-steps-item-content {
157
+ min-width: 200px;
158
+ margin-top: 24px;
159
+ .ant-steps-item-description {
160
+ text-align: left;
161
+ background: #fff;
162
+ border-radius: 4px;
163
+ padding: 12px;
164
+ position: relative;
165
+
166
+ p {
167
+ position: relative;
168
+ padding: 8px 0;
169
+ margin: 0;
170
+ font-size: 13px;
171
+ color: #595959;
172
+ line-height: 1.5;
173
+ white-space: nowrap;
174
+ overflow: visible;
175
+
176
+ &:first-child {
177
+ border-top: 1px dotted #e8e8e8;
178
+ }
179
+
180
+ &:not(:last-child) {
181
+ border-bottom: 1px dashed #f0f0f0;
182
+ }
183
+
184
+ &:last-child {
185
+ padding-bottom: 0;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ &.ant-steps {
191
+ padding-top: 8px;
192
+ }
193
+ }
194
+ /deep/ .ant-steps-item-title {
195
+ font-size: 14px;
196
+ h3 {
197
+ margin-bottom: 0;
198
+ }
199
+ }
200
+ @red: rgb(255, 77, 79);
201
+ .step-icon-filled {
202
+ position: absolute;
203
+ top: -2px;
204
+ left: -6px;
205
+ @blue: rgb(24, 144, 255);
206
+ @yellow: rgb(255, 164, 39);
207
+ @gray: rgb(191, 191, 191);
208
+ &.digital {
209
+ width: 28px;
210
+ line-height: 28px;
211
+ border-radius: 50%;
212
+ color: #ffffff;
213
+ &.blue {
214
+ background: @blue;
215
+ }
216
+ &.yellow {
217
+ background: @yellow;
218
+ }
219
+ &.gray {
220
+ background: @gray;
221
+ }
222
+ &.red {
223
+ background: @red;
224
+ }
225
+ }
226
+ &.icon {
227
+ font-size: 28px;
228
+ &.blue {
229
+ color: @blue;
230
+ }
231
+ &.yellow {
232
+ color: @yellow;
233
+ }
234
+ &.gray {
235
+ color: @gray;
236
+ }
237
+ }
238
+ }
239
+ .step-item {
240
+ cursor: pointer;
241
+ &:hover {
242
+ .ant-steps-item-description {
243
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
244
+ transform: translateY(-1px);
245
+ transition: all 0.3s ease;
246
+ }
247
+ p {
248
+ color: #262626;
249
+ }
250
+ }
251
+ .text-red {
252
+ color: @red !important;
253
+ }
254
+ }
255
+ .next-step-overdue {
256
+ /deep/ .ant-steps-item-tail::after {
257
+ background: @red;
258
+ }
259
+ }
260
+ }
261
+ </style>
@@ -64,8 +64,8 @@ routerResource.example = {
64
64
  // component: () => import('@vue2-client/base-client/components/common/XTab/XTabDemo.vue'),
65
65
  // component: () => import('@vue2-client/base-client/components/common/XRate/demo.vue'),
66
66
  // component: () => import('@vue2-client/base-client/components/common/XForm/demo.vue'),
67
- // component: () => import('@vue2-client/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue'),
68
- component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo.vue'),
67
+ component: () => import('@vue2-client/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue'),
68
+ // component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo.vue'),
69
69
  // component: () => import('@vue2-client/base-client/components/common/XConversation/XConversationDemo.vue'),
70
70
  // component: () => import('@vue2-client/base-client/components/common/XButtons/XButtonDemo.vue'),
71
71
  // component: () => import('@vue2-client/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue'),