<template>
|
<div class="app-container">
|
<div style="display: flex;justify-content: space-between">
|
<el-form :inline="true" style="display: flex;align-items: center;flex-wrap: wrap;" >
|
<!-- <el-form-item>-->
|
<!-- <el-button-->
|
<!-- type="primary"-->
|
<!-- plain-->
|
<!-- icon="Plus"-->
|
<!-- @click="openDialog('add',{})"-->
|
<!-- >新增</el-button>-->
|
<!-- </el-form-item>-->
|
<el-form-item v-if="isAdmin" label="企业:" >
|
<el-select v-model="data.queryParams.companyId" placeholder="请选择" clearable>
|
<el-option
|
v-for="item in companyList"
|
:key="item.id"
|
:label="item.name"
|
:value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item >
|
<el-button v-if="isAdmin" type="primary" @click="getList">查询</el-button>
|
<el-button v-if="isAdmin" type="primary" plain @click="reset">重置</el-button>
|
<el-button type="primary" @click="addFile">生成质量手册</el-button>
|
</el-form-item>
|
</el-form>
|
</div>
|
<!-- 表格数据 -->
|
<el-table v-loading="loading" :data="dataList" :border="true">
|
<el-table-column label="序号" type="index" align="center" width="80"/>
|
<el-table-column label="质量手册" prop="fileName" align="center">
|
<template #default="scope">
|
<el-button link type="primary" @click="initFile(scope.row.companyName)">{{scope.row.companyName + scope.row.qualityName + '.docx'}}</el-button>
|
</template>
|
</el-table-column>
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
<template #default="scope">
|
<!-- <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button>-->
|
<el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
|
<pagination
|
v-show="total > 0"
|
:total="total"
|
v-model:page="queryParams.pageNum"
|
v-model:limit="queryParams.pageSize"
|
@pagination="getList"
|
/>
|
|
<edit-dialog ref="dialogRef" @getList=getList></edit-dialog>
|
</div>
|
</template>
|
|
<script setup>
|
import {getCurrentInstance, onMounted, onUnmounted, reactive, ref, toRefs} from "vue";
|
import {ElMessage, ElMessageBox} from "element-plus";
|
import {delCompany, getCompany} from "@/api/onlineEducation/company";
|
import {delUser, getUser} from "@/api/onlineEducation/user";
|
import Cookies from "js-cookie";
|
import editDialog from './components/editDialog.vue'
|
import {generateWordDocument} from './components/exportDoc.js'
|
|
|
import {
|
addIndustryTemp,
|
delIndustryTemp,
|
getIndustryTemp,
|
} from "@/api/staffManage/staff";
|
import useUserStore from "@/store/modules/user";
|
import {
|
addStandardQuality,
|
delStandardQuality,
|
getStandardDetail,
|
getStandardQuality
|
} from "@/api/standardSys/standardSys";
|
import {getBasic} from "@/api/companyInfo/basicInfo";
|
import {getCom} from "@/api/companyInfo/overview";
|
|
const userStore = useUserStore()
|
const { proxy } = getCurrentInstance();
|
const loading = ref(false);
|
const dialogRef = ref();
|
const data = reactive({
|
queryParams: {
|
pageNum: 1,
|
pageSize: 10,
|
companyId: null
|
},
|
total: 0,
|
dataList: [],
|
companyList: [],
|
isAdmin: false,
|
companyInfo: {
|
summaries: '',
|
policies: '',
|
deptList: [],
|
duties: [],
|
temps: []
|
},
|
caluseList: [
|
{clauseNum: '4', content: '组织环境'},
|
{clauseNum: '4.1', content: '理解组织及其环境',manage: true,represent: false},
|
{clauseNum: '4.2', content: '理解相关方的需求和期望',manage: true,represent: false},
|
{clauseNum: '4.3', content: '确定质量管理体系的范围',manage: false,represent: true},
|
{clauseNum: '4.4', content: '质量管理体系及其过程',manage: false,represent: true},
|
{clauseNum: '5', content: '领导作用'},
|
{clauseNum: '5.1', content: '领导作用和承诺',manage: true,represent: false},
|
{clauseNum: '5.2', content: '方针',manage: true,represent: false},
|
{clauseNum: '5.3', content: '组织内的角色、职责和权限',manage: true,represent: false},
|
{clauseNum: '6', content: ''},
|
{clauseNum: '6.1', content: '应对风险和机遇的措施',manage: true,represent: false},
|
{clauseNum: '6.2', content: '质量目标及其实现的策划',manage: false,represent: true},
|
{clauseNum: '6.3', content: '变更的策划',manage: false,represent: true},
|
{clauseNum: '7', content: '支持'},
|
{clauseNum: '7.1', content: '资源',manage: true,represent: false},
|
{clauseNum: '7.1.1', content: '总则',manage: true,represent: false},
|
{clauseNum: '7.1.2', content: '人员',manage: true,represent: false},
|
{clauseNum: '7.1.3', content: '基础设施',manage: false,represent: true},
|
{clauseNum: '7.1.4', content: '过程运行环境',manage: false,represent: true},
|
{clauseNum: '7.1.5', content: '监视和测量资源',manage: false,represent: true},
|
{clauseNum: '7.1.6', content: '组织的知识',manage: false,represent: true}
|
]
|
});
|
|
const { queryParams, total, dataList,companyList, isAdmin } = toRefs(data);
|
const userInfo = ref()
|
onMounted(async ()=>{
|
if(userStore.roles.includes('admin')){
|
data.isAdmin = true
|
await getCompanyList()
|
}else{
|
data.isAdmin = false
|
data.queryParams.companyId = userStore.companyId
|
}
|
await getList()
|
})
|
|
onUnmounted(()=>{
|
|
})
|
|
const getList = async () => {
|
loading.value = true
|
const res = await getStandardQuality(data.queryParams)
|
if(res.code == 200){
|
data.dataList = res.data.data || []
|
data.total = res.data.total
|
}else{
|
ElMessage.warning(res.message)
|
}
|
loading.value = false
|
}
|
|
const addFile = async ()=>{
|
let params={}
|
if(data.queryParams.companyId){
|
params = {
|
qualityName: '质量手册',
|
companyId: data.queryParams.companyId
|
}
|
}else{
|
ElMessage.warning('请先选择对应的企业')
|
return
|
}
|
const res = await addStandardQuality(params)
|
if(res.code == 200){
|
ElMessage.success(res.message)
|
await getList()
|
}else{
|
ElMessage.warning(res.message)
|
}
|
}
|
|
const getCompanyList = async ()=>{
|
const queryParams = {
|
pageNum: 1,
|
pageSize: 999
|
}
|
const res = await getCompany(queryParams)
|
if (res.code == 200) {
|
data.companyList = res.data.list?res.data.list:[]
|
// data.queryParams.companyId = data.companyList[0].id
|
} else {
|
ElMessage.warning(res.message)
|
}
|
}
|
|
const getInfo = async () => {
|
loading.value = true;
|
if(!data.queryParams.companyId){
|
ElMessage.warning('请选择企业')
|
}
|
const res = await getStandardDetail({companyId: data.queryParams.companyId});
|
if(res.code === 200){
|
data.companyInfo.summaries = res.data.companySummaries[0].companySummary
|
data.companyInfo.policies = res.data.companyQualityPolicies[0].policy
|
data.companyInfo.deptList = res.data.treeSelects
|
data.companyInfo.duties = transformDuties(res.data.sysFunctionalDistributions)
|
data.companyInfo.temps = res.data.companyIndustryTemplates?.map((item,index)=>{
|
return {
|
index: index + 1,
|
templateName: item.templateName
|
}
|
})
|
}else{
|
ElMessage.warning(res.message)
|
}
|
loading.value = false;
|
|
}
|
|
const transformDuties=(duties)=>{
|
let tableData = []
|
for(let item of duties){
|
const index = tableData.findIndex(i=>i.deptId == item.deptId)
|
if(index == -1){
|
const obj = {
|
deptName: item.deptName,
|
deptId: item.deptId
|
}
|
obj[item.clauseNum] = item.chooseLab==1?'●':'○'
|
tableData.push(obj)
|
}else{
|
tableData[index][item.clauseNum] = item.chooseLab==1?'●':'○'
|
}
|
}
|
console.log(tableData,'table1')
|
tableData = tableData.map(j=>{
|
for(let i of data.caluseList){
|
if(!j.hasOwnProperty(i.clauseNum)){
|
j[i.clauseNum] = '○'
|
}
|
}
|
return j
|
})
|
console.log(tableData,'table2')
|
return tableData
|
}
|
|
const initFile = async (name) => {
|
await getInfo()
|
const templatePath = '/qualityFile.docx'
|
try {
|
await generateWordDocument(
|
templatePath,
|
data.companyInfo,
|
name+'质量手册.docx'
|
);
|
ElMessage.success('手册导出成功!');
|
} catch (error) {
|
console.error('导出失败:', error);
|
ElMessage.warning('手册导出失败');
|
}
|
}
|
|
const openDialog = (type, value) => {
|
dialogRef.value.openDialog(type, value, data.queryParams.companyId, data.isAdmin, data.companyList);
|
}
|
|
/** 重置新增的表单以及其他数据 */
|
const reset= async()=> {
|
data.queryParams = {
|
pageNum: 1,
|
pageSize: 10,
|
companyId: null
|
}
|
await getCompanyList()
|
await getList()
|
}
|
const handleDelete = (val) => {
|
ElMessageBox.confirm(
|
'确定删除此条数据?',
|
'提示',
|
{
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning',
|
})
|
.then( async() => {
|
const res = await delStandardQuality({standardizedQualityId: val.id})
|
if(res.code == 200){
|
ElMessage.success('数据删除成功')
|
await getList()
|
}else{
|
ElMessage.warning(res.message)
|
}
|
})
|
}
|
|
</script>
|