Crunchy
2025-04-29 e5454b769d44a34af423bf87ac8a740bf8c20341
src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue
@@ -2,44 +2,50 @@
  <!--  7.7质量监控计划-->
  <div class="app-container">
    <div class="table-card">
      <div style="display: flex;justify-content: space-between;">
        <el-form :model="yearForm" ref="yearForm" size="small" :inline="true">
          <el-form-item label="计划名称" prop="monitorName">
      <div style="display: flex;justify-content: space-between">
        <div style="display: flex;">
          <div style="margin-bottom: 18px;margin-right: 10px;display: flex;align-items: center;line-height: 32px;">
            <span style="width: 88px;font-size: 14px;font-weight: 700;color: #606266;">计划名称</span>
            <el-input size="small" placeholder="请输入" clearable v-model="yearForm.monitorName"
              @keyup.enter.native="getYearPlanList"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button icon="el-icon-refresh" size="mini" @click="clearYear">重 置</el-button>
            <el-button type="primary" icon="el-icon-search" size="mini" @click="getYearPlanList">查 询</el-button>
          </el-form-item>
        </el-form>
        <div>
                      @keyup.enter.native="getYearPlanList"></el-input>
          </div>
          <div style="line-height: 30px;">
            <el-button type="primary" size="mini" @click="getYearPlanList">查询</el-button>
            <el-button size="mini" @click="clearYear">重置</el-button>
          </div>
        </div>
        <div style="line-height: 30px;">
          <el-button size="small" type="primary" @click="leadInto">导入</el-button>
        </div>
      </div>
      <lims-table :tableData="yearTableData" :column="yearColumnData" :page="yearPage" :tableLoading="yearLoading"
        height="40vh" @pagination="pagination" :rowClick="rowClick" key="yearTableData"></lims-table>
                  :height="'calc(100vh - 34em)'" @pagination="pagination" :rowClick="rowClick" key="yearTableData"></lims-table>
    </div>
    <div style="margin-top: 20px">
      <div style="display: flex;justify-content: space-between;">
        <el-form :model="yearDetailForm" ref="yearDetailForm" size="small" :inline="true">
          <el-form-item label="监控目的" prop="monitorPurpose">
            <el-input v-model="yearDetailForm.monitorPurpose" placeholder="请输入" size="small"></el-input>
          </el-form-item>
          <el-form-item label="监控项目" prop="monitorProject">
            <el-input v-model="yearDetailForm.monitorProject" placeholder="请输入" size="small"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button icon="el-icon-refresh" size="mini" @click="clearDetail">重 置</el-button>
            <el-button type="primary" icon="el-icon-search" size="mini" @click="getYearDetailPlanList">查 询</el-button>
          </el-form-item>
        </el-form>
        <div>
      <div style="display: flex;justify-content: space-between">
        <div style="display: flex;">
          <div style="margin-bottom: 18px;margin-right: 10px;display: flex;align-items: center;line-height: 32px;">
            <span style="width: 88px;font-size: 14px;font-weight: 700;color: #606266;">监控目的</span>
            <el-input v-model="yearDetailForm.monitorPurpose" placeholder="请输入" size="small"
                      @keyup.enter.native="getYearDetailPlanList"></el-input>
          </div>
          <div style="margin-bottom: 18px;margin-right: 10px;display: flex;align-items: center;line-height: 32px;">
            <span style="width: 88px;font-size: 14px;font-weight: 700;color: #606266;">监控项目</span>
            <el-input v-model="yearDetailForm.monitorProject" placeholder="请输入" size="small"
                      @keyup.enter.native="getYearDetailPlanList"></el-input>
          </div>
          <div style="line-height: 30px;">
            <el-button type="primary" size="mini" @click="getYearDetailPlanList">查询</el-button>
            <el-button size="mini" @click="clearDetail">重置</el-button>
          </div>
        </div>
        <div style="line-height: 30px;">
          <el-button size="small" type="primary" @click="exportSignatureTemplate">导出签名模板</el-button>
          <el-button size="small" type="primary" @click="showDialog('add')">新增</el-button>
        </div>
      </div>
      <lims-table :tableData="yearDetailTableData" :column="yearDetailColumnData" :page="yearDetailPage"
        :tableLoading="yearDetailLoading" height="40vh" @pagination="pagination1"
        :tableLoading="yearDetailLoading" :height="'calc(100vh - 34em)'" @pagination="pagination1" ref="yearDetailTableData"
        key="yearDetailTableData"></lims-table>
    </div>
    <!--新增修改弹框-->
@@ -47,7 +53,7 @@
      @closeDia="closeDia"></detail-form-dialog>
    <!--实施流程弹框-->
    <carry-out-dialog v-if="carryOutDia" ref="carryOutDia" :qualityMonitorId="qualityMonitorId"
      @closeDia="closeCarryOutDia"></carry-out-dialog>
      @closeCarryOutDia="closeCarryOutDia"></carry-out-dialog>
    <!--评价流程弹框-->
    <evaluate-dialog v-if="evaluateDialog" ref="evaluateDialog" @closeEvaDia="closeEvaDia"></evaluate-dialog>
    <el-dialog :visible.sync="examineDialog" title="审核" width="30%" @close="closeExamineDia">
@@ -97,9 +103,11 @@
    </el-dialog>
    <el-dialog :visible.sync="downloadDialog" title="导出" width="600px">
      <span>
        <el-button plain type="primary" :disabled="!download.qualityMonitorDetailsId"
        <el-button plain type="primary" :disabled="download.detailsRatifyStatus !== 3"
          @click="controlDown">实施计划导出</el-button>
        <el-button plain type="primary" :disabled="!download.qualityMonitorDetailsId"
        <el-button plain type="primary" :disabled="!download.finishReportUrl"
                           @click="finishReportExport">完成报告导出</el-button>
        <el-button plain type="primary" :disabled="download.evaluateStatus !== 3"
          @click="processingDown">评价导出</el-button>
      </span>
      <span slot="footer" class="dialog-footer">
@@ -156,6 +164,7 @@
        <el-button :loading="uploading1" type="primary" @click="submitUpload1()">上 传</el-button>
      </span>
    </el-dialog>
    <view-record v-if="ViewRecord" ref="ViewRecord"></view-record>
  </div>
</template>
@@ -174,14 +183,16 @@
} from "@/api/cnas/process/ensureResults/qualityMonitor";
import { selectUserCondition } from "@/api/performance/class";
import { mapGetters } from "vuex";
import ViewRecord from "./components/ViewRecord.vue";
export default {
  name: 'EnsureResultsValidity',
  // import 引入的组件需要注入到对象中才能使用
  components: { limsTable, filePreview, EvaluateDialog, CarryOutDialog, DetailFormDialog },
  components: {ViewRecord, limsTable, filePreview, EvaluateDialog, CarryOutDialog, DetailFormDialog },
  data() {
    // 这里存放数据
    return {
      ViewRecord: false,
      examineUserId: '',
      responsibleOptions: [],
      yearForm: {
@@ -196,20 +207,20 @@
        {
          label: '计划名称',
          prop: 'monitorName',
          minWidth: '150px'
          width: '150px'
        }, {
          label: '编制人',
          prop: 'writeName',
          minWidth: '100'
          width: '100'
        }, {
          label: '编制日期',
          prop: 'writeTime',
          minWidth: '160'
          width: '160'
        }, {
          dataType: 'tag',
          label: '审核状态',
          prop: 'examineStatus',
          minWidth: '100',
          width: '100',
          formatData: (params) => {
            if (params === 0) {
              return '不通过';
@@ -231,20 +242,20 @@
        }, {
          label: '审核内容',
          prop: 'examineRemark',
          minWidth: '100'
          width: '100'
        }, {
          label: '审核人',
          prop: 'examineName',
          minWidth: '100'
          width: '100'
        }, {
          label: '审核日期',
          prop: 'examineTime',
          minWidth: '160'
          width: '160'
        }, {
          dataType: 'tag',
          label: '批准状态',
          prop: 'ratifyStatus',
          minWidth: '100',
          width: '100',
          formatData: (params) => {
            if (params === 0) {
              return '不批准';
@@ -266,18 +277,17 @@
        }, {
          label: '批准内容',
          prop: 'ratifyRemark',
          minWidth: '100'
          width: '100'
        }, {
          label: '批准人',
          prop: 'ratifyName',
          minWidth: '100'
          width: '100'
        }, {
          label: '批准日期',
          prop: 'ratifyTime',
          minWidth: '160'
          width: '160'
        }, {
          dataType: 'action',
          minWidth: '190',
          label: '操作',
          fixed: 'right',
          operation: [
@@ -355,30 +365,122 @@
        }, {
          label: '计划开展时间',
          prop: 'plannedTime',
          minWidth: '150px'
          width: '150px'
        }, {
          label: '监控项目',
          prop: 'monitorProject',
          minWidth: '150px'
          width: '150px'
        }, {
          label: '参加单位(人员)',
          prop: 'participant',
          minWidth: '150px'
          width: '190px'
        }, {
          label: '预算(元)',
          prop: 'budget',
          minWidth: '150px'
          width: '150px'
        }, {
          label: '组织人员',
          prop: 'organization',
          minWidth: '150px'
          width: '150px'
        }, {
          label: '监控方式',
          prop: 'monitorWay',
          minWidth: '150px'
          width: '150px'
        },{
          dataType: 'tag',
          label: '实施状态',
          prop: 'detailsRatifyStatus',
          width: '100',
          formatData: (params) => {
            if (params === 0) {
              return '未开始';
            } else if (params === 1) {
              return '待评价';
            }  else if (params === 2) {
              return '不批准';
            } else if (params === 3) {
              return '已批准';
            } else {
              return null;
            }
          },
          formatType: (params) => {
            if (params === 0) {
              return '';
            } else if (params === 1) {
              return 'warning';
            } else if (params === 2) {
              return 'danger';
            }  else if (params === 3) {
              return 'success';
            } else {
              return null;
            }
          }
        },{
          dataType: 'tag',
          label: '报告状态',
          prop: 'reportStatus',
          width: '100',
          formatData: (params) => {
            if (params === 0) {
              return '未开始';
            } else if (params === 1) {
              return '待评价';
            }  else if (params === 2) {
              return '不批准';
            } else if (params === 3) {
              return '已批准';
            } else {
              return null;
            }
          },
          formatType: (params) => {
            if (params === 0) {
              return '';
            } else if (params === 1) {
              return 'warning';
            } else if (params === 2) {
              return 'danger';
            }  else if (params === 3) {
              return 'success';
            } else {
              return null;
            }
          }
        },{
          dataType: 'tag',
          label: '评价状态',
          prop: 'evaluateStatus',
          width: '100',
          formatData: (params) => {
            if (params === 0) {
              return '未开始';
            } else if (params === 1) {
              return '待评价';
            }  else if (params === 2) {
              return '待批准';
            } else if (params === 3) {
              return '已批准';
            } else {
              return null;
            }
          },
          formatType: (params) => {
            if (params === 0) {
              return '';
            } else if (params === 1) {
              return 'warning';
            } else if (params === 2) {
              return 'info';
            }  else if (params === 3) {
              return 'success';
            } else {
              return null;
            }
          }
        }, {
          dataType: 'action',
          width: '280',
          label: '操作',
          fixed: 'right',
          operation: [
@@ -408,6 +510,13 @@
              type: 'text',
              clickFun: (row) => {
                this.evaluate(row)
              }
            },
            {
              name: '附件上传',
              type: 'text',
              clickFun: (row) => {
                this.viewTestRecord(row)
              }
            },
            {
@@ -661,6 +770,7 @@
        this.yearDetailLoading = false
        this.yearDetailTableData = res.data.records
        this.yearDetailPage.total = res.data.total
        this.$refs.yearDetailTableData.$refs.multipleTable.doLayout()
      }).catch(err => {
        console.log('err---', err);
        this.yearDetailLoading = false
@@ -743,6 +853,13 @@
      this.evaluateDialog = false
      this.getYearDetailPlanList()
    },
    // 附件上传
    viewTestRecord (row) {
      this.ViewRecord = true
      this.$nextTick(() => {
        this.$refs.ViewRecord.openDia(row)
      })
    },
    // 打开导出弹框
    downLoadPost(row) {
      this.downloadDialog = true
@@ -766,6 +883,15 @@
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '质量监控实施计划.docx')
      })
    },
    // 完成报告导出
    finishReportExport() {
      let url = this.download.finishReportUrl;
      const link = document.createElement('a');
      link.href = this.javaApi +'/word/' + url;
      link.target = '_blank';
      document.body.appendChild(link);
      link.click();
    },
    // 处理单导出
    processingDown() {
@@ -797,6 +923,14 @@
      selectUserCondition().then((res) => {
        this.responsibleOptions = res.data;
      })
    },
    exportSignatureTemplate() {
      let url = '质量监控记录签名模板.docx';
      const link = document.createElement('a');
      link.href = this.javaApi +'/word/' + url;
      link.target = '_blank';
      document.body.appendChild(link);
      link.click();
    }
  },
  // 用于上传文件的信息