From e40e1cf5d4aa99412ca3a87771b5d5a8ea5a105d Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 29 四月 2026 15:39:53 +0800
Subject: [PATCH] 天津军泰伟业 1.员工台账添加导入功能

---
 src/views/personnelManagement/employeeRecord/index.vue |  102 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 102 insertions(+), 0 deletions(-)

diff --git a/src/views/personnelManagement/employeeRecord/index.vue b/src/views/personnelManagement/employeeRecord/index.vue
index 19addfa..af1f58d 100644
--- a/src/views/personnelManagement/employeeRecord/index.vue
+++ b/src/views/personnelManagement/employeeRecord/index.vue
@@ -21,6 +21,7 @@
       <div>
         <el-button type="primary" @click="openFormNewOrEditFormDia('add')">鏂板鍏ヨ亴</el-button>
         <el-button @click="handleOut">瀵煎嚭</el-button>
+        <el-button type="info" plain icon="Upload" @click="handleImport">瀵煎叆</el-button>
         <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
       </div>
     </div>
@@ -45,6 +46,50 @@
         :id="id"
         @completed="handleQuery"
     />
+    <el-dialog
+        :title="upload.title"
+        v-model="upload.open"
+        width="400px"
+        append-to-body
+        @close="handleImportDialogClose"
+    >
+      <el-upload
+          ref="uploadRef"
+          :limit="1"
+          accept=".xlsx,.xls"
+          :headers="upload.headers"
+          :action="upload.url"
+          :disabled="upload.isUploading"
+          :before-upload="upload.beforeUpload"
+          :on-progress="upload.onProgress"
+          :on-success="upload.onSuccess"
+          :on-error="upload.onError"
+          :on-change="upload.onChange"
+          :auto-upload="false"
+          name="file"
+          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>浠呭厑璁稿鍏ls銆亁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="handleImportDialogClose">鍙� 娑�</el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -53,6 +98,7 @@
 import {onMounted, ref} from "vue";
 import {ElMessageBox} from "element-plus";
 import {batchDeleteStaffOnJobs, staffOnJobListPage} from "@/api/personnelManagement/staffOnJob.js";
+import { getToken } from "@/utils/auth";
 import dayjs from "dayjs";
 const NewOrEditFormDia = defineAsyncComponent(() => import("@/views/personnelManagement/employeeRecord/components/NewOrEditFormDia.vue"));
 const ShowFormDia = defineAsyncComponent(() => import( "@/views/personnelManagement/employeeRecord/components/Show.vue"));
@@ -205,9 +251,43 @@
   size: 100,
   total: 0
 });
+const uploadRef = ref()
 const formDia = ref()
 const formDiaNewOrEditFormDia = ref()
 const { proxy } = getCurrentInstance()
+const upload = reactive({
+  open: false,
+  title: "",
+  isUploading: false,
+  headers: { Authorization: "Bearer " + getToken() },
+  url: import.meta.env.VITE_APP_BASE_API + "/staff/staffOnJob/import",
+  beforeUpload: (file) => {
+    const isValid = file.type === "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || file.name.endsWith(".xlsx") || file.name.endsWith(".xls");
+    if (!isValid) {
+      proxy.$modal.msgError("鍙兘涓婁紶 Excel 鏂囦欢");
+    }
+    return isValid;
+  },
+  onChange: () => {},
+  onSuccess: (response) => {
+    upload.isUploading = false;
+    if (response.code === 200) {
+      proxy.$modal.msgSuccess(response.msg || "瀵煎叆鎴愬姛");
+      upload.open = false;
+      uploadRef.value?.clearFiles();
+      getList();
+      return;
+    }
+    proxy.$modal.msgError(response.msg || "瀵煎叆澶辫触");
+  },
+  onError: () => {
+    upload.isUploading = false;
+    proxy.$modal.msgError("瀵煎叆澶辫触");
+  },
+  onProgress: () => {
+    upload.isUploading = true;
+  }
+})
 
 const changeDaterange = (value) => {
   searchForm.value.entryDateStart = undefined;
@@ -247,6 +327,28 @@
 };
 
 // 鎵撳紑寮规
+const submitFileForm = () => {
+  if (uploadRef.value) {
+    upload.isUploading = true;
+    uploadRef.value.submit();
+  }
+};
+
+const handleImport = () => {
+  upload.title = "鍦ㄨ亴鍛樺伐瀵煎叆";
+  upload.open = true;
+};
+
+const importTemplate = () => {
+  proxy.download("/staff/staffOnJob/downloadTemplate", {}, "鍦ㄨ亴鍛樺伐瀵煎叆妯℃澘.xlsx");
+};
+
+const handleImportDialogClose = () => {
+  upload.open = false;
+  upload.isUploading = false;
+  uploadRef.value?.clearFiles();
+};
+
 const openForm = (type, row) => {
   nextTick(() => {
     formDia.value?.openDialog(type, row)

--
Gitblit v1.9.3