From a4a54d3e3835ec7e9bb781a93a40c58dd8f76a9a Mon Sep 17 00:00:00 2001 From: GiveMePast <1248298477@qq.com> Date: Sat, 28 Feb 2026 17:44:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=A1=A8=E5=8D=95=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=AD=E5=A2=9E=E5=8A=A0customer=5Fid?= =?UTF-8?q?=EF=BC=88=E5=AE=A2=E6=88=B7=E5=BD=92=E5=B1=9E=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ticket/TicketForm.vue | 84 +++++++++++----------------- 1 file changed, 32 insertions(+), 52 deletions(-) diff --git a/src/components/ticket/TicketForm.vue b/src/components/ticket/TicketForm.vue index c13c7df..11571d7 100644 --- a/src/components/ticket/TicketForm.vue +++ b/src/components/ticket/TicketForm.vue @@ -19,7 +19,7 @@
权责分配
- @@ -28,7 +28,7 @@ + :disabled="!form.customer_id"> @@ -77,69 +77,71 @@ const emit = defineEmits(["update:modelValue", "submit"]); const props = defineProps({ modelValue: Boolean, formData: Object, - customers: Array, // 外部客户单位列表 - customerEmployees: Array, // 外部客户员工列表 - staffs: Array, // 我方员工列表 + customers: Array, + customerEmployees: Array, + staffs: Array, isEditing: Boolean, }); +// --- 响应式变量 --- const dialogVisible = ref(false); const formRef = ref(); const submitting = ref(false); -const current_customer_id = ref(null); // 级联用的中间变量 +// 核心表单对象:customer_id 已包含在内 const form = reactive({ website: "", operator: "", + customer_id: null, staff_id: null, is_complete: "未分配", remark: "", }); -// 使用 computed 动态切换校验逻辑 +// --- 校验规则 --- const rules = computed(() => { const baseRules = { website: [{ required: true, message: "请输入网站地址", trigger: "blur" }], + customer_id: [{ required: true, message: "请选择客户单位", trigger: "change" }], operator: [{ required: true, message: "请选择运营人员", trigger: "change" }], }; - - // 仅在编辑模式下,将 staff_id 设为必填 if (props.isEditing) { baseRules.staff_id = [{ required: true, message: "请选择负责人", trigger: "change" }]; } - return baseRules; }); -// 核心逻辑:级联过滤 +// --- 逻辑:根据选择的单位过滤人员 --- const filteredEmployees = computed(() => { - if (!current_customer_id.value) return []; - return props.customerEmployees.filter( - (emp) => emp.customer_id === current_customer_id.value - ); + if (!form.customer_id) return []; + return props.customerEmployees.filter((emp) => emp.customer_id === form.customer_id); }); -// 单位切换时清空人员 +// 单位切换时,重置运营人员选择 const handleCustomerChange = () => { form.operator = ""; }; -// 监听弹窗显隐与数据回显 +// --- 监听弹窗与回显 --- watch( () => props.modelValue, (val) => { dialogVisible.value = val; if (val) { nextTick(() => { - resetForm(); + resetForm(); // 先重置 if (props.isEditing && props.formData) { + // 深度合并数据 Object.assign(form, props.formData); - // 回显逻辑:根据 operator 姓名反查所属 customer_id - const employee = props.customerEmployees.find( - (e) => e.employee_name === props.formData.operator - ); - if (employee) { - current_customer_id.value = employee.customer_id; + + // 回显补充:如果传入的 formData 没有带 customer_id,通过 operator 反查补全 + if (!form.customer_id && props.formData.operator) { + const employee = props.customerEmployees.find( + (e) => e.employee_name === props.formData.operator + ); + if (employee) { + form.customer_id = employee.customer_id; + } } } }); @@ -152,12 +154,13 @@ watch( (val) => emit("update:modelValue", val) ); +// --- 表单重置与提交 --- const resetForm = () => { if (formRef.value) formRef.value.resetFields(); - current_customer_id.value = null; Object.assign(form, { website: "", operator: "", + customer_id: null, staff_id: null, is_complete: "未分配", remark: "", @@ -172,17 +175,15 @@ const handleSubmit = async () => { await formRef.value.validate(); submitting.value = true; - // 复制一份表单数据进行处理 + // 复制提交数据,如果是新增,确保 staff_id 为空 const submitData = { ...form }; - - // 如果是新增模式,强制将 staff_id 设为 null if (!props.isEditing) { submitData.staff_id = null; } emit("submit", submitData); } catch (e) { - console.log("表单校验失败", e); + console.error("表单验证失败", e); } finally { submitting.value = false; } @@ -190,6 +191,7 @@ const handleSubmit = async () => {