Bladeren bron

成员管理、业务员管理资料附件bug

@dongkboy 4 maanden geleden
bovenliggende
commit
ff3e1ec5a1

+ 15 - 42
src/views/operationManagement/modules/addOperation.vue

@@ -142,15 +142,6 @@
                     </div>
                   </div>
                 </div>
-                <!--                <div class="fileName">{{ IDCardFrontName }}</div>
-                <div class="fileBtn">
-                  <el-upload :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 1)" style="display: flex; align-items: center">
-                    <el-icon class="btn-icon"><Upload /></el-icon>
-                  </el-upload>
-                  <el-icon class="btn-icon" @click="imageView(1)"><View /></el-icon>
-                  <el-icon class="btn-icon" @click="downloadImage(1)"><Download /></el-icon>
-                  <el-icon class="btn-icon" @click="deleteImage(1)"><Delete /></el-icon>
-                </div>-->
               </div>
             </el-form-item>
             <el-form-item prop="IDCardBack" label-width="150">
@@ -185,15 +176,6 @@
                     </div>
                   </div>
                 </div>
-                <!--                <div class="fileName">{{ IDCardBackName }}</div>
-                <div class="fileBtn">
-                  <el-upload :auto-upload="false" :show-file-list="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 2)" style="display: flex; align-items: center">
-                    <el-icon class="btn-icon"><Upload /></el-icon>
-                  </el-upload>
-                  <el-icon class="btn-icon" @click="imageView(2)"><View /></el-icon>
-                  <el-icon class="btn-icon" @click="downloadImage(2)"><Download /></el-icon>
-                  <el-icon class="btn-icon" @click="deleteImage(2)"><Delete /></el-icon>
-                </div>-->
               </div>
             </el-form-item>
             <el-form-item prop="" label="展业资格证" label-width="150">
@@ -225,15 +207,6 @@
                     </div>
                   </div>
                 </div>
-                <!--                <div class="fileName">{{ certificationName }}</div>
-                <div class="fileBtn">
-                  <el-upload :auto-upload="false" :show-file-list="false" accept=".png, .jpg, .jpeg" @change="uploadImage($event, 3)" style="display: flex; align-items: center">
-                    <el-icon class="btn-icon"><Upload /></el-icon>
-                  </el-upload>
-                  <el-icon class="btn-icon" @click="imageView(3)"><View /></el-icon>
-                  <el-icon class="btn-icon" @click="downloadImage(3)"><Download /></el-icon>
-                  <el-icon class="btn-icon" @click="deleteImage(3)"><Delete /></el-icon>
-                </div>-->
               </div>
             </el-form-item>
           </template>
@@ -772,32 +745,32 @@ const initEditData = (id, ids) => {
         res.data.fileList.map((item: any) => {
             switch (item.fileType) {
               case "sfz1":
-                IDCardFrontName.value = res.data.fileName;
-                IDCardFront.value = res.data.downloadUrl;
+                IDCardFrontName.value = item.fileName;
+                IDCardFront.value = item.fileUrl;
                 break;
               case "sfz2":
-                IDCardBackName.value = res.data.fileName;
-                IDCardBack.value = res.data.downloadUrl;
+                IDCardBackName.value = item.fileName;
+                IDCardBack.value = item.fileUrl;
                 break;
               case "qualification":
-                certificationName.value = res.data.fileName;
-                certification.value = res.data.downloadUrl;
+                certificationName.value = item.fileName;
+                certification.value = item.fileUrl;
                 break;
               case "contract":
-                contractName.value = res.data.fileName;
-                contract.value = res.data.downloadUrl;
+                contractName.value = item.fileName;
+                contract.value = item.fileUrl;
                 break;
               case "applicant":
-                applicantName.value = res.data.fileName;
-                applicant.value = res.data.downloadUrl;
+                applicantName.value = item.fileName;
+                applicant.value = item.fileUrl;
                 break
               case "salaryTable":
-                decidePayName.value = res.data.fileName;
-                decidePay.value = res.data.downloadUrl;
+                decidePayName.value = item.fileName;
+                decidePay.value = item.fileUrl;
                 break;
               case "leaveTable":
-                dimissionName.value = res.data.fileName;
-                dimission.value = res.data.downloadUrl;
+                dimissionName.value = item.fileName;
+                dimission.value = item.fileUrl;
 
                 break;
             }
@@ -1230,7 +1203,7 @@ const onSubmit = async (OperationFormRef: FormInstance, type: number) => {
     await OperationFormRef.validate((valid, error) => {
       if (valid) {
         if (IDCardFront.value && IDCardBack.value) {
-          let formData = { ...operationForm.value }
+          let formData = { ...operationForm.value,fileList:fileListId.value }
           // formData.organization = operationForm.value.organization[operationForm.value.organization.length - 1]
           formData.systemCode = localStorage.getItem('login_system') ? localStorage.getItem('login_system') : ''
           formData.province = operationForm.value.address ? operationForm.value.address[0] : ''

+ 343 - 86
src/views/operationManagement/operationDetail.vue

@@ -19,9 +19,12 @@
               <span class="allName">{{ dataDetail?.name }}</span>
             </el-col>
             <el-col :span="12" style="display: flex; justify-content: flex-end">
-              <el-button class="bg-white" style="border-radius: 2px" plain type="primary" @click="checkPass" v-if="dataDetail?.status == 0 ||dataDetail?.status == 1 ||dataDetail?.status == 2 ||dataDetail?.status == 3 ">审核通过</el-button>
-              <el-button class="bg-white" style="border-radius: 2px" plain type="primary" @click="checkNotPass" v-if="dataDetail?.status != 5&&dataDetail?.status != 6&&dataDetail?.status != 7&&dataDetail?.status != 8">审核不通过</el-button>
-              <el-button class="bg-white" style="border-radius: 2px" plain type="primary" @click="editDetail">编辑</el-button>&nbsp;
+              <el-button class="bg-white" style="border-radius: 2px" plain type="primary" @click="checkPass"
+                v-if="dataDetail?.status == 0 || dataDetail?.status == 1 || dataDetail?.status == 2 || dataDetail?.status == 3">审核通过</el-button>
+              <el-button class="bg-white" style="border-radius: 2px" plain type="primary" @click="checkNotPass"
+                v-if="dataDetail?.status != 5 && dataDetail?.status != 6 && dataDetail?.status != 7 && dataDetail?.status != 8">审核不通过</el-button>
+              <el-button class="bg-white" style="border-radius: 2px" plain type="primary"
+                @click="editDetail">编辑</el-button>&nbsp;
               <el-dropdown trigger="click" @command="handleCommand">
                 <el-button class="bg-white" style="border-radius: 2px" plain type="primary">更多</el-button>
                 <template #dropdown>
@@ -38,7 +41,7 @@
         </template>
         <el-descriptions-item label="工号:" width="33%">{{ dataDetail?.userId }}</el-descriptions-item>
         <el-descriptions-item label="所属机构:" width="33%">{{ dataDetail?.deptName }}</el-descriptions-item>
-        <el-descriptions-item label="状态:" width="33%">{{  statusMap(dataDetail?.status)}}</el-descriptions-item>
+        <el-descriptions-item label="状态:" width="33%">{{ statusMap(dataDetail?.status) }}</el-descriptions-item>
         <el-descriptions-item label="类型:" width="33%">{{ typeAttrMap(dataDetail?.typeAttr) }}</el-descriptions-item>
         <el-descriptions-item label="所属团队:" width="33%">{{ dataDetail?.organizationName }}</el-descriptions-item>
         <el-descriptions-item label="创建人:" width="33%">{{ dataDetail?.updateBy }}</el-descriptions-item>
@@ -53,7 +56,8 @@
               <el-descriptions-item label="姓名:" width="33%">{{ dataDetail?.name }}</el-descriptions-item>
               <el-descriptions-item label="手机号:" width="33%">{{ dataDetail?.mobile }}</el-descriptions-item>
               <el-descriptions-item label="证件号:" width="33%">{{ dataDetail?.identity }}</el-descriptions-item>
-              <el-descriptions-item label="证件有效期始:" width="33%">{{ dataDetail?.identityTimeStart }}</el-descriptions-item>
+              <el-descriptions-item label="证件有效期始:" width="33%">{{ dataDetail?.identityTimeStart
+                }}</el-descriptions-item>
               <el-descriptions-item label="证件有效期止:" width="33%">{{ dataDetail?.identityTimeEnd }}</el-descriptions-item>
             </el-descriptions>
             <el-descriptions title="其他信息">
@@ -79,17 +83,15 @@
             <el-descriptions title="银行卡信息">
               <el-descriptions-item>
                 <template #default>
-                  <el-table
-                    :data="dataDetail?.bankCardList"
-                    height="300"
-                  >
+                  <el-table :data="dataDetail?.bankCardList" height="300">
                     <el-table-column prop="name" label="姓名"></el-table-column>
                     <el-table-column prop="bankName" label="开户行"></el-table-column>
                     <el-table-column prop="bankCardNumber" label="卡号"></el-table-column>
                     <el-table-column prop="bankAddress" label="开户支行"></el-table-column>
                     <el-table-column prop="auditStatus" label="审核状态">
                       <template #default="scope">
-                        {{ scope.row.auditStatus == '0'?'未审核':scope.row.auditStatus == '1'?'审核通过':scope.row.auditStatus == '2'?'审核驳回':''}}
+                        {{ scope.row.auditStatus == '0' ? '未审核' : scope.row.auditStatus == '1' ? '审核通过' : scope.row.auditStatus
+                        == '2'?'审核驳回':''}}
                       </template>
                     </el-table-column>
                     <el-table-column label="操作">
@@ -101,7 +103,8 @@
                 </template>
               </el-descriptions-item>
             </el-descriptions>
-            <el-button class="bg-white" plain type="primary" icon="plus" style="width: 100%; border-radius: 2px" @click="addBankCard">添加银行卡</el-button>
+            <el-button class="bg-white" plain type="primary" icon="plus" style="width: 100%; border-radius: 2px"
+              @click="addBankCard">添加银行卡</el-button>
           </div>
         </el-tab-pane>
         <el-tab-pane label="资料附件" name="file" style="padding: 0 24px">
@@ -113,21 +116,85 @@
                     <span class="label">身份证(人像面)</span>
                     <div class="fileName">
                       <span class="file-name">{{ imageChangeName('sfz1') }}</span>
-                      <el-icon class="file-icon" @click="imageView('sfz1')"><View /></el-icon>
+                      <el-icon class="file-icon" @click="imageView('sfz1')">
+                        <View />
+                      </el-icon>
+                      <el-icon class="file-icon" @click="downloadImage('sfz1')">
+                        <Download />
+                      </el-icon>
                     </div>
                   </div>
                   <div class="fileItem" v-if="imageChangeName('sfz2')">
                     <span class="label">身份证(国徽面)</span>
                     <div class="fileName">
                       <span class="file-name">{{ imageChangeName('sfz2') }}</span>
-                      <el-icon class="file-icon" @click="imageView('sfz2')"><View /></el-icon>
+                      <el-icon class="file-icon" @click="imageView('sfz2')">
+                        <View />
+                      </el-icon>
+                      <el-icon class="file-icon" @click="downloadImage('sfz2')">
+                        <Download />
+                      </el-icon>
                     </div>
                   </div>
                   <div class="fileItem" v-if="imageChangeName('qualification')">
                     <span class="label">展业资格证</span>
                     <div class="fileName">
                       <span class="file-name">{{ imageChangeName('qualification') }}</span>
-                      <el-icon class="file-icon" @click="imageView('qualification')"><View /></el-icon>
+                      <el-icon class="file-icon" @click="imageView('qualification')">
+                        <View />
+                      </el-icon>
+                      <el-icon class="file-icon" @click="downloadImage('qualification')">
+                        <Download />
+                      </el-icon>
+                    </div>
+                  </div>
+
+                  <div class="fileItem" v-if="imageChangeName('contract')">
+                    <span class="label">劳动合同</span>
+                    <div class="fileName">
+                      <span class="file-name">{{ imageChangeName('contract') }}</span>
+                      <el-icon class="file-icon" @click="imageView('contract')">
+                        <View />
+                      </el-icon>
+                      <el-icon class="file-icon" @click="downloadImage('contract')">
+                        <Download />
+                      </el-icon>
+                    </div>
+                  </div>
+                  <div class="fileItem" v-if="imageChangeName('applicant')">
+                    <span class="label">应聘表</span>
+                    <div class="fileName">
+                      <span class="file-name">{{ imageChangeName('applicant') }}</span>
+                      <el-icon class="file-icon" @click="imageView('applicant')">
+                        <View />
+                      </el-icon>
+                      <el-icon class="file-icon" @click="downloadImage('applicant')">
+                        <Download />
+                      </el-icon>
+                    </div>
+                  </div>
+                  <div class="fileItem" v-if="imageChangeName('salaryTable')">
+                    <span class="label">定薪表</span>
+                    <div class="fileName">
+                      <span class="file-name">{{ imageChangeName('salaryTable') }}</span>
+                      <el-icon class="file-icon" @click="imageView('salaryTable')">
+                        <View />
+                      </el-icon>
+                      <el-icon class="file-icon" @click="downloadImage('salaryTable')">
+                        <Download />
+                      </el-icon>
+                    </div>
+                  </div>
+                  <div class="fileItem" v-if="imageChangeName('leaveTable')">
+                    <span class="label">离职表</span>
+                    <div class="fileName">
+                      <span class="file-name">{{ imageChangeName('leaveTable') }}</span>
+                      <el-icon class="file-icon" @click="imageView('leaveTable')">
+                        <View />
+                      </el-icon>
+                      <el-icon class="file-icon" @click="downloadImage('leaveTable')">
+                        <Download />
+                      </el-icon>
                     </div>
                   </div>
                 </template>
@@ -137,41 +204,28 @@
         </el-tab-pane>
       </el-tabs>
     </div>
-    <el-dialog
-      v-model="bankCardDialogShow"
-      :title="bankTitle"
-      width="500"
-    >
+    <el-dialog v-model="bankCardDialogShow" :title="bankTitle" width="500">
       <addCard v-if="bankCardDialogShow" @closeDialog="closeAddBankCard" :userInfo="bankCardInfo"></addCard>
     </el-dialog>
-    <el-dialog
-      v-model="dialogShow"
-      title="编辑"
-      width="1000"
-    >
+    <el-dialog v-model="dialogShow" title="编辑" width="1000">
       <addOperation ref="AddOperationRef" @closeDialog="closeAddOperation"></addOperation>
     </el-dialog>
-    <el-dialog
-      v-model="allocationShow"
-      title="分配管理人"
-      width="800"
-    >
+    <el-dialog v-model="allocationShow" title="分配管理人" width="800">
       <allocation ref="AllocationRef" @closeDialog="closeAllocation"></allocation>
     </el-dialog>
-    <el-dialog
-      v-model="imageShow"
-      title="预览"
-      width="500"
-    >
+    <el-dialog v-model="imageShow" title="预览" width="500">
       <div class="image-box">
         <img class="image-view" :src="imageUrl" />
       </div>
     </el-dialog>
+    <el-dialog title="文件预览" v-model="fileShow">
+      <vue-office-docx :src="fileUrl" style="height: 600px; margin: 0; padding: 0"></vue-office-docx>
+    </el-dialog>
   </div>
 </template>
 
 <script setup lang="ts">
-import {nextTick, ref} from 'vue'
+import { nextTick, ref } from 'vue'
 import addOperation from './modules/addOperation.vue'
 import addCard from './modules/addCard.vue'
 import allocation from './modules/allocation.vue'
@@ -180,9 +234,11 @@ import { ElMessage, ElMessageBox } from 'element-plus'
 import Allocation from "@/views/operationManagement/modules/allocation.vue";
 import { useRoute, useRouter } from 'vue-router'
 import api from '@/api'
-import {OperationIsEnable} from "@/api/modules/operation.ts";
+import { OperationIsEnable } from "@/api/modules/operation.ts";
 import router from "@/router";
 import Detail from '../representative/detail.vue';
+import VueOfficeDocx from "@vue-office/docx";
+
 
 let AddOperationRef = ref(null)
 const AllocationRef = ref(null)
@@ -201,12 +257,12 @@ const handleCommand = (e) => {
         showCancelButton: true,
         confirmButtonText: '确定',
         cancelButtonText: '取消',
-      }).then(( action ) => {
-        if(action === 'confirm') {
+      }).then((action) => {
+        if (action === 'confirm') {
           let ids = [myRoute.query.id]
           operationDel(ids)
         }
-      }).catch(( action ) => {
+      }).catch((action) => {
 
       })
       break;
@@ -218,8 +274,8 @@ const handleCommand = (e) => {
         showCancelButton: true,
         confirmButtonText: '确定',
         cancelButtonText: '取消',
-      }).then(( action ) => {
-        if(action === 'confirm') {
+      }).then((action) => {
+        if (action === 'confirm') {
           let data = {
             ids: [myRoute.query.ids],
             isEnable: 1,
@@ -227,7 +283,7 @@ const handleCommand = (e) => {
           }
           operationIsEnable(data)
         }
-      }).catch(( action ) => {
+      }).catch((action) => {
 
       })
       break;
@@ -239,8 +295,8 @@ const handleCommand = (e) => {
         showCancelButton: true,
         confirmButtonText: '确定',
         cancelButtonText: '取消',
-      }).then(( action ) => {
-        if(action === 'confirm'){
+      }).then((action) => {
+        if (action === 'confirm') {
           let data = {
             ids: [myRoute.query.ids],
             isEnable: 0,
@@ -248,7 +304,7 @@ const handleCommand = (e) => {
           }
           operationIsEnable(data)
         }
-      }).catch(( action ) => {
+      }).catch((action) => {
 
       })
       break;
@@ -281,7 +337,7 @@ const statusMap = (value: any) => {
   return map[value]
 }
 //人员类型匹配
-const typeAttrMap=(value)=>{
+const typeAttrMap = (value) => {
   const map = {
     "1": '前线人员',
     "2": '后线人员',
@@ -319,7 +375,7 @@ const addBankCard = () => {
 
 }
 // 编辑银行卡
-const editBankCard = (row:any) => {
+const editBankCard = (row: any) => {
   bankTitle.value = '查看银行卡'
   bankCardInfo.value = {
     userJzgInfoId: dataDetail.value.id,
@@ -332,7 +388,7 @@ const editBankCard = (row:any) => {
 }
 // 关闭添加银行卡弹框
 const closeAddBankCard = (type: string) => {
-  if(type == '确定') {
+  if (type == '确定') {
     initDetail()
   }
   bankCardDialogShow.value = false
@@ -344,7 +400,7 @@ const operationDel = (id: string[]) => {
     ids: id,
     getAll: 0
   }).then(res => {
-    if(res?.code == 200) {
+    if (res?.code == 200) {
       ElMessage({
         message: res.msg,
         type: 'success'
@@ -363,7 +419,7 @@ const operationDel = (id: string[]) => {
 // 启用/禁用
 const operationIsEnable = (data: OperationIsEnable) => {
   api.operationApi.operationIsEnable(data).then(res => {
-    if(res?.code == 200) {
+    if (res?.code == 200) {
       ElMessage({
         message: res.msg,
         type: 'success'
@@ -381,7 +437,7 @@ const operationIsEnable = (data: OperationIsEnable) => {
 // 审核通过
 const checkPass = () => {
   api.operationApi.salesmanAuthSuccess({ userInfoId: dataDetail.value.id }).then(res => {
-    if(res.code == 200) {
+    if (res.code == 200) {
       ElMessage({
         message: res.msg,
         type: 'success',
@@ -405,13 +461,13 @@ const checkNotPass = () => {
     showCancelButton: true,
     confirmButtonText: '确定',
     cancelButtonText: '取消',
-  }).then(({ value, action } ) => {
-    if(action == 'confirm') {
+  }).then(({ value, action }) => {
+    if (action == 'confirm') {
       api.operationApi.salesmanAuthFailed({
         userInfoId: dataDetail.value.id,
         approvalOpinion: value
       }).then(res => {
-        if(res.code == 200) {
+        if (res.code == 200) {
           ElMessage({
             message: res.msg,
             type: 'success',
@@ -425,7 +481,7 @@ const checkNotPass = () => {
         }
       })
     }
-  }).catch(( action ) => {
+  }).catch((action) => {
 
   })
 }
@@ -439,7 +495,7 @@ const editDetail = () => {
   })
 }
 const closeAddOperation = (text: string) => {
-  if(text == '确定') {
+  if (text == '确定') {
     initDetail()
   }
   dialogShow.value = false
@@ -447,33 +503,200 @@ const closeAddOperation = (text: string) => {
 
 // 附件转换
 const imageChangeName = (type) => {
-  if(dataDetail.value&&dataDetail.value.fileList.length>0) {
+  if (dataDetail.value && dataDetail.value.fileList.length > 0) {
     let obj = dataDetail.value.fileList.find(item => item.fileType === type)
     return obj?.fileName
   }
 }
 const imageChangeUrl = (type) => {
-  if(dataDetail.value.fileList.length>0) {
+  if (dataDetail.value.fileList.length > 0) {
     let obj = dataDetail.value.fileList.find(item => item.fileType == type)
     return obj?.fileUrl
   }
 }
-
+// 身份证人像面
+let IDCardFrontName = ref("");
+let IDCardFront = ref("");
+// 身份证国徽面
+let IDCardBackName = ref("");
+let IDCardBack = ref("");
+// 展业资格证
+let businessLicenseName = ref("");
+let businessLicense = ref("");
+// 劳务合同
+let contractName = ref("");
+let contract = ref("");
+// 应聘表
+let applicantName = ref("");
+let applicant = ref("");
+// 定薪表
+let decidePayName = ref("");
+let decidePay = ref("");
+// 离职表
+let dimissionName = ref("");
+let dimission = ref("");
 // 预览
 let imageUrl = ref('')
 let imageShow = ref(false)
 const imageView = (type: string) => {
-  imageUrl.value = imageChangeUrl(type)
-  imageShow.value = true
+  switch (type) {
+    case "sfz1":
+      imageShow.value = true;
+      imageUrl.value = IDCardFront.value;
+      break;
+    case "sfz2":
+      imageShow.value = true;
+      imageUrl.value = IDCardBack.value;
+      break;
+    case "qualification":
+      imageShow.value = true;
+      imageUrl.value = businessLicense.value;
+      break;
+    case "contract":
+      imageUrl.value = contract.value;
+      nextTick(() => {
+        // loadPdf(contract.value)
+        if (contract.value.includes('.pdf')) {
+          window.open(contract.value, '_blank')
+        } else if (contract.value.includes('.doc') || contract.value.includes('.docx')) {
+          fileShow.value = true
+          nextTick(() => {
+            filePreview(contract.value)
+          })
+        } else if (contract.value.includes('.jpg') || contract.value.includes('.jpeg') || contract.value.includes('.png')) {
+          imageShow.value = true
+        }
+      })
+      break;
+    case "applicant":
+      imageUrl.value = applicant.value;
+      nextTick(() => {
+        // loadPdf(applicant.value)
+        if (applicant.value.includes('.pdf')) {
+          window.open(applicant.value, '_blank')
+        } else if (applicant.value.includes('.doc') || applicant.value.includes('.docx')) {
+          fileShow.value = true
+          filePreview(applicant.value)
+        } else if (applicant.value.includes('.jpg') || applicant.value.includes('.jpeg') || applicant.value.includes('.png')) {
+          imageShow.value = true
+        }
+      })
+      break;
+    case "salaryTable":
+      imageUrl.value = decidePay.value;
+      nextTick(() => {
+        // loadPdf(decidePay.value)
+        if (decidePay.value.includes('.pdf')) {
+          window.open(decidePay.value, '_blank')
+        } else if (decidePay.value.includes('.doc') || decidePay.value.includes('.docx')) {
+          fileShow.value = true
+          filePreview(decidePay.value)
+        } else if (decidePay.value.includes('.jpg') || decidePay.value.includes('.jpeg') || decidePay.value.includes('.png')) {
+          imageShow.value = true
+        }
+      })
+      break;
+    case "leaveTable":
+      imageUrl.value = dimission.value;
+      nextTick(() => {
+        // loadPdf(dimission.value)
+        if (dimission.value.includes('.pdf')) {
+          window.open(dimission.value, '_blank')
+        } else if (dimission.value.includes('.doc') || dimission.value.includes('.docx')) {
+          fileShow.value = true
+          filePreview(dimission.value)
+        } else if (dimission.value.includes('.jpg') || dimission.value.includes('.jpeg') || dimission.value.includes('.png')) {
+          imageShow.value = true
+        }
+      })
+      break;
+  }
+};
+const downloadImage = (type: string) => {
+  switch (type) {
+    case "sfz1":
+      download(IDCardFront.value, IDCardFrontName.value)
+      break;
+    case "sfz2":
+      download(IDCardBack.value, IDCardBackName.value)
+      break;
+    case "qualification":
+      download(businessLicense.value, businessLicenseName.value)
+      break;
+    case "contract":
+      download(contract.value, contractName.value)
+      break;
+    case "applicant":
+      download(applicant.value, applicantName.value)
+      break;
+    case "salaryTable":
+      download(decidePay.value, decidePayName.value)
+      break;
+    case "leaveTable":
+      download(dimission.value, dimissionName.value)
+      break;
+  }
 }
+// 图片下载
+const download = (url, name) => {
+  let a_link = document.createElement('a')
+  fetch(url).then((res) => res.blob())
+    .then((blob) => {
+      // 将链接地址字符内容转变成blob地址
+      a_link.href = URL.createObjectURL(blob)
+      console.log(a_link.href)
+      a_link.download = name //下载的文件的名字
+      document.body.appendChild(a_link)
+      a_link.click()
+    })
 
+}
+let fileShow = ref(false)
+let fileUrl = ref('')
+const filePreview = (file) => {
+  nextTick(() => {
+    fileUrl.value = file
+  })
+}
 // 详情
 let dataDetail = ref(null)
 const initDetail = () => {
   let id = myRoute.query?.id
-  api.operationApi.operationDetail(id).then((res:any) => {
-    if(res?.code == 200) {
+  api.operationApi.operationDetail(id).then((res: any) => {
+    if (res?.code == 200) {
       dataDetail.value = res.data
+      res.data.fileList.map((item: any) => {
+        switch (item.fileType) {
+          case "sfz1":
+            IDCardFrontName.value = item.fileName;
+            IDCardFront.value = item.fileUrl;
+            break;
+          case "sfz2":
+            IDCardBackName.value = item.fileName;
+            IDCardBack.value = item.fileUrl;
+            break;
+          case "qualification":
+            businessLicenseName.value = item.fileName;
+            businessLicense.value = item.fileUrl;
+            break;
+          case "contract":
+            contractName.value = item.fileName;
+            contract.value = item.fileUrl;
+            break;
+          case "applicant":
+            applicantName.value = item.fileName;
+            applicant.value = item.fileUrl;
+            break
+          case "salaryTable":
+            decidePayName.value = item.fileName;
+            decidePay.value = item.fileUrl;
+            break;
+          case "leaveTable":
+            dimissionName.value = item.fileName;
+            dimission.value = item.fileUrl;
+            break;
+        }
+      })
     } else {
       ElMessage({
         message: res.msg,
@@ -486,8 +709,8 @@ const initDetail = () => {
 // 初始化银行数据
 let bankOption = ref([])
 const initBankCard = () => {
-  api.commonApi.personInfo('bank_info').then((res:any) => {
-    if(res?.code == 200) {
+  api.commonApi.personInfo('bank_info').then((res: any) => {
+    if (res?.code == 200) {
       bankOption.value = res.data
     } else {
       ElMessage({
@@ -501,7 +724,7 @@ const initBankCard = () => {
 
 // 名字转换首字母
 const initName = (name: string) => {
-  return name?pinyin.getFullChars(name).substring(0, 1):''
+  return name ? pinyin.getFullChars(name).substring(0, 1) : ''
 }
 
 onMounted(() => {
@@ -512,12 +735,13 @@ onMounted(() => {
 </script>
 
 <style scoped lang="scss">
-.detail{
+.detail {
   margin: 0 10px;
   height: calc(100vh - 120px);
   background-color: white;
   overflow-y: auto;
-  .state{
+
+  .state {
     border: 1px solid #FF4545;
     border-radius: 10px;
     padding: 10px 20px;
@@ -526,31 +750,38 @@ onMounted(() => {
     margin: 5px 0;
     font-weight: 400;
     color: #333333;
-    h3{
+
+    h3 {
       font-size: 16px;
       margin: 0 0 10px;
-      color: rgba(0,0,0,.64);
+      color: rgba(0, 0, 0, .64);
     }
-    p{
+
+    p {
       font-size: 14px;
       margin: 10px 0;
     }
   }
-  .info{
+
+  .info {
     background: white;
     padding: 24px;
     margin: 10px 0;
     border-radius: 10px;
+
     :deep(.el-descriptions__title) {
       width: 100%;
     }
+
     :deep(.el-tabs__nav-wrap) {
       padding: 0 25px;
     }
+
     :deep(.el-tabs__item) {
       font-size: 18px;
     }
-    .firstName{
+
+    .firstName {
       width: 30px;
       height: 30px;
       text-align: center;
@@ -561,75 +792,101 @@ onMounted(() => {
       font-size: 18px;
       margin-right: 10px;
     }
-    .allName{
+
+    .allName {
       font-size: 14px;
     }
   }
-  .message{
+
+  .message {
     background: white;
+
     :deep(.el-tabs__nav-scroll) {
       padding: 24px 0 0 24px;
     }
-    .other{
-      .fileItem{
+
+    .other {
+      .fileItem {
         display: flex;
         justify-content: flex-start;
         align-items: center;
         margin: 10px 0;
-        .label{
+
+        .label {
           width: 200px;
         }
-        .fileName{
+
+        .fileName {
           width: calc(100% - 500px);
           line-height: 30px;
           display: flex;
           align-items: center;
           padding: 0 20px;
-          &:hover{
+
+          &:hover {
             background: #ccc;
           }
-          .file-name{
+
+          .file-name {
             width: 200px;
             overflow: hidden;
             text-overflow: ellipsis;
             white-space: nowrap;
             margin-right: 20px;
           }
-          .file-icon{
+
+          .file-icon {
             display: flex;
             justify-content: flex-start;
             align-items: center;
             height: 30px;
+            margin-left: 10px;
+            font-size: 16px;
             cursor: pointer;
-            &:hover{
+
+            &:hover {
               color: #00a0f4;
             }
           }
         }
       }
-      .cardImage{
+
+      .cardImage {
         display: block;
         width: 80px;
         height: 80px;
         border-radius: 5px;
       }
+
       :deep(.el-descriptions__title) {
         padding-left: 20px;
         font-size: 16px;
       }
     }
   }
-  .image-box{
+
+  .image-box {
     display: flex;
     align-content: center;
     justify-content: center;
-    .image-view{
+
+    .image-view {
       width: 300px;
       height: 200px;
     }
   }
+
   :deep(.el-table th.el-table__cell) {
     background-color: #F7F7F9;
   }
 }
+
+:deep(.vue-office-docx-main) {
+  height: 600px;
+  overflow-y: auto;
+}
+
+:deep(.docx-wrapper) {
+  background: white;
+}
 </style>

+ 0 - 1
src/views/personnel/memberManagement.vue

@@ -332,7 +332,6 @@ const columns = [
   {
     prop: "status", label: "状态",
     formatter: (row: any) => {
-      console.log(row)
       let comType = "";
       statusList.value.forEach((item: any) => {
         if (item.value == row.status) {

+ 18 - 20
src/views/personnel/modules/addOperation.vue

@@ -34,8 +34,8 @@
                     placeholder="请填写登录密码"></el-input>
                 </el-form-item>
               </el-col>
-              <el-col :span="12">
-                <el-form-item prop="isAddSalesman" label="同时添加为业务员" v-if="!route.query.id">
+              <el-col :span="12" v-if="!route.query.id">
+                <el-form-item prop="isAddSalesman" label="同时添加为业务员">
                   <el-select v-model="operationForm.isAddSalesman">
                     <el-option label="是" value="1" key="1"></el-option>
                     <el-option label="否" value="0" key="0"></el-option>
@@ -573,42 +573,41 @@ onMounted(async () => {
         id: route.query.id || "",
       })
       .then((res: any) => {
-        if (res.code === 200) {
+        if (res.code == 200) {
+          console.log(res.data)
           operationForm.value = res.data;
-          console.log(operationForm.value)
           if (operationForm.value.typeAttr != 6) {
             initTeamData(operationForm.value.typeAttr === '5' ? '1' : operationForm.value.typeAttr === '8' ? '2' : operationForm.value.typeAttr === '7' ? '3' : '')
           }
           res.data.fileList.map((item: any) => {
             switch (item.fileType) {
               case "sfz1":
-                IDCardFrontName.value = res.data.fileName;
-                IDCardFront.value = res.data.downloadUrl;
+                IDCardFrontName.value = item.fileName;
+                IDCardFront.value = item.fileUrl;
                 break;
               case "sfz2":
-                IDCardBackName.value = res.data.fileName;
-                IDCardBack.value = res.data.downloadUrl;
+                IDCardBackName.value = item.fileName;
+                IDCardBack.value = item.fileUrl;
                 break;
               case "qualification":
-                businessLicenseName.value = res.data.fileName;
-                businessLicense.value = res.data.downloadUrl;
+                businessLicenseName.value = item.fileName;
+                businessLicense.value = item.fileUrl;
                 break;
               case "contract":
-                contractName.value = res.data.fileName;
-                contract.value = res.data.downloadUrl;
+                contractName.value = item.fileName;
+                contract.value = item.fileUrl;
                 break;
               case "applicant":
-                applicantName.value = res.data.fileName;
-                applicant.value = res.data.downloadUrl;
+                applicantName.value = item.fileName;
+                applicant.value = item.fileUrl;
                 break
               case "salaryTable":
-                decidePayName.value = res.data.fileName;
-                decidePay.value = res.data.downloadUrl;
+                decidePayName.value = item.fileName;
+                decidePay.value = item.fileUrl;
                 break;
               case "leaveTable":
-                dimissionName.value = res.data.fileName;
-                dimission.value = res.data.downloadUrl;
-
+                dimissionName.value = item.fileName;
+                dimission.value = item.fileUrl;
                 break;
             }
           })
@@ -1174,7 +1173,6 @@ const onSubmit = async (OperationFormRef: FormInstance, type: number) => {
     emits("closeDialog", false);
     return;
   }
-  console.log(fileListId.value)
   // return
   await OperationFormRef.validate((valid) => {
     if (valid) {

+ 174 - 145
src/views/personnel/modules/memberMessage.vue

@@ -309,92 +309,92 @@
             <el-descriptions-item>
               <template #default>
                 <el-form-item prop="" label="身份证(人像面)" label-width="150" label-position="left" v-if="IDCardFront">
-                  <div class="fileInfo" >
+                  <div class="fileInfo">
                     <div class="fileName">{{ IDCardFrontName }}</div>
                     <div class="fileBtn">
-                      <el-icon class="btn-icon" @click="imageView(1)">
+                      <el-icon class="btn-icon" @click="imageView('sfz1')">
                         <View />
                       </el-icon>
-                      <el-icon class="btn-icon">
+                      <el-icon class="btn-icon" @click="downloadImage('sfz1')">
                         <Download />
                       </el-icon>
                     </div>
                   </div>
                 </el-form-item>
                 <el-form-item prop="" label="身份证(国徽面)" label-width="150" label-position="left" v-if="IDCardBack">
-                  <div class="fileInfo" >
+                  <div class="fileInfo">
                     <div class="fileName">{{ IDCardBackName }}</div>
                     <div class="fileBtn">
-                      <el-icon class="btn-icon" @click="imageView(2)">
+                      <el-icon class="btn-icon" @click="imageView('sfz2')">
                         <View />
                       </el-icon>
-                      <el-icon class="btn-icon">
+                      <el-icon class="btn-icon" @click="downloadImage('sfz2')">
                         <Download />
                       </el-icon>
                     </div>
                   </div>
                 </el-form-item>
-                <el-form-item prop="" label="银行卡" label-width="150" label-position="left" v-if="bankSize">
-                  <div class="fileInfo" >
-                    <div class="fileName">{{ bankName }}</div>
+                <el-form-item prop="" label="展业资格证" label-width="150" label-position="left" >
+                  <div class="fileInfo">
+                    <div class="fileName">{{ businessLicenseName }}</div>
                     <div class="fileBtn">
 
-                      <el-icon class="btn-icon" @click="imageView(3)">
+                      <el-icon class="btn-icon" @click="imageView('qualification')">
                         <View />
                       </el-icon>
-                      <el-icon class="btn-icon">
+                      <el-icon class="btn-icon" @click="downloadImage('qualification')">
                         <Download />
                       </el-icon>
                     </div>
                   </div>
                 </el-form-item>
                 <el-form-item prop="" label="劳动合同" label-width="150" label-position="left" v-if="contract">
-                  <div class="fileInfo" >
+                  <div class="fileInfo">
                     <div class="fileName">{{ contractName }}</div>
                     <div class="fileBtn">
-                      <el-icon class="btn-icon" @click="imageView(4)">
+                      <el-icon class="btn-icon" @click="imageView('contract')">
                         <View />
                       </el-icon>
-                      <el-icon class="btn-icon">
+                      <el-icon class="btn-icon" @click="downloadImage('contract')">
                         <Download />
                       </el-icon>
                     </div>
                   </div>
                 </el-form-item>
                 <el-form-item prop="" label="应聘表" label-width="150" label-position="left" v-if="applicant">
-                  <div class="fileInfo" >
+                  <div class="fileInfo">
                     <div class="fileName">{{ applicantName }}</div>
                     <div class="fileBtn">
-                      <el-icon class="btn-icon" @click="imageView(5)">
+                      <el-icon class="btn-icon" @click="imageView('applicant')">
                         <View />
                       </el-icon>
-                      <el-icon class="btn-icon">
+                      <el-icon class="btn-icon" @click="downloadImage('applicant')">
                         <Download />
                       </el-icon>
                     </div>
                   </div>
                 </el-form-item>
                 <el-form-item prop="" label="定薪表" label-width="150" label-position="left" v-if="decidePay">
-                  <div class="fileInfo" >
+                  <div class="fileInfo">
                     <div class="fileName">{{ decidePayName }}</div>
                     <div class="fileBtn">
-                      <el-icon class="btn-icon" @click="imageView(6)">
+                      <el-icon class="btn-icon" @click="imageView('salaryTable')">
                         <View />
                       </el-icon>
-                      <el-icon class="btn-icon">
+                      <el-icon class="btn-icon" @click="downloadImage('salaryTable')">
                         <Download />
                       </el-icon>
                     </div>
                   </div>
                 </el-form-item>
                 <el-form-item prop="" label="离职表" label-width="150" label-position="left" v-if="dimission">
-                  <div class="fileInfo" >
+                  <div class="fileInfo">
                     <div class="fileName">{{ dimissionName }}</div>
                     <div class="fileBtn">
-                      <el-icon class="btn-icon" @click="imageView(7)">
+                      <el-icon class="btn-icon" @click="imageView('leaveTable')">
                         <View />
                       </el-icon>
-                      <el-icon class="btn-icon">
+                      <el-icon class="btn-icon" @click="downloadImage('leaveTable')">
                         <Download />
                       </el-icon>
                     </div>
@@ -492,6 +492,9 @@
         </div>
       </template>
     </el-dialog>
+    <el-dialog title="文件预览" v-model="fileShow">
+      <vue-office-docx :src="fileUrl" style="height: 600px; margin: 0; padding: 0"></vue-office-docx>
+    </el-dialog>
   </div>
 </template>
 
@@ -507,6 +510,8 @@ import { useRoute } from "vue-router";
 import pinyin from "js-pinyin";
 import { useRouter } from "vue-router";
 import setDept from "@/components/DialogSetDeptLeader/index.vue";
+import VueOfficeDocx from "@vue-office/docx";
+
 interface dictType {
   value: string;
   id: string;
@@ -551,53 +556,39 @@ onMounted(async () => {
     .then((res: any) => {
       if (res.code === 200) {
         operationForm.value = res.data;
-        let formData = res.data
         operationForm.value.roleNames = operationForm.value.roleNames.join(',')
-        if (formData.fileList) {
-          let sfz1 = formData.fileList.find(item => item.fileType == 'sfz1')
-          let sfz2 = formData.fileList.find(item => item.fileType == 'sfz2')
-
-          let qualification = formData.fileList.find(item => item.fileType == 'bankCard')
-          let contractImg = formData.fileList.find(item => item.fileType == 'contract')
-          let applicantImg = formData.fileList.find(item => item.fileType == 'applicant')
-          let salaryTable = formData.fileList.find(item => item.fileType == 'salary')
-          let leaveTable = formData.fileList.find(item => item.fileType == 'leave')
-          if (sfz1) {
-            operationForm.value.sfz1 = sfz1.id
-            IDCardFrontName.value = sfz1.fileName
-            IDCardFront.value = sfz1.fileUrl
-          }
-          if (sfz2) {
-            operationForm.value.sfz2 = sfz2.id
-            IDCardBackName.value = sfz2.fileName
-            IDCardBack.value = sfz2.fileUrl
-          }
-          if (qualification) {
-            operationForm.value.qualification = qualification.id
-            bankName.value = qualification.fileName
-            bankSize.value = qualification.fileUrl
-          }
-          if (contractImg) {
-            operationForm.value.contract = contractImg.id
-            contractName.value = contractImg.fileName
-            contract.value = contractImg.fileUrl
-          }
-          if (applicantImg) {
-            operationForm.value.applicant = applicantImg.id
-            applicantName.value = applicantImg.fileName
-            applicant.value = applicantImg.fileUrl
-          }
-          if (salaryTable) {
-            operationForm.value.salaryTable = salaryTable.id
-            decidePayName.value = salaryTable.fileName
-            decidePay.value = salaryTable.fileUrl
-          }
-          if (leaveTable) {
-            operationForm.value.leaveTable = leaveTable.id
-            dimissionName.value = leaveTable.fileName
-            dimission.value = leaveTable.fileUrl
-          }
-        }
+        res.data.fileList.map((item: any) => {
+            switch (item.fileType) {
+              case "sfz1":
+                IDCardFrontName.value = item.fileName;
+                IDCardFront.value = item.fileUrl;
+                break;
+              case "sfz2":
+                IDCardBackName.value = item.fileName;
+                IDCardBack.value = item.fileUrl;
+                break;
+              case "qualification":
+                businessLicenseName.value = item.fileName;
+                businessLicense.value = item.fileUrl;
+                break;
+              case "contract":
+                contractName.value = item.fileName;
+                contract.value = item.fileUrl;
+                break;
+              case "applicant":
+                applicantName.value = item.fileName;
+                applicant.value = item.fileUrl;
+                break
+              case "salaryTable":
+                decidePayName.value = item.fileName;
+                decidePay.value = item.fileUrl;
+                break;
+              case "leaveTable":
+                dimissionName.value = item.fileName;
+                dimission.value = item.fileUrl;
+                break;
+            }
+          })
       }
     });
 });
@@ -709,35 +700,34 @@ const operationRules = ref<FormRules>({
 // 身份证人像面
 let IDCardFrontName = ref("");
 let IDCardFront = ref("");
-let sfz1 = ref("");
 // 身份证国徽面
 let IDCardBackName = ref("");
 let IDCardBack = ref("");
-let sfz2 = ref("");
-// 银行卡
-let bankName = ref("");
-let bankSize = ref("");
-let bankCard = ref("");
+// 展业资格证
+let businessLicenseName = ref("");
+let businessLicense = ref("");
 // 劳务合同
 let contractName = ref("");
 let contract = ref("");
-let contractId = ref("");
 // 应聘表
 let applicantName = ref("");
 let applicant = ref("");
-let applicantId = ref("");
 // 定薪表
 let decidePayName = ref("");
 let decidePay = ref("");
-let salaryTable = ref("");
 // 离职表
 let dimissionName = ref("");
 let dimission = ref("");
-let leaveTable = ref("");
 // 图片预览地址
 let imageShow = ref(false);
 let imageUrl = ref("");
-
+let fileShow = ref(false)
+let fileUrl = ref('')
+const filePreview = (file) => {
+  nextTick(() => {
+    fileUrl.value = file
+  })
+}
 //机构列表
 type tableType = {
   id: string;
@@ -771,93 +761,124 @@ function editMember(e: any) {
 
 //数组去重
 
-// 上传图片
-const uploadImage = (file: any, type: number) => {
-  let files = file.raw;
-  console.log(files)
-  let url = window.URL.createObjectURL(files); //转临时路径
-  const params = new FormData(); // 声明formData数据类型
-  params.append("file", files);
-
-  // params.append("multipartFile", files);
-  // params.append("type", "image");
-  api.areaApi.fileUpload(params).then((res: any) => {
-
-    if (res.code === 200) {
-      switch (type) {
-        case 1:
-          IDCardFrontName.value = res.data.fileName;
-          IDCardFront.value = res.data.downloadUrl;
-          sfz1.value = res.data.id;
-          break;
-        case 2:
-          IDCardBackName.value = res.data.fileName;
-          IDCardBack.value = res.data.downloadUrl;
-          sfz2.value = res.data.id;
-          break;
-        case 3:
-          bankName.value = res.data.fileName;
-          bankSize.value = res.data.downloadUrl;
-          bankCard.value = res.data.id;
-          break;
-        case 4:
-          contractName.value = res.data.fileName;
-          contract.value = res.data.downloadUrl;
-          contractId.value = res.data.id;
 
-          break;
-        case 5:
-          applicantName.value = res.data.fileName;
-          applicant.value = res.data.downloadUrl;
-          applicantId.value = res.data.id;
-
-          break;
-        case 6:
-          decidePayName.value = res.data.fileName;
-          decidePay.value = res.data.downloadUrl;
-          salaryTable.value = res.data.id;
-
-          break;
-        case 7:
-          dimissionName.value = res.data.fileName;
-          dimission.value = res.data.downloadUrl;
-          leaveTable.value = res.data.id;
-          break;
-      }
-    }
-  });
-};
 
 // 人事档案
 let recordShow = ref(true);
 
-const imageView = (type: number) => {
-  imageShow.value = true;
+const imageView = (type: string) => {
   switch (type) {
-    case 1:
+    case "sfz1":
+      imageShow.value = true;
       imageUrl.value = IDCardFront.value;
       break;
-    case 2:
+    case "sfz2":
+      imageShow.value = true;
       imageUrl.value = IDCardBack.value;
       break;
-    case 3:
-      imageUrl.value = bankSize.value;
+    case "qualification":
+      imageShow.value = true;
+      imageUrl.value = businessLicense.value;
       break;
-    case 4:
+    case "contract":
       imageUrl.value = contract.value;
+      nextTick(() => {
+        // loadPdf(contract.value)
+        if (contract.value.includes('.pdf')) {
+          window.open(contract.value, '_blank')
+        } else if (contract.value.includes('.doc') || contract.value.includes('.docx')) {
+          fileShow.value = true
+          nextTick(() => {
+            filePreview(contract.value)
+          })
+        } else if (contract.value.includes('.jpg') || contract.value.includes('.jpeg') || contract.value.includes('.png')) {
+          imageShow.value = true
+        }
+      })
       break;
-    case 5:
+    case "applicant":
       imageUrl.value = applicant.value;
+      nextTick(() => {
+        // loadPdf(applicant.value)
+        if (applicant.value.includes('.pdf')) {
+          window.open(applicant.value, '_blank')
+        } else if (applicant.value.includes('.doc') || applicant.value.includes('.docx')) {
+          fileShow.value = true
+          filePreview(applicant.value)
+        } else if (applicant.value.includes('.jpg') || applicant.value.includes('.jpeg') || applicant.value.includes('.png')) {
+          imageShow.value = true
+        }
+      })
       break;
-    case 6:
+    case "salaryTable":
       imageUrl.value = decidePay.value;
+      nextTick(() => {
+        // loadPdf(decidePay.value)
+        if (decidePay.value.includes('.pdf')) {
+          window.open(decidePay.value, '_blank')
+        } else if (decidePay.value.includes('.doc') || decidePay.value.includes('.docx')) {
+          fileShow.value = true
+          filePreview(decidePay.value)
+        } else if (decidePay.value.includes('.jpg') || decidePay.value.includes('.jpeg') || decidePay.value.includes('.png')) {
+          imageShow.value = true
+        }
+      })
       break;
-    case 7:
+    case "leaveTable":
       imageUrl.value = dimission.value;
+      nextTick(() => {
+        // loadPdf(dimission.value)
+        if (dimission.value.includes('.pdf')) {
+          window.open(dimission.value, '_blank')
+        } else if (dimission.value.includes('.doc') || dimission.value.includes('.docx')) {
+          fileShow.value = true
+          filePreview(dimission.value)
+        } else if (dimission.value.includes('.jpg') || dimission.value.includes('.jpeg') || dimission.value.includes('.png')) {
+          imageShow.value = true
+        }
+      })
       break;
   }
 };
+const downloadImage = (type: string) => {
+  switch (type) {
+    case "sfz1":
+      download(IDCardFront.value, IDCardFrontName.value)
+      break;
+    case "sfz2":
+      download(IDCardBack.value, IDCardBackName.value)
+      break;
+    case "qualification":
+      download(businessLicense.value, businessLicenseName.value)
+      break;
+    case "contract":
+      download(contract.value, contractName.value)
+      break;
+    case "applicant":
+      download(applicant.value, applicantName.value)
+      break;
+    case "salaryTable":
+      download(decidePay.value, decidePayName.value)
+      break;
+    case "leaveTable":
+      download(dimission.value, dimissionName.value)
+      break;
+  }
+}
+// 图片下载
+const download = (url, name) => {
+  let a_link = document.createElement('a')
+  fetch(url).then((res) => res.blob())
+    .then((blob) => {
+      // 将链接地址字符内容转变成blob地址
+      a_link.href = URL.createObjectURL(blob)
+      console.log(a_link.href)
+      a_link.download = name //下载的文件的名字
+      document.body.appendChild(a_link)
+      a_link.click()
+    })
 
+}
 const onSubmit = async (OperationFormRef: FormInstance, type: number) => {
   if (!OperationFormRef) {
     emits("closeDialog", false);
@@ -1186,4 +1207,12 @@ function delUser() {
   padding-right: 8px;
   font-size: 14px;
 }
+:deep(.vue-office-docx-main) {
+  height: 600px;
+  overflow-y: auto;
+}
+
+:deep(.docx-wrapper) {
+  background: white;
+}
 </style>