licp
2024-12-20 1a09e4c1f2eef787ed9e5826f16a587185e364b1
完成7.8报告结果搬迁
已修改1个文件
已添加1个文件
442 ■■■■■ 文件已修改
src/assets/api/controller.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/a7-report-results.vue 431 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js
@@ -61,6 +61,7 @@
    processEvaluate,
    qualityMonitor,
    measuresAddressRisksOpportunities,
    processReport,
  }
}
@@ -805,4 +806,14 @@
  removeRiskFactors: "/manageRiskAssessmentResults/removeRiskFactors", // å±é™©å› ç´ è¾¨è¯†ä¸Žé£Žé™©è¯„价结果一览 åˆ é™¤
  exportHazardFactorIdentification: "/manageRiskAssessmentResults/exportHazardFactorIdentification", // å±é™©å› ç´ è¾¨è¯†ä¸Žé£Žé™©è¯„价结果一览 å¯¼å‡º
  exportSignificantRiskFactors: "/manageControlPlanList/exportSignificantRiskFactors", // é‡å¤§é£Žé™©å› ç´ åˆ†æžåŠæŽ§åˆ¶è®¡åˆ’清单 å¯¼å‡º
}
// 7.8报告结果
const processReport = {
  pageProcessReport:'/processReport/pageProcessReport',// åˆ†é¡µ
  addProcessReport:'/processReport/addProcessReport',//新增
  delProcessReport:'/processReport/delProcessReport',//删除
  getProcessReport:'/processReport/getProcessReport',//查看
  doProcessReport:'/processReport/doProcessReport',//修改
  exportProcessReport:'/processReport/exportProcessReport',//导出
}
src/components/view/a7-report-results.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,431 @@
<template>
  <div class="report-results">
    <el-row class="title">
      <el-col :span="12" style="padding-left: 20px;text-align: left;">报告结果</el-col>
      <el-col :span="12" style="text-align: right;">
        <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower">导出</el-button>
        <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">新增</el-button>
      </el-col>
    </el-row>
    <div class="search">
      <div class="search_thing">
        <div class="search_label">检验报告编号:</div>
        <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="componentData.entity.insReportCode"
            @keyup.enter.native="refreshTable()"></el-input></div>
      </div>
      <!-- <div class="search_thing">
        <div class="search_label">发送人:</div>
        <div class="search_input">
          <el-input size="small" placeholder="请输入" clearable v-model="componentData.entity.sendUserName"
            @keyup.enter.native="refreshTable()"></el-input>
        </div>
      </div> -->
      <div class="search_thing" style="padding-left: 30px;">
        <el-button size="small" @click="refresh()">重 ç½®</el-button>
        <el-button size="small" type="primary" @click="refreshTable()">查 è¯¢</el-button>
      </div>
    </div>
    <div class="table">
      <ValueTable ref="ValueTable" :url="$api.processReport.pageProcessReport"
        :delUrl="$api.processReport.delProcessReport"
        :componentData="componentData" :key="upIndex"/>
    </div>
    <el-dialog
      :title="title"
      :visible.sync="addDialogVisible"
      width="400px" top="6vh">
      <el-row>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">检验报告编号:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="addInfo.insReportCode"></el-input></div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">页数:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="addInfo.pages"></el-input></div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">发送份数:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="addInfo.number"></el-input></div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">发往何处:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="addInfo.send"></el-input></div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">发送方式:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="addInfo.method"></el-input></div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">发送日期:</div>
            <div class="search_input">
              <el-date-picker
                v-model="addInfo.sendTime"
                type="date"
                size="small"
                placeholder="选择日期"
                format="yyyy-MM-dd"
                value-format="yyyy-MM-dd" style="width: 100%;">
              </el-date-picker>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">发送人:</div>
            <div class="search_input">
              <el-select v-model="addInfo.sendUser" placeholder="请选择" size="small" style="width: 100%;">
                <el-option
                  v-for="item in personList"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                </el-option>
              </el-select>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">签收人:</div>
            <div class="search_input">
              <el-select v-model="addInfo.signatory" placeholder="请选择" size="small" style="width: 100%;" multiple>
                <el-option
                  v-for="item in personList"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                </el-option>
              </el-select>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">备注:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="addInfo.remark" type="textarea"
              :rows="2"></el-input></div>
          </div>
        </el-col>
      </el-row>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addDialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="handleAdd" :loading="addLoading">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <!-- html导出为word,样子太丑了,代码先放着吧 -->
    <!-- <div style="position: fixed;top: 0;width: 1050px;height: 80vh;overflow-y: auto;z-index: 0;opacity: 0;">
      <div ref="content">
        <h4 style="display: flex;align-items: center;flex-direction: column;justify-content: center;">
          <span style="font-size: 20px;">检验报告发放登记表</span>
          <span>Registration form for the issuance of inspection reports</span>
        </h4>
        <table border="1" class="tables" cellpadding="10">
          <tr>
            <td>
              <p>序号</p>
              <p class="en">No.</p>
            </td>
            <td>
              <p>检验报告编号</p>
              <p class="en">Inspection report number</p>
            </td>
            <td>
              <p>页数</p>
              <p class="en">Pages</p>
            </td>
            <td>
              <p>发送份数</p>
              <p class="en">Number of copies sent</p>
            </td>
            <td>
              <p>发往何处</p>
              <p class="en">Where to send to</p>
            </td>
            <td>
              <p>发送方式</p>
              <p class="en">Send method</p>
            </td>
            <td>
              <p>发送日期</p>
              <p class="en">Date sent</p>
            </td>
            <td>
              <p>发送人</p>
              <p class="en">Sender</p>
            </td>
            <td>
              <p>签收人</p>
              <p class="en">Signatory</p>
            </td>
            <td>
              <p>备注</p>
              <p class="en">Remark</p>
            </td>
          </tr>
          <tr v-for="(item,index) in mutilSelect" :key="index">
            <td>{{ index+1 }}</td>
            <td>{{ item.insReportCode }}</td>
            <td>{{ item.pages }}</td>
            <td>{{ item.number }}</td>
            <td>{{ item.send }}</td>
            <td>{{ item.method }}</td>
            <td>{{ item.sendTime }}</td>
            <td>{{ item.sendUserName }}</td>
            <td>
              <img :src="javaApi+'/img/'+item.signatoryUrl" :alt="item.signatory" style="width: 100px;">
            </td>
            <td>{{ item.remark }}</td>
          </tr>
        </table>
      </div>
    </div> -->
  </div>
</template>
<script>
import ValueTable from '../tool/value-table.vue'
export default {
  components: {
    ValueTable
  },
  data() {
    return {
      outLoading:false,
      addPower:true,
      outPower:true,
      componentData: {
        entity: {
          insReportCode: null,
          // sendUserName: null,
          orderBy: {
            field: 'createTime',
            order: 'desc'
          }
        },
        isIndex: true,
        showSelect: true,
        select: true,
        selectMethod: 'handleChangeTask',
        do: [{
          id: 'delete',
          font: '删除',
          type: 'text',
          method: 'doDiy'
        }, {
          id: 'handleWork',
          font: '修改',
          type: 'text',
          method: 'handleWork'
        }],
        tagField: {},
        selectField: {
          sendUser:{
            select: []
          },
          signatory:{
            select: []
          },
        },
        // addUpload:['signatoryUrl'],
        requiredAdd: [],
        requiredUp: [],
        needSort: [],
        inputType: ''
      },
      entityCopy: {},
      upIndex: 0,
      personList:[],
      title:'新增',
      addDialogVisible:false,
      addInfo:{
        signatory:[]
      },
      addLoading:false,
      mutilSelect:[]
    }
  },
  mounted() {
    this.entityCopy = this.HaveJson(this.componentData.entity);
    this.getPower()
    this.getAuthorizedPerson()
  },
  methods: {
    getPower(){
      let power = JSON.parse(sessionStorage.getItem('power'))
      let up = false
      let del = false
      let add = false
      let out = false
      for (var i = 0; i < power.length; i++) {
        if (power[i].menuMethod == 'doProcessReport') {
          up = true
        }
        if (power[i].menuMethod == 'addProcessReport') {
          add = true
        }
        if (power[i].menuMethod == 'delProcessReport') {
          del = true
        }
        if (power[i].menuMethod == 'exportProcessReport') {
          out = true
        }
      }
      if (!up) {
        this.componentData.do.splice(1, 1)
      }
      if (!del) {
        this.componentData.do.splice(0, 1)
      }
      this.outPower = out
      this.addPower = add
    },
    handleDown() {
      if(this.mutilSelect.length==0){
        this.$message.warning('请选择要导出的数据')
        return
      }
      // html导出为word,样子太丑了,代码先放着吧
      // exportHtmlToWord(this.$refs.content,'检验报告发放登记表')
      this.outLoading = true
      this.$axios.post(this.$api.processReport.exportProcessReport,{"ids":this.mutilSelect.map(m=>m.id)},{headers: { 'Content-Type': 'application/json' },noQs:true}).then(res => {
        this.outLoading = false
        if (res.code === 201) return
        this.$message.success('导出成功')
        const url = this.javaApi+'/word/'+res.message;
        const link = document.createElement('a');
        link.href = url;
        link.download = '报告结果';
        link.click();
      })
    },
    openAdd() {
      this.title = '新增'
      this.addInfo = {
        signatory:[]
      }
      this.addDialogVisible = true;
    },
    refreshTable() {
      this.$refs['ValueTable'].selectList()
    },
    refresh() {
      this.componentData.entity = this.HaveJson(this.entityCopy)
      this.upIndex++
      this.refreshTable()
    },
    getAuthorizedPerson() {
      this.$axios.get(this.$api.user.getUserMenu).then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.name,
            value: a.id
          })
        })
        this.personList = data
      })
    },
    handleAdd(){
      this.addLoading = true
      delete this.addInfo.createTime
      delete this.addInfo.createUser
      delete this.addInfo.updateTime
      delete this.addInfo.signatoryUrl
      delete this.addInfo.updateUserer
      delete this.addInfo.sendUserName
      let addInfo = this.HaveJson(this.addInfo)
      addInfo.signatory = addInfo.signatory.join(',')
      this.$axios.post(this.$api.processReport[this.title=='新增'?'addProcessReport':'doProcessReport'], addInfo,{headers: { 'Content-Type': 'application/json' }}).then(res => {
          this.addLoading = false
          if (res.code == 201) {
            return
          }
          this.addDialogVisible = false
          this.$message({
            type: 'success',
            message: '操作成功!'
          });
          this.refreshTable()
        }).catch(err => {})
    },
    handleWork(row){
      this.title = '修改'
      this.addInfo = row
      console.log(this.addInfo)
      this.addInfo.signatory = this.addInfo.signatory?this.addInfo.signatory.split(',').map(m=>Number(m)):[]
      this.addDialogVisible = true;
    },
    handleChangeTask(list){
      this.mutilSelect = list
    }
  }
}
</script>
<style scoped>
.title {
    height: 60px;
    line-height: 60px;
  }
  .search {
    background-color: #fff;
    height: 80px;
    display: flex;
    align-items: center;
  }
  .search_thing {
    width: 350px;
    display: flex;
    align-items: center;
  }
  .search_label {
    width: 110px;
    font-size: 14px;
    text-align: right;
  }
  .search_input {
    width: calc(100% - 110px);
  }
  .table {
    margin-top: 10px;
    background-color: #fff;
    width: calc(100% - 40px);
    height: calc(100% - 60px - 80px - 10px - 40px);
    padding: 20px;
  }
  .tables {
    table-layout: fixed;
    width: 100%;
    margin-top: 10px;
  }
  .tables td {
    height: 40px;
    width: 100px;
    text-align: center;
    font-size: 14px;
    word-wrap: break-word;
    white-space: normal;
  }
  .en{
    font-size: 12px;
    word-break: break-word; /* è‡ªåŠ¨æ–­è¡Œ */
    overflow-wrap: break-word; /* é˜²æ­¢æº¢å‡º */
    white-space: normal; /* é»˜è®¤æ¢è¡Œ */
  }
</style>