d433e7f6
刘淇
工单
|
1
|
<template>
|
c7df828a
刘淇
快速工单 样式优化
|
2
|
<view class="page-container">
|
5822009a
刘淇
工单管理--新增工单
|
3
4
5
6
7
|
<view class="work-order-form-content commonPageLRpadding">
<up-form
label-position="left"
:model="workOrderForm"
ref="workOrderFormRef"
|
ff65dc6c
刘淇
快速工单 样式优化
|
8
|
labelWidth="190rpx"
|
5822009a
刘淇
工单管理--新增工单
|
9
|
>
|
2764b83e
刘淇
分配养护员
|
10
|
<!-- 1. 工单编号(从URL获取展示) -->
|
5822009a
刘淇
工单管理--新增工单
|
11
|
<up-form-item
|
2764b83e
刘淇
分配养护员
|
12
|
label="工单编号"
|
5822009a
刘淇
工单管理--新增工单
|
13
|
border-bottom
|
d433e7f6
刘淇
工单
|
14
|
>
|
5822009a
刘淇
工单管理--新增工单
|
15
|
<up-input
|
2764b83e
刘淇
分配养护员
|
16
|
v-model="workOrderForm.orderNo"
|
5822009a
刘淇
工单管理--新增工单
|
17
18
|
border="none"
readonly
|
2764b83e
刘淇
分配养护员
|
19
|
placeholder="暂无工单编号"
|
5822009a
刘淇
工单管理--新增工单
|
20
|
></up-input>
|
5822009a
刘淇
工单管理--新增工单
|
21
22
|
</up-form-item>
|
2764b83e
刘淇
分配养护员
|
23
|
<!-- 2. 养护员选择(必选,下拉框) -->
|
5822009a
刘淇
工单管理--新增工单
|
24
|
<up-form-item
|
2764b83e
刘淇
分配养护员
|
25
26
|
label="养护员"
prop="assigneeName"
|
5822009a
刘淇
工单管理--新增工单
|
27
28
|
border-bottom
required
|
2764b83e
刘淇
分配养护员
|
29
|
@click="handleActionSheetOpen('assignee'); hideKeyboard()"
|
5822009a
刘淇
工单管理--新增工单
|
30
31
|
>
<up-input
|
2764b83e
刘淇
分配养护员
|
32
|
v-model="workOrderForm.assigneeName"
|
5822009a
刘淇
工单管理--新增工单
|
33
34
|
disabled
disabled-color="#ffffff"
|
2764b83e
刘淇
分配养护员
|
35
|
placeholder="请选择养护员"
|
5822009a
刘淇
工单管理--新增工单
|
36
37
38
39
40
41
|
border="none"
></up-input>
<template #right>
<up-icon name="arrow-right" size="16"></up-icon>
</template>
</up-form-item>
|
d433e7f6
刘淇
工单
|
42
|
|
2764b83e
刘淇
分配养护员
|
43
|
<!-- 3. 处理意见(非必填,文本域) -->
|
5822009a
刘淇
工单管理--新增工单
|
44
|
<up-form-item
|
2764b83e
刘淇
分配养护员
|
45
46
|
label="处理意见"
prop="reason"
|
5822009a
刘淇
工单管理--新增工单
|
47
48
|
>
<up-textarea
|
2764b83e
刘淇
分配养护员
|
49
50
|
placeholder="请输入处理意见(可选,最多200字)"
v-model.trim="workOrderForm.reason"
|
5822009a
刘淇
工单管理--新增工单
|
51
52
53
|
count
maxlength="200"
rows="4"
|
5822009a
刘淇
工单管理--新增工单
|
54
55
|
></up-textarea>
</up-form-item>
|
5822009a
刘淇
工单管理--新增工单
|
56
57
|
</up-form>
</view>
|
d433e7f6
刘淇
工单
|
58
|
|
5822009a
刘淇
工单管理--新增工单
|
59
60
61
62
|
<!-- 底部提交按钮 -->
<view class="fixed-bottom-btn-wrap">
<up-button
type="primary"
|
2764b83e
刘淇
分配养护员
|
63
|
text="提交"
|
5822009a
刘淇
工单管理--新增工单
|
64
65
66
|
@click="submitWorkOrder"
></up-button>
</view>
|
d433e7f6
刘淇
工单
|
67
|
|
2764b83e
刘淇
分配养护员
|
68
|
<!-- 养护员下拉弹窗 -->
|
5822009a
刘淇
工单管理--新增工单
|
69
|
<up-action-sheet
|
8d0834be
刘淇
工单管理--新增工单 优化
|
70
71
72
73
74
|
:show="showActionSheet"
:actions="currentActionSheetData.list"
:title="currentActionSheetData.title"
@close="handleActionSheetClose"
@select="handleActionSheetSelect"
|
5822009a
刘淇
工单管理--新增工单
|
75
|
></up-action-sheet>
|
5822009a
刘淇
工单管理--新增工单
|
76
77
|
</view>
</template>
|
d433e7f6
刘淇
工单
|
78
|
|
c7df828a
刘淇
快速工单 样式优化
|
79
|
<script setup>
|
2764b83e
刘淇
分配养护员
|
80
81
82
83
84
|
import { ref, reactive } from 'vue'
import { onLoad, onReady, onShow } from '@dcloudio/uni-app';
import { getYlWorkersPage, ylTeamLeaderAssignWOrder } from '@/api/work-order-manage/work-order-manage'
import { useUserStore } from '@/pinia/user';
const userStore = useUserStore();
|
c7df828a
刘淇
快速工单 样式优化
|
85
86
|
// ========== 表单Ref ==========
const workOrderFormRef = ref(null)
|
c7df828a
刘淇
快速工单 样式优化
|
87
|
// ========== 页面状态 ==========
|
c7df828a
刘淇
快速工单 样式优化
|
88
|
const showActionSheet = ref(false)
|
c7df828a
刘淇
快速工单 样式优化
|
89
90
91
92
93
|
const currentActionSheetData = reactive({
type: '',
list: [],
title: ''
})
|
c7df828a
刘淇
快速工单 样式优化
|
94
|
// ========== 下拉列表数据 ==========
|
2764b83e
刘淇
分配养护员
|
95
96
|
const assigneeList = ref([]) // 养护员列表
// ========== 工单表单数据(仅保留所需字段) ==========
|
c7df828a
刘淇
快速工单 样式优化
|
97
|
const workOrderForm = reactive({
|
2764b83e
刘淇
分配养护员
|
98
99
100
101
102
|
taskId:'',
orderNo: '', // 工单编号(对应接口参数id)
assigneeId: '', // 养护员ID(对应接口参数nextAssignee)
assigneeName: '', // 养护员名称(显示用)
reason: '' // 处理意见(对应接口参数reason)
|
c7df828a
刘淇
快速工单 样式优化
|
103
|
})
|
2764b83e
刘淇
分配养护员
|
104
|
// ========== 表单校验规则(仅保留养护员必选校验) ==========
|
c7df828a
刘淇
快速工单 样式优化
|
105
|
const workOrderFormRules = reactive({
|
2764b83e
刘淇
分配养护员
|
106
107
|
assigneeName: [
{type: 'string', required: true, message: '请选择养护员', trigger: ['change']}
|
c7df828a
刘淇
快速工单 样式优化
|
108
|
],
|
2764b83e
刘淇
分配养护员
|
109
110
111
|
reason: [
{type: 'string', max: 200, message: '处理意见最多200字', trigger: ['change', 'blur']}
]
|
c7df828a
刘淇
快速工单 样式优化
|
112
|
})
|
c7df828a
刘淇
快速工单 样式优化
|
113
|
// ========== 生命周期 ==========
|
2764b83e
刘淇
分配养护员
|
114
115
116
117
118
119
120
121
122
123
|
// onLoad - 获取URL中的工单编号
onLoad((options) => {
// 从URL参数中获取工单编号(参数名orderNo可根据实际修改)
if (options && options.orderNo) {
workOrderForm.orderNo = options.orderNo
workOrderForm.taskId = options.taskId
}
console.log('从URL获取工单编号:', workOrderForm.orderNo)
})
|
c7df828a
刘淇
快速工单 样式优化
|
124
125
126
127
128
|
onReady(() => {
// 设置表单校验规则
if (workOrderFormRef.value) {
workOrderFormRef.value.setRules(workOrderFormRules)
}
|
c7df828a
刘淇
快速工单 样式优化
|
129
|
})
|
c7df828a
刘淇
快速工单 样式优化
|
130
|
onShow(() => {
|
2764b83e
刘淇
分配养护员
|
131
132
|
// 加载养护员列表
loadAssigneeList()
|
c7df828a
刘淇
快速工单 样式优化
|
133
|
})
|
2764b83e
刘淇
分配养护员
|
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
// ========== 加载养护员列表 ==========
const loadAssigneeList = async () => {
try {
uni.showLoading({title: '获取养护员中...'})
// 调用getYlWorkersPage接口(可根据接口要求传递参数,此处默认空对象)
console.log(userStore.userInfo.user.busiLine)
let queryData = {
// roleCode:userStore.userInfo.roles,
roleCode: 'yl_worker',
busiLine: userStore.userInfo.user.busiLine,
pageNo: 1,
pageSize: 100
}
const res = await getYlWorkersPage(queryData)
uni.hideLoading()
if (res.list.length > 0) {
assigneeList.value = res.list.map(item => ({
name: item.nickname,
value: item.id,
id: item.id
}))
console.log(currentActionSheetData.list)
} else {
uni.showToast({title: '所在班组暂无养护员,请先配置养护员', icon: 'none'})
}
console.log(currentActionSheetData.list)
} catch (err) {
uni.hideLoading()
console.error('获取养护员列表失败:', err)
uni.showToast({title: '获取养护员失败,请重试', icon: 'none'})
assigneeList.value = []
}
}
|
c7df828a
刘淇
快速工单 样式优化
|
167
168
|
// ========== 方法定义 ==========
/**
|
2764b83e
刘淇
分配养护员
|
169
|
* 打开养护员下拉弹窗
|
c7df828a
刘淇
快速工单 样式优化
|
170
171
|
*/
const handleActionSheetOpen = (type) => {
|
2764b83e
刘淇
分配养护员
|
172
173
174
|
// 判断养护员列表是否为空
if (type === 'assignee' && assigneeList.value.length === 0) {
uni.showToast({title: '暂无养护员数据可选', icon: 'none'})
|
c7df828a
刘淇
快速工单 样式优化
|
175
176
|
return
}
|
2764b83e
刘淇
分配养护员
|
177
|
// 配置弹窗参数
|
c7df828a
刘淇
快速工单 样式优化
|
178
|
const configMap = {
|
2764b83e
刘淇
分配养护员
|
179
180
181
|
assignee: {
title: '请选择养护员',
list: assigneeList.value
|
d433e7f6
刘淇
工单
|
182
|
}
|
c7df828a
刘淇
快速工单 样式优化
|
183
|
}
|
c7df828a
刘淇
快速工单 样式优化
|
184
185
186
187
188
|
currentActionSheetData.type = type
currentActionSheetData.title = configMap[type].title
currentActionSheetData.list = configMap[type].list
showActionSheet.value = true
}
|
c7df828a
刘淇
快速工单 样式优化
|
189
|
/**
|
2764b83e
刘淇
分配养护员
|
190
|
* 关闭下拉弹窗
|
c7df828a
刘淇
快速工单 样式优化
|
191
192
193
|
*/
const handleActionSheetClose = () => {
showActionSheet.value = false
|
c7df828a
刘淇
快速工单 样式优化
|
194
195
196
197
|
currentActionSheetData.type = ''
currentActionSheetData.list = []
currentActionSheetData.title = ''
}
|
c7df828a
刘淇
快速工单 样式优化
|
198
|
/**
|
2764b83e
刘淇
分配养护员
|
199
|
* 养护员选择事件
|
c7df828a
刘淇
快速工单 样式优化
|
200
201
|
*/
const handleActionSheetSelect = (e) => {
|
2764b83e
刘淇
分配养护员
|
202
203
204
205
206
|
const {type} = currentActionSheetData
if (type === 'assignee') {
workOrderForm.assigneeName = e.name
workOrderForm.assigneeId = e.value // 绑定养护员ID
workOrderFormRef.value?.validateField('assigneeName')
|
c7df828a
刘淇
快速工单 样式优化
|
207
|
}
|
c7df828a
刘淇
快速工单 样式优化
|
208
209
|
showActionSheet.value = false
}
|
c7df828a
刘淇
快速工单 样式优化
|
210
211
212
213
214
215
|
/**
* 隐藏键盘
*/
const hideKeyboard = () => {
uni.hideKeyboard()
}
|
c7df828a
刘淇
快速工单 样式优化
|
216
|
/**
|
2764b83e
刘淇
分配养护员
|
217
|
* 提交数据(使用ylTeamLeaderAssignWOrder接口,传递指定参数)
|
c7df828a
刘淇
快速工单 样式优化
|
218
219
220
|
*/
const submitWorkOrder = async () => {
try {
|
2764b83e
刘淇
分配养护员
|
221
|
// 1. 表单校验(先校验养护员必选项)
|
c7df828a
刘淇
快速工单 样式优化
|
222
|
await workOrderFormRef.value.validate()
|
2764b83e
刘淇
分配养护员
|
223
224
225
226
227
228
|
// 2. 校验工单编号是否存在(避免无工单编号提交)
if (!workOrderForm.orderNo) {
uni.showToast({title: '工单编号不能为空', icon: 'none'})
return
}
// 3. 构造接口所需参数
|
c7df828a
刘淇
快速工单 样式优化
|
229
|
const submitData = {
|
2764b83e
刘淇
分配养护员
|
230
231
232
|
id: workOrderForm.taskId, // 工单编码(对应接口参数id)
reason: workOrderForm.reason.trim(), // 处理建议(对应接口参数reason)
nextAssignee: workOrderForm.assigneeId // 养护员ID(对应接口参数nextAssignee)
|
c7df828a
刘淇
快速工单 样式优化
|
233
|
}
|
2764b83e
刘淇
分配养护员
|
234
235
236
237
238
239
|
console.log('提交参数:', submitData)
// 4. 显示加载提示
uni.showLoading({title: '提交中...'})
// 5. 调用指定接口 ylTeamLeaderAssignWOrder
const res = await ylTeamLeaderAssignWOrder(submitData)
// 6. 隐藏加载提示并给出成功反馈
|
c7df828a
刘淇
快速工单 样式优化
|
240
241
|
uni.hideLoading()
uni.showToast({
|
2764b83e
刘淇
分配养护员
|
242
|
title: '提交成功',
|
c7df828a
刘淇
快速工单 样式优化
|
243
244
245
|
icon: 'success',
duration: 1000
})
|
2764b83e
刘淇
分配养护员
|
246
|
// 7. 提交成功后返回上一页
|
c7df828a
刘淇
快速工单 样式优化
|
247
|
setTimeout(() => {
|
2764b83e
刘淇
分配养护员
|
248
249
|
uni.navigateTo({
url: `/pages-sub/problem/work-order-manage/index`
|
c7df828a
刘淇
快速工单 样式优化
|
250
251
252
|
})
}, 1000)
} catch (error) {
|
2764b83e
刘淇
分配养护员
|
253
|
// 隐藏加载提示
|
c7df828a
刘淇
快速工单 样式优化
|
254
|
uni.hideLoading()
|
2764b83e
刘淇
分配养护员
|
255
|
// 区分表单校验失败和接口调用失败
|
c7df828a
刘淇
快速工单 样式优化
|
256
|
if (!Array.isArray(error)) {
|
2764b83e
刘淇
分配养护员
|
257
|
console.error('提交失败:', error)
|
c7df828a
刘淇
快速工单 样式优化
|
258
259
260
261
262
|
uni.showToast({
title: '提交失败,请重试',
icon: 'none',
duration: 2000
})
|
d433e7f6
刘淇
工单
|
263
264
|
}
}
|
d433e7f6
刘淇
工单
|
265
|
}
|
5822009a
刘淇
工单管理--新增工单
|
266
|
</script>
|
d433e7f6
刘淇
工单
|
267
|
|
5822009a
刘淇
工单管理--新增工单
|
268
269
|
<style lang="scss" scoped>
// 全局页面样式
|
c7df828a
刘淇
快速工单 样式优化
|
270
|
.page-container {
|
2764b83e
刘淇
分配养护员
|
271
|
|
d433e7f6
刘淇
工单
|
272
273
|
}
|
2764b83e
刘淇
分配养护员
|
274
|
// 表单内容容器
|
5822009a
刘淇
工单管理--新增工单
|
275
276
|
.work-order-form-content {
background: #fff;
|
2764b83e
刘淇
分配养护员
|
277
|
margin-top: 10rpx;
|
d433e7f6
刘淇
工单
|
278
279
|
}
|
2764b83e
刘淇
分配养护员
|
280
|
|
d433e7f6
刘淇
工单
|
281
|
</style>
|