gaoluyang
2025-02-24 2fee2b7b1b98aac9864a77baa791a7d6c1d669c6
报告编制联调
已修改7个文件
1066 ■■■■■ 文件已修改
src/api/business/insReport.js 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Table/lims-table.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Table/value-table.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionReview/index.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/customsInspection.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrderComponents/materialOrder/filesLookVisible.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/reportPreparation/index.vue 953 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/insReport.js
@@ -1,7 +1,7 @@
// 报告编制页面相关接口
import request from '@/utils/request'
// 查询原材料下单-待下单
// 报告还原
export function upReportUrl(query) {
  return request({
    url: '/insReport/upReportUrl',
@@ -9,3 +9,51 @@
    data: query
  })
}
// 查询检验报告数据
export function pageInsReport(query) {
  return request({
    url: '/insReport/pageInsReport',
    method: 'get',
    params: query
  })
}
// 报告批量下载
export function downAll(query) {
  return request({
    url: '/insReport/downAll',
    method: 'get',
    params: query
  })
}
// 报告退回到检验任务
export function sendBackTask(query) {
  return request({
    url: '/insReport/sendBackTask',
    method: 'post',
    data: query
  })
}
// 报告审核
export function examineReport(query) {
  return request({
    url: '/insReport/examineReport',
    method: 'post',
    data: query
  })
}
// 报告提交
export function writeReport(query) {
  return request({
    url: '/insReport/writeReport',
    method: 'post',
    data: query
  })
}
// 报告批准
export function ratifyReport(query) {
  return request({
    url: '/insReport/ratifyReport',
    method: 'post',
    data: query
  })
}
src/components/Table/lims-table.vue
@@ -12,7 +12,7 @@
      <el-table-column v-for="(item, index) in column" :key="index" :column-key="item.columnKey"
        :filter-method="item.filterHandler" :filter-multiple="item.filterMultiple" :filtered-value="item.filteredValue"
        :filters="item.filters" :fixed="item.fixed" :label="item.label" :min-width="item.minWidth" :prop="item.prop"
        :show-overflow-tooltip="item.dataType === 'action' ? false : true" :sortable="item.sortable ? true : false"
        :show-overflow-tooltip="item.dataType === 'action' || item.dataType === 'slot' ? false : true" :sortable="item.sortable ? true : false"
        :type="item.type" :width="item.dataType === 'action' ? getWidth(item.operation) : item.width
          " align="center">
        <!-- <div class="123" v-if="item.type == ''"> -->
@@ -70,13 +70,21 @@
                @click="o.clickFun(scope.row)" :key="key">
                {{ o.name }}
              </el-button>
              <el-upload action="#" size="mini" :on-change="(file, fileList) => o.clickFun(scope.row, file, fileList)
                " :multiple="o.multiple ? o.multiple : false" :limit="o.limit ? o.limit : 1"
              <el-upload
                :action="javaApi + o.url +'?id=' +(o.uploadIdFun ? o.uploadIdFun(scope.row): scope.row.id) "
                size="mini"
                ref="upload"
                :multiple="o.multiple ? o.multiple : false"
                :limit="1"
                :disabled="o.disabled ? o.disabled(scope.row) : false" :accept="o.accept
                  ? o.accept
                  : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                  " v-if="o.type == 'upload'" style="display: inline-block; width: 50px"
                v-show="o.showHide ? o.showHide(scope.row) : true" :auto-upload="false" :on-exceed="onExceed"
                v-show="o.showHide ? o.showHide(scope.row) : true"
                :headers="uploadHeader"
                :on-error="onError"
                :on-exceed="onExceed"
                :on-success="handleSuccessUp"
                :show-file-list="false" :key="key">
                <el-button :size="o.size ? o.size : 'small'" type="text"
                  :disabled="o.disabled ? o.disabled(scope.row) : false">{{ o.name }}</el-button>
@@ -297,6 +305,22 @@
    setCurrent(row) {
      this.$refs.multipleTable.setCurrentRow();
    },
    handleSuccessUp(response, label) {
      if (typeof label === "string") {
        if (response.code == 200) {
          this.upData[label] = response.data.url;
        }
      } else {
        if (response.code == 200) {
          this.$message.success("上传成功");
        }
      }
    },
    onError(err, file, fileList) {
      this.$message.error("上传失败");
      this.$refs.upload.clearFiles();
      this.uploading = false;
    },
    onExceed() {
      this.$message.warning("超出文件个数");
    },
src/components/Table/value-table.vue
@@ -243,14 +243,7 @@
                v-else
                ref="upload"
                :accept="a.uploadConfig.accept"
                :action="
                  javaApi +
                  a.uploadConfig.url +
                  '?id=' +
                  (a.uploadConfig.uploadIdFun
                    ? a.uploadConfig.uploadIdFun(scope.row)
                    : scope.row.id)
                "
                :action="javaApi + a.uploadConfig.url +'?id=' +(a.uploadConfig.uploadIdFun ? a.uploadConfig.uploadIdFun(scope.row): scope.row.id)"
                :disabled="
                  a.disabFun ? a.disabFun(scope.row, scope.$index) : false
                "
src/views/business/inspectionReview/index.vue
@@ -179,10 +179,12 @@
            },
            {
              name: "上传",
              type: "text",
              clickFun: (row) => {
                this.handleUpload(row);
              },
              type: "upload",
              accept: '.doc,.docx',
              url: '/insReport/inReport',
              uploadIdFun: (row) => {
                return row.insReportId
              }
            },
            {
              name: "还原",
@@ -355,7 +357,7 @@
      })
    },
    // 上传报告
    handleUpload () {
    handleUpload (row) {
    },
    // 下载报告
src/views/business/materialOrder/customsInspection.vue
@@ -451,10 +451,6 @@
  dicts: ['check_type', 'urgency_level'],
  components: {},
  props: {
    isReport: {
      type: Number,
      default: () => null
    }
  },
  data() {
    return {
@@ -462,6 +458,7 @@
      orderType: '',
      active: 0,
      currentId: 0,
      isReport: '',
      editTable:[], // 区间特殊值填写
      template: null,
      saveLoad: false, // 保存按钮loading
@@ -640,6 +637,7 @@
    this.active = this.$route.query.active
    this.orderType = this.$route.query.orderType
    this.currentId = this.$route.query.currentId
    this.isReport = this.$route.query.isReport
    this.customsInspection = this.$route.query.customsInspection
    this.getUserNowList() // 获取当前用户信息
    this.selectStandardMethods() // 获取检验标准下拉框数据
@@ -698,7 +696,7 @@
          orderId = this.dataIndex === 0 ? this.customsInspection.enterOrderId : this.customsInspection.quarterOrderId
        } else if (!this.customsInspection.enterOrderId && !this.customsInspection.quarterOrderId) {
          this.isShowTab = false
          orderId = this.isReport === 1 ? this.customsInspection.insOrderId : this.customsInspection.id
          orderId = this.isReport == 1 ? this.customsInspection.insOrderId : this.customsInspection.id
        }
        // 查看
        // 请求接口,回显数据
src/views/business/materialOrderComponents/materialOrder/filesLookVisible.vue
@@ -175,7 +175,7 @@
      this.upLoading = false;
      if (response.code == 200) {
        this.$message.success('上传成功');
        this.$refs.fileList.selectList()
        this.getFileList()
      }
    },
    beforeUpload(file) {
src/views/business/reportPreparation/index.vue
@@ -1,138 +1,67 @@
<template>
  <div class="inspection_order">
    <div v-show="activeFace === 0 && state===0" style="width: 100%;height: 100%;">
      <div>
        <el-row class="title">
          <el-col :span="12" style="padding-left: 20px;text-align: left;">报告编制</el-col>
        </el-row>
      </div>
      <div class="search" style="position: relative;">
        <div class="search_thing">
          <div class="search_label">报告编号:</div>
          <div class="search_input"><el-input v-model="componentData.entity.code" clearable placeholder="请输入"
                                              size="small" @keyup.enter.native="refreshTable()"></el-input></div>
  <div class="app-container">
    <div>
      <el-form :model="entity" ref="entity" size="small" :inline="true">
        <el-form-item label="报告编号" prop="code">
          <el-input v-model="entity.code" clearable placeholder="请输入"
                    size="small" @keyup.enter.native="refreshTable()"></el-input>
        </el-form-item>
        <el-form-item label="状态" prop="queryStatus">
          <el-select v-model="entity.queryStatus" clearable size="small" @change="refreshTable()">
            <el-option v-for="(a, i) in queryStatusList" :key="i" :label="a.label" :value="a.value"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="下单类别" prop="typeSource">
          <el-select v-model="entity.typeSource" clearable size="small" @change="refreshTable()">
            <el-option v-for="(a, i) in typeSourceList" :key="i" :label="a.label" :value="a.value"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="检验类别" prop="orderType">
          <el-select v-model="entity.orderType" clearable size="small" @change="refreshTable()">
            <el-option v-for="(a, i) in orderTypeList" :key="i" :label="a.label" :value="a.value"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button size="mini" @click="refresh()">重置</el-button>
          <el-button size="mini" type="primary" @click="refreshTable()">查询</el-button>
          <el-button :loading="outLoading" size="mini" type="primary" @click="handleDowns">批量下载</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div>
      <lims-table :tableData="valueTableData" :column="column" :page="page" :tableLoading="tableLoading"
                  :isSelection="true" :handleSelectionChange="handleChange"
                  :height="'calc(100vh - 290px)'" @pagination="pagination" key="valueTableData">
        <div slot="action" slot-scope="scope">
          <el-button size="small" type="text" @click="viewIssued(scope.row)">查看报告</el-button>
          <el-upload ref='upload1'
                     style="display: inline;margin: 0 6px"
                     :action="fileAction1 +'?id='+ scope.row.id"
                     :auto-upload="true"
                     :before-upload="fileBeforeUpload1"
                     :headers="uploadHeader" :on-error="onError1"
                     :on-success="handleSuccessUp1"
                     :show-file-list="false"
                     accept='.doc,.docx'>
            <el-button size="small" type="text" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName">上传</el-button>
          </el-upload>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handleRestore(scope.row)">还原</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="sendBackTask(scope.row)">退回任务</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handle(scope.row)">提交</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 ||scope.row.isExamine == 1 || userName !== scope.row.examineUser" @click="handleIssued(scope.row)">审核</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || userName !== scope.row.ratifyUser" @click="handleApprove(scope.row)">批准</el-button>
          <el-popover placement="bottom" trigger="hover" style="margin-left: 6px">
            <template #reference>
              <el-button link type="text" size="small">更多</el-button>
            </template>
            <div>
              <el-button style="margin-left: 10px" type="text" size="small" @click="download(scope.row)">下载</el-button>
              <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">原始记录</el-button>
              <el-button type="text" size="small" @click="handleFileLook(scope.row)">附件上传</el-button>
            </div>
          </el-popover>
        </div>
        <div class="search_thing">
          <div class="search_label">状态:</div>
          <div class="search_input">
            <el-select v-model="componentData.entity.queryStatus" clearable size="small" style="width: 100%;" @change="refreshTable()">
              <el-option v-for="(a, i) in queryStatusList" :key="i" :label="a.label" :value="a.value"></el-option>
            </el-select>
          </div>
        </div>
        <div class="search_thing">
          <div class="search_label">下单类别:</div>
          <div class="search_input">
            <el-select v-model="componentData.entity.typeSource" clearable size="small" style="width: 100%;" @change="refreshTable()">
              <el-option v-for="(a, i) in typeSourceList" :key="i" :label="a.label" :value="a.value"></el-option>
            </el-select>
          </div>
        </div>
        <div class="search_thing">
          <div class="search_label">检验类别:</div>
          <div class="search_input">
            <el-select v-model="componentData.entity.orderType" clearable size="small" style="width: 100%;" @change="refreshTable()">
              <el-option v-for="(a, i) in orderTypeList" :key="i" :label="a.label" :value="a.value"></el-option>
            </el-select>
          </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>
          <el-button :loading="outLoading" size="small" style="margin-right: 16px;" type="primary" @click="handleDowns">批量下载</el-button>
        </div>
      </div>
      <!-- <input id="input" type="file" accept=".doc,.docx"></input> -->
      <div class="table">
        <el-table @selection-change="handleChange" :data="valueTableData" style="width: 100%" height="calc(100vh - 21em)" v-loading="tableLoading">
          <!-- 表格列 -->
          <el-table-column type="selection" width="55"></el-table-column>
          <el-table-column header-align="center" align="center" width="70" prop="prop" label="序号" type="index"></el-table-column>
          <el-table-column prop="code" label="报告编号" min-width="180">
            <template slot-scope="scope">
              <el-button type="text" @click="selectAllByOne(scope.row)">{{scope.row.code}}</el-button>
            </template>
          </el-table-column>
          <el-table-column prop="typeSource" label="下单类别" min-width="120">
            <template slot-scope="scope">
              <el-tag type="info" v-if="scope.row.typeSource === 1" disable-transitions>原材料下单</el-tag>
              <el-tag type="info" v-if="scope.row.typeSource === 0" disable-transitions>成品下单</el-tag>
            </template>
          </el-table-column>
          <el-table-column prop="orderType" label="检验类别" min-width="150">
            <template slot-scope="scope">
              <el-tag type="success" v-if="scope.row.orderType === 'Customer-ordered test'" disable-transitions>委托试验</el-tag>
              <el-tag v-if="scope.row.orderType === '抽检'" disable-transitions>抽检</el-tag>
              <el-tag type="info" v-if="scope.row.orderType === '进厂检验'" disable-transitions>进厂检验</el-tag>
              <el-tag type="warning" v-if="scope.row.orderType === 'Quarterly inspection'" disable-transitions>季度检验</el-tag>
            </template>
          </el-table-column>
          <el-table-column prop="createTime" label="创建时间" min-width="150"></el-table-column>
          <el-table-column prop="writeUserName" label="提交人" min-width="110"></el-table-column>
          <el-table-column prop="writeTime" label="提交时间" min-width="150"></el-table-column>
          <el-table-column prop="state" label="提交状态" min-width="110">
            <template slot-scope="scope">
              <el-tag type="danger" v-if="scope.row.state === 0" disable-transitions>待提交</el-tag>
              <el-tag type="success" v-if="scope.row.state === 1" disable-transitions>已提交</el-tag>
            </template>
          </el-table-column>
          <el-table-column prop="examineUser" label="审核人" width="110"></el-table-column>
          <el-table-column prop="examineTime" label="审核时间" width="180"></el-table-column>
          <el-table-column prop="isExamine" label="审核状态" width="110">
            <template slot-scope="scope">
              <el-tag type="danger" v-if="scope.row.isExamine === 0" disable-transitions>不通过</el-tag>
              <el-tag type="success" v-if="scope.row.isExamine === 1" disable-transitions>通过</el-tag>
            </template>
          </el-table-column>
          <el-table-column prop="examineTell" label="审核备注" width="180"></el-table-column>
          <el-table-column prop="ratifyUser" label="批准人" width="110"></el-table-column>
          <el-table-column prop="ratifyTime" label="批准时间" width="180"></el-table-column>
          <el-table-column prop="isRatify" label="批准状态" width="110">
            <template slot-scope="scope">
              <el-tag type="danger" v-if="scope.row.isRatify === 0" disable-transitions>不批准</el-tag>
              <el-tag type="success" v-if="scope.row.isRatify === 1" disable-transitions>批准</el-tag>
            </template>
          </el-table-column>
          <el-table-column prop="ratifyTell" label="批准备注" width="180"></el-table-column>
          <!-- 操作按钮 -->
          <el-table-column label="操作" fixed="right" min-width="360" align="center">
            <template slot-scope="scope">
              <el-button size="small" type="text" @click="viewIssued(scope.row)">查看报告</el-button>
              <el-upload ref='upload1'
                         style="display: inline"
                         :action="fileAction1 +'?id='+ scope.row.id"
                         :auto-upload="true"
                         :before-upload="fileBeforeUpload1"
                         :headers="headers" :on-error="onError1"
                         :on-success="handleSuccessUp1"
                         :show-file-list="false"
                         accept='.doc,.docx'>
                <el-button size="small" type="text" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName">上传</el-button>
                <!--                <span>上传</span>-->
              </el-upload>
              <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handleRestore(scope.row)">还原</el-button>
              <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="sendBackTask(scope.row)">退回任务</el-button>
              <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handle(scope.row)">提交</el-button>
              <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 ||scope.row.isExamine == 1 || userName !== scope.row.examineUser" @click="handleIssued(scope.row)">审核</el-button>
              <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || userName !== scope.row.ratifyUser" @click="handleApprove(scope.row)">批准</el-button>
              <el-popover placement="bottom" :width="170" trigger="hover">
                <template #reference>
                  <el-button link type="text" size="small">更多</el-button>
                </template>
                <div>
                  <el-button style="margin-left: 10px" type="text" size="small" @click="download(scope.row)">下载</el-button>
                  <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">原始记录</el-button>
                  <el-button type="text" size="small" @click="handleFileLook(scope.row)">附件上传</el-button>
                </div>
              </el-popover>
            </template>
          </el-table-column>
        </el-table>
        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current"
                       style="margin-right: 5%;" :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size"
                       layout="->,total, sizes, prev, pager, next, jumper" :total="total">
        </el-pagination>
      </div>
      </lims-table>
    </div>
    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="claimVisible" title="在线编制"
               width="22cm">
@@ -229,17 +158,8 @@
        <el-button :loading="loadingVerify" type="primary" @click="handleSubmit">确 定</el-button>
      </span>
    </el-dialog>
    <div v-if="activeFace >0 && isCopper === null" style="width: 100%;height: 100%;">
      <Add :active="activeFace" :currentId="currentId" :examine="examine"/>
    </div>
    <div v-if="activeFace >0 && isCopper === 0" style="width: 100%;height: 100%;">
      <CustomsInspection :active="activeFace" :currentId="currentId" :customsInspection="customsInspection" :isReport="isReport"/>
    </div>
    <div v-if="activeFace >0 && isCopper === 1" style="width: 100%;height: 100%;">
      <CopperOrder :active="activeFace" :currentId="currentId"></CopperOrder>
    </div>
    <!--产业链信息查看-->
    <ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo>
<!--    <ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo>-->
    <!--报告查看-->
    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="viewIssuedVisible" title="报告查看"
               width="80vw">
@@ -251,33 +171,22 @@
        <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
      </div>
    </el-dialog>
    <!--检验任务信息查看-->
    <Inspection v-if="state>0" :key="InspectionKey" :inspectorList="inspectorList" :orderId="orderId"
                :sonLaboratory="sonLaboratory" :state="state"
                :typeSource="typeSource"
                @goback="goback" @refreshView="refreshView"/>
    <!--附件查看-->
    <el-dialog :visible.sync="filesDialogVisible" title="附件查看" width="80%" @closed="closeFilesLook">
      <div style="display: flex;justify-content: space-between;">
      <div style="margin-bottom: 10px">
        <el-upload ref='upload'
                   :action="fileAction"
                   :auto-upload="true"
                   :before-upload="fileBeforeUpload" :data="{orderId: filesLookInfo.insOrderId}"
                   :headers="headers" :on-error="onError"
                   :headers="uploadHeader" :on-error="onError"
                   :on-success="handleSuccessUp"
                   :show-file-list="false"
                   accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;">
          <el-button size="small" style="height: 38px" type="primary">附件上传</el-button>
        </el-upload>
      </div>
<!--      <div v-if="filesDialogVisible" style="height: 70vh;overflow-y: auto;">-->
<!--        <ValueTable :key="upIndex"-->
<!--                    ref="fileList"-->
<!--                    :componentData="fileComponentData"-->
<!--                    :delUrl="$api.insOrderPlan.delfile"-->
<!--                    :url="$api.insOrderPlan.getFileList"-->
<!--                    class="value-table"/>-->
<!--      </div>-->
      <lims-table :tableData="tableDataFile" :column="columnFile" @pagination="paginationFile" height="500px"
                  key="tableDataFile" :page="pageFile" :tableLoading="tableLoadingFile"></lims-table>
    </el-dialog>
  </div>
</template>
@@ -286,206 +195,33 @@
import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue";
// import ShowInfo from "../do/b1-material-ins-order/showInfo.vue";
import file from "@/utils/file";
import {
  downAll,
  examineReport,
  pageInsReport,
  ratifyReport,
  sendBackTask,
  upReportUrl,
  writeReport
} from "@/api/business/insReport";
import {mapGetters} from "vuex";
import {selectUserCondition} from "@/api/business/inspectionTask";
import limsTable from "@/components/Table/lims-table.vue";
import {delfile, downFile, getFileList} from "@/api/business/rawMaterialOrder";
export default {
  components: {onlyoffice},
  components: {limsTable, onlyoffice},
  data() {
    return {
      componentData: {
        entity: {
          queryStatus: null,
          code: null,
          typeSource: null,
          orderBy: {
            field: 'id',
            order: 'desc'
          }
        },
        isIndex: true,
        showSelect: true,
        select: true,
        selectMethod: 'handleChange',
        do: [
          {
            id: '',
            font: '查看报告',
            type: 'text',
            method: 'viewIssued',
          },
          {
            id: 'download',
            font: '下载',
            type: 'text',
            method: 'download'
          }, {
            id: 'handleUpload',
            font: '上传',
            type: 'upload',
            uploadConfig: {
              url: this.$api.insReport.inReport,
              accept: '.docx'
            },
            method: 'handleUpload',
            disabFun: (row, index) => {
              return row.state != 0 || userName != row.writeUserName
            }
          },
          {
            id: 'handleRestore',
            font: '还原',
            type: 'text',
            method: 'handleRestore',
            disabFun: (row, index) => {
              return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
            }
          },
          {
            id: 'sendBackTask',
            font: '退回任务',
            type: 'text',
            method: 'sendBackTask',
            disabFun: (row, index) => {
              return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
            }
          },
          {
            id: 'handle',
            font: '提交',
            type: 'text',
            method: 'handle',
            disabFun: (row, index) => {
              return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
            }
          },
          {
            id: 'handleIssued',
            font: '审核',
            type: 'text',
            method: 'handleIssued',
            disabFun: (row, index) => {
              return row.state == null || row.state == 0 || row.isExamine == 1 || JSON.parse(localStorage.getItem("user")).name != row.examineUser
            }
          }, {
            id: 'handleApprove',
            font: '批准',
            type: 'text',
            method: 'handleApprove',
            disabFun: (row, index) => {
              return row.state == null || row.state == 0 || row.isExamine == 0 || row.isExamine == null || row.isRatify == 1 || JSON.parse(localStorage.getItem("user")).name != row.ratifyUser
            }
          },
          {
            id: '',
            font: '原始记录',
            type: 'text',
            method: 'viewInspectInfo',
          },
          {
            id: '',
            font: '附件上传',
            type: 'text',
            method: 'handleFileLook',
          }
        ],
        linkEvent: {
          code: {
            method: 'selectAllByOne'
          }
        },
        tagField: {
          isRatify: {
            select: [{
              value: 0,
              type: 'danger',
              label: '不批准'
            }, {
              value: 1,
              type: 'success',
              label: '批准'
            }]
          },
          isExamine: {
            select: [{
              value: 0,
              type: 'danger',
              label: '不通过'
            }, {
              value: 1,
              type: 'success',
              label: '通过'
            }]
          },
          state: {
            select: [{
              value: 0,
              type: 'danger',
              label: '待提交'
            }, {
              value: 1,
              type: 'success',
              label: '已提交'
            }]
          },
          typeSource: {
            select: [{
              value: 0,
              label: '成品下单',
              type: 'info'
            },{
              value: 1,
              label: '原材料下单',
              type: 'info'
            }]
          },
          queryStatus: {
            select: [{
              value: 0,
              label: '待提交',
              type: 'info'
            },{
              value: 1,
              label: '待审核',
              type: 'info'
            },{
              value: 2,
              label: '待批准',
              type: 'info'
            }]
          },
          orderType: {
            select: [{
              value: 'Customer-ordered test',
              label: '委托试验',
              type: 'success',
              effect: 'plain'
            },{
              value: '抽检',
              label: '抽检',
              type: '',
              effect: 'plain'
            },{
              value: '进厂检验',
              label: '进厂检验',
              type: 'info',
              effect: 'plain'
            },{
              value: 'Quarterly inspection',
              label: '季度检验',
              type: 'warning',
              effect: 'plain'
            }]
          }
        },
        selectField: {},
        requiredAdd: [],
        needSort: ['createTime', 'state', 'writeTime', 'isExamine', 'examineTime', 'ratifyTime'],
        requiredUp: []
      entity: {
        queryStatus: null,
        code: null,
        typeSource: null,
      },
      page: {
        current: 1,
        size: 20,
        total: 0
      },
      total: null,
      entityCopy: {},
      upIndex: 0,
      statusList: [],
      claimVisible: false,
@@ -542,78 +278,214 @@
      sonLaboratory: '', // 试验室
      filesDialogVisible: false,
      filesLookInfo: {},
      fileComponentData: {
        entity: {
          insOrderId:''
        },
        isIndex: true,
        showSelect: false,
        select: false,
        sort: false,
        init:false,
        do: [
          {
            id: 'parent',
            font: '下载',
            type: 'text',
            method: 'handleDown'
          },{
            id: 'delete',
            font: '删除',
            type: 'text',
            method: 'doDiy',
      tableDataFile: [],
      tableLoadingFile: false,
      columnFile: [
        {
          dataType: 'tag',
          label: '类型',
          prop: 'type',
          formatData: (params) => {
            if (params == 1) {
              return '图片'
            } else if (params == 2) {
              return '文件'
            } else {
              return ''
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
            } else if (params == 2) {
              return 'warning'
            } else {
              return ''
            }
          }
        ],
        isPage: false,
        linkEvent: {},
        tagField: {
          type:{
            select:[
              {
                value: 1,
                label: '图片'
              },
              {
                value: 2,
                label: '文件'
        },
        { label: '附件名称', prop: 'fileName' },
        { label: '上传人', prop: 'name' },
        { label: '上传时间', prop: 'createTime' },
        {
          dataType: 'action',
          fixed: 'right',
          label: '操作',
          width: '170px',
          operation: [
            {
              name: '下载',
              type: 'text',
              clickFun: (row) => {
                this.handleDown(row);
              }
            ]
          }
        },
        currentId: '',
        selectField: {},
        requiredAdd: [],
        requiredUp: []
            },
            {
              name: '删除',
              type: 'text',
              clickFun: (row) => {
                this.delete(row);
              }
            },
          ]
        }
      ],
      pageFile: {
        total: 0,
        size: 10,
        current: 1
      },
      isCopper: null,
      tableLoading: false,
      valueTableData: [],
      userName: ''
      column: [
        {
          label: "报告编号",
          prop: "code",
          width: "160px",
          dataType: "link",
          linkMethod: "selectAllByOne",
        },
        {
          label: "下单类别",
          prop: "typeSource",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            if (params == 0) {
              return "成品下单";
            } else {
              return "原材料下单";
            }
          },
        },
        {
          label: "检验类型",
          prop: "orderType",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            return this.orderTypeList.find((m) => m.value == params).label;
          },
          formatType: (params) => {
            return this.orderTypeList.find((m) => m.value == params).type;
          },
        },
        { label: "创建时间", prop: "createTime" },
        { label: "提交人", prop: "writeUserName" },
        { label: "提交时间", prop: "writeTime" },
        {
          label: "提交状态",
          prop: "state",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            if (params == 0) {
              return "待提交";
            } else {
              return "已提交";
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return "danger";
            } else {
              return "success";
            }
          },
        },
        { label: "审核人", prop: "examineUser" },
        { label: "审核时间", prop: "examineTime" },
        {
          label: "审核状态",
          prop: "isExamine",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            if (params == 0) {
              return "不通过";
            } else {
              return "通过";
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return "danger";
            } else {
              return "success";
            }
          },
        },
        { label: "审核备注", prop: "examineTell" },
        { label: "批准人", prop: "ratifyUser" },
        { label: "批准时间", prop: "ratifyTime" },
        {
          label: "批准状态",
          prop: "isRatify",
          width: "100px",
          dataType: "tag",
          formatData: (params) => {
            if (params == 0) {
              return "不批准";
            } else {
              return "批准";
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return "danger";
            } else {
              return "success";
            }
          },
        },
        { label: "批准备注", prop: "ratifyTell" },
        {
          fixed: "right",
          dataType: "slot",
          slot: "action",
          width: '360px',
          label: "操作"
        }
      ],
      userName: '',
    }
  },
  computed: {
    headers() {
      return {
        'token': sessionStorage.getItem('token')
      }
    },
    ...mapGetters(["nickName", "userId"]),
    action() {
      return this.javaApi + this.$api.insReport.upAll
      return this.javaApi + '/insReport/upAll'
    },
    fileAction() {
      return this.javaApi + this.$api.insOrderPlan.uploadFile
      return this.javaApi + '/unqualifiedHandler/uploadFileByUnqualified'
    },
    fileAction1() {
      return this.javaApi + this.$api.insReport.inReport
      return this.javaApi + '/insReport/inReport'
    }
  },
  mounted() {
    this.entityCopy = this.HaveJson(this.componentData.entity)
    this.userName = JSON.parse(localStorage.getItem("user")).name
    this.getPower()
    this.refreshTable()
  },
  methods: {
    refreshTable() {
      this.tableLoading = true
      pageInsReport({
        ...this.page,...this.entity
      }).then(res => {
        this.tableLoading = false
        this.page.total = res.data.body.total
        this.valueTableData = res.data.body.records
      })
    },
    pagination({ page, limit }) {
      this.page.current = page;
      this.page.size = limit;
      this.refreshTable();
    },
    refresh() {
      this.resetForm('entity')
      this.refreshTable();
    },
    handleChange(arr){
      this.mutiList = arr
    },
@@ -624,27 +496,40 @@
      if(row.userName){
        inspectorList = row.userName.split(',')
      }
      let user = JSON.parse(localStorage.getItem('user'))
      if(user){
        inspectorList.push(user.name)
      }
      this.inspectorList = inspectorList
      this.state = 3;
      this.typeSource = row.typeSource
      this.orderId = row.insOrderId
      this.sonLaboratory = row.sonLaboratory
      inspectorList.push(this.nickName)
      this.$router.push({
        path: "/inspectionTask/inspection",
        query: {
          sonLaboratory: row.sonLaboratory,
          state: 3,
          typeSource: row.typeSource,
          orderId: row.insOrderId,
          inspectorList: inspectorList,
        },
      })
    },
    goback() {
      this.state = 0
      this.refreshTable('page')
    },
    // 打开查看附件弹框
    handleFileLook (row) {
      this.filesLookInfo = row
      this.filesDialogVisible = true
      this.fileComponentData.entity.insOrderId = row.insOrderId
      this.$nextTick(() => {
        this.$refs['fileList'].selectList()
      this.getFileList()
    },
    // 查询附件查看列表回调
    getFileList() {
      this.tableLoadingFile = true
      getFileList({insOrderId: this.filesLookInfo.insOrderId}).then(res => {
        this.tableLoadingFile = false
        if (res.code === 200) {
          this.tableDataFile = res.data.records
          this.pageFile.total = res.data.total
        }
      }).catch(err => {
        this.tableLoadingFile = false
      })
    },
    paginationFile(page) {
      this.pageFile.size = page.limit
      this.getFileList()
    },
    closeFilesLook () {
      this.filesDialogVisible = false
@@ -653,7 +538,7 @@
      this.upLoading = false;
      if (response.code == 200) {
        this.$message.success('上传成功');
        this.$refs.fileList.selectList()
        this.getFileList()
      }
    },
    handleSuccessUp1(response, ) {
@@ -661,8 +546,9 @@
        this.$message.success('上传成功');
      }
    },
    // 下载附件的文件
    handleDown(row){
      this.$axios.post(this.$api.insOrderPlan.downFile, {
      downFile({
        id: row.id,
      }).then(res => {
        if (res.code === 200) {
@@ -682,9 +568,23 @@
      })
    },
    // 刷新页面
    refreshView () {
      this.InspectionKey++
    // 删除附件文件
    delete(row) {
      this.$confirm('是否删除当前数据?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        delfile({ id: row.id }).then(res => {
          if (res.code === 500) {
            return
          }
          this.$message.success('删除成功')
          this.getList()
        }).catch(e => {
          this.$message.error('删除失败')
        })
      }).catch(() => { })
    },
    // 查看产业链信息
    openInfoDialog (row) {
@@ -700,7 +600,7 @@
      }
      let str = this.mutiList.map(m=>m.id).join(',')
      this.outLoading = true
      this.$axios.get(this.$api.insReport.downAll+'?ids='+str).then(res => {
      downAll({ids: str}).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        // const blob = new Blob([res],{ type: 'application/octet-stream' });
@@ -765,118 +665,48 @@
      this.$message.error('上传失败')
      this.$refs.upload1.clearFiles()
    },
    refreshTable(e) {
      this.tableLoading = false
      this.$axios.post(this.$api.insReport.pageInsReport, {
        page: this.page,
        entity: this.componentData.entity
      }, {
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(res => {
        this.tableLoading = false
        if (res.code === 201) {
          return
        }
        this.total = res.data.body.total
        this.valueTableData = res.data.body.records
      })
    },
    handleSizeChange(val) {
      this.page.size = val
      this.refreshTable();
    },
    handleCurrentChange(val) {
      this.page.current = val
      this.refreshTable();
    },
    refresh() {
      this.componentData.entity = this.HaveJson(this.entityCopy)
      this.refreshTable();
    },
    async handleWeave(row) {
      let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
      fileName = fileName.replace('/word/','')
      const userName = JSON.parse(localStorage.getItem("user")).name;
      //参考vabOnlyOffice组件参数配置
      const { href } = this.$router.resolve({
        path: `/wordEdit`,
        query: {
          url: this.javaApi + "/word/" + fileName,
          isEdit: true,
          fileType: "docx",
          title: fileName,
          lang: 'zh-CN',
          isPrint: true,
          user_id: 1,
          user_name: userName,
          editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
        }
      })
      window.open(href, '_blank');
    },
    // 权限分配
    getPower(radio) {
      let power = JSON.parse(sessionStorage.getItem('power'))
      let edit = false
      let up = false
      let res = false
      let sub = false
      let issued = true
      let approve = true
      for (var i = 0; i < power.length; i++) {
        if (power[i].menuMethod == 'upReportFile') {
          edit = true
        }
        if (power[i].menuMethod == 'inReport') {
          up = true
        }
        if (power[i].menuMethod == 'upReportUrl') {
          res = true
        }
        if (power[i].menuMethod == 'writeReport') {
          sub = true
        }
        if (power[i].menuMethod == 'ratifyReport') {
          approve = true
        }
        if (power[i].menuMethod == 'examineReport') {
          issued = true
        }
      }
      if (!approve) {
        this.componentData.do.splice(6, 1)
      }
      if (!issued) {
        this.componentData.do.splice(5, 1)
      }
      if (!sub) {
        this.componentData.do.splice(4, 1)
      }
      if (!res) {
        this.componentData.do.splice(3, 1)
      }
      if (!up) {
        this.componentData.do.splice(2, 1)
      }
      if (!edit) {
        this.componentData.do.splice(0, 1)
      }
    },
    confirmClaim() {
      // console.log(this.$refs.Word.getValue())
    },
    playOrder(num) {
      this.activeFace = num
    },
    async selectAllByOne(row) {
    selectAllByOne(row) {
      this.isCopper = row.isCopper
      this.customsInspection = row
      this.activeFace = 2;
      this.examine = 1;
      this.isReport = 1
      this.currentId = parseInt(row.insOrderId)
      switch (row.isCopper) {
        case 0:
          // 原材料
          this.$router.push({
            path: "/materialOrder/customsInspection", query: {
              customsInspection: row,
              active: this.activeFace,
              currentId: row.insOrderId,
              isReport: this.isReport
            }
          });
          break;
        case null:
          // 成品
          this.$router.push({
            path: "/productOrder/add", query: {
              examine: this.examine,
              active: this.activeFace,
              currentId: row.insOrderId
            }
          });
          break;
        case 1:
          // 铜材
          this.$router.push({
            path: "/materialOrder/copperOrder", query: {
              active: this.activeFace,
              currentId: row.insOrderId
            }
          });
          break;
      }
    },
    download(row) {
      let url = row.urlS ? row.urlS : row.url;
@@ -888,7 +718,7 @@
    },
    // 还原操作
    handleRestore(row) {
      this.$axios.post(this.$api.insReport.upReportUrl, {
      upReportUrl({
        id: row.id
      }).then(res => {
        if (res.code === 200) {
@@ -907,7 +737,7 @@
        fileType = "pdf"
      }
      fileName = fileName.replace('/word/','')
      const userName = JSON.parse(localStorage.getItem("user")).name;
      const userName = this.nickName
      this.option = {
        url: this.javaApi + "/word/" + fileName,
        isEdit: false,
@@ -921,19 +751,6 @@
      }
      this.issuedVisible = true;
    },
    // 查看pdf报告
    viewIssuedPdf(row) {
      this.currentInfo = row;
      let url = row.tempUrlPdf
      if(url){
        url = url.split('.')[0]+'.pdf'
        const link = document.createElement('a');
        link.href = this.javaApi + url;
        link.target = '_blank';
        document.body.appendChild(link);
        link.click();
      }
    },
    // 查看报告
    viewIssued(row) {
      this.currentInfo = row;
@@ -944,7 +761,7 @@
        fileType = "pdf"
      }
      fileName = fileName.replace('/word/','')
      const userName = JSON.parse(localStorage.getItem("user")).name;
      const userName = this.nickName
      this.option = {
        url: this.javaApi + "/word/" + fileName,
        isEdit: false,
@@ -966,11 +783,8 @@
        type: 'warning'
      }).then(() => {
        this.upLoad = true
        this.$axios.post(this.$api.insReport.sendBackTask+'?id='+row.id).then(res => {
        sendBackTask({id: row.id}).then(res => {
          this.upLoad = false
          if (res.code === 201) {
            return
          }
          this.$message.success('退回成功!')
          this.refreshTable('page')
        }).catch(err => {
@@ -990,15 +804,12 @@
        return
      }
      this.loadingIssued = true;
      this.$axios.post(this.$api.insReport.examineReport, {
      examineReport({
        id: this.currentInfo.id,
        userId: this.approver,
        isExamine: 1
      }).then(res => {
        this.loadingIssued = false;
        if (res.code === 201) {
          return
        }
        this.$message.success('提交成功')
        this.refreshTable('page')
        this.currentInfo = null;
@@ -1020,18 +831,15 @@
    },
    // 获取人员列表
    getAuthorizedPerson() {
      this.$axios.get(this.$api.user.selectQualityUserList).then(res => {
        let data = []
        let userName = JSON.parse(localStorage.getItem("user")).name;
        res.data.forEach(a => {
          // if(a.name !== userName) {
      selectUserCondition({ type: 0 }).then((res) => {
        let data = [];
        res.data.forEach((a) => {
          data.push({
            label: a.name,
            value: a.id
          })
          // }
        })
        this.approverList = data
            value: a.id,
          });
        });
        this.approverList = data;
      })
    },
    // 批准按钮
@@ -1044,7 +852,7 @@
        fileType = "pdf"
      }
      fileName = fileName.replace('/word/','')
      const userName = JSON.parse(localStorage.getItem("user")).name;
      const userName = this.nickName
      this.option = {
        url: this.javaApi + "/word/" + fileName,
        isEdit: false,
@@ -1061,15 +869,11 @@
    // 批准通过
    subApprove() {
      this.loadingApprove = true;
      this.$axios.post(this.$api.insReport.ratifyReport, {
      ratifyReport({
        id: this.currentInfo.id,
        isRatify: 1
      }).then(res => {
        this.loadingApprove = false;
        if (res.code == 201) {
          this.$message.error('批准失败')
          return
        }
        this.$message.success('已批准')
        this.refreshTable('page')
        this.currentInfo = null;
@@ -1084,14 +888,11 @@
    // 提交审核人操作
    handleSubmit(row) {
      this.loadingVerify = true
      this.$axios.post(this.$api.insReport.writeReport, {
      writeReport({
        id: this.currentInfo.id,
        userId: this.verifyUser,
      }).then(res => {
        this.loadingVerify = false
        if (res.code === 201) {
          return
        }
        this.addVerifyDia = false
        this.$message.success('提交成功')
        this.refreshTable('page')
@@ -1110,15 +911,12 @@
        return this.$message.error('请输入原因')
      }
      this.loadingIssuedReason = true;
      this.$axios.post(this.$api.insReport.examineReport, {
      examineReport({
        id: this.currentInfo.id,
        isExamine: 0,
        examineTell: this.reason
      }).then(res => {
        this.loadingIssuedReason = false;
        if (res.code === 201) {
          return
        }
        this.$message.success('操作成功')
        this.refreshTable('page')
        this.currentInfo = null;
@@ -1136,15 +934,12 @@
        return this.$message.error('请输入原因')
      }
      this.loadingApproveReason = true
      this.$axios.post(this.$api.insReport.ratifyReport, {
      ratifyReport({
        id: this.currentInfo.id,
        isRatify: 0,
        examineTell: this.reason
      }).then(res => {
        this.loadingApproveReason = false
        if (res.code === 201) {
          return
        }
        this.$message.success('操作成功')
        this.refreshTable('page')
        this.currentInfo = null;