From 0c66602c5c9ba5d579f949217221c04acbd0be17 Mon Sep 17 00:00:00 2001
From: 祖安之光 <11848914+light-of-zuan@user.noreply.gitee.com>
Date: 星期三, 22 十月 2025 08:58:54 +0800
Subject: [PATCH] 修改新增

---
 src/views/work/knowledgePlatform/internalKnowledge/index.vue |  153 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 143 insertions(+), 10 deletions(-)

diff --git a/src/views/work/knowledgePlatform/internalKnowledge/index.vue b/src/views/work/knowledgePlatform/internalKnowledge/index.vue
index f97089f..bc03168 100644
--- a/src/views/work/knowledgePlatform/internalKnowledge/index.vue
+++ b/src/views/work/knowledgePlatform/internalKnowledge/index.vue
@@ -8,6 +8,7 @@
               plain
               icon="Plus"
               @click="openDialog('add',{})"
+              v-hasPermi="['internalKnowledge:add']"
           >新增</el-button>
         </el-form-item>
         <el-form-item v-if="isAdmin" label="企业:" >
@@ -33,6 +34,7 @@
         <el-form-item >
           <el-button  type="primary" @click="getList">查询</el-button>
           <el-button  type="primary" plain @click="reset">重置</el-button>
+          <el-button type="primary" @click="exportInData" v-hasPermi="['internalKnowledge:add']">导入</el-button>
           <vue3-json-excel
               :json-data="expertData"
               :fields="fields"
@@ -47,6 +49,7 @@
     <!-- 表格数据 -->
     <el-table v-loading="loading" :data="dataList" :border="true">
       <el-table-column label="序号" type="index" align="center" width="80"/>
+      <el-table-column label="编号" prop="number" align="center"/>
       <el-table-column label="名称" prop="name" align="center"/>
       <el-table-column label="文件类型" prop="knowledgeType" align="center">
         <template #default="scope">
@@ -55,15 +58,15 @@
       </el-table-column>
       <el-table-column label="文件" prop="filePath" align="center">
         <template #default="scope">
-          <el-link  style="" type="primary" @click="openFile(scope.row.filePath)">{{scope.row.name}}</el-link>
+          <el-link v-if="scope.row.filePath && scope.row.filePath !== ''"  style="" type="primary" @click="openFile(scope.row.filePath)">{{scope.row.name}}</el-link>
         </template>
       </el-table-column>
       <el-table-column label="上传日期" prop="updateTime" align="center" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
         <template #default="scope">
-          <el-button link type="primary" @click="downloadFile(scope.row)">下载</el-button>
-          <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button>
-          <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>
+          <el-button link type="primary" :disabled="!scope.row.filePath || scope.row.filePath == ''" @click="downloadFile(scope.row)" v-hasPermi="['internalKnowledge:edit']">下载</el-button>
+          <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['internalKnowledge:edit']">编辑</el-button>
+          <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['internalKnowledge:del']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -75,7 +78,50 @@
         v-model:limit="queryParams.pageSize"
         @pagination="getList"
     />
-
+    <el-dialog
+        v-model="state.exportDialog"
+        title="导入模板"
+        width="550px"
+        :before-close="handleCloseExport"
+        :close-on-press-escape="false"
+        :close-on-click-modal="false"
+    >
+      <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="110px" >
+        <el-form-item label="企业名称:" v-if="data.isAdmin" style="margin-left: 20px" prop="companyId">
+          <el-select v-model="state.form.companyId" filterable placeholder="请选择" clearable>
+            <el-option
+                v-for="item in data.companyList"
+                :key="item.id"
+                style="width: 100%"
+                :label="item.name"
+                :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item  label="表格模板:">
+          <el-button @click="downloadFileTable" size="default" :icon="Download" type="primary" plain>下载模板</el-button>
+        </el-form-item>
+        <el-form-item label="导入文件" prop="filePath">
+          <el-upload
+              accept=".xlsx,.xls"
+              :before-upload="beforeUpload"
+              v-model:file-list="state.exportFileList"
+              action="#"
+              :auto-upload="false"
+              :on-change="handleChange"
+              style="width: 100%"
+          >
+            <el-button :icon="Upload" size="default" type="primary">点击上传</el-button>
+          </el-upload>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="handleCloseExport" size="default">取 消</el-button>
+          <el-button  type="primary" @click="onUpload" size="default">导入</el-button>
+        </span>
+      </template>
+    </el-dialog>
     <edit-dialog ref="dialogRef" @getList=getList></edit-dialog>
   </div>
 </template>
@@ -97,8 +143,8 @@
 import {getToken} from "@/utils/auth";
 import {getIndustry} from "@/api/system/industry";
 import {renderAsync} from "docx-preview";
-import {delInternalKnowledge, getInternalKnowledgeList} from "@/api/assetManage/assetMng";
-import {getStandingBookList} from "@/api/infrastructureMng/ledger";
+import {delInternalKnowledge, getInternalKnowledgeList, uploadInternalKnowledge} from "@/api/assetManage/assetMng";
+import {getStandingBookList, uploadStandingBook} from "@/api/infrastructureMng/ledger";
 const userStore = useUserStore()
 const { proxy } = getCurrentInstance();
 const loading = ref(false);
@@ -139,10 +185,34 @@
     {
       id: 3,
       name: '其他'
+    },
+    {
+      id: 7,
+      name: '会议文件'
     }
   ]
-});
-
+})
+const checkFiles = (rule, value, callback) => {
+  if (state.exportFileList.length == 0) {
+    callback(new Error('请上传导入文件'))
+  } else {
+    callback()
+  }
+}
+const state = reactive({
+  form: {
+    id: null,
+    filePath: '',
+    companyId: null
+  },
+  exportDialog: false,
+  formRules:{
+    companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
+    filePath: [{ required: true, validator: checkFiles, trigger: 'blur' }]
+  },
+  exportFileList: [],
+})
+const superRef = ref();
 const { queryParams, total, dataList,companyList,isAdmin, expertData, typeList } = toRefs(data);
 const userInfo = ref()
 onMounted(async ()=>{
@@ -153,6 +223,7 @@
   }else{
     data.isAdmin = false
     data.queryParams.companyId = userStore.companyId
+    state.form.companyId = userStore.companyId
   }
   await getList()
 })
@@ -186,6 +257,68 @@
     ElMessage.warning(res.message)
   }
 }
+
+const exportInData = () => {
+  state.exportDialog = true
+}
+
+const handleCloseExport = () => {
+  getList()
+  state.exportFileList = []
+  state.exportDialog = false
+}
+const beforeUpload = (file) => {
+  state.exportFileList = [...state.exportFileList, file]
+  state.exportFileList = state.exportFileList.slice(-1)
+  return false;
+}
+const downloadFileTable = () => {
+  const filePath = '/internalKnowledgeFile.xls';
+  const link = document.createElement('a');
+  link.href = filePath;
+  link.download = filePath.substr(filePath.lastIndexOf('/') + 1);
+  link.click();
+}
+const fileBinaryList = ref([])
+const handleChange = (file, files) => {
+  fileBinaryList.value = files;
+};
+
+const onUpload = async () => {
+  const valid = await superRef.value.validate()
+  if(valid){
+    const formData = new FormData();
+    fileBinaryList.value.forEach((file) => {
+      formData.append('file', file.raw)
+    })
+    formData.append('companyId', state.form.companyId)
+    uploadInternalKnowledge(formData).then(async (res) => {
+      if(res.code == 200){
+        ElMessage({
+          type: 'success',
+          message: '导入成功'
+        })
+        superRef.value.clearValidate();
+        superRef.value.resetFields()
+        state.exportFileList = []
+        state.exportDialog = false
+        await getList()
+      }else{
+        ElMessage({
+          type: 'error',
+          message: res.message
+        });
+      }
+    }).catch(async () =>{
+      state.exportFileList = []
+      state.exportDialog = false
+      await getList()
+    })
+  }else{
+    ElMessage.warning('请完善信息')
+  }
+}
+
 const getTypeName = (type)=>{
   return data.typeList.find(i=>i.id == type)?.name
 }
@@ -285,9 +418,9 @@
 /** 重置新增的表单以及其他数据  */
 const reset= async()=> {
   data.queryParams = {
+    ...data.queryParams,
     pageNum: 1,
     pageSize: 10,
-    companyId: null,
     knowledgeType: null
   }
   await getCompanyList()

--
Gitblit v1.9.2