diff --git a/src/locales/lang/zh-CN/menu.js b/src/locales/lang/zh-CN/menu.js index adf830e..96be65a 100644 --- a/src/locales/lang/zh-CN/menu.js +++ b/src/locales/lang/zh-CN/menu.js @@ -40,6 +40,8 @@ export default { mineWorderOrder: '我下的工单', invalidWzorkOrder: '无效工单', abnormalWorkOrder: '异常工单', + visitWorkOrder: '工单回访', + visitHistory: '回访记录', serviceWorkOrder: '服务工单', serviceMenu: '服务设施', serviceSites: '服务站点', diff --git a/src/router/routes/workorder.js b/src/router/routes/workorder.js index 102e584..7253afc 100644 --- a/src/router/routes/workorder.js +++ b/src/router/routes/workorder.js @@ -57,6 +57,28 @@ export default [ permission: '*', }, }, + { + path: 'visitWorkOrder/index.vue', + name: 'visitWorkOrder', + component: 'workorderMenu/visitWorkOrder/index.vue', + meta: { + title: '工单回访', + isMenu: true, + keepAlive: true, + permission: '*', + }, + }, + { + path: 'visitHistory/index.vue', + name: 'visitHistory', + component: 'workorderMenu/visitHistory/index.vue', + meta: { + title: '回访记录', + isMenu: true, + keepAlive: true, + permission: '*', + }, + }, ], }, ] diff --git a/src/views/workorderMenu/serviceWorkOrder/components/CheckDialog.vue b/src/views/workorderMenu/serviceWorkOrder/components/CheckDialog.vue new file mode 100644 index 0000000..02a1830 --- /dev/null +++ b/src/views/workorderMenu/serviceWorkOrder/components/CheckDialog.vue @@ -0,0 +1,198 @@ + + + + + \ No newline at end of file diff --git a/src/views/workorderMenu/serviceWorkOrder/components/EditDialog.vue b/src/views/workorderMenu/serviceWorkOrder/components/EditDialog.vue index 00dfd42..28860db 100644 --- a/src/views/workorderMenu/serviceWorkOrder/components/EditDialog.vue +++ b/src/views/workorderMenu/serviceWorkOrder/components/EditDialog.vue @@ -1,266 +1,299 @@ - +// 表单验证规则 +formRules.value = { + serviceStaff: [{ required: true, message: '请选择服务人员' }], + serviceItems: [{ required: true, message: '请选择服务项目' }], + serviceFee: [ + { required: true, message: '请填写服务费用' }, + { pattern: /^\d+$/, message: '请输入有效数字' } + ], + planDateRange: [{ required: true, message: '请选择计划日期范围' }], + planStartTime: [{ required: true, message: '请选择计划开始时间' }], + requiredDuration: [{ required: true, message: '请填写要求工单时长' }], + serviceArea: [{ required: true, message: '请选择服务地址' }], + detailAddress: [{ required: true, message: '请填写详细地址' }] +} + +// 按钮文案 +const cancelText = ref('取消') +const okText = ref('保存') + +// 打开地图(示例方法,可扩展真实逻辑) +function openMap() { + message.info('地图定位功能待实现') +} + +// 确定保存 +async function handleOk() { + try { + const values = await formRef.value.validateFields() + showLoading() + + // 构造提交数据(根据后端需求调整格式,如日期转字符串) + const payload = { + ...values, + planStartDate: values.planDateRange?.[0]?.format('YYYY-MM-DD') || '', + planEndDate: values.planDateRange?.[1]?.format('YYYY-MM-DD') || '', + planStartTime: values.planStartTime?.format('HH:mm:ss') || '' + } + + // 模拟接口请求:await apis.workOrder.save(payload) + setTimeout(() => { + hideLoading() + hideModal() + emit('ok', payload) + message.success('保存成功') + }, 500) + } catch (error) { + console.error('表单验证失败:', error) + hideLoading() + } +} + +// 取消 +function handleCancel() { + hideModal() +} + +// 关闭后重置表单 +function onAfterClose() { + resetForm() +} + +// 暴露“显示编辑弹窗”方法(若需外部调用) +defineExpose({ + showEditModal(record) { + // 若为“编辑”场景,需将 record 数据映射到 formData(示例逻辑) + formData.value = reactive({ + serviceTarget: record?.serviceTarget || '袁正芬', + serviceStaff: record?.serviceStaff || '邢光平', + serviceItems: record?.serviceItems || '兴趣活动', + serviceFee: record?.serviceFee || '40', + planDateRange: record?.planDateRange + ? [dayjs(record.planStartDate), dayjs(record.planEndDate)] + : [dayjs('2025-10-17'), dayjs('2025-10-31')], + planStartTime: record?.planStartTime + ? dayjs(record.planStartTime, 'HH:mm:ss') + : dayjs('00:03:00', 'HH:mm:ss'), + requiredDuration: record?.requiredDuration || 90, + serviceArea: record?.serviceArea || ['江苏省', '南通市', '通州区', '金新街道', '大石桥村委会'], + detailAddress: record?.detailAddress || '南通市通州区川姜镇大石桥村九组131号', + mapAddress: record?.mapAddress || '', + remark: record?.remark || '' + }) + + showModal({ + type: 'edit', + title: '编辑工单' + }) + } +}) + \ No newline at end of file diff --git a/src/views/workorderMenu/serviceWorkOrder/components/InvalidatedDialog.vue b/src/views/workorderMenu/serviceWorkOrder/components/InvalidatedDialog.vue new file mode 100644 index 0000000..6a329a7 --- /dev/null +++ b/src/views/workorderMenu/serviceWorkOrder/components/InvalidatedDialog.vue @@ -0,0 +1,98 @@ + + + \ No newline at end of file diff --git a/src/views/workorderMenu/serviceWorkOrder/components/ViewDialog.vue b/src/views/workorderMenu/serviceWorkOrder/components/ViewDialog.vue new file mode 100644 index 0000000..579017e --- /dev/null +++ b/src/views/workorderMenu/serviceWorkOrder/components/ViewDialog.vue @@ -0,0 +1,593 @@ + + + + + \ No newline at end of file diff --git a/src/views/workorderMenu/serviceWorkOrder/index.vue b/src/views/workorderMenu/serviceWorkOrder/index.vue index 216daf2..5b0782b 100644 --- a/src/views/workorderMenu/serviceWorkOrder/index.vue +++ b/src/views/workorderMenu/serviceWorkOrder/index.vue @@ -1,79 +1,165 @@ - + + + + diff --git a/src/views/workorderMenu/visitHistory/index.vue b/src/views/workorderMenu/visitHistory/index.vue new file mode 100644 index 0000000..58a82e6 --- /dev/null +++ b/src/views/workorderMenu/visitHistory/index.vue @@ -0,0 +1,393 @@ + + + + + diff --git a/src/views/workorderMenu/visitWorkOrder/components/EditDialog.vue b/src/views/workorderMenu/visitWorkOrder/components/EditDialog.vue new file mode 100644 index 0000000..75ca8fc --- /dev/null +++ b/src/views/workorderMenu/visitWorkOrder/components/EditDialog.vue @@ -0,0 +1,404 @@ + + + + + \ No newline at end of file diff --git a/src/views/workorderMenu/visitWorkOrder/components/VisitDialog.vue b/src/views/workorderMenu/visitWorkOrder/components/VisitDialog.vue new file mode 100644 index 0000000..75299a8 --- /dev/null +++ b/src/views/workorderMenu/visitWorkOrder/components/VisitDialog.vue @@ -0,0 +1,98 @@ + + + \ No newline at end of file diff --git a/src/views/workorderMenu/visitWorkOrder/index.vue b/src/views/workorderMenu/visitWorkOrder/index.vue new file mode 100644 index 0000000..fa909f7 --- /dev/null +++ b/src/views/workorderMenu/visitWorkOrder/index.vue @@ -0,0 +1,343 @@ + + + + + \ No newline at end of file