From f94b96403234f5927e74f72fc0cbc65d7b426019 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期三, 10 十二月 2025 14:52:50 +0800
Subject: [PATCH] 修改
---
src/views/build/conpanyFunctionConsult/digitalFileDep/project/projectReview/index.vue | 191 +++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 173 insertions(+), 18 deletions(-)
diff --git a/src/views/build/conpanyFunctionConsult/digitalFileDep/project/projectReview/index.vue b/src/views/build/conpanyFunctionConsult/digitalFileDep/project/projectReview/index.vue
index b06120e..6517b6d 100644
--- a/src/views/build/conpanyFunctionConsult/digitalFileDep/project/projectReview/index.vue
+++ b/src/views/build/conpanyFunctionConsult/digitalFileDep/project/projectReview/index.vue
@@ -12,7 +12,7 @@
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"
@@ -38,28 +38,60 @@
<!-- </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>
<el-button type="primary" plain @click="reset">重置</el-button>
+ <el-form-item style="margin-left: 15px">
+ <el-button
+ type="primary"
+ @click="exportData"
+ >导出</el-button>
+ </el-form-item>
</el-form-item>
</el-form>
</div>
<!-- 表格数据 -->
- <el-table v-loading="loading" :data="dataList" :border="true">
+ <el-table v-loading="loading" :data="dataList" :border="true" @selection-change="handleSelectionChange">
+ <el-table-column type="selection" width="55" :selectable="isRowSelectable" />
<el-table-column label="序号" type="index" align="center" width="80"/>
- <el-table-column label="项目名称" prop="itemName" align="center" width="130" :show-overflow-tooltip="true" />
- <el-table-column label="文件编号" prop="num" align="center" />
- <el-table-column label="文件名称" prop="fileName" align="center" />
- <el-table-column label="文件" prop="fileName" align="center" >
+ <el-table-column label="项目名称" prop="itemName" align="center" :show-overflow-tooltip="true" />
+ <el-table-column label="设计和开发阶段" prop="stage" align="center" />
+ <el-table-column label="类型" prop="type" align="center" >
<template #default="scope">
- <el-link v-if="scope.row.fileName" style="" type="primary" @click="openFile(scope.row.filePath)">{{scope.row.fileName}}</el-link>
+ <span>{{scope.row.type == 1 ? '会签评审' :scope.row.type == 2? '会议评审' :'' }}</span>
</template>
</el-table-column>
- <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="userTpye == 0 || userTpye == 6">
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
- <el-button v-if="scope.row.filePath" link type="primary" @click="downloadFile(scope.row)" >下载</el-button>
- <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['projectReview:edit']">编辑</el-button>
- <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['projectReview:del']">删除</el-button>
+ <div v-if="scope.row.type == 2" style="display: flex;align-items: center;justify-content: center">
+ <el-button link type="primary" @click="downloadFile(scope.row)" v-hasPermi="['projectReview:edit']">下载</el-button>
+ <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['projectReview:edit']">编辑</el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['projectReview:del']">删除</el-button>
+ </div>
+ <div v-if="scope.row.type == 1" style="display: flex;align-items: center;justify-content: center">
+ <!--没发送之前-->
+ <div v-if="scope.row.status ==1" style="display: flex;align-items: center;justify-content: center">
+ <el-button link type="primary" @click="sendReviewMsg(scope.row)" v-hasPermi="['projectReview:send']">发送</el-button>
+ <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['projectReview:edit']">编辑</el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['projectReview:del']">删除</el-button>
+ </div>
+ <!--发送之后-->
+ <div v-if="scope.row.status == 2" style="display: flex;align-items: center;justify-content: center">
+ <el-button link type="primary" @click="openDialog('view',scope.row)">查看</el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)" v-if="userTpye == 0" v-hasPermi="['projectReview:del']">删除</el-button>
+ </div>
+ </div>
</template>
</el-table-column>
</el-table>
@@ -85,27 +117,40 @@
import Cookies from "js-cookie";
import {renderAsync} from "docx-preview";
import {get} from "@vueuse/core";
-import {delReview, getReviewPage} from "@/api/selfProblems/projectReview";
+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);
const dialogRef = ref();
-
+const choosedData = ref([])
const data = reactive({
queryParams: {
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: [],
@@ -179,7 +224,8 @@
pageNum: 1,
pageSize: 10,
companyId: null,
- itemId: null
+ itemId: null,
+ type:null
}
await getCompanyList()
}else {
@@ -187,9 +233,11 @@
pageNum: 1,
pageSize: 10,
companyId: data.queryParams.companyId,
- itemId: null
+ itemId: null,
+ type:null
}
}
+ choosedData.value = []
await getList()
await getProjectList()
}
@@ -216,7 +264,7 @@
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('取消预览')
@@ -275,7 +323,114 @@
}
})
}
+const sendReviewMsg = (val) =>{
+ ElMessageBox.confirm(
+ '确定发送审核此条数据?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await sendReview(val.id)
+ if(res.code == 200){
+ ElMessage.success('数据发送成功')
+ await getList()
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+const handleSelectionChange = (val) => {
+ choosedData.value = val
+}
+const exportData = () => {
+ if(choosedData.value && choosedData.value.length === 0){
+ ElMessage.warning('请选择需要导出的数据')
+ }else {
+ startGeneration()
+ }
+}
+const templatePath = ref('/projectReviewExample.docx')
+const startGeneration = async () => {
+ const data = JSON.parse(JSON.stringify(choosedData.value))
+
+ 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)
+
+ // 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 + `_${item.stage}审批表.docx`);
+ } catch (error) {
+ ElMessage({
+ type: 'warning',
+ message: '导出失败'
+ });
+ }
+
+
+ }
+}
+
+
const changeCom = () => {
getProjectList()
}
+const isRowSelectable = (row) => {
+ return row.type !== 2;
+}
</script>
--
Gitblit v1.9.2