Crunchy
2024-04-25 71c4ece010f68a74eeff5e986caecb9a0bb2e36c
Merge remote-tracking branch 'origin/master'

# Conflicts:
# src/components/view/a6-device-management.vue
已修改12个文件
434 ■■■■ 文件已修改
src/assets/api/controller.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-ins-order/add.vue 169 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/b1-inspect-order-plan/Inspection.vue 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/a5-capacity-scope.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/a5-laboratory-qualifications.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b1-inspect-order-plan.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b1-inspection-order.vue 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b1-report-preparation.vue 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/b2-standard.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/index-index.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/notice-detail.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js
@@ -123,6 +123,7 @@
    selectEquipmentOverview: "/deviceScope/selectEquipmentOverview", //获取设备总览
    uploadFile: "/deviceScope/uploadFile", //上传图片
    selectDevicePrincipal: "/user/getDeviceManager", //获取设备负责人
  selectDeviceByCode: "/deviceScope/selectDeviceByCode", //通过设备编号获取设备列表
}
const insOrder = {
@@ -197,6 +198,7 @@
  upReportUrl: "/insReport/upReportUrl", //报告还原
  writeReport: "/insReport/writeReport", //报告提交
  examineReport: "/insReport/examineReport", //报告审核
  ratifyReport: "/insReport/ratifyReport", //报告批准
}
const warehouse = {
src/components/do/b1-ins-order/add.vue
@@ -84,6 +84,7 @@
  .el-select .is-disabled{
    background: transparent !important;
  }
  .el-select .is-disabled .el-input__inner{
    background: transparent !important;
  }
@@ -108,7 +109,8 @@
                    </el-button>
                    <el-button size="medium" type="primary" @click="save" :loading="saveLoad" v-show="active==1">提交</el-button>
          <!-- 审核 -->
                    <el-button size="medium" @click="upInsOrderOfState(2)" :loading="saveLoad" v-show="active==3">不通过</el-button>
          <el-button size="medium" @click="upInsOrderOfState(2)" :loading="saveLoad" v-show="active==3"
            :disabled="saveLoad">不通过</el-button>
                    <el-button size="medium" type="primary" @click="upInsOrderOfState(1)" :loading="saveLoad"
                        v-show="active==3">通过</el-button>
                    <el-button size="medium" @click="$parent.playOrder(0)">
@@ -126,18 +128,32 @@
                    </div>
                </el-col>
                <el-col class="search_thing" :span="6">
                    <div class="search_label"><span class="required-span">* </span>下单客户:</div>
          <div class="search_label"><span class="required-span">* </span>检验类别:</div>
          <div class="search_input">
            <el-select size="small" style="width: 100%;" clearable v-model="addObj.orderType" :disabled="active>1">
              <el-option v-for="(a, ai) in orderType" :key="ai" :value="a.value" :label="a.label"></el-option>
            </el-select>
          </div>
        </el-col>
        <el-col class="search_thing" :span="6">
          <div class="search_label"><span class="required-span">* </span>委托客户:</div>
                    <div class="search_input">
                        <el-input readonly size="small" v-model="addObj.custom">
                            <template slot="append"><el-button slot="append" icon="el-icon-search"
                                    @click="selectUserDia = true" :disabled="active>1"></el-button></template>
              <template slot="append"><el-button slot="append" icon="el-icon-search" @click="selectUserDia = true"
                  :disabled="active>1"></el-button></template>
                        </el-input>
                    </div>
                </el-col>
                <el-col class="search_thing" :span="6">
                    <div class="search_label"><span class="required-span">* </span>下单单位:</div>
          <div class="search_label"><span class="required-span">* </span>委托单位:</div>
                    <div class="search_input">
                        <el-input size="small" placeholder="选择下单客户" clearable disabled v-model="addObj.company"></el-input>
            <el-input size="small" placeholder="选择委托客户" clearable disabled v-model="addObj.company"></el-input>
          </div>
        </el-col>
        <el-col class="search_thing" :span="6">
          <div class="search_label"><span class="required-span">* </span>联系方式:</div>
          <div class="search_input">
            <el-input size="small" placeholder="选择委托客户" clearable disabled v-model="addObj.phone"></el-input>
                    </div>
                </el-col>
                <el-col class="search_thing" :span="6">
@@ -152,15 +168,9 @@
                    <div class="search_label"><span class="required-span">* </span>样品名称:</div>
                    <div class="search_input">
                        <el-input readonly size="small" v-model="addObj.sample">
                            <template slot="append"><el-button slot="append" icon="el-icon-search"
                                    @click="selectStandardTree = true" :disabled="active>1"></el-button></template>
              <template slot="append"><el-button slot="append" icon="el-icon-search" @click="selectStandardTree = true"
                  :disabled="active>1"></el-button></template>
                        </el-input>
                    </div>
                </el-col>
                <el-col class="search_thing" :span="6">
                    <div class="search_label"><span class="required-span">* </span>实验室:</div>
                    <div class="search_input">
                        <el-input size="small" clearable disabled v-model="addObj.laboratory"></el-input>
                    </div>
                </el-col>
                <el-col class="search_thing" :span="6">
@@ -173,30 +183,63 @@
                    <div class="search_label"><span class="required-span">* </span>样品数量:</div>
                    <div class="search_input">
                        <el-input-number size="small" v-model="addObj.sampleNum" :min="1" :max="100" :precision="0"
                            style="width: 65%;" @change="addStandardTree" :readonly="active>1"></el-input-number>
              style="width: 65%;" @change="addStandardTree" :disabled="active>1"></el-input-number>
                    </div>
                </el-col>
                <el-col class="search_thing" :span="6">
        <!-- <el-col class="search_thing" :span="6">
                    <div class="search_label">样品单位:</div>
                    <div class="search_input">
                        <el-select v-model="addObj.unit" clearable size="small" style="width: 100%;" :disabled="active>1">
                            <el-option v-for="(a, i) in units" :key="i" :label="a.label" :value="a.value"></el-option>
                        </el-select>
                    </div>
        </el-col> -->
        <el-col class="search_thing" :span="6">
          <div class="search_label"><span class="required-span">* </span>来样方式:</div>
          <div class="search_input">
            <el-input size="small" clearable v-model="addObj.formType" :readonly="active>1"></el-input>
          </div>
                </el-col>
                <el-col class="search_thing" :span="6">
                    <div class="search_label">OTC订单号:</div>
          <div class="search_label">报告发送方式:</div>
                    <div class="search_input">
                        <el-input size="small" placeholder="请输入" clearable v-model="addObj.otcCode" :readonly="active>1"></el-input>
            <el-radio-group v-model="addObj.send">
              <el-radio :label="1">自取</el-radio>
              <el-radio :label="0">其他</el-radio>
            </el-radio-group>
          </div>
        </el-col>
        <el-col class="search_thing" :span="6">
          <div class="search_label">样品处理方式:</div>
          <div class="search_input">
            <el-radio-group v-model="addObj.processing">
              <el-radio :label="0">委托单位取回</el-radio>
              <el-radio :label="1">实验室处理</el-radio>
            </el-radio-group>
          </div>
        </el-col>
        <el-col class="search_thing" :span="6">
          <div class="search_label">是否留样:</div>
          <div class="search_input">
            <el-radio-group v-model="addObj.isLeave">
              <el-radio :label="0">不留样</el-radio>
              <el-radio :label="1">留样</el-radio>
            </el-radio-group>
                    </div>
                </el-col>
                <el-col class="search_thing" :span="6">
                    <div class="search_label" style="width: 175px;">是否涉及配套样品:</div>
                    <div class="search_input" style="width: calc(100% - 175px);">
                        <el-radio-group v-model="addObj.mating" @change="$refs.sampleTable.doLayout()" :disabled="active>1">
            <el-radio-group v-model="addObj.mating" @change="$refs.sampleTable.doLayout()">
                            <el-radio :label="1">是</el-radio>
                            <el-radio :label="0">否</el-radio>
                        </el-radio-group>
          </div>
        </el-col>
        <el-col class="search_thing" :span="6">
          <div class="search_label">OTC订单号:</div>
          <div class="search_input">
            <el-input size="small" placeholder="请输入" clearable v-model="addObj.otcCode" :readonly="active>1"></el-input>
                    </div>
                </el-col>
                <el-col class="search_thing" :span="6" style="align-items: flex-start;margin: 8px 0;">
@@ -209,12 +252,6 @@
            </el-row>
        </div>
        <div>
            <!-- <div style="text-align: right;line-height: 45px;" v-if="active<2">
                <el-button type="primary" size="small" @click="addSampleDia = true">添加样品</el-button>
                <el-button size="small" @click="delSample">
                    <span style="color: #3A7BFA;">删除样品</span>
                </el-button>
            </div> -->
            <el-table class="el-table sampleTable" ref="sampleTable" :data="sampleList" height="250px" tooltip-effect="dark"
                border @selection-change="selectSample" highlight-current-row @row-click="rowClick" style="margin-top: 10px;" >
                <el-table-column type="selection" width="60" :selectable="selectable" v-if="active==1"></el-table-column>
@@ -226,15 +263,10 @@
                </el-table-column>
                <el-table-column prop="sampleCode" label="样品编号" min-width="140" align="center">
                    <template slot-scope="scope">
                        <el-input size="small" v-model="scope.row.sampleCode" clearable placeholder="不填写则系统自动生成" :readonly="active>1"></el-input>
            <el-input size="small" v-model="scope.row.sampleCode" clearable placeholder="不填写则系统自动生成"
              :readonly="active>1"></el-input>
                    </template>
                </el-table-column>
                <!-- <el-table-column prop="factory" label="工厂" align="center" min-width="100">
                </el-table-column>
                <el-table-column prop="laboratory" label="实验室" align="center" min-width="100">
                </el-table-column>
                <el-table-column prop="sampleType" label="样品类型" align="center" min-width="100">
                </el-table-column> -->
                <el-table-column prop="model" label="样品型号" align="center" min-width="100">
                    <template slot-scope="scope">
                        <el-select v-model="scope.row.model" filterable allow-create default-first-option placeholder="样品型号"
@@ -246,8 +278,9 @@
                </el-table-column>
                <el-table-column prop="standardMethodListId" label="检验标准" align="center" min-width="100">
                    <template slot-scope="scope">
                        <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1" placeholder="检验标准" size="small"
                            :loading="methodLoad" @change="(value)=>methodChange(value, scope.row)" @focus="methodFocus" :readonly="active>1">
            <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1"
              placeholder="检验标准" size="small" :loading="methodLoad" @change="(value)=>methodChange(value, scope.row)"
              @focus="methodFocus" :readonly="active>1">
                            <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
                            </el-option>
                        </el-select>
@@ -260,14 +293,14 @@
                        </el-select>
                    </template>
                </el-table-column>
                <el-table-column prop="isLeave" label="是否留样" align="center" min-width="100">
        <!-- <el-table-column prop="isLeave" label="是否留样" align="center" min-width="100">
                    <template slot-scope="scope">
                        <el-select v-model="scope.row.isLeave" size="small" :disabled="active>1">
                            <el-option label="留样" :value="1"></el-option>
                            <el-option label="不留样" :value="0"></el-option>
                        </el-select>
                    </template>
                </el-table-column>
        </el-table-column> -->
                <el-table-column prop="joinName" label="配套样品名称" width="140" align="center" v-if="addObj.mating==1">
                    <template slot-scope="scope">
                        <el-input size="small" type="textarea" :autosize="{ minRows: 1, maxRows: 1}"
@@ -286,12 +319,6 @@
                            :controls="false" style="width: 80%;"></el-input-number>
                    </template>
                </el-table-column>
                <!-- <el-table-column label="操作" width="65" align="center">
                    <template slot-scope="scope">
                        {{scope.index}}
                        <el-button type="text" size="small" @click="delSampleAndProduct" :disabled="active!=1">删除</el-button>
                    </template>
                </el-table-column> -->
            </el-table>
            <el-table class="el-table" ref="productTable" :data="productList" height="380px" tooltip-effect="dark" border
                @selection-change="selectProduct" style="margin-bottom: 10px;" @select="upProductSelect"
@@ -300,7 +327,8 @@
                <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column>
                <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140"
                    show-overflow-tooltip></el-table-column>
                <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip></el-table-column>
        <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip :filters="filters"
            :filter-method="filterHandler"></el-table-column>
                <el-table-column prop="methodS" label="试验方法" min-width="120" show-overflow-tooltip>
        </el-table-column>
                <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column>
@@ -312,7 +340,7 @@
                <el-table-column prop="ask" label="要求值" min-width="220px">
                    <template slot-scope="scope">
                        <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable type="textarea"
                            :autosize="{ minRows: 1, maxRows: 3}" @change="e=>requestChange(e,scope.row)"></el-input>
              :autosize="{ minRows: 1, maxRows: 3}" @change="e=>requestChange(e,scope.row)" :readonly="active>1"></el-input>
                    </template>
                </el-table-column>
            </el-table>
@@ -519,7 +547,13 @@
                    sampleNum: 1,
                    unit: null,
                    model: null,
                    method: null
          method: null,
          phone: null,
          processing: 1,
          isLeave: 0,
          orderType: null,
          send: 1,
          formType: '送检'
                },
                sample: {
                    sampleCode: null,
@@ -590,7 +624,9 @@
                methodLoad: false,
        noDialogVisible:false,
        tell:'',
        noLoading:false
        noLoading: false,
        orderType: [],
        filters: []
            }
        },
        watch: {
@@ -607,6 +643,8 @@
            this.getAuthorizedPerson();
            this.selectEnumByCategoryForUnit()
            this.selectStandardMethods()
      this.selectEnumByCategoryForOrderType()
      this.selectEnumByCategoryForSonLaboratory()
            if (this.active != 1) {
                // 查看/审核流程
                // 请求接口,回显数据
@@ -658,6 +696,7 @@
                this.addObj.company = selects.company
                this.addObj.custom = selects.name
                this.addObj.code = selects.code
        this.addObj.phone = selects.phone
                this.selectUserDia = false
            },
            save() {
@@ -667,6 +706,10 @@
                }
        if (!this.addObj.type) {
                    this.$message.error('未选择紧急程度')
        } else if (!this.addObj.formType) {
          this.$message.error('请输入来样方式')
        } else if (!this.addObj.orderType) {
          this.$message.error('请选择检验类别')
                } else if (this.sampleList.length < 1) {
                    this.$message.error('请添加一个样品')
                } else if (!this.sampleList.every(m => m.sample)) {
@@ -720,13 +763,15 @@
            // } else {
            //     this.$parent.playOrder(0)
            // }
            this.issuedDialogVisible = true;
            this.$axios.post(this.$api.insOrder.selectOrderManDay, {
              id: this.currentId
            }).then(ress => {
              this.distributeData.orderId = this.currentId
              this.distributeData.appointed = ress.data
            })
            setTimeout(()=>{
              this.issuedDialogVisible = true;
            },1000)
          })
        }else{
          // 不通过
@@ -770,6 +815,7 @@
                    this.addObj.company = selects.company
                    this.addObj.custom = selects.name
                    this.addObj.code = selects.code
          this.addObj.phone = selects.phone
                })
            },
            searchFilter() {
@@ -1059,6 +1105,16 @@
                    this.units = res.data
                })
            },
      selectEnumByCategoryForOrderType() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "检验类别"
        }).then(res => {
          this.orderType = res.data
          if(res.data.length > 0){
            this.addObj.orderType = res.data[0].value
          }
        })
      },
            methodChange(val, row) {
                this.getProductLoad = true
                this.$axios.post(this.$api.standardTree.selectStandardProductList, {
@@ -1070,7 +1126,7 @@
                    }
                }).then(res => {
                    res.data.forEach(a => {
                        a.state = 1
            a.state = 0
                    })
                    row.insProduct = this.HaveJson(res.data)
                    this.getProductLoad = false
@@ -1181,6 +1237,23 @@
            this.issuedDialogVisible = false;
            this.$parent.playOrder(0)
          })
      },
      selectEnumByCategoryForSonLaboratory() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "子实验室"
        }).then(res => {
          this.factory = []
          res.data.forEach(a=>{
            this.filters.push({
              text: a.label,
              value: a.value
            })
          })
        })
      },
      filterHandler(value, row, column) {
        const property = column['property'];
        return row[property] === value;
      }
        }
    }
src/components/do/b1-inspect-order-plan/Inspection.vue
@@ -138,6 +138,12 @@
    color: #3A7BFA;
    background-color: #fff;
  }
  .inspection .center-box .el-input__inner{
    font-size: 12px;
    padding: 0 6px;
    text-align: center;
  }
</style>
<template>
  <div v-loading="loading" class="inspection">
@@ -193,9 +199,9 @@
                :rowspan="n.v.mc&&n.v.mc.rs?n.v.mc.rs:1"
                :style="`background:${n.v.bg};color:${n.v.fc};font-size:${n.v.fs}px;width:${item.style.columnlen[n.c]}px !important;height:${item.style.rowlen[n.r]}px;font-wight:${n.v.bl?'bold':''};`">
                <div class="content" :class="`content-h-${n.v.ht} content-v-${n.v.vt}`">
                  <template v-if="n.v.ps!=undefined && n.v.ps.value==='检验值'">
                  <template v-if="n.v.ps!=undefined && n.v.ps.value==='检验值' && state==1">
                    <el-input v-if="getInspectionValueType(n.i) == 1" class="table_input" v-model="n.v.v"
                      :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')||state>1"
                      :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')"
                      @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`)">
                      <el-button slot="append" type="primary" icon="el-icon-edit" size="mini" v-if="getInspectionItemType(n.i) == 1" @click="getSystemValue(n)"></el-button>
                    </el-input>
@@ -214,9 +220,9 @@
                    <span v-else-if="n.v.v===0" :style="`font-family:${n.v.ff} !important;color: red;`">不合格</span>
                    <span v-else :style="`font-family:${n.v.ff} !important;`">待定</span>
                  </template>
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='设备编码'">
                  <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='设备编码' && state==1">
                    <el-select v-model="n.v.v" placeholder="设备" @visible-change="e=>getEquipOptions(e,n.i)"
                      :disabled="state>1">
                       remote @change="(val)=>changeEquip(val, n)">
                      <el-option v-for="item in equipOptions" :key="item.value" :label="item.value" :value="item.value">
                      </el-option>
                    </el-select>
@@ -261,12 +267,12 @@
      <ValueTable class="value-table" ref="insOrderPlan" :url="$api.insOrderPlan.selectInsOrderPlanList"
        :componentData="componentData" :key="upIndex" />
    </el-drawer>
    <el-dialog title="检验复核" :visible.sync="reviewDia" width="400px">
      <div class="body" style="display: flex;" v-if="reviewDia">
        <div class="search_label" style="width: 120px;"><span class="required-span">* </span>不通过原因:</div>
        <div class="search_input">
    <el-dialog title="检验复核" :visible.sync="reviewDia" width="500px">
      <div class="body" style="display: flex;padding: 10px;" v-if="reviewDia">
        <div class="search_label" style="width: 150px;"><span class="required-span">* </span>不通过的理由:</div>
        <div class="search_input" style="width: 100%;">
          <el-input size="small" clearable v-model="noReason" type="textarea"
            :autosize="{ minRows: 3, maxRows: 5}"></el-input>
            :autosize="{ minRows: 4}"></el-input>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
@@ -375,6 +381,7 @@
              comValue: [],
              resValue: null,
              equipValue: [],
              equipName: [],
              insResult: null
            }
          })
@@ -396,6 +403,7 @@
            comValue: [],
            resValue: null,
            equipValue: [],
            equipName: [],
            insResult: null
          }
        })
@@ -616,6 +624,10 @@
              b.v.v = ''
              this.param[b.i].equipValue.push(b)
            }
            if (b.v.ps != undefined && b.v.ps.value === '设备名称') {
              b.v.v = ''
              this.param[b.i].equipName.push(b)
            }
            if (b.v.ps != undefined && b.v.ps.value === '最终值') {
              b.v.v = ''
              if (b.i === undefined) {
@@ -674,6 +686,12 @@
            let equipValue = JSON.parse(a.insProductResult.equipValue)
            for (var i = 0; i < equipValue.length; i++) {
              this.param[a.id].equipValue[i].v.v = equipValue[i].v
            }
          } catch (e) {}
          try {
            let equipName = JSON.parse(a.insProductResult.equipName)
            for (var i = 0; i < equipName.length; i++) {
              this.param[a.id].equipName[i].v.v = equipName[i].v
            }
          } catch (e) {}
          try {
@@ -893,9 +911,11 @@
      },
      getEquipOptions(e, id) {
        if (e) {
          let category = this.currentSample.insProduct.find(m => m.id == id).deviceGroup
          this.equipOptions = []
          let product = this.currentSample.insProduct.find(m => m.id == id)
          this.$axios.post(this.$api.deviceScope.selectDeviceByCategory, {
            category
            inspectionItem: product.inspectionItem,
            inspectionItemSubclass: product.inspectionItemSubclass
          }).then(res => {
            if (res.code === 200 && res.data) {
              this.equipOptions = res.data.map(m => {
@@ -989,6 +1009,17 @@
          }
          this.$message.success('已保存')
        })
      },
      changeEquip(val,n){
        for(let i in this.equipOptions){
          if(this.equipOptions[i].value === val){
            for(let i1 in this.param[n.i].equipName){
              if(this.param[n.i].equipName[i1].i === n.i && this.param[n.i].equipName[i1].r === n.r){
                this.param[n.i].equipName[i1].v.v = this.equipOptions[i].label
              }
            }
          }
        }
      }
    }
  }
src/components/view/a5-capacity-scope.vue
@@ -210,8 +210,8 @@
                    }],
                    tagField: {},
                    selectField: {},
                    requiredAdd: ['specimenName'],
                    requiredUp: ['specimenName']
                    requiredAdd: ['specimenName','code'],
                    requiredUp: ['specimenName','code']
                },
                itemParameterEntityCopy: {},
                testObjectDataEntityCopy: {},
src/components/view/a5-laboratory-qualifications.vue
@@ -61,7 +61,7 @@
                    </el-radio-group>
                </el-col>
                <el-col :span="12" style="text-align: right;" v-if="radio==0">
                    <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">新增</el-button>
                    <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">资质更新</el-button>
                    <el-button size="medium" icon="el-icon-delete" @click="handleDel" v-if="delPower">删除</el-button>
                </el-col>
            </el-row>
@@ -149,7 +149,7 @@
        </div>
    <el-dialog title="资质更新" :visible.sync="qualificationsConnectVisible" width="400px">
            <div class="search_thing" style="margin-bottom: 16px;">
        <div class="search_label" style="width:120px">资质名称:</div>
        <div class="search_label" style="width:120px"><span class="required-span">* </span>资质名称:</div>
        <div class="search_input">
          <el-select v-model="formData.name" placeholder="请选择" style="width: 100%;" size="small" clearable>
            <el-option
@@ -162,7 +162,7 @@
        </div>
      </div>
      <div class="search_thing" style="margin-bottom: 16px;">
        <div class="search_label" style="width:120px">资质编码:</div>
        <div class="search_label" style="width:120px"><span class="required-span">* </span>资质编码:</div>
        <div class="search_input">
          <el-input
          size="small"
@@ -172,7 +172,7 @@
        </div>
      </div>
      <div class="search_thing" style="margin-bottom: 16px;">
        <div class="search_label" style="width:120px">颁发机构:</div>
        <div class="search_label" style="width:120px"><span class="required-span">* </span>颁发机构:</div>
        <div class="search_input">
          <el-input
          size="small"
@@ -191,7 +191,7 @@
                    v-model="formData.explanation"></el-input>
        </div>
      </div>
      <div class="search_thing" style="margin-bottom: 16px;">
      <!-- <div class="search_thing" style="margin-bottom: 16px;">
        <div class="search_label" style="width:120px">首次颁发时间:</div>
        <div class="search_input">
          <el-date-picker style="width:100%" v-model="formData.firstTime"
@@ -216,9 +216,9 @@
          placeholder="选择日期">
                    </el-date-picker>
        </div>
      </div>
      </div> -->
      <div class="search_thing" style="margin-bottom: 16px;">
        <div class="search_label" style="width:120px">到期颁发时间:</div>
        <div class="search_label" style="width:120px"><span class="required-span">* </span>到期时间:</div>
        <div class="search_input">
          <el-date-picker style="width:100%" v-model="formData.expireTime"
          type="datetime"
src/components/view/b1-inspect-order-plan.vue
@@ -229,7 +229,7 @@
                            type: 'text',
                            method: 'handleInspection',
                            disabFun: (row, index) => {
                                return row.userId == null || row.insState == 3
                                return row.userId == null || row.insState == 3 || row.insState == 5
                            }
                        }, {
                            id: '',
@@ -237,7 +237,7 @@
                            type: 'text',
                            method: 'handleConnect',
                            disabFun: (row, index) => {
                                return row.userId == null || row.insState == 3
                                return row.userId == null || row.orderUserId == null || row.insState == 5  || row.insState == 3
                            }
                        },
                        {
src/components/view/b1-inspection-order.vue
@@ -172,7 +172,7 @@
                    </el-row>
                </span>
            </el-dialog>
            <el-dialog title="数据查看" :visible.sync="dataDialogVisible" width="70%">
            <el-dialog title="数据查看" :visible.sync="dataDialogVisible" width="80%">
                <div style="height: 70vh;overflow-y: auto;" v-if="dataDialogVisible">
                    <ValueTable ref="ValueTableDataLook" :url="$api.insOrder.selectSampleAndProductByOrderId"
                        :componentData="componentDataDataLook"/>
@@ -233,7 +233,7 @@
                        type: 'text',
                        method: 'handleDataLook',
                        disabFun: (row, index) => {
                            return row.state != 1
                            return row.state != 1 && row.state != 4
                        }
                    }, {
                        id: 'download',
@@ -241,7 +241,7 @@
                        type: 'text',
                        method: 'download',
                        disabFun: (row, index) => {
                            return row.state != 1 || row.reportId == null
                            return row.state != 4 || row.reportId == null
                        }
                    }, {
                        id: 'verify',
@@ -257,7 +257,7 @@
                        type: 'text',
                        method: 'handlEquash',
                        disabFun: (row, index) => {
                            return row.state == 2 || row.state == 3
                            return row.state != 1 && row.state != 0
                        }
                    }, {
                        font: '分配',
@@ -290,6 +290,36 @@
                        },
                        createUser: {
                            select: []
                        },
            orderType: {
              select: []
            },
            processing: {
              select: [{
                value: 1,
                label: '实验室处理'
              },{
                value: 0,
                label: '委托单位取回'
              }]
            },
            isLeave: {
              select: [{
                value: 1,
                label: '留样'
              },{
                value: 0,
                label: '不留样'
              }]
            },
            send: {
              select: [{
                value: 1,
                label: '自取'
              },{
                value: 0,
                label: '其他'
              }]
                        }
                    },
                    selectField: {},
@@ -322,10 +352,25 @@
                                label: '不合格',
                                type: 'danger'
                            }]
                        },
                        inspectionValueType: {select: []}
                        }
                    },
                    selectField: {},
          spanConfig:{
            rows:[
              {
                name:'sampleCode',
                index:0
              },
              {
                name:'sample',
                index:1
              },
              {
                name:'model',
                index:2
              }
            ]
          },
                    requiredAdd: [],
                    requiredUp: []
                },
@@ -364,7 +409,7 @@
            this.getUserMenu()
            this.getAuthorizedPerson()
            this.getInsStateDicts()
            this.selectEnumByCategoryForInspectionValueType()
      this.selectEnumByCategoryForOrderType()
        },
        methods: {
            getAuthorizedPerson() {
@@ -436,7 +481,9 @@
                this.dataDialogVisible = true;
            },
            // 下载报告
            download(row) {},
            download(row) {
        console.log(row);
      },
            // 审核
            handleVerify(row) {
                // this.verifyDialogVisible = true;
@@ -537,11 +584,11 @@
                    this.componentDataDataLook.tagField.insState.select = data
                })
            },
            selectEnumByCategoryForInspectionValueType() {
      selectEnumByCategoryForOrderType() {
                this.$axios.post(this.$api.enums.selectEnumByCategory, {
                    category: "检验值类型"
          category: "检验类别"
                }).then(res => {
                    this.componentDataDataLook.tagField.inspectionValueType.select = res.data
          this.componentData.tagField.orderType.select = res.data
                })
            },
        }
src/components/view/b1-report-preparation.vue
@@ -88,9 +88,11 @@
                    :key="upIndex"/>
            </div>
        </div>
    <el-dialog title="在线编制" :visible.sync="claimVisible" width="22cm" :modal-append-to-body="false" :fullscreen="fullscreen">
    <el-dialog title="在线编制" :visible.sync="claimVisible" width="22cm" :modal-append-to-body="false"
      :fullscreen="fullscreen">
      <div class="full-screen">
        <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i>
        <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"
          v-if="!fullscreen"></i>
        <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" >
      </div>
      <Word style="height:70vh" :class="{fullscreen:fullscreen}" v-if="claimVisible" ref="Word" :value="value"/>
@@ -99,7 +101,8 @@
                <el-button type="primary" @click="confirmClaim">确 定</el-button>
            </span>
        </el-dialog>
    <el-dialog title="报告审核" :visible.sync="issuedVisible" width="400px" :modal-append-to-body="false" :fullscreen="fullscreen">
    <el-dialog title="报告审核" :visible.sync="issuedVisible" width="400px" :modal-append-to-body="false"
      :fullscreen="fullscreen">
      <!-- <div class="full-screen">
        <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i>
        <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" >
@@ -109,18 +112,17 @@
        <el-button size="small">不通过</el-button>
      </div> -->
      <span slot="footer" class="dialog-footer">
                <el-button @click="issuedReasonVisible=true">不通过</el-button>
                <el-button @click="issuedReasonVisible=true" :disabled="loadingIssued">不通过</el-button>
                <el-button type="primary" @click="subIssued" :loading="loadingIssued">通 过</el-button>
            </span>
        </el-dialog>
    <el-dialog title="不通过原因" :visible.sync="issuedReasonVisible" width="400px" :modal-append-to-body="false">
      <div class="search_thing">
        <div class="search_label">不通过原因:</div>
        <div class="search_input"><el-input size="small" placeholder="请输入" clearable
            v-model="reason"></el-input></div>
        <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="reason"></el-input></div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="issuedReasonVisible=false">取消</el-button>
        <el-button @click="issuedReasonVisible=false" :disabled="loadingIssuedReason">取消</el-button>
                <el-button type="primary" @click="handleIssuedReason" :loading="loadingIssuedReason">确定</el-button>
            </span>
        </el-dialog>
@@ -134,18 +136,17 @@
        <el-button size="small">不批准</el-button>
      </div> -->
      <span slot="footer" class="dialog-footer">
                <el-button @click="approveReasonVisible=true">不批准</el-button>
                <el-button @click="approveReasonVisible=true" :disabled="loadingApprove">不批准</el-button>
                <el-button type="primary" @click="subApprove" :loading="loadingApprove">批 准</el-button>
            </span>
        </el-dialog>
    <el-dialog title="不批准原因" :visible.sync="approveReasonVisible" width="400px" :modal-append-to-body="false">
      <div class="search_thing">
        <div class="search_label">不批准原因:</div>
        <div class="search_input"><el-input size="small" placeholder="请输入" clearable
            v-model="reason"></el-input></div>
        <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="reason"></el-input></div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="approveReasonVisible=false">取消</el-button>
        <el-button @click="approveReasonVisible=false" :disabled="loadingApproveReason">取消</el-button>
                <el-button type="primary" @click="handleApproveReason" :loading="loadingApproveReason">确定</el-button>
            </span>
        </el-dialog>
@@ -156,7 +157,9 @@
  import ValueTable from '../tool/value-table.vue'
  import Word from '../tool/word.vue'
  import file from '../../util/file';
  import { convertToHtml } from 'mammoth';
  import {
    convertToHtml
  } from 'mammoth';
    export default {
        components: {
            ValueTable,
@@ -233,9 +236,11 @@
            type: 'text',
            method: 'handleApprove',
            disabFun: (row, index) => {
              return row.state == null||row.state == 0||row.isExamine == 0||row.isExamine == null ||row.isRatify==1
                return row.state == null || row.state == 0 || row.isExamine == 0 || row.isExamine == null || row
                  .isRatify == 1
            }
          }],
            }
          ],
          linkEvent: {
            // code: {
            //   method: 'selectAllByOne'
@@ -432,12 +437,12 @@
                                id: this.currentInfo.id,
                isExamine: 1
          }).then(res => {
          this.loadingIssued = false;
            if (res.code === 201) {
              return
            }
            this.$message.success('提交成功')
            this.refreshTable()
            this.loadingIssued = false;
            this.currentInfo = null;
            this.issuedVisible = false;
          }).catch(e => {
@@ -451,6 +456,20 @@
      },
      subApprove(){
        this.loadingApprove = true;
        this.$axios.post(this.$api.insReport.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()
          this.currentInfo = null;
          this.approveVisible = false;
        })
      },
      handleSubmit(row){
        this.$confirm('是否提交当前报告?', "提交", {
@@ -481,12 +500,12 @@
                isExamine: 0,
                examineTell:this.reason
          }).then(res => {
          this.loadingIssuedReason = false;
            if (res.code === 201) {
              return
            }
            this.$message.success('操作成功')
            this.refreshTable()
            this.loadingIssuedReason = false;
            this.currentInfo = null;
            this.reason = '';
            this.issuedVisible = false;
@@ -501,6 +520,25 @@
          return this.$message.error('请输入原因')
        }
        this.loadingApproveReason = true
        this.$axios.post(this.$api.insReport.examineReport, {
          id: this.currentInfo.id,
          isExamine: 0,
          examineTell: this.reason
        }).then(res => {
          this.loadingApproveReason = false
          if (res.code === 201) {
            return
          }
          this.$message.success('操作成功')
          this.refreshTable()
          this.currentInfo = null;
          this.reason = '';
          this.issuedVisible = false;
          this.issuedReasonVisible = false;
        }).catch(e => {
          this.$message.error('操作失败')
          this.loadingIssuedReason = false;
        })
      }
    }
  }
src/components/view/b2-standard.vue
@@ -60,6 +60,7 @@
    .product_table .el-table {
        height: 100%;
    }
  .sort{
    width: 80% !important;
    overflow: hidden;
@@ -169,7 +170,8 @@
                    <!-- <el-table-column prop="inspectionItemClassify" label="检验项类型" width="120" show-overflow-tooltip></el-table-column> -->
                    <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140"
                        show-overflow-tooltip></el-table-column>
                    <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip></el-table-column>
          <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip :filters="filters"
            :filter-method="filterHandler"></el-table-column>
                    <el-table-column prop="ask" label="要求值" min-width="200px">
                        <template slot-scope="scope">
                            <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable
@@ -362,7 +364,8 @@
                    },
                    selectField: {},
                },
                expandedKeys: []
        expandedKeys: [],
        filters: []
            }
        },
        mounted() {
@@ -378,6 +381,7 @@
            this.selectEnumByCategoryForValue()
            this.selectEnumByCategoryForSpecial()
            this.selectEnumByCategoryForInspectionValueType()
      this.selectEnumByCategoryForSonLaboratory()
        },
        methods: {
            filterNode(value, data) {
@@ -450,6 +454,19 @@
                    category: "工厂"
                }).then(res => {
                    this.factory = res.data
        })
      },
      selectEnumByCategoryForSonLaboratory() {
        this.$axios.post(this.$api.enums.selectEnumByCategory, {
          category: "子实验室"
        }).then(res => {
          this.factory = []
          res.data.forEach(a=>{
            this.filters.push({
              text: a.label,
              value: a.value
            })
          })
                })
            },
            selectEnumByCategoryForsampleType() {
@@ -813,6 +830,10 @@
                    this.$message.success('已保存')
                })
            },
      filterHandler(value, row, column) {
        const property = column['property'];
        return row[property] === value;
      }
        }
    }
</script>
src/components/view/index-index.vue
@@ -361,7 +361,7 @@
                <p>{{ m.theme }}</p>
              </div>
              <div class="list3-item-info">
                <p style="width: 73%;-webkit-line-clamp: 1;" class="ellipsis-multiline">
                <p style="width: 73%;-webkit-line-clamp: 1;cursor: pointer;" class="ellipsis-multiline" @click="goNoticeDetail(m)">
                  <!-- 编号<span style="color:#3A7BFA;"> SB20240101-001 </span>的设备将于2023-09-09 11:11:11过期 -->
                  {{ m.content }}
                </p>
@@ -677,6 +677,19 @@
          })
        })
      },
      goNoticeDetail(row){
      this.$axios.put(this.$api.informationNotification.triggerModificationStatusToRead+'/'+row.id).then(res => {
        row.num = Math.random(100);
        this.$bus.$emit("change", JSON.stringify(row));
        this.$parent.addTab({
          v: "消息详情",
          i: "el-icon-s-tools",
          u: "notice-detail",
          k:35,
          p: "abcd"
        },29);
      })
    },
        },
    }
</script>
src/components/view/notice-detail.vue
@@ -16,8 +16,8 @@
      </div>
    </div>
    <div class="info-box" v-if="noticeInfo.jumpPath">
      <component class="notice-content" :is="noticeInfo.jumpPath" style="height: 500px;" >
          </component>
      <!-- <component class="notice-content" :is="noticeInfo.jumpPath" style="height: 500px;" >
          </component> -->
    </div>
  </div>
</template>
@@ -47,6 +47,7 @@
    this.noticeInfo = JSON.parse(sessionStorage.getItem("noticeInfo"));
    this.$bus.$on("change", (msg) => {
      this.noticeInfo = JSON.parse(msg);
      console.log(this.noticeInfo);
      sessionStorage.setItem("noticeInfo", msg);
    });
  },
src/main.js
@@ -13,9 +13,9 @@
//本地
Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80";
// const javaApi = 'http://192.168.11.200:8001';//李
const javaApi = 'http://192.168.11.200:8001';//李
// const javaApi = 'http://192.168.11.249:8001';//张
const javaApi = 'http://192.168.11.50:8001';//姜
// const javaApi = 'http://192.168.11.50:8001';//姜
// const javaApi = 'http://192.168.11.2:8001';//柴
// const javaApi = 'http://114.132.189.42:9006';//测试服
//胜云服务器