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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('pages.system.menu.form.code') }}
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item
- }}
-
-
-
-
-
-
-
- {{ $t('button.delete') }}
-
-
-
+
+
+
+
+
+
-
-
-
-
- {{ $t('button.add') }}
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 分钟
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+// 表单验证规则
+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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 男
+ 女
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 项目清单
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ formData.visitSatisfaction || '-' }}
+
+
+ {{ formData.staffSatisfaction || '-' }}
+
+
+ {{ formData.visitFeedback || '-' }}
+
+
+ {{ formData.visitor || '-' }}
+
+
+ {{
+ formData.visitTime
+ ? dayjs(formData.visitTime).format('YYYY-MM-DD HH:mm:ss')
+ : '-'
+ }}
+
+
+
+
+
+
+
+
+ {{ formData.serviceSatisfaction || '-' }}
+
+
+ {{ formData.evaluationChannel || '-' }}
+
+
+ {{ formData.evaluationContent || '-' }}
+
+
+ {{ formData.evaluator || '-' }}
+
+
+ {{
+ formData.evaluationTime
+ ? dayjs(formData.evaluationTime).format('YYYY-MM-DD HH:mm:ss')
+ : '-'
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- {{ '身份证号' }}
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
- 已结单
- 已作废
-
-
-
+
+
+
+ 身份证号
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
- {{ $t('button.reset') }}
-
- {{ $t('button.search') }}
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 节点1
+ 节点2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 张三
+ 李四
+
+
+
+
+
+
+
+
+
+
+
+
+
+ P001
+ P002
+
+
+
+
+
+
+
+ 老年人
+ 残障人士
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('button.reset') }}
+
+
+ {{ $t('button.search') }}
+
+
+ {{ advancedSearchVisible.length ? '收起' : '高级查询' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ '导出' }}
+
+
-
+
- {{ $t('pages.system.menu.add') }}
+ {{ '导出记录' }}
-
+
+
+
-
{{ menuTypeEnum.getDesc(record.type) }}
-
{{ menuTypeEnum.getDesc(record.type) }}
@@ -84,83 +170,172 @@
-
{{ statusTypeEnum.getDesc(record.status) }}
-
-
+
{{ statusTypeEnum.getDesc(record.status) }}
-
-
- {{ $t('pages.system.menu.edit') }}
-
-
-
+
+
+
+ {{ '作废' }}作废
+
+
+
-
-
- {{ $t('pages.system.menu.button.addChild') }}
-
-
-
-
-
- {{ $t('pages.system.delete') }}
-
-
-
+
+
+ 编辑编辑
+
+
+
+
+
+ 详情详情
+
+
+
+
+
+ 待签入待签入
+
+
+
+
+
+
+
+
-
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.introduction }}
+
+
+
+
+
+
+
+
+
+ {{ item.introduction }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.introduction }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('button.reset') }}
+
+
+ {{ $t('button.search') }}
+
+
+ {{ advancedSearchVisible.length ? '收起' : '高级查询' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 男
+ 女
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 项目清单
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ formData.visitSatisfaction || '-' }}
+
+
+ {{ formData.staffSatisfaction || '-' }}
+
+
+ {{ formData.visitFeedback || '-' }}
+
+
+ {{ formData.visitor || '-' }}
+
+
+ {{
+ formData.visitTime
+ ? dayjs(formData.visitTime).format('YYYY-MM-DD HH:mm:ss')
+ : '-'
+ }}
+
+
+
+
+
+
+
+
+ {{ formData.serviceSatisfaction || '-' }}
+
+
+ {{ formData.evaluationChannel || '-' }}
+
+
+ {{ formData.evaluationContent || '-' }}
+
+
+ {{ formData.evaluator || '-' }}
+
+
+ {{
+ formData.evaluationTime
+ ? dayjs(formData.evaluationTime).format('YYYY-MM-DD HH:mm:ss')
+ : '-'
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 类型1
+ 类型2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 组织1
+ 组织2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 非常满意
+ 满意
+ 一般
+ 不满意
+ 非常不满意
+
+
+
+
+
+
+
+ 非常满意
+ 满意
+ 一般
+ 不满意
+ 非常不满意
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('button.reset') }}
+
+ {{ $t('button.search') }}
+
+
+ {{ advancedSearchVisible.length ? '收起' : '高级查询' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 导入
+ 导入记录
+ 导出
+ 导出记录
+
+
+
+
+
+ {{ index + 1 }}
+
+
+
+
+ 详情
+
+
+ 回访
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file