From 3ffdb76baf74089912a23c1f8f8112d5c8c1063b Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期五, 20 三月 2026 14:56:24 +0800
Subject: [PATCH] fix: 生产详情接口联调90%

---
 src/views/procurementManagement/procurementLedger/index.vue |  157 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 143 insertions(+), 14 deletions(-)

diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index e40a68a..0ebff95 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -53,6 +53,7 @@
       <div style="display: flex;justify-content: flex-end;margin-bottom: 20px;">
         <el-button type="primary"
                    @click="openForm('add')">鏂板鍙拌处</el-button>
+        <el-button type="primary" plain @click="handleImport">瀵煎叆</el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
         <el-button type="danger"
                    plain
@@ -156,6 +157,10 @@
                          prop="entryDate"
                          width="100"
                          show-overflow-tooltip />
+        <el-table-column label="澶囨敞"
+                         prop="remarks"
+                         width="200"
+                         show-overflow-tooltip />
         <el-table-column fixed="right"
                          label="鎿嶄綔"
                          width="120"
@@ -228,7 +233,7 @@
                 <el-option v-for="item in supplierList"
                            :key="item.id"
                            :label="item.supplierName"
-                           :value="item.id" />
+													 :value="item.id" >{{item.supplierName + '---' + item.supplierType}}</el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -449,8 +454,8 @@
         <el-row :gutter="30">
           <el-col :span="24">
             <el-form-item label="澶囨敞路锛�"
-                          prop="remark">
-              <el-input v-model="form.remark"
+                          prop="remarks">
+              <el-input v-model="form.remarks"
                         placeholder="璇疯緭鍏�"
                         clearable
                         type="textarea"
@@ -461,7 +466,7 @@
         <el-row :gutter="30">
           <el-col :span="24">
             <el-form-item label="闄勪欢鏉愭枡锛�"
-                          prop="remark">
+                          prop="purchaseLedgerFiles">
               <el-upload v-model:file-list="fileList"
                          :action="upload.url"
                          multiple
@@ -484,6 +489,41 @@
           </el-col>
         </el-row>
       </el-form>
+    </FormDialog>
+    <!-- 瀵煎叆寮圭獥 -->
+    <FormDialog
+      v-model="importUpload.open"
+      :title="importUpload.title"
+      :width="'600px'"
+      @close="importUpload.open = false"
+      @confirm="submitImportFile"
+      @cancel="importUpload.open = false"
+    >
+      <el-upload
+        ref="importUploadRef"
+        :limit="1"
+        accept=".xlsx,.xls"
+        :action="importUpload.url"
+        :headers="importUpload.headers"
+        :before-upload="importUpload.beforeUpload"
+        :on-success="importUpload.onSuccess"
+        :on-error="importUpload.onError"
+        :on-progress="importUpload.onProgress"
+        :on-change="importUpload.onChange"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em>
+        </div>
+        <template #tip>
+          <div class="el-upload__tip">
+            浠呮敮鎸� xls/xlsx锛屽ぇ灏忎笉瓒呰繃 10MB銆�
+            <el-button link type="primary" @click="downloadTemplate">涓嬭浇瀵煎叆妯℃澘</el-button>
+          </div>
+        </template>
+      </el-upload>
     </FormDialog>
     <FormDialog v-model="productFormVisible"
                :title="productOperationType === 'add' ? '鏂板浜у搧' : '缂栬緫浜у搧'"
@@ -950,6 +990,71 @@
     headers: { Authorization: "Bearer " + getToken() },
   });
 
+  // 瀵煎叆鐩稿叧
+  const importUploadRef = ref(null);
+  const importUpload = reactive({
+    title: "瀵煎叆閲囪喘鍙拌处",
+    open: false,
+    url: import.meta.env.VITE_APP_BASE_API + "/purchase/ledger/import",
+    headers: { Authorization: "Bearer " + getToken() },
+    isUploading: false,
+    beforeUpload: (file) => {
+      const isExcel = file.name.endsWith(".xlsx") || file.name.endsWith(".xls");
+      const isLt10M = file.size / 1024 / 1024 < 10;
+      if (!isExcel) {
+        proxy.$modal.msgError("涓婁紶鏂囦欢鍙兘鏄� xlsx/xls 鏍煎紡!");
+        return false;
+      }
+      if (!isLt10M) {
+        proxy.$modal.msgError("涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 10MB!");
+        return false;
+      }
+      return true;
+    },
+    onChange: (file, fileList) => {
+      // noop
+    },
+    onProgress: (event, file, fileList) => {
+      // noop
+    },
+    onSuccess: (response, file, fileList) => {
+      importUpload.isUploading = false;
+      if (response?.code === 200) {
+        proxy.$modal.msgSuccess("瀵煎叆鎴愬姛");
+        importUpload.open = false;
+        if (importUploadRef.value) {
+          importUploadRef.value.clearFiles?.();
+        }
+        getList();
+      } else {
+        proxy.$modal.msgError(response?.msg || "瀵煎叆澶辫触");
+      }
+    },
+    onError: () => {
+      importUpload.isUploading = false;
+      proxy.$modal.msgError("瀵煎叆澶辫触锛岃閲嶈瘯");
+    },
+  });
+
+  const handleImport = () => {
+    importUpload.title = "瀵煎叆閲囪喘鍙拌处";
+    importUpload.open = true;
+    importUpload.isUploading = false;
+    if (importUploadRef.value) {
+      importUploadRef.value.clearFiles?.();
+    }
+  };
+
+  // 涓嬭浇瀵煎叆妯℃澘锛堝鍚庣璺緞涓嶅悓锛屽彲鍦ㄦ澶勮皟鏁达級
+  const downloadTemplate = () => {
+    proxy.download("/purchase/ledger/exportTemplate", {}, "閲囪喘鍙拌处瀵煎叆妯℃澘.xlsx");
+  };
+
+  const submitImportFile = () => {
+    importUpload.isUploading = true;
+    proxy.$refs["importUploadRef"]?.submit?.();
+  };
+
   const changeDaterange = value => {
     if (value) {
       searchForm.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
@@ -1369,6 +1474,22 @@
     if (type === "edit") {
       // 澶嶅埗琛屾暟鎹�
       productForm.value = { ...row };
+
+      // el-radio-group 鐨� value 鏄竷灏� true/false
+      // 鍚庣/琛ㄦ牸鏁版嵁鍙兘鏄� 0/1 鎴栧瓧绗︿覆锛岄渶鍋氫竴娆″綊涓�鍖栵紝閬垮厤涓嶅洖鏄�/鎻愪氦榛樿鈥滃惁鈥�
+      const normalizeIsChecked = (val) => {
+        if (val === true) return true;
+        if (val === false) return false;
+        if (val === 1 || val === "1") return true;
+        if (val === 0 || val === "0") return false;
+        if (typeof val === "string") {
+          const s = val.trim().toLowerCase();
+          if (["鏄�", "yes", "true", "y"].includes(s)) return true;
+          if (["鍚�", "no", "false", "n"].includes(s)) return false;
+        }
+        return !!val;
+      };
+      productForm.value.isChecked = normalizeIsChecked(row?.isChecked);
       
       // 濡傛灉鏄粠妯℃澘鍔犺浇鐨勬暟鎹紝鍙兘娌℃湁 productId 鍜� productModelId
       // 闇�瑕佹牴鎹� productCategory 鍜� specificationModel 鏉ユ煡鎵惧搴旂殑 ID
@@ -1427,9 +1548,25 @@
   };
   const getProductOptions = () => {
     return productTreeList().then(res => {
-      productOptions.value = convertIdToValue(res);
+      const tree = convertIdToValue(res);
+      productOptions.value = filterOutSemiFinished(tree);
       return res;
     });
+  };
+
+  const filterOutSemiFinished = (nodes = []) => {
+    return (nodes || [])
+      .filter(node => {
+        const label = String(node?.label ?? "");
+        return !label.includes("鍗婃垚鍝�");
+      })
+      .map(node => {
+        const next = { ...node };
+        if (next.children && next.children.length > 0) {
+          next.children = filterOutSemiFinished(next.children);
+        }
+        return next;
+      });
   };
   const getModels = value => {
     if (value) {
@@ -1543,7 +1680,7 @@
           delProduct(ids).then(res => {
             proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
             closeProductDia();
-            getSalesLedgerWithProducts({ id: currentId.value, type: 2 }).then(
+            getPurchaseById({ id: currentId.value, type: 2 }).then(
               res => {
                 productData.value = res.productData;
               }
@@ -1578,14 +1715,6 @@
   const handleDelete = () => {
     let ids = [];
     if (selectedRows.value.length > 0) {
-      // 妫�鏌ユ槸鍚︽湁浠栦汉缁存姢鐨勬暟鎹�
-      const unauthorizedData = selectedRows.value.filter(
-        item => item.recorderName !== userStore.nickName
-      );
-      if (unauthorizedData.length > 0) {
-        proxy.$modal.msgWarning("涓嶅彲鍒犻櫎浠栦汉缁存姢鐨勬暟鎹�");
-        return;
-      }
       ids = selectedRows.value.map(item => item.id);
     } else {
       proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");

--
Gitblit v1.9.3