|  |  | 
 |  |  | <template> | 
 |  |  |   <wd-form ref="form" :model="model" class="relative form_box"> | 
 |  |  |     <wd-cell-group :border="true"> | 
 |  |  |       <wd-input | 
 |  |  |         v-model="model.diskMaterial" | 
 |  |  |       <wd-picker | 
 |  |  |         v-model="diskMaterialValue" | 
 |  |  |         :columns="diskMaterialOptions" | 
 |  |  |         label="盘具类型" | 
 |  |  |         label-width="100px" | 
 |  |  |         prop="diskMaterial" | 
 |  |  |         placeholder="请选择盘具类型" | 
 |  |  |         clearable | 
 |  |  |         placeholder="请输入盘具类型" | 
 |  |  |         @confirm="handleDiskMaterialChange" | 
 |  |  |       /> | 
 |  |  |       <wd-input | 
 |  |  |         v-model="model.model" | 
 |  |  | 
 |  |  | <script setup lang="ts"> | 
 |  |  | import useFormData from "@/hooks/useFormData"; | 
 |  |  | import TwistApi from "@/api/product/twist"; | 
 |  |  | import ManageApi from "@/api/product/manage"; | 
 |  |  | import { useToast } from "wot-design-uni"; | 
 |  |  |  | 
 |  |  | const props = defineProps({ | 
 |  |  |   mode: { | 
 |  |  |     type: String, | 
 |  |  |     default: "add", | 
 |  |  |   }, | 
 |  |  |   editData: { | 
 |  |  |     type: Object, | 
 |  |  |     default: null, | 
 |  |  |   }, | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | const emits = defineEmits(["refresh"]); | 
 |  |  | const paramsId = ref(); | 
 |  |  | 
 |  |  |   supplier: undefined, | 
 |  |  |   type: "盘具", | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | // 用于编辑时存储完整列表数据和当前编辑ID | 
 |  |  | const allListData = ref<any[]>([]); | 
 |  |  | const editId = ref<number>(); | 
 |  |  |  | 
 |  |  | // 盘具类型字典数据 | 
 |  |  | const diskMaterialOptions = ref<Array<{ label: string; value: string }>>([]); | 
 |  |  | const diskMaterialValue = ref(""); | 
 |  |  |  | 
 |  |  | // 加载盘具类型字典数据 | 
 |  |  | const loadDiskMaterialDict = async () => { | 
 |  |  |   try { | 
 |  |  |     const res = await ManageApi.dictAPI("disk_material"); | 
 |  |  |     if (res.data && Array.isArray(res.data)) { | 
 |  |  |       diskMaterialOptions.value = res.data.map((item: any) => ({ | 
 |  |  |         label: item.dictLabel || "", | 
 |  |  |         value: item.dictValue || "", | 
 |  |  |       })); | 
 |  |  |     } | 
 |  |  |   } catch (error) { | 
 |  |  |     console.error("加载盘具类型字典失败:", error); | 
 |  |  |   } | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | // 处理盘具类型选择 | 
 |  |  | const handleDiskMaterialChange = (val: any) => { | 
 |  |  |   model.diskMaterial = val.value; | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | // 监听 model.diskMaterial 变化,同步选择器显示 | 
 |  |  | watch( | 
 |  |  |   () => model.diskMaterial, | 
 |  |  |   (newValue) => { | 
 |  |  |     diskMaterialValue.value = newValue || ""; | 
 |  |  |   }, | 
 |  |  |   { immediate: true } | 
 |  |  | ); | 
 |  |  |  | 
 |  |  | const submit = async () => { | 
 |  |  |   const { code } = await TwistApi.addStrandedWireDish([ | 
 |  |  | 
 |  |  |     emits("refresh"); | 
 |  |  |     return true; | 
 |  |  |   } | 
 |  |  |   return false; | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | // 编辑提交(也走新增接口,提交整个列表) | 
 |  |  | const submitEdit = async (list?: any[], id?: number) => { | 
 |  |  |   const currentList = list || allListData.value; | 
 |  |  |   const currentId = id || editId.value; | 
 |  |  |  | 
 |  |  |   if (!currentId) { | 
 |  |  |     toast.error("缺少记录ID"); | 
 |  |  |     return false; | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   // 更新列表中对应的数据项 | 
 |  |  |   const updatedList = currentList.map((item) => { | 
 |  |  |     if (item.id === currentId) { | 
 |  |  |       // 保留原有数据,然后更新修改的字段 | 
 |  |  |       const updatedItem = { | 
 |  |  |         ...item, // 先保留原有的所有数据 | 
 |  |  |         diskMaterial: model.diskMaterial, | 
 |  |  |         model: model.model, | 
 |  |  |         amount: model.amount, | 
 |  |  |         supplier: model.supplier, | 
 |  |  |         type: model.type, | 
 |  |  |       }; | 
 |  |  |       return updatedItem; | 
 |  |  |     } | 
 |  |  |     return item; | 
 |  |  |   }); | 
 |  |  |  | 
 |  |  |   // 提交整个列表 | 
 |  |  |   const { code } = await TwistApi.addStrandedWireDish(updatedList); | 
 |  |  |  | 
 |  |  |   if (code == 200) { | 
 |  |  |     toast.success("更新成功"); | 
 |  |  |     return true; | 
 |  |  |   } | 
 |  |  |   return false; | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | // 设置表单数据(用于编辑时回显) | 
 |  |  | const setFormData = (list: any[], currentEditId: number) => { | 
 |  |  |   // 安全检查:确保list是数组 | 
 |  |  |   if (!Array.isArray(list)) { | 
 |  |  |     console.error("setFormData: list 参数不是数组", list); | 
 |  |  |     return; | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   // 存储完整列表数据 | 
 |  |  |   allListData.value = list; | 
 |  |  |   editId.value = currentEditId; | 
 |  |  |  | 
 |  |  |   // 找到当前编辑项并回显到表单 | 
 |  |  |   const currentItem = list.find((item) => item.id === currentEditId); | 
 |  |  |   if (currentItem) { | 
 |  |  |     model.diskMaterial = currentItem.diskMaterial; | 
 |  |  |     model.model = currentItem.model; | 
 |  |  |     model.amount = currentItem.amount; | 
 |  |  |     model.supplier = currentItem.supplier; | 
 |  |  |     model.type = currentItem.type || "盘具"; | 
 |  |  |     // 设置盘具类型的回显值 | 
 |  |  |     diskMaterialValue.value = currentItem.diskMaterial || ""; | 
 |  |  |   } | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | onLoad((options: any) => { | 
 |  |  |   paramsId.value = options.id; | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | onMounted(async () => { | 
 |  |  |   await loadDiskMaterialDict(); | 
 |  |  | }); | 
 |  |  |  | 
 |  |  | // 监听编辑数据变化,自动回显 | 
 |  |  | watch( | 
 |  |  |   () => props.editData, | 
 |  |  |   (newData) => { | 
 |  |  |     if (newData && props.mode === "edit") { | 
 |  |  |       model.diskMaterial = newData.diskMaterial || ""; | 
 |  |  |       model.model = newData.model || ""; | 
 |  |  |       model.amount = newData.amount || ""; | 
 |  |  |       model.supplier = newData.supplier || ""; | 
 |  |  |       model.type = newData.type || "盘具"; | 
 |  |  |       diskMaterialValue.value = newData.diskMaterial || ""; | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   { immediate: true, deep: true } | 
 |  |  | ); | 
 |  |  |  | 
 |  |  | // 重置表单数据 | 
 |  |  | const resetFormData = () => { | 
 |  |  |   model.diskMaterial = undefined; | 
 |  |  |   model.model = undefined; | 
 |  |  |   model.amount = undefined; | 
 |  |  |   model.supplier = undefined; | 
 |  |  |   model.type = "盘具"; | 
 |  |  |   diskMaterialValue.value = ""; | 
 |  |  | }; | 
 |  |  |  | 
 |  |  | defineExpose({ | 
 |  |  |   submit, | 
 |  |  |   submitEdit, | 
 |  |  |   setFormData, | 
 |  |  |   resetFormData, | 
 |  |  | }); | 
 |  |  | </script> | 
 |  |  | <style lang="scss" scoped> | 
 |  |  | .form_box { | 
 |  |  | } | 
 |  |  | .submit_btn { | 
 |  |  |   position: absolute; | 
 |  |  |   bottom: 0; |