src/views/salesManagement/salesLedger/index.vue
@@ -464,6 +464,8 @@
                        v-model="productForm.productCategory"
                        placeholder="请选择"
                        clearable
                        filterable
                        :filter-node-method="filterProductCategoryNode"
                        check-strictly
                        @change="getModels"
                        :data="productOptions"
@@ -507,7 +509,9 @@
                  <el-form-item label="税率(%):" prop="taxRate">
                     <el-select v-model="productForm.taxRate" placeholder="请选择" clearable @change="calculateFromTaxRate" style="width: 100%">
                        <el-option label="1" value="1" />
                        <el-option label="3" value="3" />
                        <el-option label="6" value="6" />
                        <el-option label="9" value="9" />
                        <el-option label="13" value="13" />
                     </el-select>
                  </el-form-item>
@@ -1081,22 +1085,6 @@
   productRules: {
      productCategory: [{ required: true, message: "请选择", trigger: "change" }],
      productModelId: [{ required: true, message: "请选择", trigger: "change" }],
      specificationModel: [
         { required: true, message: "请选择", trigger: "change" },
      ],
      thickness: [{ required: true, message: "请输入", trigger: "blur" }],
      quantity: [{ required: true, message: "请输入", trigger: "blur" }],
      taxInclusiveUnitPrice: [
         { required: true, message: "请输入", trigger: "blur" },
      ],
      taxRate: [{ required: true, message: "请选择", trigger: "change" }],
      taxInclusiveTotalPrice: [
         { required: true, message: "请输入", trigger: "blur" },
      ],
      taxExclusiveTotalPrice: [
         { required: true, message: "请输入", trigger: "blur" },
      ],
      invoiceType: [{ required: true, message: "请选择", trigger: "change" }],
   },
});
const { productForm, productRules } = toRefs(productFormData);
@@ -1521,19 +1509,45 @@
};
// 获取tree子数据
const getModels = (value) => {
   // 产品大类变化时,重置规格型号与厚度,避免旧值残留
   productForm.value.productModelId = null;
   productForm.value.specificationModel = "";
   productForm.value.thickness = null;
   if (!value) {
      productForm.value.productCategory = "";
      modelOptions.value = [];
      return;
   }
   productForm.value.productCategory = findNodeById(productOptions.value, value);
   modelList({ id: value }).then((res) => {
      modelOptions.value = res;
      modelOptions.value = res || [];
   });
};
const getProductModel = (value) => {
   const index = modelOptions.value.findIndex((item) => item.id === value);
   if (index !== -1) {
      productForm.value.specificationModel = modelOptions.value[index].model;
      const selectedModel = modelOptions.value[index];
      const modelThickness =
         selectedModel?.thickness ??
         selectedModel?.modelThickness ??
         selectedModel?.thick ??
         null;
      productForm.value.thickness =
         modelThickness === null || modelThickness === undefined || modelThickness === ""
            ? null
            : Number(modelThickness);
   } else {
      productForm.value.specificationModel = null;
      productForm.value.thickness = null;
   }
};
const filterProductCategoryNode = (value, data) => {
   if (!value) return true;
   return String(data?.label || "").toLowerCase().includes(String(value).toLowerCase());
};
const findNodeById = (nodes, productId) => {
   for (let i = 0; i < nodes.length; i++) {
      if (nodes[i].value === productId) {