vue2-client 1.14.83 → 1.14.84
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/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095553.vue +242 -0
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095610.vue +242 -0
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613095612.vue +242 -0
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100041.vue +251 -0
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100047.vue +251 -0
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100054.vue +250 -0
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100105.vue +250 -0
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100107.vue +250 -0
- package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100114.vue +250 -0
- package/package.json +1 -1
- package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +46 -13
- package/src/router/async/router.map.js +1 -1
package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250613100114.vue
ADDED
@@ -0,0 +1,250 @@
|
|
1
|
+
<template>
|
2
|
+
<a-table
|
3
|
+
:columns="columns"
|
4
|
+
:data-source="data"
|
5
|
+
:rowSelection="rowSelection"
|
6
|
+
:scroll="{ y: '75vh' }">
|
7
|
+
<span slot="time" class="time-title">
|
8
|
+
<span v-for="(item, index) in configData.timePeriod" :key="index">{{ item }}</span>
|
9
|
+
</span>
|
10
|
+
<a-button slot="lastWeek" icon="left" size="large" @click="handleLastWeek" />
|
11
|
+
<div v-for="(item, index) in weekDays" :key="index" :slot="item.key" class="time-title">
|
12
|
+
<span>{{item.title}}</span>
|
13
|
+
<span>{{ currentWeekDates[index].toLocaleDateString() }}</span>
|
14
|
+
</div>
|
15
|
+
<template :slot="day.key" slot-scope="text, record" v-for="day in shiftTable">
|
16
|
+
<div class="time-title" :key="day.key">
|
17
|
+
<a-button v-for="(item, index) in record[day.key]" :key="index" @click="handleShiftChange(day.key, index, record)">{{ item === 1 || item === '1' ? '坐诊' : '休息' }}</a-button>
|
18
|
+
</div>
|
19
|
+
</template>
|
20
|
+
<a-button slot="nextWeek" icon="right" size="large" @click="handleNextWeek" />
|
21
|
+
<template slot="sk_limit" slot-scope="text, record">
|
22
|
+
<a-input-number id="inputNumber" v-model="record.sk_limit" :min="configData.sk_limitMin" :max="configData.sk_limitMax" />
|
23
|
+
</template>
|
24
|
+
</a-table>
|
25
|
+
</template>
|
26
|
+
<script>
|
27
|
+
import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
|
28
|
+
|
29
|
+
export default {
|
30
|
+
data () {
|
31
|
+
return {
|
32
|
+
data: [],
|
33
|
+
// 列配置
|
34
|
+
columns: [],
|
35
|
+
// 列名
|
36
|
+
columnNames: [],
|
37
|
+
// 选中的行键值集合
|
38
|
+
selectedRows: [],
|
39
|
+
// 选中的行信息集合
|
40
|
+
selectedRowKeys: [],
|
41
|
+
// 原始数据备份
|
42
|
+
originalData: [],
|
43
|
+
// 配置参数
|
44
|
+
configData: {},
|
45
|
+
// 当前显示的周次日期
|
46
|
+
currentWeekDates: [],
|
47
|
+
weekDays: [...['周一', '周二', '周三', '周四', '周五', '周六', '周日'].map((title, index) => {
|
48
|
+
const key = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'][index]
|
49
|
+
return { title, key }
|
50
|
+
})],
|
51
|
+
// 排班时间表
|
52
|
+
shiftTable: [
|
53
|
+
{
|
54
|
+
dataIndex: 'lastWeek',
|
55
|
+
key: 'lastWeek',
|
56
|
+
slots: { title: 'lastWeek' },
|
57
|
+
scopedSlots: { customRender: 'lastWeekTitle' },
|
58
|
+
align: 'center',
|
59
|
+
width: 80
|
60
|
+
},
|
61
|
+
...['周一', '周二', '周三', '周四', '周五', '周六', '周日'].map((title, index) => {
|
62
|
+
const key = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'][index]
|
63
|
+
return {
|
64
|
+
key, dataIndex: key, scopedSlots: { customRender: key }, slots: { title: key }, align: 'center', width: 120
|
65
|
+
}
|
66
|
+
}),
|
67
|
+
{
|
68
|
+
dataIndex: 'nextWeek',
|
69
|
+
key: 'nextWeek',
|
70
|
+
slots: { title: 'nextWeek' },
|
71
|
+
scopedSlots: { customRender: 'nextWeekTitle' },
|
72
|
+
align: 'center',
|
73
|
+
width: 80
|
74
|
+
},
|
75
|
+
{
|
76
|
+
title: '排班数',
|
77
|
+
key: 'sk_limit',
|
78
|
+
dataIndex: 'sk_limit',
|
79
|
+
scopedSlots: { customRender: 'sk_limit' },
|
80
|
+
align: 'center'
|
81
|
+
}
|
82
|
+
]
|
83
|
+
}
|
84
|
+
},
|
85
|
+
props: {
|
86
|
+
// 配置名
|
87
|
+
queryParamsName: {
|
88
|
+
type: String,
|
89
|
+
default: ''
|
90
|
+
},
|
91
|
+
// 服务名
|
92
|
+
serviceName: {
|
93
|
+
type: String,
|
94
|
+
default: 'af-his'
|
95
|
+
}
|
96
|
+
},
|
97
|
+
computed: {
|
98
|
+
rowSelection () {
|
99
|
+
return {
|
100
|
+
selectedRowKeys: this.selectedRowKeys,
|
101
|
+
onChange: (selectedRowKeys, selectedRows) => {
|
102
|
+
this.onSelectChange(selectedRowKeys, selectedRows)
|
103
|
+
}
|
104
|
+
}
|
105
|
+
}
|
106
|
+
},
|
107
|
+
mounted () {
|
108
|
+
this.initWeekDates()
|
109
|
+
},
|
110
|
+
methods: {
|
111
|
+
handleShiftChange (day, index, record) {
|
112
|
+
// 找到当前记录在data中的索引
|
113
|
+
const dataIndex = this.data.findIndex(item => item.id === record.id)
|
114
|
+
if (dataIndex === -1) return
|
115
|
+
// 获取当前状态
|
116
|
+
const currentValue = record[day][index]
|
117
|
+
const newValue = currentValue === 1 || currentValue === '1' ? 0 : 1
|
118
|
+
// 更新按钮显示
|
119
|
+
this.$set(record[day], index, newValue)
|
120
|
+
// 同步更新data中的数据
|
121
|
+
this.$set(this.data[dataIndex][day], index, newValue)
|
122
|
+
},
|
123
|
+
onSelectChange (selectedRowKeys, selectedRows) {
|
124
|
+
this.selectedRowKeys = selectedRowKeys
|
125
|
+
this.selectedRows = selectedRows
|
126
|
+
},
|
127
|
+
// 获取选中的行数据
|
128
|
+
getSelectedRowData () {
|
129
|
+
return this.selectedRows
|
130
|
+
},
|
131
|
+
// 获取全部数据
|
132
|
+
getAllTable () {
|
133
|
+
return this.data
|
134
|
+
},
|
135
|
+
// 初始化数据
|
136
|
+
async init (queryParamsName) {
|
137
|
+
getConfigByName(queryParamsName, this.serviceName, result => {
|
138
|
+
this.configData = result
|
139
|
+
runLogic(result.dataSource, {}, this.serviceName).then(res => {
|
140
|
+
this.columns = []
|
141
|
+
this.columns = JSON.parse(JSON.stringify(this.configData.columns))
|
142
|
+
for (let i = 0; i < this.shiftTable.length; i++) {
|
143
|
+
this.columns.push(this.shiftTable[i])
|
144
|
+
}
|
145
|
+
if (res && Array.isArray(res)) {
|
146
|
+
const weekDays = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
|
147
|
+
const shifts = ['am', 'pm', 'evening']
|
148
|
+
let key = 0
|
149
|
+
this.data = res.map(item => {
|
150
|
+
const scheduleData = {
|
151
|
+
key: key++
|
152
|
+
}
|
153
|
+
this.configData.columnsName.forEach(columnName => { scheduleData[columnName] = item[columnName] })
|
154
|
+
weekDays.forEach(day => {
|
155
|
+
scheduleData[day.charAt(0).toUpperCase() + day.slice(1)] = shifts.map(shift => item[`f_${day}_${shift}`] === '1' ? 1 : 0)
|
156
|
+
})
|
157
|
+
return scheduleData
|
158
|
+
})
|
159
|
+
// 保存原始数据
|
160
|
+
this.originalData = JSON.parse(JSON.stringify(this.data))
|
161
|
+
}
|
162
|
+
})
|
163
|
+
})
|
164
|
+
},
|
165
|
+
// 查询数据函数
|
166
|
+
filterTableData (filters) {
|
167
|
+
if (!filters || Object.keys(filters).length === 0) {
|
168
|
+
// 如果没有过滤条件,恢复原始数据
|
169
|
+
this.data = JSON.parse(JSON.stringify(this.originalData))
|
170
|
+
return
|
171
|
+
}
|
172
|
+
// 从原始数据开始过滤
|
173
|
+
this.data = this.originalData.filter(item => {
|
174
|
+
// 检查每一项是否满足所有过滤条件
|
175
|
+
return Object.entries(filters).every(([key, value]) => {
|
176
|
+
// 如果过滤值是字符串,进行模糊匹配
|
177
|
+
if (typeof value === 'string') {
|
178
|
+
return item[key] && item[key].toString().toLowerCase().includes(value.toLowerCase())
|
179
|
+
}
|
180
|
+
// 如果过滤值是数字,进行精确匹配
|
181
|
+
return item[key] === value
|
182
|
+
})
|
183
|
+
})
|
184
|
+
},
|
185
|
+
// 初始化周次日期
|
186
|
+
initWeekDates () {
|
187
|
+
const today = new Date()
|
188
|
+
const currentDay = today.getDay() || 7 // 将周日的0转换为7
|
189
|
+
const monday = new Date(today)
|
190
|
+
monday.setDate(today.getDate() - currentDay + 1) // 设置为本周一
|
191
|
+
|
192
|
+
this.currentWeekDates = Array.from({ length: 7 }, (_, index) => {
|
193
|
+
const date = new Date(monday)
|
194
|
+
date.setDate(monday.getDate() + index)
|
195
|
+
return date
|
196
|
+
})
|
197
|
+
},
|
198
|
+
// 切换到上一周
|
199
|
+
handleLastWeek () {
|
200
|
+
const monday = new Date(this.currentWeekDates[0])
|
201
|
+
monday.setDate(monday.getDate() - 7)
|
202
|
+
this.updateWeekDates(monday)
|
203
|
+
},
|
204
|
+
// 切换到下一周
|
205
|
+
handleNextWeek () {
|
206
|
+
const monday = new Date(this.currentWeekDates[0])
|
207
|
+
monday.setDate(monday.getDate() + 7)
|
208
|
+
this.updateWeekDates(monday)
|
209
|
+
},
|
210
|
+
// 更新周次日期
|
211
|
+
updateWeekDates (monday) {
|
212
|
+
this.currentWeekDates = Array.from({ length: 7 }, (_, index) => {
|
213
|
+
const date = new Date(monday)
|
214
|
+
date.setDate(monday.getDate() + index)
|
215
|
+
return date
|
216
|
+
})
|
217
|
+
}
|
218
|
+
},
|
219
|
+
watch: {
|
220
|
+
queryParamsName: {
|
221
|
+
handler (newValue) {
|
222
|
+
this.init(newValue)
|
223
|
+
},
|
224
|
+
deep: true,
|
225
|
+
immediate: true
|
226
|
+
}
|
227
|
+
}
|
228
|
+
}
|
229
|
+
</script>
|
230
|
+
|
231
|
+
<style scoped>
|
232
|
+
.time-title {
|
233
|
+
display: flex !important;
|
234
|
+
flex-direction: column !important;
|
235
|
+
align-items: center !important;
|
236
|
+
}
|
237
|
+
::v-deep .ant-table-thead > tr > th,
|
238
|
+
::v-deep .ant-table-tbody > tr > td {
|
239
|
+
padding: 8px 16px !important;
|
240
|
+
overflow-wrap: break-word;
|
241
|
+
}
|
242
|
+
|
243
|
+
::v-deep .ant-table-thead > tr > th .ant-btn {
|
244
|
+
margin: 0 4px;
|
245
|
+
}
|
246
|
+
|
247
|
+
::v-deep .ant-table-thead > tr > th .time-title {
|
248
|
+
margin: 0 -4px;
|
249
|
+
}
|
250
|
+
</style>
|
package/package.json
CHANGED
@@ -3,20 +3,21 @@
|
|
3
3
|
:columns="columns"
|
4
4
|
:data-source="data"
|
5
5
|
:rowSelection="rowSelection"
|
6
|
-
:scroll="{ y: '
|
6
|
+
:scroll="{ y: '70vh' }">
|
7
7
|
<span slot="time" class="time-title">
|
8
8
|
<span v-for="(item, index) in configData.timePeriod" :key="index">{{ item }}</span>
|
9
9
|
</span>
|
10
|
-
<a-button slot="lastWeek" icon="left" size="large" />
|
11
|
-
<div v-for="(item, index) in weekDays" :key="index" >
|
12
|
-
<span>{{item}}</span>
|
10
|
+
<a-button slot="lastWeek" icon="left" size="large" @click="handleLastWeek" />
|
11
|
+
<div v-for="(item, index) in weekDays" :key="index" :slot="item.key" class="time-title">
|
12
|
+
<span>{{item.title}}</span>
|
13
|
+
<span>{{ currentWeekDates[index].toLocaleDateString() }}</span>
|
13
14
|
</div>
|
14
15
|
<template :slot="day.key" slot-scope="text, record" v-for="day in shiftTable">
|
15
16
|
<div class="time-title" :key="day.key">
|
16
17
|
<a-button v-for="(item, index) in record[day.key]" :key="index" @click="handleShiftChange(day.key, index, record)">{{ item === 1 || item === '1' ? '坐诊' : '休息' }}</a-button>
|
17
18
|
</div>
|
18
19
|
</template>
|
19
|
-
<a-button slot="nextWeek" icon="right" size="large" />
|
20
|
+
<a-button slot="nextWeek" icon="right" size="large" @click="handleNextWeek" />
|
20
21
|
<template slot="sk_limit" slot-scope="text, record">
|
21
22
|
<a-input-number id="inputNumber" v-model="record.sk_limit" :min="configData.sk_limitMin" :max="configData.sk_limitMax" />
|
22
23
|
</template>
|
@@ -41,6 +42,8 @@ export default {
|
|
41
42
|
originalData: [],
|
42
43
|
// 配置参数
|
43
44
|
configData: {},
|
45
|
+
// 当前显示的周次日期
|
46
|
+
currentWeekDates: [],
|
44
47
|
weekDays: [...['周一', '周二', '周三', '周四', '周五', '周六', '周日'].map((title, index) => {
|
45
48
|
const key = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'][index]
|
46
49
|
return { title, key }
|
@@ -58,12 +61,7 @@ export default {
|
|
58
61
|
...['周一', '周二', '周三', '周四', '周五', '周六', '周日'].map((title, index) => {
|
59
62
|
const key = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'][index]
|
60
63
|
return {
|
61
|
-
title,
|
62
|
-
key,
|
63
|
-
dataIndex: key,
|
64
|
-
scopedSlots: { customRender: key },
|
65
|
-
slots: { title: key },
|
66
|
-
align: 'center'
|
64
|
+
key, dataIndex: key, scopedSlots: { customRender: key }, slots: { title: key }, align: 'center', width: 120
|
67
65
|
}
|
68
66
|
}),
|
69
67
|
{
|
@@ -106,7 +104,9 @@ export default {
|
|
106
104
|
}
|
107
105
|
}
|
108
106
|
},
|
109
|
-
mounted () {
|
107
|
+
mounted () {
|
108
|
+
this.initWeekDates()
|
109
|
+
},
|
110
110
|
methods: {
|
111
111
|
handleShiftChange (day, index, record) {
|
112
112
|
// 找到当前记录在data中的索引
|
@@ -181,6 +181,39 @@ export default {
|
|
181
181
|
return item[key] === value
|
182
182
|
})
|
183
183
|
})
|
184
|
+
},
|
185
|
+
// 初始化周次日期
|
186
|
+
initWeekDates () {
|
187
|
+
const today = new Date()
|
188
|
+
const currentDay = today.getDay() || 7 // 将周日的0转换为7
|
189
|
+
const monday = new Date(today)
|
190
|
+
monday.setDate(today.getDate() - currentDay + 1) // 设置为本周一
|
191
|
+
|
192
|
+
this.currentWeekDates = Array.from({ length: 7 }, (_, index) => {
|
193
|
+
const date = new Date(monday)
|
194
|
+
date.setDate(monday.getDate() + index)
|
195
|
+
return date
|
196
|
+
})
|
197
|
+
},
|
198
|
+
// 切换到上一周
|
199
|
+
handleLastWeek () {
|
200
|
+
const monday = new Date(this.currentWeekDates[0])
|
201
|
+
monday.setDate(monday.getDate() - 7)
|
202
|
+
this.updateWeekDates(monday)
|
203
|
+
},
|
204
|
+
// 切换到下一周
|
205
|
+
handleNextWeek () {
|
206
|
+
const monday = new Date(this.currentWeekDates[0])
|
207
|
+
monday.setDate(monday.getDate() + 7)
|
208
|
+
this.updateWeekDates(monday)
|
209
|
+
},
|
210
|
+
// 更新周次日期
|
211
|
+
updateWeekDates (monday) {
|
212
|
+
this.currentWeekDates = Array.from({ length: 7 }, (_, index) => {
|
213
|
+
const date = new Date(monday)
|
214
|
+
date.setDate(monday.getDate() + index)
|
215
|
+
return date
|
216
|
+
})
|
184
217
|
}
|
185
218
|
},
|
186
219
|
watch: {
|
@@ -195,7 +228,7 @@ export default {
|
|
195
228
|
}
|
196
229
|
</script>
|
197
230
|
|
198
|
-
<style scoped
|
231
|
+
<style scoped>
|
199
232
|
.time-title {
|
200
233
|
display: flex !important;
|
201
234
|
flex-direction: column !important;
|
@@ -66,7 +66,7 @@ routerResource.example = {
|
|
66
66
|
// component: () => import('@vue2-client/base-client/components/common/XRate/demo.vue'),
|
67
67
|
// component: () => import('@vue2-client/base-client/components/common/XForm/demo.vue'),
|
68
68
|
// component: () => import('@vue2-client/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue'),
|
69
|
-
component: () => import('@vue2-client/base-client/components/his/
|
69
|
+
component: () => import('@vue2-client/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue'),
|
70
70
|
// component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo.vue'),
|
71
71
|
// component: () => import('@vue2-client/base-client/components/common/XConversation/XConversationDemo.vue'),
|
72
72
|
// component: () => import('@vue2-client/base-client/components/common/XButtons/XButtonDemo.vue'),
|