From 590a0958e7bd09a9699c661a98b9a8fd2fb989fd Mon Sep 17 00:00:00 2001 From: qiuyuan Date: Thu, 16 Oct 2025 09:59:16 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/serviceMenu/serviceSites/index.vue | 26 +- .../workorderMenu/abnormalWorkOrder/index.vue | 357 ++++++++++++++++++ .../workorderMenu/invalidWzorkOrder/index.vue | 3 +- .../components/EditDialog.vue | 266 +++++++++++++ .../workorderMenu/serviceWorkOrder/index.vue | 248 ++++++++++++ 5 files changed, 891 insertions(+), 9 deletions(-) create mode 100644 src/views/workorderMenu/serviceWorkOrder/components/EditDialog.vue diff --git a/src/views/serviceMenu/serviceSites/index.vue b/src/views/serviceMenu/serviceSites/index.vue index 9fc399f..378a204 100644 --- a/src/views/serviceMenu/serviceSites/index.vue +++ b/src/views/serviceMenu/serviceSites/index.vue @@ -11,7 +11,7 @@ - + {{ item.introduction }} @@ -22,16 +22,13 @@ - + - - - 已结单 - 已作废 - + + @@ -180,7 +177,7 @@ import ExportRecordsModal from '@/components/ExportRecord/index.vue' import { useI18n } from 'vue-i18n' import storage from '@/utils/storage' import AreaCascader from '@/components/AreaCascader/index.vue' - +import NodeTree from '@/components/NodeTree/index.vue' defineOptions({ name: 'menu', @@ -237,6 +234,7 @@ const { resetForm } = useForm() const editDialogRef = ref() import { useDicsStore } from '@/store' const dicsStore = useDicsStore() +const areaCodes = ref([]) getList() @@ -248,10 +246,13 @@ async function getList() { try { showLoading() const { pageSize, current } = paginationState + console.log("=====searchFormData",searchFormData.value.areaCodes) + const { success, data, total } = await apis.serviceMenu .getServiceSiteList({ pageSize, current: current, + // areaCodes:areaCodes, ...searchFormData.value, }) .catch(() => { @@ -267,6 +268,7 @@ async function getList() { hideLoading() } } + /** * 搜索 */ @@ -631,6 +633,14 @@ const handleRetryExport = (record) => { message.error('重新导出失败'); }); }; + +// 选择区域后 +// 如果你用 diff --git a/src/views/workorderMenu/invalidWzorkOrder/index.vue b/src/views/workorderMenu/invalidWzorkOrder/index.vue index ed8f772..216daf2 100644 --- a/src/views/workorderMenu/invalidWzorkOrder/index.vue +++ b/src/views/workorderMenu/invalidWzorkOrder/index.vue @@ -34,7 +34,7 @@ - + @@ -134,6 +134,7 @@ import { formatUtcDateTime } from '@/utils/util' import EditDialog from './components/EditDialog.vue' import { useI18n } from 'vue-i18n' import storage from '@/utils/storage' +import AreaCascader from '@/components/AreaCascader/index.vue' defineOptions({ // eslint-disable-next-line vue/no-reserved-component-names name: 'menu', diff --git a/src/views/workorderMenu/serviceWorkOrder/components/EditDialog.vue b/src/views/workorderMenu/serviceWorkOrder/components/EditDialog.vue new file mode 100644 index 0000000..00dfd42 --- /dev/null +++ b/src/views/workorderMenu/serviceWorkOrder/components/EditDialog.vue @@ -0,0 +1,266 @@ + + + + + diff --git a/src/views/workorderMenu/serviceWorkOrder/index.vue b/src/views/workorderMenu/serviceWorkOrder/index.vue index e69de29..216daf2 100644 --- a/src/views/workorderMenu/serviceWorkOrder/index.vue +++ b/src/views/workorderMenu/serviceWorkOrder/index.vue @@ -0,0 +1,248 @@ + + + + + From a297deec555e6b4dac0a9bcf3396b809e8339893 Mon Sep 17 00:00:00 2001 From: qiuyuan Date: Thu, 16 Oct 2025 09:59:28 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/viewDialog.vue | 249 ++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 src/views/workorderMenu/abnormalWorkOrder/components/viewDialog.vue diff --git a/src/views/workorderMenu/abnormalWorkOrder/components/viewDialog.vue b/src/views/workorderMenu/abnormalWorkOrder/components/viewDialog.vue new file mode 100644 index 0000000..e517ad0 --- /dev/null +++ b/src/views/workorderMenu/abnormalWorkOrder/components/viewDialog.vue @@ -0,0 +1,249 @@ + + + + + \ No newline at end of file From 10a2f3e4c2d19a12ae87de81cce469febccd046b Mon Sep 17 00:00:00 2001 From: qiuyuan Date: Fri, 17 Oct 2025 12:02:54 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/lang/zh-CN/menu.js | 2 + src/router/routes/workorder.js | 22 + .../components/CheckDialog.vue | 198 ++++++ .../components/EditDialog.vue | 539 ++++++++-------- .../components/InvalidatedDialog.vue | 98 +++ .../components/ViewDialog.vue | 593 ++++++++++++++++++ .../workorderMenu/serviceWorkOrder/index.vue | 508 +++++++++++---- .../workorderMenu/visitHistory/index.vue | 393 ++++++++++++ .../visitWorkOrder/components/EditDialog.vue | 404 ++++++++++++ .../visitWorkOrder/components/VisitDialog.vue | 98 +++ .../workorderMenu/visitWorkOrder/index.vue | 343 ++++++++++ 11 files changed, 2818 insertions(+), 380 deletions(-) create mode 100644 src/views/workorderMenu/serviceWorkOrder/components/CheckDialog.vue create mode 100644 src/views/workorderMenu/serviceWorkOrder/components/InvalidatedDialog.vue create mode 100644 src/views/workorderMenu/serviceWorkOrder/components/ViewDialog.vue create mode 100644 src/views/workorderMenu/visitHistory/index.vue create mode 100644 src/views/workorderMenu/visitWorkOrder/components/EditDialog.vue create mode 100644 src/views/workorderMenu/visitWorkOrder/components/VisitDialog.vue create mode 100644 src/views/workorderMenu/visitWorkOrder/index.vue 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 From bb32d532bf0de85c5f2c36afd887a1dfa313c8ac Mon Sep 17 00:00:00 2001 From: qiuyuan Date: Fri, 17 Oct 2025 19:23:32 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/modules/workOrder.js | 22 +++ .../workorderMenu/abnormalWorkOrder/index.vue | 51 ++++-- .../workorderMenu/invalidWzorkOrder/index.vue | 30 ++-- .../workorderMenu/mineWorderOrder/index.vue | 86 ++++++---- .../workorderMenu/serviceWorkOrder/index.vue | 155 ++++++++++++++---- .../workorderMenu/visitHistory/index.vue | 69 +------- .../workorderMenu/visitWorkOrder/index.vue | 102 ++++++------ 7 files changed, 295 insertions(+), 220 deletions(-) create mode 100644 src/apis/modules/workOrder.js diff --git a/src/apis/modules/workOrder.js b/src/apis/modules/workOrder.js new file mode 100644 index 0000000..9fed827 --- /dev/null +++ b/src/apis/modules/workOrder.js @@ -0,0 +1,22 @@ +// 工单模块 +import request from '@/utils/request' + +// 工单列表-- 全部 +export const getWorkOrderList = (params) => request.basic.get('/api/v1/orders', params) + +// 异常工单列表 +export const getAbnormalWorkOrderList = (params) => request.basic.get('/api/v1/orders/errors_order', params) + +// 我下的工单 +export const getMyWorkOrderList = (params) => request.basic.get('/api/v1/orders/my_order', params) + +// 回访记录 +export const getBackRecordList = (params) => request.basic.get('/api/v1/orders/back_order', params) + +// 工单回访列表 +export const getBackWorkOrderList = (params) => request.basic.get(`/api/v1/orders/noback_order`, params) + + +// 工单详情 +export const getWorkOrderDetail = (id) => request.basic.get(`/api/v1/orders/${id}`) + diff --git a/src/views/workorderMenu/abnormalWorkOrder/index.vue b/src/views/workorderMenu/abnormalWorkOrder/index.vue index 1216e49..24b6b24 100644 --- a/src/views/workorderMenu/abnormalWorkOrder/index.vue +++ b/src/views/workorderMenu/abnormalWorkOrder/index.vue @@ -56,6 +56,7 @@ :columns="columns" :data-source="listData" :row-selection="rowSelection" + :scroll="{ x: 'max-content' }" >