| | |
| | | v-hasPermi="['projectReview:add']" |
| | | >新增</el-button> |
| | | </el-form-item> |
| | | <el-form-item v-if="isAdmin" label="企业:" > |
| | | <el-form-item v-if="isAdmin" label="单位:" > |
| | | <el-select v-model="data.queryParams.companyId" placeholder="请选择" @change="changeCom" clearable> |
| | | <el-option |
| | | v-for="item in companyList" |
| | |
| | | <!-- </el-option>--> |
| | | <!-- </el-select>--> |
| | | |
| | | </el-form-item> |
| | | <el-form-item label="类型:"> |
| | | <el-select v-model="data.queryParams.type" filterable placeholder="请选择" |
| | | > |
| | | <el-option |
| | | v-for="item in data.typeList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item > |
| | | <el-button type="primary" @click="getList">查询</el-button> |
| | |
| | | import {delReview, getReviewPage, sendReview} from "@/api/selfProblems/projectReview"; |
| | | import axios from "axios"; |
| | | import {getToken} from "@/utils/auth"; |
| | | // import {generateWordDocument} from "@/views/build/conpanyFunctionConsult/digitalFileDep/manageType/qualityManual/components/exportDoc"; |
| | | import {generateWordDocument} from "@/utils/exportWord"; |
| | | import {imageUrlToBase64} from "@/utils/imageToBase"; |
| | | const userStore = useUserStore() |
| | | const { proxy } = getCurrentInstance(); |
| | | const loading = ref(false); |
| | |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | companyId: null, |
| | | itemName: null |
| | | itemName: null, |
| | | type:null |
| | | }, |
| | | total: 0, |
| | | dataList: [], |
| | | companyList: [], |
| | | industryList: [], |
| | | isAdmin: false, |
| | | typeList: [], |
| | | typeList: [ |
| | | { |
| | | id: 1, |
| | | name: '会签评审' |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: '会议评审' |
| | | }, |
| | | ], |
| | | exportDialog: false, |
| | | projectList: [], |
| | | |
| | |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | companyId: null, |
| | | itemId: null |
| | | itemId: null, |
| | | type:null |
| | | } |
| | | await getCompanyList() |
| | | }else { |
| | |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | companyId: data.queryParams.companyId, |
| | | itemId: null |
| | | itemId: null, |
| | | type:null |
| | | } |
| | | } |
| | | choosedData.value = [] |
| | |
| | | const openFile = async(path)=>{ |
| | | const ext = path.split('.').pop().toLowerCase(); |
| | | if (ext === 'doc') { |
| | | ElMessageBox.confirm('暂不支持线上预览.doc文件,是否下载查看?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' }).then(() => { |
| | | ElMessageBox.confirm('暂不支持线上预览.doc、.xls、.xlsx文件,是否下载查看?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' }).then(() => { |
| | | window.open(`${import.meta.env.VITE_APP_BASE_API}/${path}`, '_blank'); |
| | | }).catch(() => { |
| | | console.log('取消预览') |
| | |
| | | const templatePath = ref('/projectReviewExample.docx') |
| | | const startGeneration = async () => { |
| | | const data = JSON.parse(JSON.stringify(choosedData.value)) |
| | | data.forEach(item => { |
| | | item.leaderList = item.reviewUsers.filter(item => item.reviewType == '评审组长').map((x,index) => { |
| | | return { |
| | | ...x, |
| | | first: index === 0 |
| | | |
| | | } |
| | | }) |
| | | item.peopleList = item.reviewUsers.filter(item => item.reviewType == '评审组员').map((x,index) => { |
| | | return { |
| | | ...x, |
| | | first: index === 0 |
| | | for(const item of data){ |
| | | item.leaderList = await Promise.all( |
| | | item.reviewUsers |
| | | .filter(user => user.reviewType === '评审组长') |
| | | .map(async (x, index) => { |
| | | let signBase64 = ''; |
| | | if (x.sign != '') { |
| | | try { |
| | | const url = import.meta.env.VITE_APP_BASE_API + '/' + x.sign; |
| | | signBase64 = await imageUrlToBase64(url, { |
| | | format: 'png', |
| | | quality: 0.8 |
| | | }); |
| | | } catch (err) { |
| | | signBase64 = ''; |
| | | } |
| | | } |
| | | return { |
| | | ...x, |
| | | first: index === 0, |
| | | sign: signBase64 || '', |
| | | reviewOpinionName: x.reviewOpinion == 1 ? '同意':x.reviewOpinion == 2 ? '不同意':'', |
| | | reviewTime: x.reviewTime ?x.reviewTime: '' |
| | | }; |
| | | }) |
| | | ); |
| | | item.leaderAgre = item.leaderList.filter(item => item.reviewOpinion == 1) |
| | | |
| | | } |
| | | }) |
| | | item.leaderTime = item.leaderTime?.substring(0,10) |
| | | item.groupTime = item.groupTime?.substring(0,10) |
| | | console.log(' item.tableList', item.tableList) |
| | | // 2. 处理 peopleList:同样用 Promise.all 等待异步完成 |
| | | item.peopleList = await Promise.all( |
| | | item.reviewUsers |
| | | .filter(user => user.reviewType === '评审组员') |
| | | .map(async (x, index) => { |
| | | let signBase64 = ''; |
| | | if (x.sign != '') { |
| | | try { |
| | | const url = import.meta.env.VITE_APP_BASE_API + '/' + x.sign; |
| | | signBase64 = await imageUrlToBase64(url, { |
| | | format: 'png', |
| | | quality: 0.8 |
| | | }); |
| | | } catch (err) { |
| | | signBase64 = ''; |
| | | } |
| | | } |
| | | return { |
| | | ...x, |
| | | first: index === 0, |
| | | sign: signBase64 || '', |
| | | reviewOpinionName: x.reviewOpinion == 1 ? '同意':x.reviewOpinion == 2 ? '不同意':'', |
| | | reviewTime: x.reviewTime ?x.reviewTime: '' |
| | | }; |
| | | }) |
| | | ); |
| | | item.productItems = item.productItems.map(i => i.fileName) |
| | | |
| | | console.log('item.productItems', item.productItems) |
| | | try { |
| | | generateWordDocument(templatePath.value, item, item.itemName + `_项目审批表.docx`); |
| | | } catch (error){ |
| | | generateWordDocument(templatePath.value, item, item.itemName + `_${item.stage}审批表.docx`); |
| | | } catch (error) { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '导出失败' |
| | | }); |
| | | } |
| | | }) |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | const changeCom = () => { |
| | | getProjectList() |
| | | } |