From dc3fc550fe292043cc452dc9aeb0c8a1eeab3b30 Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期四, 24 九月 2026 16:54:39 +0800
Subject: [PATCH] feat: 新增多模块导入导出入口

---
 src/views/inventoryManagement/dispatchLog/Record.vue |   86 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 86 insertions(+), 0 deletions(-)

diff --git a/src/views/inventoryManagement/dispatchLog/Record.vue b/src/views/inventoryManagement/dispatchLog/Record.vue
index c7d53ab..4115621 100644
--- a/src/views/inventoryManagement/dispatchLog/Record.vue
+++ b/src/views/inventoryManagement/dispatchLog/Record.vue
@@ -76,6 +76,7 @@
     </div>
     <div class="actions">
       <!-- <el-button type="primary" @click="handleBatchApprove">瀹℃壒</el-button> -->
+      <el-button type="info" plain icon="Upload" @click="handleImport">瀵煎叆</el-button>
       <el-button @click="handleOut">瀵煎嚭</el-button>
       <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
       <el-button type="primary" plain @click="handlePrint">鎵撳嵃</el-button>
@@ -153,6 +154,41 @@
         @pagination="paginationChange"
       />
     </div>
+    <!-- 鍑哄簱瀵煎叆瀵硅瘽妗� -->
+    <el-dialog :title="upload.title"
+               v-model="upload.open"
+               width="400px"
+               append-to-body>
+      <el-upload ref="uploadRef"
+                 :limit="1"
+                 accept=".xlsx, .xls"
+                 :headers="upload.headers"
+                 :action="upload.url"
+                 :disabled="upload.isUploading"
+                 :on-progress="handleFileUploadProgress"
+                 :on-success="handleFileSuccess"
+                 :on-error="handleFileError"
+                 :auto-upload="false"
+                 drag>
+        <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+        <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+        <template #tip>
+          <div class="el-upload__tip text-center">
+            <span>浠呭厑璁稿鍏� xls銆亁lsx 鏍煎紡鏂囦欢銆�</span>
+            <el-link type="primary"
+                     :underline="false"
+                     style="font-size: 12px; vertical-align: baseline"
+                     @click="importTemplate">涓嬭浇妯℃澘</el-link>
+          </div>
+        </template>
+      </el-upload>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
+          <el-button @click="upload.open = false">鍙� 娑�</el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -172,6 +208,7 @@
   findAllUnQualifiedStockOutRecordTypeOptions,
 } from "@/api/basicData/enum.js";
 import { parseTime } from "@/utils/ruoyi";
+import { getToken } from "@/utils/auth.js";
 
 const userStore = useUserStore();
 const { proxy } = getCurrentInstance();
@@ -682,6 +719,55 @@
   const seconds = String(date.getSeconds()).padStart(2, "0");
   return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`;
 };
+// 瀵煎叆
+const uploadRef = ref();
+const upload = reactive({
+  open: false,
+  title: "",
+  isUploading: false,
+  headers: { Authorization: "Bearer " + getToken() },
+  url: import.meta.env.VITE_APP_BASE_API + "/stockOutRecord/import?type=" + props.type,
+});
+const handleImport = () => {
+  upload.title = "鍑哄簱瀵煎叆";
+  upload.open = true;
+};
+const importTemplate = () => {
+  proxy.download("/stockOutRecord/importTemplate", {}, "鍑哄簱瀵煎叆妯℃澘.xlsx");
+};
+const submitFileForm = () => {
+  upload.isUploading = true;
+  uploadRef.value.submit();
+};
+const handleFileUploadProgress = () => {
+  upload.isUploading = true;
+};
+const handleFileSuccess = (response) => {
+  upload.isUploading = false;
+  upload.open = false;
+  uploadRef.value.clearFiles();
+  if (response.code === 200) {
+    const failCount = response.failCount || 0;
+    if (failCount > 0) {
+      const errors = Array.isArray(response.errors) ? response.errors : [];
+      proxy.$modal.alert(`${response.msg}\n\n${errors.join("\n")}`, "瀵煎叆缁撴灉", {
+        confirmButtonText: "鐭ラ亾浜�",
+      }).then(() => {
+        getList();
+      });
+    } else {
+      proxy.$modal.msgSuccess(response.msg || "瀵煎叆鎴愬姛");
+      getList();
+    }
+  } else {
+    proxy.$modal.msgError(response.msg || "瀵煎叆澶辫触");
+  }
+};
+const handleFileError = () => {
+  upload.isUploading = false;
+  proxy.$modal.msgError("鏂囦欢涓婁紶澶辫触");
+};
+
 onMounted(() => {
   getList();
   fetchStockRecordTypeOptions();

--
Gitblit v1.9.3