From d7e004728d697056aa093e29534b07def1ad66bc Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 26 一月 2026 17:05:33 +0800
Subject: [PATCH] 仓储物流:库存管理 下载模板,导入库存

---
 src/views/inventoryManagement/stockManagement/Import.vue    |   86 +++++++++++++++++++++++++++++++++++++++++++
 src/views/inventoryManagement/stockManagement/Qualified.vue |   30 ++++++++++++++-
 2 files changed, 114 insertions(+), 2 deletions(-)

diff --git a/src/views/inventoryManagement/stockManagement/Import.vue b/src/views/inventoryManagement/stockManagement/Import.vue
new file mode 100644
index 0000000..1dbce95
--- /dev/null
+++ b/src/views/inventoryManagement/stockManagement/Import.vue
@@ -0,0 +1,86 @@
+<template>
+  <el-dialog  v-model="isShow" title="瀵煎叆搴撳瓨" @close="closeModal">
+    <FileUpload
+      ref="fileUploadRef"
+      accept=".xlsx, .xls"
+      :headers="upload.headers"
+      :action="upload.url"
+      :disabled="upload.isUploading"
+      :showTip="false"
+      @success="handleFileSuccess"
+    />
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">纭� 瀹�</el-button>
+        <el-button @click="closeModal">鍙� 娑�</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+
+<script setup>
+import {computed, reactive} from "vue";
+import { getToken } from "@/utils/auth.js";
+import { FileUpload } from "@/components/Upload";
+import { ElMessage } from "element-plus";
+
+defineOptions({
+  name: "瀵煎叆搴撳瓨",
+});
+
+const props = defineProps({
+  visible: {
+    type: Boolean,
+    required: true,
+  },
+
+  type: {
+    type: String,
+    required: true,
+    default: 'qualified',
+  },
+});
+
+const emit = defineEmits(['update:visible', 'uploadSuccess']);
+
+
+const isShow = computed({
+  get() {
+    return props.visible;
+  },
+  set(val) {
+    emit('update:visible', val);
+  },
+});
+
+const fileUploadRef = ref();
+const upload = reactive({
+  // 鏄惁鏄剧ず寮瑰嚭灞傦紙搴撳瓨瀵煎叆锛�
+  open: false,
+  // 鏄惁绂佺敤涓婁紶
+  isUploading: false,
+  // 璁剧疆涓婁紶鐨勮姹傚ご閮�
+  headers: { Authorization: "Bearer " + getToken() },
+  // 涓婁紶鐨勫湴鍧�
+  url: import.meta.env.VITE_APP_BASE_API + "/stockInventory/importStockInventory",
+});
+
+const submitFileForm = () => {
+  fileUploadRef.value.uploadApi();
+};
+
+const handleFileSuccess = (response) => {
+  const { code, msg } = response;
+  if (code == 200) {
+    ElMessage({ message: "瀵煎叆鎴愬姛", type: "success" });
+    emit('uploadSuccess');
+    closeModal();
+  } else {
+    ElMessage({ message: msg, type: "error" });
+  }
+};
+
+const closeModal = () => {
+  isShow.value = false;
+};
+</script>
diff --git a/src/views/inventoryManagement/stockManagement/Qualified.vue b/src/views/inventoryManagement/stockManagement/Qualified.vue
index cfc9ed1..0e78990 100644
--- a/src/views/inventoryManagement/stockManagement/Qualified.vue
+++ b/src/views/inventoryManagement/stockManagement/Qualified.vue
@@ -11,6 +11,10 @@
       </div>
       <div>
          <el-button type="primary" @click="isShowNewModal = true">鏂板搴撳瓨</el-button>
+        <el-button @click="importTemplate">涓嬭浇瀵煎叆妯℃澘</el-button>
+        <el-button type="info" plain icon="Upload" @click="isShowImportModal = true">
+          瀵煎叆搴撳瓨
+        </el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
       </div>
     </div>
@@ -45,17 +49,22 @@
                  v-model:visible="isShowSubtractModal"
                  :record="record"
                  @completed="handleQuery" />
+    <!-- 瀵煎叆搴撳瓨-->
+    <import-stock-inventory v-if="isShowImportModal"
+                 v-model:visible="isShowImportModal"
+                 type="qualified"
+                 @uploadSuccess="handleQuery" />
   </div>
 </template>
 
 <script setup>
 import pagination from '@/components/PIMTable/Pagination.vue'
 import { ref, reactive, toRefs, onMounted, getCurrentInstance } from 'vue'
-import { ElMessageBox } from "element-plus";
+import {ElMessage, ElMessageBox} from "element-plus";
 import { getStockInventoryListPage } from "@/api/inventoryManagement/stockInventory.js";
 const NewStockInventory = defineAsyncComponent(() => import("@/views/inventoryManagement/stockManagement/New.vue"));
 const SubtractStockInventory = defineAsyncComponent(() => import("@/views/inventoryManagement/stockManagement/Subtract.vue"));
-
+const ImportStockInventory = defineAsyncComponent(() => import("@/views/inventoryManagement/stockManagement/Import.vue"));
 const { proxy } = getCurrentInstance()
 const tableData = ref([])
 const selectedRows = ref([])
@@ -70,6 +79,8 @@
 const isShowNewModal = ref(false)
 // 鏄惁鏄剧ず棰嗙敤寮规
 const isShowSubtractModal = ref(false)
+// 鏄惁鏄剧ず瀵煎叆寮规
+const isShowImportModal = ref(false)
 const data = reactive({
   searchForm: {
     productName: '',
@@ -100,6 +111,17 @@
     tableLoading.value = false
   })
 }
+
+const handleFileSuccess = (response) => {
+  const { code, msg } = response;
+  if (code == 200) {
+    ElMessage({ message: "瀵煎叆鎴愬姛", type: "success" });
+    upload.open = false;
+    emits("uploadSuccess");
+  } else {
+    ElMessage({ message: msg, type: "error" });
+  }
+};
 
 // 鐐瑰嚮棰嗙敤
 const showSubtractModal = (row) => {
@@ -141,6 +163,10 @@
   })
 }
 
+const importTemplate =() =>{
+  proxy.download("/stockInventory/downloadStockInventory", {}, "搴撳瓨瀵煎叆妯℃澘.xlsx");
+}
+
 onMounted(() => {
   getList()
 })

--
Gitblit v1.9.3