From 7880cb10514d9957f1f123069668453e231eff7e Mon Sep 17 00:00:00 2001 From: liangbin <15536829364@163.com> Date: Fri, 16 Jan 2026 16:12:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(WorkOrderEdit):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E7=BC=96=E8=BE=91=E5=A4=9A=E6=AD=A5=E9=AA=A4?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加工单编辑的多步骤表单功能,包括基础信息和出入证申请两个步骤: 1. 在基础信息步骤中添加作业负责人和作业班成员选择功能 2. 创建新的出入证申请组件,处理车辆信息和有效日期选择 3. 实现步骤间数据共享和导航功能 --- .../WorkOrderEdit/compoents/BasicsInfo.vue | 152 +++++++++- .../WorkOrderEdit/compoents/GatePassInfo.vue | 269 ++++++++++++++++++ src/pages/WorkOrderEdit/index.vue | 21 +- 3 files changed, 430 insertions(+), 12 deletions(-) create mode 100644 src/pages/WorkOrderEdit/compoents/GatePassInfo.vue diff --git a/src/pages/WorkOrderEdit/compoents/BasicsInfo.vue b/src/pages/WorkOrderEdit/compoents/BasicsInfo.vue index 9433b79..bf78b37 100644 --- a/src/pages/WorkOrderEdit/compoents/BasicsInfo.vue +++ b/src/pages/WorkOrderEdit/compoents/BasicsInfo.vue @@ -22,7 +22,8 @@ + + 作业负责人 + + + + + + + 作业班成员 + 添加 + + + + + {{ member.name }} + + + + + @@ -71,12 +95,31 @@ const endDateMinTimestamp = computed(() => { return minTimestamp.value; }); +const showMemberPicker = ref(false); // 是否显示成员选择器 +//成员列表信息 +const MemberArr = ref([ + { + id: "123456", // 成员ID + name: "张三", // 成员姓名 + phone: "13800000000", // 成员手机号 + }, + { + id: "654321", // 成员ID + name: "李四", // 成员姓名 + phone: "13900000000", // 成员手机号 + } +]); // 作业班成员列表 + + + // 表单信息 const formData = ref({ ProjectName: "", // 项目名称 Location: "", // 作业地点(经纬度) SpecificAddress: "", // 具体楼层或区域 period: [], // 作业周期 [开始日期, 结束日期] + ResponsiblePerson: "", // 作业负责人 + MemberList: [], // 作业班成员列表 }); // 暴露方法给父组件调用 @@ -84,18 +127,20 @@ defineExpose({ getFormData: () => formData.value, }); -// 初始化地图 +// 生命周期钩子函数 onMounted(() => { initTiandituMap(); }); + + // 处理开始日期确认事件 const HandleStartDateConfirm = (e) => { console.log('选中的开始日期:', e); - + // 如果没有选择日期,使用默认值 const selectedDate = (e.value && dayjs(e.value).isValid()) ? e.value : minTimestamp.value; - + startDateText.value = dayjs(selectedDate).format('YYYY-MM-DD'); startDate.value = selectedDate; endDateText.value = ''; @@ -107,10 +152,10 @@ const HandleStartDateConfirm = (e) => { // 处理结束日期确认事件 const HandleEndDateConfirm = (e) => { console.log('选中的结束日期:', e); - + // 如果没有选择日期,使用默认值 const selectedDate = (e.value && dayjs(e.value).isValid()) ? e.value : minTimestamp.value; - + // 检查是否选择了开始日期 if (startDate.value && dayjs(selectedDate).isBefore(dayjs(startDate.value))) { uni.showToast({ @@ -120,7 +165,7 @@ const HandleEndDateConfirm = (e) => { }); return; } - + endDateText.value = dayjs(selectedDate).format('YYYY-MM-DD'); endDate.value = selectedDate; showEndDatePicker.value = false; @@ -141,6 +186,66 @@ const UpdatePeriod = () => { console.log('作业周期:', formData.value.period); }; +// 处理成员选择确认事件 +const HandleMemberConfirm = (e) => { + console.log('选中的成员完整信息:', e); + console.log('e.value:', e.value); + console.log('e.value[0]:', e.value ? e.value[0] : 'undefined'); + console.log('MemberArr:', MemberArr.value); + + if (e.value && e.value.length > 0) { + const selectedMember = e.value[0]; + console.log('选中的成员:', selectedMember); + console.log('selectedMember 的类型:', typeof selectedMember); + + let memberInfo; + + // 判断返回的是对象还是字符串 + if (typeof selectedMember === 'object' && selectedMember !== null) { + // 如果是对象,直接使用 + memberInfo = selectedMember; + console.log('返回的是对象,直接使用:', memberInfo); + } else { + // 如果是字符串,从 MemberArr 中根据id查找 + memberInfo = MemberArr.value.find(item => item.id === selectedMember); + console.log('返回的是字符串,从 MemberArr 根据id查找:', memberInfo); + } + + if (memberInfo && memberInfo.id) { + // 根据id检查成员是否已存在 + const isExist = formData.value.MemberList.some(item => item.id === memberInfo.id); + console.log('成员是否已存在:', isExist); + console.log('当前成员列表:', formData.value.MemberList); + + if (!isExist) { + formData.value.MemberList.push({ + id: memberInfo.id, + name: memberInfo.name + }); + console.log('添加成员成功:', memberInfo); + console.log('添加后的成员列表:', formData.value.MemberList); + } else { + uni.showToast({ + title: '该成员已存在', + icon: 'none', + duration: 2000 + }); + } + } else { + console.log('未找到成员信息或成员信息无效'); + } + } else { + console.log('e.value 为空或长度为0'); + } + showMemberPicker.value = false; +}; + +// 删除成员 +const RemoveMember = (index) => { + formData.value.MemberList.splice(index, 1); + console.log('删除成员成功'); +}; + // 初始化天地图 const initTiandituMap = () => { try { @@ -195,6 +300,21 @@ const initTiandituMap = () => { diff --git a/src/pages/WorkOrderEdit/index.vue b/src/pages/WorkOrderEdit/index.vue index 6c39978..fd0acac 100644 --- a/src/pages/WorkOrderEdit/index.vue +++ b/src/pages/WorkOrderEdit/index.vue @@ -4,18 +4,19 @@ - + - 工单编辑 + {{stepList[currentStep - 1].Title}} - + + @@ -26,9 +27,16 @@