spring
8 天以前 78c565e37520fad100693c4e298e30e7c916d1bb
src/pages/production/twist/receive/plate/form.vue
@@ -1,13 +1,15 @@
<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"
@@ -41,7 +43,19 @@
<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();
@@ -53,6 +67,43 @@
  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([
@@ -66,19 +117,113 @@
    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;