zhouwx
6 天以前 f94b96403234f5927e74f72fc0cbc65d7b426019
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"
@@ -37,6 +37,17 @@
<!--            </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>
@@ -109,7 +120,9 @@
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);
@@ -120,14 +133,24 @@
    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: [],
@@ -201,7 +224,8 @@
      pageNum: 1,
      pageSize: 10,
      companyId: null,
      itemId: null
      itemId: null,
      type:null
    }
    await getCompanyList()
  }else {
@@ -209,7 +233,8 @@
      pageNum: 1,
      pageSize: 10,
      companyId: data.queryParams.companyId,
      itemId: null
      itemId: null,
      type:null
    }
  }
  choosedData.value = []
@@ -239,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('取消预览')
@@ -330,34 +355,78 @@
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()
}