From 26bde47c8408eb7329754da3c4f81ffdcf1f4a6a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 30 三月 2026 09:21:06 +0800
Subject: [PATCH] 敦煌市鼎城瑞 1.部署修改

---
 src/views/procurementManagement/procurementLedger/index.vue |  433 ++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 372 insertions(+), 61 deletions(-)

diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 4475f30..b8fd556 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -54,7 +54,6 @@
         :summary-method="summarizeMainTable"
         @expand-change="expandChange"
         height="calc(100vh - 18.5em)"
-        :row-class-name="tableRowClassName"
       >
         <el-table-column align="center" type="selection" width="55" />
         <el-table-column type="expand">
@@ -113,30 +112,35 @@
           prop="supplierName"
           show-overflow-tooltip
         />
-        <el-table-column label="璁㈠崟鐘舵��" width="100" align="center">
-          <template #default="scope">
-            <el-tag v-if="scope.row.isInvalid" type="danger" size="small">澶辨晥</el-tag>
-            <el-tag v-else type="success" size="small">姝e父</el-tag>
-          </template>
-        </el-table-column>
         <el-table-column
           label="椤圭洰鍚嶇О"
           prop="projectName"
           width="420"
           show-overflow-tooltip
         />
-        <el-table-column
-            label="瀹℃壒鐘舵��"
-            prop="approvalStatus"
-            width="200"
-            show-overflow-tooltip
-        >
+        <el-table-column label="瀹℃壒鐘舵��" width="140">
           <template #default="scope">
             <el-tag
-                size="small"
-            >
-              {{ approvalStatusText[scope.row.approvalStatus] || '鏈煡鐘舵��' }}
-            </el-tag>
+              v-if="(scope.row.approveStatus ?? scope.row.approvalStatus ?? scope.row.auditStatus) == 0"
+              type="warning"
+            >寰呭鏍�</el-tag>
+            <el-tag
+              v-else-if="(scope.row.approveStatus ?? scope.row.approvalStatus ?? scope.row.auditStatus) == 1"
+              type="primary"
+            >瀹℃牳涓�</el-tag>
+            <el-tag
+              v-else-if="(scope.row.approveStatus ?? scope.row.approvalStatus ?? scope.row.auditStatus) == 2"
+              type="success"
+            >瀹℃牳瀹屾垚</el-tag>
+            <el-tag
+              v-else-if="(scope.row.approveStatus ?? scope.row.approvalStatus ?? scope.row.auditStatus) == 3"
+              type="danger"
+            >瀹℃牳鏈�氳繃</el-tag>
+            <el-tag
+              v-else-if="(scope.row.approveStatus ?? scope.row.approvalStatus ?? scope.row.auditStatus) == 4"
+              type="info"
+            >宸查噸鏂版彁浜�</el-tag>
+            <el-tag v-else type="info">-</el-tag>
           </template>
         </el-table-column>
         <el-table-column
@@ -246,8 +250,7 @@
                 v-model="form.supplierId"
                 placeholder="璇烽�夋嫨"
                 clearable
-                filterable
-                allow-create
+                @change="handleSupplierChange"
               >
                 <el-option
                   v-for="item in supplierList"
@@ -321,6 +324,48 @@
                 placeholder="璇烽�夋嫨"
                 clearable
               />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item>
+              <template #label>
+                <span>瀹℃壒浜洪�夋嫨锛�</span>
+                <el-button type="primary" @click="addApproverNode" style="margin-left: 8px;">鏂板鑺傜偣</el-button>
+              </template>
+              <div style="display: flex; align-items: flex-end; flex-wrap: wrap;">
+                <div
+                  v-for="(node, index) in approverNodes"
+                  :key="node.id"
+                  style="margin-right: 30px; text-align: center; margin-bottom: 10px;"
+                >
+                  <div>
+                    <span>瀹℃壒浜�</span>
+                    鈫�
+                  </div>
+                  <el-select
+                    v-model="node.userId"
+                    placeholder="閫夋嫨浜哄憳"
+                    style="width: 140px; margin-bottom: 8px;"
+                  >
+                    <el-option
+                      v-for="user in userList"
+                      :key="user.userId"
+                      :label="user.nickName"
+                      :value="user.userId"
+                    />
+                  </el-select>
+                  <div>
+                    <el-button
+                      type="danger"
+                      size="small"
+                      @click="removeApproverNode(index)"
+                      v-if="approverNodes.length > 1"
+                    >鍒犻櫎</el-button>
+                  </div>
+                </div>
+              </div>
             </el-form-item>
           </el-col>
         </el-row>
@@ -508,6 +553,11 @@
 							</el-select>
 						</el-form-item>
 					</el-col>
+          <el-col :span="24">
+            <el-form-item label=" ">
+              <el-button type="warning" :disabled="!(productForm.productId && productForm.productModelId && productForm.taxRate)" @click="showPriceReference" icon="Search">鏌ョ湅鍘嗗彶閲囪喘浠锋牸鍙傝��</el-button>
+            </el-form-item>
+          </el-col>
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
@@ -554,7 +604,7 @@
               label="涓嶅惈绋庢�讳环(鍏�)锛�"
               prop="taxExclusiveTotalPrice"
             >
-              <el-input 
+              <el-input
                 v-model="productForm.taxExclusiveTotalPrice"
                 @change="reverseMathNum('taxExclusiveTotalPrice')"
               />
@@ -594,7 +644,84 @@
         </div>
       </template>
     </el-dialog>
-    
+
+    <!-- 鍘嗗彶閲囪喘浠锋牸鍙傝�冨脊绐� -->
+    <el-dialog
+      v-model="priceReferenceVisible"
+      :title="`鍘嗗彶閲囪喘浠锋牸鍙傝�� ${productForm.supplierName}-${productForm.productName}-${productForm.productModel}`"
+      width="1000px"
+      append-to-body
+    >
+      <el-table 
+        :data="priceReferenceData" 
+        border 
+        v-loading="priceReferenceLoading" 
+        :default-sort="{ prop: 'updateTime', order: 'descending' }"
+      >
+        <!-- <el-table-column label="鍟嗗搧淇℃伅" min-width="200">
+          <template #default="{ row }">
+            <div class="product-info">
+              <div class="product-name">{{ row.productName }}</div>
+              <div class="product-spec">{{ row.specification }}</div>
+              <div class="product-code">缂栫爜: {{ row.productCode }}</div>
+            </div>
+          </template>
+        </el-table-column> -->
+        <!-- <el-table-column label="渚涘簲鍟�" prop="supplierName" width="200" /> -->
+        <el-table-column label="鍩虹浠锋牸(涓嶅惈绋�)" width="150" align="right">
+          <template #default="{ row }">
+            <span class="price-text">楼{{ row.basePrice }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="瀹為檯浠锋牸(涓嶅惈绋�)" prop="actuallyPrice" width="150" align="right"/>
+        <el-table-column label="鎶樻墸淇℃伅" width="120" align="center">
+          <template #default="{ row }">
+            <div v-if="row.discountType">
+              <el-tag :type="getDiscountTagType(row.discountType)" size="small">
+                {{ getDiscountText(row.discountType) }}
+              </el-tag>
+              <div class="discount-value">{{ row.discountValue }}{{ row.discountType === 'percentage' ? '%' : '鍏�' }}</div>
+            </div>
+            <span v-else class="no-discount">鏃犳姌鎵�</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鐘舵��" width="100" align="center">
+          <template #default="{ row }">
+            <el-tag :type="getStatusType(row.status)">{{ getStatusText(row.status) }}</el-tag>
+            <!-- <div v-if="isPriceWarning(row)" class="warning-indicator">
+              <el-icon color="#F56C6C"><Warning /></el-icon>
+            </div> -->
+          </template>
+        </el-table-column>
+        <el-table-column label="鐢熸晥鏃堕棿" prop="effectiveTime" width="100" align="center" />
+        <el-table-column label="鏇存柊鏃堕棿" prop="updateTime" width="160" sortable align="center" />
+        <el-table-column label="澶囨敞" width="200" prop="remark" align="center" show-overflow-tooltip />
+        <el-table-column label="鎿嶄綔" width="100" align="center" fixed="right">
+          <template #default="{ row }">
+            <el-button type="success" link @click="selectPriceReference(row)">
+              <el-icon><Check /></el-icon>
+              寮曠敤
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <div class="pagination-container" style="margin-top: 20px; display: flex; justify-content: flex-end;">
+        <el-pagination
+          v-model:current-page="priceReferencePagination.current"
+          v-model:page-size="priceReferencePagination.size"
+          :page-sizes="[10, 20, 50]"
+          :total="priceReferenceTotal"
+          layout="total, sizes, prev, pager, next"
+          @size-change="handlePriceReferenceSizeChange"
+          @current-change="handlePriceReferenceCurrentChange"
+        />
+      </div>
+      <template #footer>
+        <el-button @click="priceReferenceVisible = false">鍏抽棴</el-button>
+      </template>
+    </el-dialog>
+
     <!-- 浜岀淮鐮佹樉绀哄璇濇 -->
     <el-dialog
       v-model="qrCodeDialogVisible"
@@ -816,7 +943,7 @@
 import { getToken } from "@/utils/auth";
 import pagination from "@/components/PIMTable/Pagination.vue";
 import { ref, onMounted, reactive, toRefs, getCurrentInstance, nextTick } from "vue";
-import { Search } from "@element-plus/icons-vue";
+import { Search, Check } from "@element-plus/icons-vue";
 import { ElMessageBox } from "element-plus";
 import { userListNoPage } from "@/api/system/user.js";
 import {
@@ -855,8 +982,11 @@
 });
 const total = ref(0);
 const fileList = ref([]);
+const approverNodes = ref([{ id: 1, userId: null }]);
+let nextApproverId = 2;
 import useUserStore from "@/store/modules/user";
 import { modelList, productTreeList } from "@/api/basicData/product.js";
+import { listPage as listAdvancedPrice } from "@/api/procurementManagement/advancedPriceManagement.js";
 import dayjs from "dayjs";
 
 const userStore = useUserStore();
@@ -864,13 +994,6 @@
 // 浜岀淮鐮佺浉鍏冲彉閲�
 const qrCodeDialogVisible = ref(false);
 const qrCodeUrl = ref("");
-
-// 璁㈠崟瀹℃壒鐘舵�佹樉绀烘枃鏈�
-const approvalStatusText = {
-  0: '瀹℃壒涓�',
-  1: '瀹℃壒閫氳繃',
-  2: '瀹℃壒澶辫触'
-};
 
 // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
 const operationType = ref("");
@@ -910,6 +1033,13 @@
 const {  form, rules } = toRefs(data);
 const { form: searchForm } = useFormData(data.searchForm);
 
+const addApproverNode = () => {
+  approverNodes.value.push({ id: nextApproverId++, userId: null });
+};
+const removeApproverNode = (index) => {
+  approverNodes.value.splice(index, 1);
+};
+
 // 浜у搧琛ㄥ崟寮规鏁版嵁
 const productFormVisible = ref(false);
 const productOperationType = ref("");
@@ -929,6 +1059,9 @@
     taxExclusiveTotalPrice: "",
     invoiceType: "",
 		warnNum: "",
+    supplierName: "",
+    productName: "",
+    productModel: "",
   },
   productRules: {
     productId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
@@ -950,6 +1083,139 @@
   },
 });
 const { productForm, productRules } = toRefs(productFormData);
+
+// 閲囪喘浠锋牸绠$悊鍙傝�冨脊绐�
+const priceReferenceVisible = ref(false);
+const priceReferenceLoading = ref(false);
+const priceReferenceData = ref([]);
+const priceReferenceTotal = ref(0);
+const priceReferencePagination = reactive({
+  current: 1,
+  size: 10
+});
+
+const calculateFinalPrice = (row) => {
+  let finalPrice = row.basePrice;
+  if (row.discountType === "percentage") {
+    finalPrice = row.basePrice * (1 - row.discountValue / 100);
+  } else if (row.discountType === "fixed") {
+    finalPrice = row.basePrice - row.discountValue;
+  }
+  let man = Math.max(finalPrice, 0);
+  return man.toFixed(2);
+};
+
+const getDiscountTagType = (discountType) => {
+  const typeMap = {
+    percentage: "success",
+    fixed: "warning",
+    tiered: "info",
+  };
+  return typeMap[discountType] || "info";
+};
+
+const getDiscountText = (discountType) => {
+  const textMap = {
+    percentage: "鐧惧垎姣�",
+    fixed: "鍥哄畾閲戦",
+  };
+  return textMap[discountType] || "鏈煡";
+};
+
+const getStatusType = (status) => {
+  const statusMap = {
+    active: "success",
+    pending: "warning",
+    expired: "info",
+  };
+  return statusMap[status] || "info";
+};
+
+const getStatusText = (status) => {
+  const statusMap = {
+    active: "鏈夋晥",
+    pending: "寰呯敓鏁�",
+    expired: "宸茶繃鏈�",
+  };
+  return statusMap[status] || "鏈煡";
+};
+
+const showPriceReference = () => {
+  if (form.value.supplierId) {
+    const supplier = supplierList.value.find((item) => item.id === form.value.supplierId);
+    if (supplier) {
+      productForm.value.supplierName = supplier.supplierName;
+    }
+  }
+  priceReferenceVisible.value = true;
+  handlePriceReferenceSearch();
+};
+
+const handlePriceReferenceSearch = () => {
+  priceReferenceLoading.value = true;
+  // 妯℃嫙鎼滅储鍙傛暟锛歱roductId 鏄犲皠涓� productName 鎴� ID锛岃繖閲屾牴鎹� advancedPriceManagement 鐨� API 纭畾鍙傛暟
+  // 鍋囪楂樼骇浠锋牸绠$悊鐨� listPage 鎺ユ敹 productId
+  const query = {
+    productId: productForm.value.productId,
+    supplierId: form.value.supplierId,
+    current: priceReferencePagination.current,
+    size: priceReferencePagination.size
+  };
+  listAdvancedPrice(query).then(res => {
+    console.log(res);
+    priceReferenceData.value = res.data.records;
+    priceReferenceTotal.value = res.data.total;
+    priceReferenceLoading.value = false;
+  }).catch(() => {
+    priceReferenceLoading.value = false;
+  });
+};
+
+const handlePriceReferenceSizeChange = (size) => {
+  priceReferencePagination.size = size;
+  handlePriceReferenceSearch();
+};
+
+const handlePriceReferenceCurrentChange = (page) => {
+  priceReferencePagination.current = page;
+  handlePriceReferenceSearch();
+};
+
+const selectPriceReference = (row) => {
+  // 璁$畻鍘嗗彶浠锋牸锛堜綔涓轰笉鍚◣鍗曚环锛夛細鍩虹浠锋牸 - 鎶樻墸
+  let taxExclusivePrice = row.basePrice;
+  if (row.discountType === "percentage") {
+    taxExclusivePrice = row.basePrice * (1 - row.discountValue / 100);
+  } else if (row.discountType === "fixed") {
+    taxExclusivePrice = row.basePrice - row.discountValue;
+  }
+  taxExclusivePrice = Number(Math.max(taxExclusivePrice, 0));
+
+  // 璁剧疆鏁伴噺涓� 1
+  if (!productForm.value.quantity) {
+    productForm.value.quantity = 1;
+  }
+
+  // 濡傛灉宸叉湁绋庣巼锛屽垯璁$畻鍚◣鍗曚环
+  if (productForm.value.taxRate) {
+    const taxRate = Number(productForm.value.taxRate);
+    productForm.value.taxInclusiveUnitPrice = (
+      taxExclusivePrice *
+      (1 + taxRate / 100)
+    ).toFixed(2);
+  } else {
+    // 濡傛灉娌℃湁绋庣巼锛屾殏鏃跺皢鍚◣鍗曚环璁句负涓嶅惈绋庝环鏍硷紝鎻愮ず鐢ㄦ埛閫夋嫨绋庣巼
+    productForm.value.taxInclusiveUnitPrice = taxExclusivePrice.toFixed(2);
+    proxy.$modal.msgWarning("璇烽�夋嫨绋庣巼浠ュ噯纭绠楀惈绋庝环鏍�");
+  }
+
+  // 鑷姩瑙﹀彂璁$畻閫昏緫锛堣绠楁�讳环绛夛級
+  mathNum();
+
+  priceReferenceVisible.value = false;
+  proxy.$modal.msgSuccess("宸插紩鐢ㄥ巻鍙蹭环鏍硷紙涓嶅惈绋庯級");
+};
+
 const upload = reactive({
   // 涓婁紶鐨勫湴鍧�
   url: import.meta.env.VITE_APP_BASE_API + "/file/upload",
@@ -1007,12 +1273,7 @@
   purchaseListPage({ ...rest, ...page })
     .then((res) => {
       tableLoading.value = false;
-      // tableData.value = res.data.records;
-      // 澶勭悊鏁版嵁锛屾坊鍔犲け鏁堢姸鎬佹爣璁�
-      tableData.value = res.data.records.map(record => ({
-        ...record,
-        isInvalid: record.isWhite === 1
-      }));
+      tableData.value = res.data.records;
       tableData.value.map((item) => {
         item.children = [];
       });
@@ -1068,6 +1329,8 @@
   form.value = {};
   productData.value = [];
   fileList.value = [];
+  approverNodes.value = [{ id: 1, userId: null }];
+  nextApproverId = 2;
   if (operationType.value == "add") {
     createPurchaseNo().then((res) => {
       form.value.purchaseContractNumber = res.data;
@@ -1080,8 +1343,7 @@
     salesContractList.value = res;
   });
   getOptions().then((res) => {
-    // 渚涘簲鍟嗚繃婊ゅ嚭isWhite=0 鐨勬暟鎹�
-    supplierList.value = res.data.filter((item) => item.isWhite == 0);
+    supplierList.value = res.data;
   });
   form.value.recorderId = userStore.id;
   form.value.entryDate = getCurrentDate();
@@ -1090,6 +1352,17 @@
     getPurchaseById({ id: row.id, type: 2 }).then((res) => {
       form.value = { ...res };
       productData.value = form.value.productData;
+      const approveUserIds = form.value.approveUserIds || form.value.approverIds;
+      if (approveUserIds) {
+        const ids = String(approveUserIds)
+          .split(",")
+          .map((id) => Number(id.trim()))
+          .filter((id) => !Number.isNaN(id));
+        if (ids.length > 0) {
+          approverNodes.value = ids.map((id, idx) => ({ id: idx + 1, userId: id }));
+          nextApproverId = ids.length + 1;
+        }
+      }
       if (form.value.salesLedgerFiles) {
         fileList.value = form.value.salesLedgerFiles;
       } else {
@@ -1128,9 +1401,9 @@
 // 绉婚櫎鏂囦欢
 function handleRemove(file) {
   console.log("handleRemove", file.id);
-  if (file.size > 1024 * 1024 * 10) { 
+  if (file.size > 1024 * 1024 * 10) {
     // 浠呭墠绔竻鐞嗭紝涓嶈皟鐢ㄥ垹闄ゆ帴鍙e拰鎻愮ず
-    return; 
+    return;
   }
   if (operationType.value === "edit") {
     let ids = [];
@@ -1144,6 +1417,12 @@
 const submitForm = () => {
   proxy.$refs["formRef"].validate((valid) => {
     if (valid) {
+      const hasEmptyApprover = approverNodes.value.some((node) => !node.userId);
+      if (hasEmptyApprover) {
+        proxy.$modal.msgWarning("璇蜂负鎵�鏈夊鎵硅妭鐐归�夋嫨瀹℃壒浜�");
+        return;
+      }
+      form.value.approveUserIds = approverNodes.value.map((node) => node.userId).join(",");
       if (productData.value.length > 0) {
         form.value.productData = proxy.HaveJson(productData.value);
       } else {
@@ -1171,13 +1450,38 @@
 };
 // 鎵撳紑浜у搧寮规
 const openProductForm = (type, row, index) => {
+  if(!form.value.supplierId){
+    proxy.$modal.msgWarning("璇烽�夋嫨渚涘簲鍟�");
+    return;
+  }
   productOperationType.value = type;
   productOperationIndex.value = index;
-  productForm.value = {};
+  productForm.value = {
+    supplierName: "",
+    productName: "",
+    productModel: "",
+  };
   proxy.resetForm("productFormRef");
   if (type === "edit") {
-    productForm.value = { ...row };
+    productForm.value = { 
+      ...row,
+      productName: row.productCategory || "",
+      productModel: row.specificationModel || ""
+    };
+    // 缂栬緫鏃讹紝鏍规嵁 productId 棰勫姞杞借鏍煎瀷鍙峰垪琛紝纭繚涓嬫媺妗嗘樉绀哄悕绉拌�岄潪 ID
+    if (productForm.value.productId) {
+      modelList({ id: productForm.value.productId }).then((res) => {
+        modelOptions.value = res;
+      });
+    }
   }
+  
+  // 纭繚渚涘簲鍟嗗悕绉板缁堝悓姝�
+  const supplier = supplierList.value.find((item) => item.id === form.value.supplierId);
+  if (supplier) {
+    productForm.value.supplierName = supplier.supplierName;
+  }
+  
   productFormVisible.value = true;
   getProductOptions();
 };
@@ -1189,11 +1493,14 @@
 const getModels = (value) => {
   if (value) {
     productForm.value.productCategory = findNodeById(productOptions.value, value) || "";
+    productForm.value.productName = productForm.value.productCategory;
+    productForm.value.productModelId = "";
     modelList({ id: value }).then((res) => {
       modelOptions.value = res;
     });
   } else {
     productForm.value.productCategory = "";
+    productForm.value.productName = "";
     modelOptions.value = [];
   }
 };
@@ -1201,10 +1508,22 @@
   const index = modelOptions.value.findIndex((item) => item.id === value);
   if (index !== -1) {
     productForm.value.specificationModel = modelOptions.value[index].model;
+    productForm.value.productModel = modelOptions.value[index].model;
     productForm.value.unit = modelOptions.value[index].unit;
   } else {
     productForm.value.specificationModel = null;
+    productForm.value.productModel = null;
     productForm.value.unit = null;
+  }
+};
+const handleSupplierChange = (value) => {
+  const supplier = supplierList.value.find((item) => item.id === value);
+  if (supplier) {
+    form.value.supplierName = supplier.supplierName;
+    productForm.value.supplierName = supplier.supplierName;
+  } else {
+    form.value.supplierName = "";
+    productForm.value.supplierName = "";
   }
 };
 const findNodeById = (nodes, productId) => {
@@ -1400,29 +1719,29 @@
   if (field === 'taxInclusiveTotalPrice') {
     // 宸茬煡鍚◣鎬讳环鍜屾暟閲忥紝鍙嶇畻鍚◣鍗曚环
     if (productForm.value.quantity) {
-      productForm.value.taxInclusiveUnitPrice = 
+      productForm.value.taxInclusiveUnitPrice =
         (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.quantity)).toFixed(2);
     }
     // 宸茬煡鍚◣鎬讳环鍜屽惈绋庡崟浠凤紝鍙嶇畻鏁伴噺
     else if (productForm.value.taxInclusiveUnitPrice) {
-      productForm.value.quantity = 
+      productForm.value.quantity =
         (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.taxInclusiveUnitPrice)).toFixed(2);
     }
     // 鍙嶇畻涓嶅惈绋庢�讳环
-    productForm.value.taxExclusiveTotalPrice = 
+    productForm.value.taxExclusiveTotalPrice =
       (Number(productForm.value.taxInclusiveTotalPrice) / (1 + taxRate / 100)).toFixed(2);
   } else if (field === 'taxExclusiveTotalPrice') {
     // 鍙嶇畻鍚◣鎬讳环
-    productForm.value.taxInclusiveTotalPrice = 
+    productForm.value.taxInclusiveTotalPrice =
       (Number(productForm.value.taxExclusiveTotalPrice) * (1 + taxRate / 100)).toFixed(2);
     // 宸茬煡鏁伴噺锛屽弽绠楀惈绋庡崟浠�
     if (productForm.value.quantity) {
-      productForm.value.taxInclusiveUnitPrice = 
+      productForm.value.taxInclusiveUnitPrice =
         (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.quantity)).toFixed(2);
     }
     // 宸茬煡鍚◣鍗曚环锛屽弽绠楁暟閲�
     else if (productForm.value.taxInclusiveUnitPrice) {
-      productForm.value.quantity = 
+      productForm.value.quantity =
         (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.taxInclusiveUnitPrice)).toFixed(2);
     }
   }
@@ -1478,7 +1797,7 @@
     proxy.$modal.msgWarning("浜岀淮鐮佹湭鐢熸垚");
     return;
   }
-  
+
   const a = document.createElement('a');
   a.href = qrCodeUrl.value;
   a.download = `閲囪喘鍚堝悓鍙蜂簩缁寸爜_${new Date().getTime()}.png`;
@@ -1538,7 +1857,7 @@
 // 瑙f瀽鎵爜鍐呭锛堟ā鎷熻В鏋愪簩缁寸爜鏁版嵁锛�
 const parseScanContent = (content) => {
   if (!content) return;
-  
+
   // 妯℃嫙瑙f瀽浜岀淮鐮佸唴瀹癸紝杩欓噷鍙互鏍规嵁瀹為檯闇�姹傝皟鏁磋В鏋愰�昏緫
   // 鍋囪鎵爜鍐呭鏍煎紡涓猴細鍚堝悓鍙穦渚涘簲鍟唡椤圭洰|閲戦|浠樻鏂瑰紡
   const parts = content.split('|');
@@ -1573,11 +1892,11 @@
         remark: scanAddForm.scanRemark,
         type: 2
       };
-      
+
       // 妯℃嫙鏂板鎴愬姛
       proxy.$modal.msgSuccess("鎵爜鏂板鎴愬姛锛�");
       closeScanAddDialog();
-      
+
       // 鍙互閫夋嫨鏄惁鍒锋柊鍒楄〃
       // getList();
     }
@@ -1633,19 +1952,11 @@
   return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
 }
 
-// 娣诲姞琛岀被鍚嶆柟娉�
-const tableRowClassName = ({ row }) => {
-  return row.isInvalid ? 'invalid-row' : '';
-};
+
 
 onMounted(() => {
   getList();
 });
 </script>
 
-<style scoped lang="scss">
-.invalid-row {
-  opacity: 0.6;
-  background-color: #f5f7fa;
-}
-</style>
+<style scoped lang="scss"></style>

--
Gitblit v1.9.3