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 () => {