From 477cdf0e4f9574ea9d1506af8b00bb875209cef7 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期四, 30 十月 2025 13:36:19 +0800
Subject: [PATCH] 修改

---
 src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue |  491 +++++++++++++++++++++++++++----------------
 public/innerReviewExport.docx                                                        |    0 
 src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue                 |  121 ++++------
 3 files changed, 361 insertions(+), 251 deletions(-)

diff --git a/public/innerReviewExport.docx b/public/innerReviewExport.docx
new file mode 100644
index 0000000..bdec18e
--- /dev/null
+++ b/public/innerReviewExport.docx
Binary files differ
diff --git a/src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue b/src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue
index c577b4c..22b1816 100644
--- a/src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue
+++ b/src/views/work/selfProblems/internalAudit/innerReviewSheet/components/editDialog.vue
@@ -3,14 +3,14 @@
     <el-dialog
         v-model="dialogVisible"
         :title="state.title"
-        width="700px"
+        width="950px"
         :before-close="handleClose"
         :close-on-press-escape="false"
         :close-on-click-modal="false"
     >
-      <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="150px" >
+      <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules"  >
         <el-form-item v-if="state.isAdmin" label="企业:" prop="companyId">
-          <el-select v-model="state.form.companyId" placeholder="请选择" clearable @change="getDeptList">
+          <el-select v-model="state.form.companyId" placeholder="请选择" :disabled="state.title=='编辑'" style="width: 100%" clearable @change="getDeptList">
             <el-option
                 v-for="item in state.companyList"
                 :key="item.id"
@@ -19,72 +19,136 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="受审核部门:" prop="deptId">
-          <el-select
-              clearable
-              v-model="state.form.deptId"
-              :disabled="state.title =='查看'"
-              filterable
-              placeholder="选择受审核部门"
-              style="width: 100%"
-              @change="getCaluses"
-          >
-            <el-option
-                v-for="item in state.deptList"
-                :key="item.deptId"
-                :label="item.deptName"
-                :value="item.deptId"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="受审核人:" prop="internalAuditCheckPeople">
-          <el-select clearable v-model="state.form.internalAuditCheckPeople" :disabled="state.title =='查看'" value-key="userId" filterable multiple placeholder="受审核人" style="width: 100%">
-            <el-option
-                v-for="item in state.userList"
-                :key="item.userId"
-                :label="item.name"
-                :value="item"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="内审员:" prop="auditId">
-          <el-select clearable v-model="state.form.auditId" :disabled="state.title =='查看'" filterable placeholder="内审员" style="width: 100%">
-            <el-option
-                v-for="item in state.interUserList"
-                :key="item.userId"
-                :label="item.name"
-                :value="item.userId"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="内审时间:" prop="auditDate">
-          <el-date-picker
-              v-model="state.form.auditDate"
-              type="datetime"
-              value-format="YYYY-MM-DD HH:mm:ss"
-              placeholder="请选择内审时间"
-          />
-        </el-form-item>
-        <el-form-item label="对应认证标准条款(过程):" prop="caluseNum">
-          <el-input v-model.trim="state.form.caluseNum" type="textarea" readonly :autosize="{ minRows: 2 }"></el-input>
-        </el-form-item>
-        <el-form-item label="检查内容:" prop="caluseContent">
-          <el-input v-model.trim="state.form.caluseContent" type="textarea" readonly :autosize="{ minRows: 2 }"></el-input>
-        </el-form-item>
-        <el-form-item label="检查记录:" prop="checkRecord">
-          <el-input v-model.trim="state.form.checkRecord" type="textarea" :readonly="state.title =='查看'" :autosize="{ minRows: 2 }"></el-input>
-        </el-form-item>
-        <el-form-item label="不符合标记:" prop="inconsistent">
-          <el-input v-model.trim="state.form.inconsistent" type="textarea" :readonly="state.title =='查看'" :autosize="{ minRows: 2 }"></el-input>
-        </el-form-item>
-<!--        <el-form-item label="文件:" prop="filePath">-->
-<!--          <el-upload accept=".doc,.docx" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" :on-exceed="showTip" :limit='state.fileLimit' v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles)" >-->
-<!--            <el-button type="primary">点击上传</el-button>-->
-<!--            <template #tip>-->
-<!--              <div class="el-upload__tip">支持上传.doc、.docx格式文档,尺寸小于5M,最多可上传1份</div>-->
-<!--            </template>-->
-<!--          </el-upload>-->
-<!--        </el-form-item>-->
+        <el-row :gutter="24">
+          <el-col :span="8">
+            <el-form-item label="受审核部门:" prop="deptId">
+              <el-select
+                  clearable
+                  v-model="state.form.deptId"
+                  :disabled="state.title =='查看'"
+                  filterable
+                  placeholder="选择受审核部门"
+                  style="width: 100%"
+                  @change="getCaluses"
+              >
+                <el-option
+                    v-for="item in state.deptList"
+                    :key="item.deptId"
+                    :label="item.deptName"
+                    :value="item.deptId"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="审核员:" prop="personId">
+              <el-select clearable v-model="state.form.personId" :disabled="state.title =='查看'" filterable placeholder="内审员" style="width: 100%">
+                <el-option
+                    v-for="item in state.interUserList"
+                    :key="item.personId"
+                    :label="item.personName"
+                    :value="item.personId"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="内审时间:" prop="checkTime">
+              <el-date-picker
+                  v-model="state.form.checkTime"
+                  type="datetime"
+                  value-format="YYYY-MM-DD HH:mm:ss"
+                  placeholder="请选择内审时间"
+                  style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row :gutter="24">
+          <el-col :span="24">
+            <div style="display: flex;align-items: center">
+              <span style="font-size: 15px;font-weight: 700;margin-right: 10px" >内审检查表:</span>
+              <el-button type="primary" :disabled="state.title === '查看'"  @click="addTableData">新增</el-button>
+            </div>
+            <el-table style="margin-top: 15px;margin-bottom: 20px" :data="state.form.checkCatalogues" :border="true">
+              <el-table-column label="适用条款" align="center">
+                <el-table-column label="体系标准款项" prop="number" align="center"></el-table-column>
+                <el-table-column label="标题" prop="mess" align="center"></el-table-column>
+              </el-table-column>
+              <el-table-column label="审核要点" prop="pointKey" align="center" width="180">
+                <template #default="{row,$index}">
+                  <div v-for="(i,index) in row.checkContents" :key="index">
+                    <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.pointKey'" :rules="state.formRules.pointKey">
+                      <el-input style="margin-top: 10px" :disabled="state.title === '查看'" type="textarea" :rows="4" v-model="i.pointKey" placeholder="请输入"></el-input>
+                    </el-form-item>
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column label="审核发现" prop="find" align="center" width="180">
+                <template #default="{row,$index}">
+                  <div v-for="(i,index) in row.checkContents" :key="index">
+                    <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.find'" :rules="state.formRules.find">
+                      <el-input style="margin-top: 10px" :disabled="state.title === '查看'" type="textarea" :rows="4" v-model="i.find" placeholder="请输入"></el-input>
+                    </el-form-item>
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column label="审核结果" align="center" >
+                <el-table-column label="符合" prop="conform" align="center" width="90">
+                  <template #default="{row,$index}">
+                    <div v-for="(i,index) in row.checkContents" :key="index">
+                      <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">
+                        <el-radio
+                            style="height: 100px"
+                            v-model="i.result"
+                            :label="1"
+                           :disabled="state.title === '查看'"
+                        > </el-radio>
+                      </el-form-item>
+                    </div>
+                  </template>
+                </el-table-column>
+                <el-table-column label="轻微不符合" prop="minor" align="center" width="90">
+                  <template #default="{row,$index}">
+                    <div v-for="(i,index) in row.checkContents" :key="index">
+                      <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">
+                        <el-radio
+                            style="height: 100px"
+                            v-model="i.result"
+                            :label="2"
+                            :disabled="state.title === '查看'"
+                        ></el-radio>
+                      </el-form-item>
+                    </div>
+                  </template>
+                </el-table-column>
+                <el-table-column label="严重不符合" prop="serious" align="center" width="90">
+                  <template #default="{row,$index}">
+                    <div v-for="(i,index) in row.checkContents" :key="index">
+                      <el-form-item :prop="'checkCatalogues.' + '[' + $index + '].' +'checkContents.' + '[' + index + ']' + '.result'" :rules="state.formRules.result">
+                        <el-radio
+                            style="height: 100px"
+                            v-model="i.result"
+                            :label="3"
+                            :disabled="state.title === '查看'"
+                        ></el-radio>
+                      </el-form-item>
+                    </div>
+                  </template>
+                </el-table-column>
+
+              </el-table-column>
+              <el-table-column label="操作" align="center" width="120" v-if="state.title !== '查看'" >
+                <template #default="scope">
+                  <el-button link type="primary"  @click="addObject(scope.row,scope.$index)" >添加</el-button>
+                  <el-button link type="danger"  @click="delObject(scope.row,scope.$index)" >删除</el-button>
+                </template>
+              </el-table-column>
+
+            </el-table>
+          </el-col>
+        </el-row>
       </el-form>
       <template #footer v-if="state.title !='查看'">
         <span class="dialog-footer">
@@ -93,11 +157,39 @@
         </span>
       </template>
     </el-dialog>
+    <el-dialog
+        v-model="state.showDialog"
+        title=""
+        width="500"
+        :before-close="handleCloseDialog"
+    >
+      <el-form :model="state.termForm" size="default" ref="termRef" :rules="state.rules"  >
+        <el-form-item  label="体系标准款项:" prop="id">
+          <el-tree-select
+              v-model="state.termForm.id"
+              :data="state.menuOptions"
+              :props="{ value: 'id', label: 'name', children: 'children' }"
+              value-key="id"
+              placeholder="体系标准款项"
+              check-strictly
+              style="width: 100%"
+              @node-click="handleTreeSelect"
+          />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+         <span class="dialog-footer">
+            <el-button @click="handleCloseDialog" size="default">取 消</el-button>
+            <el-button type="primary"  @click="onSubmitTerm" size="default" v-preReClick>确认</el-button>
+        </span>
+      </template>
+    </el-dialog>
+
   </div>
 </template>
 <script setup>
 import {reactive, ref, toRefs, defineEmits, nextTick, onMounted} from 'vue'
-import {ElMessage} from "element-plus";
+import {ElMessage, ElTooltip} from "element-plus";
 import {Base64} from "js-base64"
 import {getToken} from "@/utils/auth";
 import {
@@ -106,95 +198,117 @@
 } from "@/api/innerReview/meetingReview";
 import {getDepart} from "@/api/orgStructure/depart";
 import {listUser} from "@/api/system/user";
+import {getPersonPage} from "@/api/selfProblems/nameList";
+import {getCatalogue} from "@/api/qualityManage/catalog";
+import Cookies from "js-cookie";
 
 const emit = defineEmits(["getList"]);
 const dialogVisible = ref(false)
 const superRef = ref()
-const checkFiles = (rule, value, callback) => {
-  if (state.fileList.length == 0) {
-    callback(new Error('请上传文件'))
-  } else {
-    callback()
-  }
-}
+const termRef = ref()
+
 const state = reactive({
   title: '',
   form: {
     id: null,
     deptId: null,
-    internalAuditCheckPeople:[],
-    auditId: null,
-    auditDate: '',
-    caluseNum: '',
-    caluseContent: '',
-    checkRecord: '',
-    inconsistent: '',
-    companyId: null
+    personId: null,
+    checkTime: '',
+    companyId: null,
+    checkCatalogues: []
+  },
+  showDialog:false,
+  termForm: {
+    id: null,
+    mess: '',
+    number: ''
   },
   formRules:{
     companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
     deptId: [{ required: true, message: '请选择受审核部门', trigger: 'blur' }],
     internalAuditCheckPeople: [{ required: true, message: '请选择受审核人', trigger: 'blur' }],
-    auditId: [{ required: true, message: '请选择内审员', trigger: 'blur' }],
-    auditDate: [{ required: true, message: '请选择内审时间',  trigger: 'blur' }],
-    checkRecord: [{ required: true, message: '请填写检查记录',  trigger: 'blur' }]
+    personId: [{ required: true, message: '请选择内审员', trigger: 'blur' }],
+    checkTime: [{ required: true, message: '请选择内审时间',  trigger: 'blur' }],
+    checkRecord: [{ required: true, message: '请填写检查记录',  trigger: 'blur' }],
+    pointKey: [{ required: true, message: '',  trigger: 'blur' }],
+    find: [{ required: true, message: '',  trigger: 'blur' }],
+    result: [{ required: true, message: '',  trigger: 'blur' }],
+
+
+  },
+  rules: {
+    id: [{ required: true, message: '请选择体系标准款项',  trigger: 'blur' }]
   },
   isAdmin: false,
   companyList: [],
   deptList: [],
   userList: [],
   interUserList: [],
-  uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile',
-  header: {
-    Authorization: getToken()
-  },
-  fileLimit: 1,
-  fileList: []
+  menuOptions: []
 })
+const props = {
+  checkStrictly: true,
+  value: 'id',
+  label: 'mess'
+
+}
 onMounted(() => {
 
 });
 
 const openDialog = async (type, value,companyId, isAdmin, companyList) => {
   state.isAdmin = isAdmin
-  if(isAdmin){
+  const userInfo = JSON.parse(Cookies.get('userInfo'))
+  state.form.companyId = userInfo.companyId
+  if(state.isAdmin){
+    state.form.companyId = value.companyId
     state.companyList = companyList
   }
-  await getUserList()
-  await getDepartList(companyId)
   state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看'
-  state.form.companyId = companyId
   if(state.title == '编辑'||state.title == '查看'){
     Object.keys(state.form).forEach(key => {
       if (key in value) {
         state.form[key] = value[key]
       }
     })
-    await getInfo(value.id)
-
-    // if(value.filePath) {
-    //   const obj = {
-    //     url: value.filePath,
-    //     name: '模板文件'
-    //   }
-    //   state.fileList = [obj]
-    // }
   }
+  await getUserList()
+  await getDepartList(state.form.companyId)
+  await getCatalogList()
   dialogVisible.value = true
 }
 
+const getCatalogList = async() => {
+  state.menuOptions = [];
+  const param = {
+    type: 1,
+    number: 4
+  }
+  const res = await getCatalogue(param)
+  if(res.code == 200){
+    state.menuOptions =await handleTree(res.data.data);
+  }else{
+    ElMessage.warning(res.message)
+  }
+}
+const handleTree = (val) => {
+  const traverse = (nodes, currentPath = '') => {
+    nodes.forEach((node, index) => {
+      node.name = `${node.number} ${node.mess}`;
+      // 递归处理子节点(传递当前序号路径)
+      if (node.children && node.children.length) {
+        traverse(node.children, node.number);
+      }
+    });
+  };
+  traverse(val); // 从根节点开始遍历
+  return val;
+}
 
 const onSubmit = async () => {
   const valid = await superRef.value.validate();
   if(valid){
-    state.form.internalAuditCheckPeople = state.form.internalAuditCheckPeople.map(item=>{
-      return {
-        id: item.id || null,
-        auditUserId: item.userId,
-        companyId: item.companyId || null,
-        auditUserName: item.name
-      }
-    })
+    console.log('f',state.form)
     if(state.title == '新增'){
       const {id,...data} = state.form
       const res = await addInternalAuditCheck(data)
@@ -226,7 +340,7 @@
     state.form.internalAuditCheckPeople = res.data.internalAuditCheckPeople?.map(item=>{
       return {
         id: item.id,
-        auditId: item.auditId,
+        personId: item.personId,
         userId: item.auditUserId,
         name: item.auditUserName,
         companyId: item.companyId
@@ -239,15 +353,15 @@
 
 const getDeptList = async ()=>{
   state.form.deptId = null
-  state.form.internalAuditCheckPeople = []
-  state.form.auditId = null
-  state.form.caluseNum = ''
-  state.form.caluseContent = ''
+  state.form.personId = null
   await getDepartList(state.form.companyId)
   await getUserList()
 }
 
 const getDepartList = async (companyId)=> {
+  if(state.isAdmin && (companyId == 0 || companyId == null)){
+    return
+  }
   const params = {
     companyId: companyId
   }
@@ -260,7 +374,10 @@
 }
 
 const getUserList = async ()=> {
-  const res = await listUser({pageIndex: 1,pageSize: 999})
+  if(state.isAdmin && (state.form.companyId == 0 || state.form.companyId == null)){
+    return
+  }
+  const res = await getPersonPage({companyId: state.form.companyId,pageNum: 1,pageSize: 999})
   if(res.code == 200){
     state.userList = res.data.list?res.data.list.map(item=>{
       const user = item.id
@@ -271,7 +388,7 @@
       }
     }):[]
     if(state.form.deptId){
-      state.interUserList = state.userList.filter(i=>i.deptId !== state.form.deptId)
+      state.interUserList = state.userList.filter(i=>i.deptId == state.form.deptId)
     }else{
       state.interUserList = state.userList
     }
@@ -281,81 +398,77 @@
 }
 
 const getCaluses = async ()=>{
+  state.form.personId = null
   await getUserList()
-  const deptCaluses = state.deptList.find(i=>i.deptId == state.form.deptId)?.caluseVO1List
-  if(deptCaluses && Array.isArray(deptCaluses)){
-    state.form.caluseNum = deptCaluses.map(i=>i.clauseNum).join('、')
-    state.form.caluseContent = deptCaluses.map(i=>i.content).join(';\n')
-  }
 }
-// const handleAvatarSuccess = (res, uploadFile) => {
-//   if(res.code == 200){
-//     state.form.filePath = res.data.path
-//     state.form.format = '.' + res.data.filename.split('.')[1]
-//   }else{
-//     state.fileList = []
-//     ElMessage({
-//       type: 'warning',
-//       message: '文件上传失败'
-//     })
-//   }
-// }
-//
-// const showTip =()=>{
-//   ElMessage({
-//     type: 'warning',
-//     message: '超出文件上传数量'
-//   });
-// }
-// const picSize = async (rawFile) => {
-//   if(rawFile.size / 1024 / 1024 > 5){
-//     ElMessage({
-//       type: 'warning',
-//       message: '文件大小不能超过5M'
-//     });
-//     return false
-//   }
-// };
-// const handleRemove = async (file, uploadFiles) => {
-//   let path = state.form.filePath;
-//   await delPic({path: path}).then(res => {
-//     if(res.code == 200){
-//       // ElMessage({
-//       //   type: 'success',
-//       //   message: '文件已删除'
-//       // })
-//       state.form.filePath = ''
-//       state.form.format = ''
-//     }else{
-//       ElMessage({
-//         type: 'warning',
-//         message: res.message
-//       })
-//     }
-//   }).catch(() => {
-//     state.form.imgUrl = ''
-//   });
-// }
 
 const handleClose = () => {
   state.form = {
     id: null,
     deptId: null,
-    internalAuditCheckPeople:[],
-    auditId: null,
-    auditDate: '',
-    caluseNum: '',
-    caluseContent: '',
-    checkRecord: '',
-    inconsistent: '',
-    companyId: null
+    personId: null,
+    checkTime: '',
+    companyId: null,
+    checkCatalogues: []
   }
-  state.fileList = []
+
   superRef.value.clearValidate();
   superRef.value.resetFields()
   dialogVisible.value = false;
 }
+const addTableData = () => {
+  state.termForm = {
+    id: null,
+    mess: '',
+    number: ''
+  }
+  state.showDialog = true
+  // state.form.checkCatalogues.push({checkContents: [{}]})
+}
+const addObject = (val,itemIndex) => {
+  state.form.checkCatalogues.forEach((item,index) => {
+    if(index == itemIndex){
+      item.checkContents.push({})
+    }
+  })
+}
+const delObject = (val,itemIndex) => {
+  state.form.checkCatalogues.forEach((item,index) => {
+    if(index == itemIndex){
+      if(item.checkContents.length == 1){
+        state.form.checkCatalogues.splice(index,1)
+      }else {
+        item.checkContents.pop()
+      }
+    }
+  })
+}
+const handleCloseDialog = () => {
+  state.termForm = {
+    id: null,
+    mess: '',
+    number: ''
+  }
+  state.showDialog = false
+}
+const onSubmitTerm = async () =>{
+  const valid = await termRef.value.validate();
+  if(valid){
+    state.form.checkCatalogues.push({
+      checkContents: [{}],
+      catalogueId:state.termForm.id,
+      number: state.termForm.number,
+      mess: state.termForm.mess})
+    state.showDialog = false
+  }
 
+}
+const handleTreeSelect = (node) => {
+  state.termForm.id = node.id
+  state.termForm.number = node.number
+  state.termForm.mess = node.mess
+
+};
 defineExpose({
   openDialog
 });
@@ -372,5 +485,15 @@
     flex-direction: column;
     align-items: flex-start;
   }
+  :deep(.el-radio__label) {
+    display: none !important; /* !important提高优先级,确保生效 */
+  }
+  :deep(.el-form-item__content){
+    display: inline;
+  }
+  :deep(.el-cascader-menu__list) {
+    max-width: 400px !important;
+  }
+
 }
 </style>
diff --git a/src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue b/src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue
index 0206eb1..4f1f8a7 100644
--- a/src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue
+++ b/src/views/work/selfProblems/internalAudit/innerReviewSheet/index.vue
@@ -25,20 +25,27 @@
           <el-button v-if="isAdmin" type="primary" @click="getList">查询</el-button>
           <el-button v-if="isAdmin" type="primary" plain @click="reset">重置</el-button>
         </el-form-item>
+        <el-form-item style="margin-left: -20px">
+          <el-button
+              type="primary"
+              @click="exportData"
+          >导出</el-button>
+        </el-form-item>
       </el-form>
     </div>
     <!-- 表格数据 -->
-    <el-table v-loading="loading" :data="dataList" :border="true">
-      <el-table-column type="index" label="序号"></el-table-column>
+    <el-table v-loading="loading" :data="dataList" :border="true"  @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" />
+      <el-table-column type="index" align="center" label="序号" width="80"></el-table-column>
       <el-table-column label="检查表" align="center">
         <template #default="scope">
           {{scope.row.deptName }}内审检查表
         </template>
       </el-table-column>
+      <el-table-column label="受审核部门" prop="deptName" align="center"></el-table-column>
       <el-table-column label="操作" align="center">
         <template #default="scope">
           <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['innerReviewSheet:list:edit']">编辑</el-button>
-          <el-button link type="primary" @click="downloadFile(scope.row.id)">导出</el-button>
           <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['innerReviewSheet:list:del']">删除</el-button>
         </template>
       </el-table-column>
@@ -78,6 +85,7 @@
 const { proxy } = getCurrentInstance();
 const loading = ref(false);
 const dialogRef = ref();
+const choosedData = ref([])
 const data = reactive({
   queryParams: {
     pageNum: 1,
@@ -97,6 +105,7 @@
     data.isAdmin = true
     await getCompanyList()
   }else{
+
     data.isAdmin = false
     data.queryParams.companyId = userStore.companyId
   }
@@ -113,6 +122,7 @@
   if(res.code == 200){
     data.dataList = res.data.list || []
     data.total = res.data.total
+    console.log('x',data.dataList)
   }else{
     ElMessage.warning(res.message)
   }
@@ -132,71 +142,8 @@
     ElMessage.warning(res.message)
   }
 }
-
-const downloadFile = async (id)=>{
-  const res = await getInternalAuditCheckInfo({id: id})
-  if(res.code == 200){
-    if(res.data){
-      let tableData = res.data
-      tableData.content = res.data.caluseNum.split('、').map((i,index)=>i + res.data.caluseContent.split(';\n')[index]).join('\n')
-      tableData.interPeople = res.data.internalAuditCheckPeople.map(i=>i.auditUserName)
-      try {
-        generateWordDocument('/interCheck.docx', tableData, tableData.deptName +'内审检查表.docx');
-      } catch (error){
-        ElMessage({
-          type: 'warning',
-          message: '导出失败'
-        });
-      }
-    }else{
-      ElMessage.warning('暂无数据')
-    }
-  }else{
-    ElMessage.warning(res.message)
-  }
-}
-
-const openFile = async(path)=>{
-  const ext = path.split('.').pop().toLowerCase();
-  if (ext === 'doc') {
-    ElMessageBox.confirm('暂不支持线上预览.doc文件,是否下载查看?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' }).then(() => {
-      window.open(`${import.meta.env.VITE_APP_BASE_API}/${path}`, '_blank');
-    }).catch(() => {
-      console.log('取消预览')
-    });
-    return
-  }
-  try {
-    // 1. 获取文件
-    const response = await fetch(import.meta.env.VITE_APP_BASE_API + '/' + path);
-    const arrayBuffer = await response.arrayBuffer();
-    // 2. 创建新窗口
-    const win = window.open('', '_blank');
-    win.document.write(`
-      <!DOCTYPE html>
-      <html>
-        <head>
-          <title>预览</title>
-          <style>
-            body { margin: 20px; font-family: Arial; }
-            .docx-container { width: 100%; height: 100%; }
-          </style>
-        </head>
-        <body>
-          <div id="container" class="docx-container"></div>
-        </body>
-      </html>
-    `);
-    // 3. 渲染 DOCX
-    await renderAsync(arrayBuffer, win.document.getElementById('container'));
-
-  } catch (error) {
-    console.error('预览失败:', error);
-    alert(`预览失败: ${error.message}`);
-  }
-}
-
 const openDialog = (type, value) => {
+
   dialogRef.value.openDialog(type, value, data.queryParams.companyId, data.isAdmin, data.companyList);
 }
 
@@ -207,6 +154,7 @@
     pageSize: 10,
     companyId: null
   }
+  choosedData.value = []
   await getCompanyList()
   await getList()
 }
@@ -229,5 +177,44 @@
         }
       })
 }
+const handleSelectionChange = (val) => {
+  choosedData.value = val
+}
+const exportData = () => {
+  if(choosedData.value && choosedData.value.length === 0){
+    ElMessage.warning('请选择需要导出的数据')
+  }else {
+    startGeneration()
+  }
+}
+const templatePath = ref('')
+const startGeneration = async () => {
+  const data = JSON.parse(JSON.stringify(choosedData.value))
+  data.forEach(item => {
+    templatePath.value = '/innerReviewExport.docx'
+    item.tableData = item.checkCatalogues.map((i,index) => {
+      return{
+        ...i,
+        checkContents: i.checkContents.map((q,qindex) => {
+          return{
+            ...q,
+            first: qindex == 0,
+            well: q.result == 1,
+            fine: q.result == 2,
+            bad: q.result == 3,
+          }
+        })
+      }
+    })
+    try {
+      generateWordDocument(templatePath.value, item, item.deptName+'_内审检查表.docx');
+    } catch (error){
+      ElMessage({
+        type: 'warning',
+        message: '导出失败'
+      });
+    }
+  })
+}
 
 </script>

--
Gitblit v1.9.2