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