spring
2025-04-07 6816ee4cbdaa253c2cd452e0e582a351860ffbe7
成品检验项分配人员
已修改8个文件
已添加1个文件
600 ■■■■■ 文件已修改
src/api/business/rawMaterialOrder.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/management.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/components/EditInspectionItem.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/index.vue 93 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrderComponents/materialOrder/dataLookVisible.vue 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/productOrder/components/issuedDialog.vue 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/productOrder/index.vue 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/statisticalCharts/itemInspectionAnalysis/index.vue 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/capability/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/rawMaterialOrder.js
@@ -295,3 +295,12 @@
    params: query,
  });
}
// æ£€éªŒé¡¹åˆ†é…äººå‘˜
export function batchUpdateInsProductCheckUser(query) {
  return request({
    url: "/insOrder/batchUpdateInsProductCheckUser",
    method: "post",
    data: query,
  });
}
src/views/CNAS/resourceDemand/device/component/management.vue
@@ -490,10 +490,10 @@
                { label: "所属部门", prop: "laboratoryName" },
                { label: "检验项目", prop: "insProductItem" },
                { label: "校准服务机构", prop: "calibrationServices" },
                { label: "最近校准日期", prop: "lastCalibrationDateTwo" },
                { label: "最近核查日期", prop: "lastCalibrationDate" },
                { label: "下次校准日期", prop: "nextCalibrationDateTwo" },
                { label: "下次核查日期", prop: "nextCalibrationDate" },
                { label: "最近校准日期", prop: "lastCalibrationDate" },
                { label: "最近核查日期", prop: "lastCalibrationDateTwo" },
                { label: "下次校准日期", prop: "nextCalibrationDate" },
                { label: "下次核查日期", prop: "nextCalibrationDateTwo" },
                {
                    label: "设备分类", prop: "largeCategory", dataType: "tag",
                    formatData: (params) => {
src/views/business/inspectionTask/components/EditInspectionItem.vue
@@ -1,11 +1,6 @@
<template>
  <div>
    <el-dialog
      :visible.sync="editInspectionDia"
      title="修改检验项"
      width="80%"
      @close="editInspectionDia = false"
    >
    <el-dialog :visible.sync="editInspectionDia" title="修改检验项" width="80%" @close="editInspectionDia = false">
      <div>
        <el-form :model="entity" :inline="true">
          <el-form-item label="检验项" prop="outputWorkTime">
@@ -16,14 +11,8 @@
          </el-form-item>
        </el-form>
      </div>
      <lims-table
        :column="editColumn"
        :table-data="editTableData"
        :table-loading="editLoading"
        :page="page"
        height="560"
        @pagination="pagination"
      >
      <lims-table :column="editColumn" :table-data="editTableData" :table-loading="editLoading" :page="page"
        height="560" @pagination="pagination">
      </lims-table>
    </el-dialog>
    <el-dialog :visible.sync="editAskDia" title="修改" width="50%">
@@ -35,30 +24,16 @@
          <el-input v-model="editForm.tell" type="textarea"></el-input>
        </el-form-item>
        <el-form-item label="检验值类型">
          <el-select
            v-model="editForm.inspectionValueType"
            clearable
            placeholder="请选择"
            size="small"
            style="width: 100%"
          >
            <el-option
              v-for="dict in inspectionValueType"
              :key="dict.value"
              :label="dict.label"
              :value="dict.value"
            ></el-option>
          <el-select v-model="editForm.inspectionValueType" clearable placeholder="请选择" size="small"
            style="width: 100%">
            <el-option v-for="dict in inspectionValueType" :key="dict.value" :label="dict.label"
              :value="dict.value"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="editAskDia = false">取 æ¶ˆ</el-button>
        <el-button
          :loading="handleEditLoading"
          type="primary"
          @click="handleEdit"
          >ç¡® å®š</el-button
        >
        <el-button :loading="handleEditLoading" type="primary" @click="handleEdit">ç¡® å®š</el-button>
      </span>
    </el-dialog>
  </div>
@@ -137,6 +112,7 @@
          minWidth: "120px",
          prop: "model",
        },
        { label: "检验人", prop: "checkUserName" },
        {
          dataType: "action",
          width: "80px",
src/views/business/inspectionTask/index.vue
@@ -5,12 +5,12 @@
        <el-form :model="queryParams" ref="queryParams" size="small" :inline="true">
          <el-form-item label="委托编号" prop="entrustCode">
            <el-input v-model="queryParams.entrustCode" clearable placeholder="请输入" size="small"
                      @keyup.enter.native="refreshTable()"></el-input>
              @keyup.enter.native="refreshTable()"></el-input>
          </el-form-item>
          <el-form-item label="检验状态" prop="insState">
            <el-select v-model="queryParams.insState" size="small" style="width: 100%" @change="refreshTable()">
              <el-option v-for="(a, i) in dict.type.inspection_task_state" :key="i" :label="a.label"
                         :value="a.value"></el-option>
                :value="a.value"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item>
@@ -30,7 +30,7 @@
            </ul>
            <div>
              <el-checkbox v-model="alone" class="view-self-checkbox"
                           @change="changeCheckBox"><span>我的任务</span></el-checkbox>
                @change="changeCheckBox"><span>我的任务</span></el-checkbox>
            </div>
          </div>
          <div class="center-title">
@@ -39,27 +39,24 @@
          </div>
        </div>
        <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
          :rowClassName="rowClassName" :height="'calc(100vh - 300px)'" @pagination="pagination"
          key="tableData0">
          :rowClassName="rowClassName" :height="'calc(100vh - 300px)'" @pagination="pagination" key="tableData0">
          <div slot="action" slot-scope="scope">
            <el-button size="small" type="text" @click="handleDataLook(scope.row)">数据查看</el-button>
            <el-button type="text" size="small"
                       :disabled="(scope.row.userName == null || scope.row.insState == 3 || scope.row.insState == 5) && checkPermi(['update:product:onPlan'])"
                       @click="editInspection(scope.row)">修改检验值</el-button>
              :disabled="(scope.row.userName == null || scope.row.insState == 3 || scope.row.insState == 5) && checkPermi(['update:product:onPlan'])"
              @click="editInspection(scope.row)">修改检验值</el-button>
            <el-button type="text" size="small" :disabled="(
                  scope.row.userName == null ||
                  scope.row.insState == 3 ||
                  scope.row.insState == 5 ||
                  (scope.row.userName && !scope.row.userName.includes(nickName))
                )"
                       @click="handleInspection(scope.row)">检验</el-button>
              scope.row.userName == null ||
              scope.row.insState == 3 ||
              scope.row.insState == 5 ||
              (scope.row.userName && !scope.row.userName.includes(nickName))
            )" @click="handleInspection(scope.row)">检验</el-button>
            <el-button type="text" size="small" :disabled="(
                  scope.row.userName == null ||
                  scope.row.insState == 5 ||
                  scope.row.insState == 3 ||
                  (scope.row.userName && !scope.row.userName.includes(nickName))
                )"
                       @click="handleConnect(scope.row)">交接</el-button>
              scope.row.userName == null ||
              scope.row.insState == 5 ||
              scope.row.insState == 3 ||
              (scope.row.userName && !scope.row.userName.includes(nickName))
            )" @click="handleConnect(scope.row)">交接</el-button>
            <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">原始记录</el-button>
            <el-popover placement="bottom" trigger="hover" style="margin-left: 6px">
              <template #reference>
@@ -67,23 +64,22 @@
              </template>
              <div>
                <el-button :disabled="(scope.row.insState != 3 || scope.row.userName == null ||
                  (scope.row.userName && !scope.row.userName.includes(nickName)))" style="margin-left: 10px" type="text" size="small" @click="download(scope.row)">下载报告</el-button>
                <el-upload ref='upload'
                           :action="javaApi + '/insReport/inReport'"
                           :before-upload="beforeUpload"
                           :data="{id: scope.row.insReportId}"
                           :headers="uploadHeader" :on-error="onError"
                           :on-success="handleSuccessUp"
                           :show-file-list="false"
                           style="display: inline;margin: 0 6px"
                           accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'>
                  (scope.row.userName && !scope.row.userName.includes(nickName)))" style="margin-left: 10px"
                  type="text" size="small" @click="download(scope.row)">下载报告</el-button>
                <el-upload ref='upload' :action="javaApi + '/insReport/inReport'" :before-upload="beforeUpload"
                  :data="{ id: scope.row.insReportId }" :headers="uploadHeader" :on-error="onError"
                  :on-success="handleSuccessUp" :show-file-list="false" style="display: inline;margin: 0 6px"
                  accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'>
                  <el-button :disabled="(scope.row.insState != 3 || scope.row.userName == null ||
                  (scope.row.userName && !scope.row.userName.includes(nickName)))" size="small" type="text">上传</el-button>
                    (scope.row.userName && !scope.row.userName.includes(nickName)))" size="small"
                    type="text">上传</el-button>
                </el-upload>
                <el-button :disabled="(scope.row.insState != 3 || scope.row.userName == null ||
                  (scope.row.userName && !scope.row.userName.includes(nickName)))" type="text" size="small" @click="handleRestore(scope.row)">还原</el-button>
                  (scope.row.userName && !scope.row.userName.includes(nickName)))" type="text" size="small"
                  @click="handleRestore(scope.row)">还原</el-button>
                <el-button :disabled="(scope.row.insState != 3 || scope.row.userName == null ||
                  (scope.row.userName && !scope.row.userName.includes(nickName)))" type="text" size="small" @click="handleIssued(scope.row)">查看报告</el-button>
                  (scope.row.userName && !scope.row.userName.includes(nickName)))" type="text" size="small"
                  @click="handleIssued(scope.row)">查看报告</el-button>
              </div>
            </el-popover>
          </div>
@@ -155,7 +151,7 @@
        </el-button>
      </div>
      <el-table :data="bindTableData" style="width: 100%" height="70vh" v-loading="bindTableDataLoading"
                :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border>
        :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border>
        <el-table-column prop="inspectionItemClass" label="检验项分类" width="150">
        </el-table-column>
        <el-table-column prop="inspectionItem" label="检验项" width="150">
@@ -171,7 +167,7 @@
    </el-dialog>
    <el-dialog :visible.sync="bindAddDialogVisible" title="选择绑定" width="600px">
      <el-table :data="bindAddTableData" style="width: 100%" height="60vh"
                :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border
        :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border
        @selection-change="handleBindAddSelectionChange">
        <el-table-column type="selection" width="55"> </el-table-column>
        <el-table-column prop="inspectionItemClass" label="检验项分类" width="150">
@@ -197,13 +193,14 @@
    <!--查看工时弹框-->
    <viewManHourDia ref="viewManHourDia"></viewManHourDia>
    <!--不合格复测查看弹框-->
    <un-pass-retest-result v-if="retestVisible" :retestInfo="retestInfo" :retestVisible="retestVisible" @closeRetestLook="closeRetestLook"></un-pass-retest-result>
    <un-pass-retest-result v-if="retestVisible" :retestInfo="retestInfo" :retestVisible="retestVisible"
      @closeRetestLook="closeRetestLook"></un-pass-retest-result>
    <!--报告查看-->
    <el-dialog title="报告查看" :visible.sync="issuedVisible" width="80vw" :modal-append-to-body="false"
               :fullscreen="fullscreen">
      :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>
          v-if="!fullscreen"></i>
        <img src="@/assets/images/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen = false;">
      </div>
      <div style="height: 80vh;" v-if="issuedVisible">
@@ -212,7 +209,7 @@
    </el-dialog>
    <el-dialog title="查看附件" :visible.sync="lookDialogVisible" width="800px" top="5vh" fullscreen>
      <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.tempUrlPdf" :currentFile="{}"
                   style="max-height: 90vh;overflow-y: auto;" />
        style="max-height: 90vh;overflow-y: auto;" />
    </el-dialog>
  </div>
</template>
@@ -237,8 +234,8 @@
  selectSampleAndProductByOrderId,
} from "@/api/business/inspectionTask.js";
import { mapGetters } from "vuex";
import {getRetestResult} from "@/api/business/rawMaterialOrder";
import {upReportUrl} from "@/api/business/insReport";
import { getRetestResult } from "@/api/business/rawMaterialOrder";
import { upReportUrl } from "@/api/business/insReport";
import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue";
import filePreview from "@/components/Preview/filePreview.vue";
export default {
@@ -499,6 +496,7 @@
            }
          },
        },
        { label: "检验人", prop: "checkUserName" },
        {
          dataType: "action",
          fixed: "right",
@@ -511,7 +509,7 @@
                this.getRetestResultInfo(row);
              },
              disabled: (row) => {
                return row.insResult!=0
                return row.insResult != 0
              },
            },
            {
@@ -639,7 +637,7 @@
    },
    // ä¸‹è½½æŠ¥å‘Š
    download(row) {
      let url = (row.urlS===null||row.urlS==='')?row.url:row.urlS
      let url = (row.urlS === null || row.urlS === '') ? row.url : row.urlS
      const link = document.createElement('a');
      link.href = this.javaApi + url;
      link.target = '_blank';
@@ -673,7 +671,7 @@
        fileName = row.tempUrlPdf
        fileType = "pdf"
      }
      fileName = fileName.replace('/word/','')
      fileName = fileName.replace('/word/', '')
      const userName = this.nickName
      this.option = {
        url: this.javaApi + "/word/" + fileName,
@@ -887,13 +885,13 @@
      });
    },
    // æŸ¥çœ‹ä¸åˆæ ¼å¤æµ‹ç»“æžœ
    getRetestResultInfo (row) {
      getRetestResult({insProductId: row.insProductId}).then(res => {
    getRetestResultInfo(row) {
      getRetestResult({ insProductId: row.insProductId }).then(res => {
        this.retestVisible = true
        this.retestInfo = res.data
      })
    },
    closeRetestLook () {
    closeRetestLook() {
      this.retestVisible = false
    },
    // ç»‘定检验项绑定
@@ -962,7 +960,7 @@
        });
      });
    },
    beforeUpload (file) {
    beforeUpload(file) {
      if (file.size > 1024 * 1024 * 10) {
        this.$message.error('上传文件不超过10M');
        this.$refs.upload.clearFiles()
@@ -1033,6 +1031,7 @@
  border-color: #3a7bfa;
  color: #3a7bfa;
}
.center-options {
  display: flex;
  align-items: center;
src/views/business/materialOrderComponents/materialOrder/dataLookVisible.vue
@@ -2,27 +2,28 @@
  <div>
    <el-dialog title="数据查看" :visible.sync="isShow" width="80%" @closed="$emit('closeDataLook')">
      <ul class="tab">
        <li v-for="(m,i) in dataVisibleTitle" :key="i" :class="{active:i===dataVisibleIndex}" @click="handleDataVisibleTab(m,i)">{{m.label}}</li>
        <li v-for="(m, i) in dataVisibleTitle" :key="i" :class="{ active: i === dataVisibleIndex }"
          @click="handleDataVisibleTab(m, i)">{{ m.label }}</li>
      </ul>
      <div>
        <lims-table :tableData="tableData" :column="column"
                    @pagination="pagination" height="500px" key="tableData"
                    :page="page" :tableLoading="tableLoading"></lims-table>
        <lims-table :tableData="tableData" :column="column" @pagination="pagination" height="500px" key="tableData"
          :page="page" :tableLoading="tableLoading"></lims-table>
      </div>
    </el-dialog>
    <un-pass-retest-result :retestVisible="retestVisible" :retestInfo="retestInfo" @closeRetestLook="closeRetestLook" v-if="retestVisible"></un-pass-retest-result>
    <un-pass-retest-result :retestVisible="retestVisible" :retestInfo="retestInfo" @closeRetestLook="closeRetestLook"
      v-if="retestVisible"></un-pass-retest-result>
  </div>
</template>
<script>
import UnPassRetestResult from "./unPassRetestResult.vue";
import limsTable from "@/components/Table/lims-table.vue";
import {getRetestResult, selectSampleAndProductByOrderId} from "@/api/business/rawMaterialOrder";
import { getRetestResult, selectSampleAndProductByOrderId } from "@/api/business/rawMaterialOrder";
export default {
  name: "dataLookVisible",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {limsTable, UnPassRetestResult},
  components: { limsTable, UnPassRetestResult },
  props: {
    dataDialogVisible: {
      type: Boolean,
@@ -30,7 +31,7 @@
    },
    dataLookInfo: {
      type: Object,
      default: () => {}
      default: () => { }
    },
  },
  data() {
@@ -39,17 +40,17 @@
      tableData: [],
      tableLoading: false,
      column: [
        {label: '样品编号', prop: 'sampleCode'},
        {label: '样品名称', prop: 'sample'},
        {label: '检验项分类', prop: 'inspectionItemClass'},
        {label: '检验项', prop: 'inspectionItem'},
        {label: '检验子项', prop: 'inspectionItemSubclass'},
        {label: '单位', prop: 'unit'},
        {label: '样品型号', prop: 'model'},
        {label: '条件', prop: 'radius'},
        {label: '电缆标识', prop: 'cableTag'},
        {label: '试验要求', prop: 'tell'},
        {label: '检验结果', prop: 'lastValue'},
        { label: '样品编号', prop: 'sampleCode' },
        { label: '样品名称', prop: 'sample' },
        { label: '检验项分类', prop: 'inspectionItemClass' },
        { label: '检验项', prop: 'inspectionItem' },
        { label: '检验子项', prop: 'inspectionItemSubclass' },
        { label: '单位', prop: 'unit' },
        { label: '样品型号', prop: 'model' },
        { label: '条件', prop: 'radius' },
        { label: '电缆标识', prop: 'cableTag' },
        { label: '试验要求', prop: 'tell' },
        { label: '检验结果', prop: 'lastValue' },
        {
          dataType: 'tag',
          label: '结果判定',
@@ -72,11 +73,12 @@
              return 'danger'
            } else if (params == 3) {
              return ''
            }  else {
            } else {
              return null
            }
          }
        },
        { label: "检验人", prop: "checkUserName" },
        {
          dataType: 'action',
          fixed: 'right',
@@ -89,17 +91,17 @@
              clickFun: (row) => {
                this.getRetestResult(row);
              },
              disabled: (row, index) =>  {
                return row.insResult!=0
              disabled: (row, index) => {
                return row.insResult != 0
              }
            },
          ]
        }
      ],
      page: {
        total:0,
        size:10,
        current:1
        total: 0,
        size: 10,
        current: 1
      },
      isShow: this.dataDialogVisible,
      dataVisibleTitle: [
@@ -126,7 +128,7 @@
  // æ–¹æ³•集合
  methods: {
    // åˆ‡æ¢æ•°æ®æŸ¥çœ‹tab栏
    handleDataVisibleTab (m, i) {
    handleDataVisibleTab(m, i) {
      this.dataVisibleIndex = i
      this.refreshTable()
    },
@@ -138,7 +140,7 @@
        this.entity.id = this.dataLookInfo.quarterOrderId
      }
      this.tableLoading = true
      const params = {...this.entity, ...this.page}
      const params = { ...this.entity, ...this.page }
      selectSampleAndProductByOrderId(params).then(res => {
        this.tableLoading = false
        if (res.code === 200) {
@@ -149,18 +151,18 @@
        this.tableLoading = false
      })
    },
    pagination (page) {
    pagination(page) {
      this.page.size = page.limit
      this.refreshTable()
    },
    // æŸ¥çœ‹ä¸åˆæ ¼å¤æµ‹ç»“æžœ
    getRetestResult (row) {
      getRetestResult({insProductId: row.insProductId}).then(res => {
    getRetestResult(row) {
      getRetestResult({ insProductId: row.insProductId }).then(res => {
        this.retestVisible = true
        this.retestInfo = res.data
      })
    },
    closeRetestLook () {
    closeRetestLook() {
      this.retestVisible = false
    },
  },
src/views/business/productOrder/components/issuedDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
<template>
  <div>
    <!-- æ£€éªŒé¡¹åˆ†é… -->
    <el-dialog :visible.sync="issuedDialog" title="分配检验项" top="5vh" width="80%" :loading="tableLoading">
      <el-table :data="tableData" style="width: 100%" height="70vh">
        <el-table-column label="样品编号" prop="sampleCode" width="160px">
        </el-table-column>
        <el-table-column label="样品名称" prop="sample">
        </el-table-column>
        <el-table-column label="样品型号" prop="model" width="190px">
        </el-table-column>
        <el-table-column label="检验项分类" prop="inspectionItemClass">
        </el-table-column>
        <el-table-column label="检验项" prop="inspectionItem">
        </el-table-column>
        <el-table-column label="检验子项" prop="inspectionItemSubclass">
        </el-table-column>
        <el-table-column label="分配人员" prop="checkUserId">
          <template slot-scope="scope">
            <el-select v-model="scope.row.checkUserId" clearable filterable placeholder="请选择" size="small"
              style="width: 100%;">
              <el-option v-for="(item, i) in personList" :key="i + 'gbnm.'" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
          </template>
        </el-table-column>
        <el-table-column label="试验室" prop="sonLaboratory">
        </el-table-column>
      </el-table>
      <span slot="footer" class="dialog-footer">
        <el-button @click="issuedDialog = false">取 æ¶ˆ</el-button>
        <el-button :loading="submitLoading" type="primary" @click="submit">ç¡® å®š</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import { selectSampleAndProductByOrderId, batchUpdateInsProductCheckUser } from "@/api/business/rawMaterialOrder";
import { selectUserCondition } from "@/api/performance/class";
export default {
  data() {
    return {
      issuedDialog: false,
      tableData: [],
      tableLoading: false,
      submitLoading: false,
      personList: []
    }
  },
  mounted() {
  },
  methods: {
    init(row) {
      this.issuedDialog = true;
      this.getList(row.id)
      this.getAuthorizedPerson()
    },
    getList(id) {
      this.tableLoading = true
      selectSampleAndProductByOrderId({ page: -1, size: -1, id }).then(res => {
        this.tableLoading = false
        if (res.code === 200) {
          this.tableData = res.data.records
        }
      }).catch(err => {
        this.tableLoading = false
      })
    },
    // èŽ·å–æŒ‡æ´¾äººå‘˜ä¸‹æ‹‰åˆ—è¡¨
    getAuthorizedPerson() {
      selectUserCondition({ type: 1 }).then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.name,
            value: a.id
          })
        })
        this.personList = data
      })
    },
    submit() {
      this.submitLoading = true;
      batchUpdateInsProductCheckUser({ insProductDtoList: this.tableData }).then(res => {
        this.submitLoading = false;
        if (res.code == 200) {
          this.$message.success('分配成功')
          this.issuedDialog = false
        }
      }).catch(err => {
        this.submitLoading = false;
      })
    }
  }
}
</script>
<style></style>
src/views/business/productOrder/index.vue
@@ -32,7 +32,7 @@
        </el-form-item>
        <el-form-item>
          <el-button :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'" style="color: #3A7BFA;" type="text"
                     @click="more = !more">{{ !more ? '更多' : '收起' }}</el-button>
            @click="more = !more">{{ !more ? '更多' : '收起' }}</el-button>
          <el-button size="mini" type="primary" @click="refreshTable()">查询</el-button>
          <el-button size="mini" @click="refresh()">重置</el-button>
        </el-form-item>
@@ -41,12 +41,18 @@
    <div class="table-tab">
      <div>
        <ul class="tab">
          <li :class="{ active: tabIndex === 0 }" v-if="checkPermi(['get:insOrder:reviewed'])" @click="handleTab(0)">待审核</li>
          <li :class="{ active: tabIndex === 1 }" v-if="checkPermi(['get:insOrder:checkout'])" @click="handleTab(1)">检验中</li>
          <li :class="{ active: tabIndex === 2 }" v-if="checkPermi(['get:insOrder:customerOrdered'])" @click="handleTab(2)">委托已检</li>
          <li :class="{ active: tabIndex === 3 }" v-if="checkPermi(['get:insOrder:spotCheck'])" @click="handleTab(3)">抽样已检</li>
          <li :class="{ active: tabIndex === 4 }" v-if="checkPermi(['get:insOrder:sendBack'])" @click="handleTab(4)">退回</li>
          <li :class="{ active: tabIndex === 5 }" v-if="checkPermi(['get:insOrder:revocation'])" @click="handleTab(5)">撤销</li>
          <li :class="{ active: tabIndex === 0 }" v-if="checkPermi(['get:insOrder:reviewed'])" @click="handleTab(0)">待审核
          </li>
          <li :class="{ active: tabIndex === 1 }" v-if="checkPermi(['get:insOrder:checkout'])" @click="handleTab(1)">检验中
          </li>
          <li :class="{ active: tabIndex === 2 }" v-if="checkPermi(['get:insOrder:customerOrdered'])"
            @click="handleTab(2)">委托已检</li>
          <li :class="{ active: tabIndex === 3 }" v-if="checkPermi(['get:insOrder:spotCheck'])" @click="handleTab(3)">
            æŠ½æ ·å·²æ£€</li>
          <li :class="{ active: tabIndex === 4 }" v-if="checkPermi(['get:insOrder:sendBack'])" @click="handleTab(4)">退回
          </li>
          <li :class="{ active: tabIndex === 5 }" v-if="checkPermi(['get:insOrder:revocation'])" @click="handleTab(5)">
            æ’¤é”€</li>
          <li :class="{ active: tabIndex === 6 }" v-if="checkPermi(['get:insOrder:all'])" @click="handleTab(6)">全部</li>
        </ul>
      </div>
@@ -86,8 +92,8 @@
      </el-dialog>
      <!-- æ’¤é”€ -->
      <el-dialog :before-close="handleClose" :visible.sync="quashDialogVisible" title="下单撤销" width="30%">
        <p v-if="!isQuash" style="font-size:16px;color:#333333">委托编号<span
            style="color:#34BD66">{{ this.insOrderRow.entrustCode }}</span>的信息是否撤销</p>
        <p v-if="!isQuash" style="font-size:16px;color:#333333">委托编号<span style="color:#34BD66">{{
          this.insOrderRow.entrustCode }}</span>的信息是否撤销</p>
        <el-form v-else ref="ruleForm" :label-position="labelPosition" :model="formData" label-width="150px">
          <el-form-item label="请输入撤销原因:">
            <el-input v-model="formData.specificationModel" size="small" style="width:60%"></el-input>
@@ -105,7 +111,7 @@
        </span>
      </el-dialog>
      <!-- ä¸‹å‘ -->
      <el-dialog :before-close="handleClose" :visible.sync="issuedDialogVisible" title="检验分配" width="400px">
      <!-- <el-dialog :before-close="handleClose" :visible.sync="issuedDialogVisible" title="检验分配" width="400px">
        <div class="body" style="max-height: 60vh;">
          <el-row>
            <el-col class="search_thing" style="width: 95%;">
@@ -145,7 +151,7 @@
            <el-button :loading="upLoad" type="primary" @click="submitForm2">ç¡® å®š</el-button>
          </el-row>
        </span>
      </el-dialog>
      </el-dialog> -->
      <el-dialog :visible.sync="dataDialogVisible" title="数据查看" width="80%" @close="closeDia">
        <div v-if="dataDialogVisible">
          <lims-table :tableData="tableDataLook" :column="tableDataLookColumn" @pagination="tableDataLookPagination"
@@ -168,7 +174,8 @@
        <span slot="footer" class="dialog-footer">
          <el-row>
            <el-button @click="handleNo">{{ deleteTilte == '撤销' ? '取 æ¶ˆ' : '不通过' }}</el-button>
            <el-button :loading="printLoading" type="primary" @click="submitDelete">{{ deleteTilte == '撤销' ? 'ç¡® å®š' : '通过'}}</el-button>
            <el-button :loading="printLoading" type="primary" @click="submitDelete">{{ deleteTilte == '撤销' ? 'ç¡® å®š' :
              '通过' }}</el-button>
          </el-row>
        </span>
      </el-dialog>
@@ -263,8 +270,8 @@
              <el-row style="margin-top: 0.01cm;font-size: 0.20cm;">
                <el-col style="display: flex;align-items: center;"><span>样品状态:&nbsp;
                  </span>
                  <span style="white-space: nowrap;"><span v-if="item.insState == 0">√</span><span v-if="item.insState != 0"
                      class="scor"></span>待检
                  <span style="white-space: nowrap;"><span v-if="item.insState == 0">√</span><span
                      v-if="item.insState != 0" class="scor"></span>待检
                    <span v-if="item.insState == 1">√</span><span v-if="item.insState != 1" class="scor"></span>在检
                    <span v-if="item.insState == 2">√</span><span v-if="item.insState != 2" class="scor"></span>已检
                    <span v-if="item.isLeave == 1">√</span><span v-if="item.isLeave != 1" class="scor"></span>留样</span>
@@ -293,6 +300,7 @@
      @closePrintDialog="closePrintDialog"></print-dialog>
    <!--添加遗漏检验项弹框-->
    <add-inspection-dia v-if="addInspectionDia" ref="addInspectionDia"></add-inspection-dia>
    <issuedDialog ref="issuedDialog" />
    <!--    <Inspection v-if="state>0" :key="InspectionKey" :inspectorList="inspectorList" :orderId="orderId"-->
    <!--                :sonLaboratory="sonLaboratory" :state="state"-->
    <!--                :typeSource="typeSource" @goback="goback" @refreshView="refreshView"/>-->
@@ -305,6 +313,7 @@
import PrintDialog from "@/views/business/productOrder/components/printDialog.vue";
import AddInspectionDia from "@/views/business/productOrder/components/addInspectionDia.vue";
import limsTable from "@/components/Table/lims-table.vue";
import issuedDialog from './components/issuedDialog.vue'
import {
  checkUpdate, delInsOrder,
  rawAllInsOrderExport,
@@ -314,14 +323,15 @@
} from "@/api/business/productOrder";
import { selectUserCondition } from "@/api/performance/class";
import { downFile, getFileList, selectSampleAndProductByOrderId } from "@/api/business/rawMaterialOrder";
import {mapGetters} from "vuex";
import { mapGetters } from "vuex";
export default {
  name: 'ProductOrder',
  components: {
    limsTable,
    AddInspectionDia,
    PrintDialog,
    vueQr
    vueQr,
    issuedDialog
  },
  data() {
    return {
@@ -498,7 +508,7 @@
                this.handleIssued(row);
              },
              disabled: (row, index) => {
                return row.state != 1 || !!row.assign
                return row.state != 1
              },
              showHide: (row) => {
                return this.tabIndex === 1
@@ -600,6 +610,7 @@
            }
          }
        },
        { label: "检验人", prop: "checkUserName" },
      ],
      filesDialogVisible: false, // é™„件查看弹框
      tableDataFile: [],
@@ -666,7 +677,7 @@
      entrustCodeInfo: {},
      submitCodeLoading: false,
      // äººå‘˜åˆ—表
      personList: [],
      // personList: [],
      orderId: '',
      revocationInsProductIds: '',
      componentDataDelete: [],
@@ -753,7 +764,7 @@
  },
  mounted() {
    this.refreshTable()
    this.getAuthorizedPerson()
    // this.getAuthorizedPerson()
  },
  activated() {
    this.refreshTable()
@@ -772,7 +783,7 @@
      }
      const params = { ...this.entity, state: this.tabList[this.tabIndex].value }
      this.tableLoading = true
      selectInsOrderParameter({...this.page,...params}).then(res => {
      selectInsOrderParameter({ ...this.page, ...params }).then(res => {
        this.upIndex++
        this.tableLoading = false
        if (res.code === 200) {
@@ -914,18 +925,18 @@
      this.printDialog = false
    },
    // èŽ·å–æŒ‡æ´¾äººå‘˜ä¸‹æ‹‰åˆ—è¡¨
    getAuthorizedPerson() {
      selectUserCondition({ type: 1 }).then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.name,
            value: a.id
          })
        })
        this.personList = data
      })
    },
    // getAuthorizedPerson() {
    //   selectUserCondition({ type: 1 }).then(res => {
    //     let data = []
    //     res.data.forEach(a => {
    //       data.push({
    //         label: a.name,
    //         value: a.id
    //       })
    //     })
    //     this.personList = data
    //   })
    // },
    handleClose() {
      this.verifyDialogVisible = false;
      this.quashDialogVisible = false;
@@ -974,7 +985,7 @@
      this.tableDataLookPage.size = page.limit
      this.getDataTableList(this.currentRow)
    },
    closeDia () {
    closeDia() {
      this.tableDataLookPage = {
        total: 0,
        size: 20,
@@ -1016,8 +1027,8 @@
    // ä¸‹è½½æŠ¥å‘Š
    download(row) {
      let url = row.urlS ? row.urlS : row.url;
      if(url){
        url = url.split('.')[0]+'.pdf'
      if (url) {
        url = url.split('.')[0] + '.pdf'
        const link = document.createElement('a');
        link.href = this.javaApi + url;
        link.target = '_blank';
@@ -1104,28 +1115,29 @@
    },
    // ä¸‹å‘
    handleIssued(row) {
      this.issuedDialogVisible = true;
      selectOrderManDay({
        id: row.id
      }).then(res => {
        this.distributeData.orderId = row.id
        this.distributeData.sampleId = row.sampleId
        this.distributeData.appointed = res.data
        this.distributeData.type = row.type
      })
      upPlanUser2({
        orderId: row.id,
      }).then(res => {
        if (res.code === 200 && res.data.length > 0) {
          this.sonLaboratoryList = [];
          res.data.forEach(m => {
            this.sonLaboratoryList.push({
              value: m,
              label: m
            })
          })
        }
      })
      // this.issuedDialogVisible = true;
      this.$refs.issuedDialog.init(row)
      // selectOrderManDay({
      //   id: row.id
      // }).then(res => {
      //   this.distributeData.orderId = row.id
      //   this.distributeData.sampleId = row.sampleId
      //   this.distributeData.appointed = res.data
      //   this.distributeData.type = row.type
      // })
      // upPlanUser2({
      //   orderId: row.id,
      // }).then(res => {
      //   if (res.code === 200 && res.data.length > 0) {
      //     this.sonLaboratoryList = [];
      //     res.data.forEach(m => {
      //       this.sonLaboratoryList.push({
      //         value: m,
      //         label: m
      //       })
      //     })
      //   }
      // })
    },
    submitForm2() {
      if (this.distributeData.appointed == null || this.distributeData.appointed == '') {
src/views/statisticalCharts/itemInspectionAnalysis/index.vue
@@ -3,16 +3,8 @@
    <div v-if="!isShowDataCom">
      <el-form ref="entity" size="small" :inline="true">
        <el-form-item style="width: 16%;">
          <el-date-picker
            v-model="datePicker"
            end-placeholder="结束日期"
            format="yyyy-MM-dd"
            placeholder="选择日期"
            range-separator="至"
            size="small"
            start-placeholder="开始日期"
            style="width: 100%;"
            type="daterange"
          <el-date-picker v-model="datePicker" end-placeholder="结束日期" format="yyyy-MM-dd" placeholder="选择日期"
            range-separator="至" size="small" start-placeholder="开始日期" style="width: 100%;" type="daterange"
            value-format="yyyy-MM-dd">
          </el-date-picker>
        </el-form-item>
@@ -26,13 +18,9 @@
          <el-input v-model="supplierName" clearable placeholder="请输入供应商名称" size="small"></el-input>
        </el-form-item>
        <el-form-item label="检验项名称" prop="supplierName">
          <el-select v-model="itemNames" :loading="selectLoading" clearable multiple placeholder="请选择"
                     size="small" style="width: 90%;" @focus="getItemList">
            <el-option
              v-for="item in itemNamesList"
              :key="item.value"
              :label="item.label"
              :value="item.value">
          <el-select v-model="itemNames" :loading="selectLoading" clearable multiple placeholder="请选择" size="small"
            style="width: 90%;" @focus="getItemList">
            <el-option v-for="item in itemNamesList" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
@@ -49,10 +37,8 @@
              <div>原材料项检分析列表</div>
              <el-button size="small" type="primary" @click="openShowData">查看数据分析</el-button>
            </div>
            <lims-table :tableData="editTableData" :column="editColumn"
                        height="400" key="tableData" :isSelection="true"
                        :handleSelectionChange="handleSelectionChange"
                        :tableLoading="editLoading"></lims-table>
            <lims-table :tableData="editTableData" :column="editColumn" height="400" key="tableData" :isSelection="true"
              :handleSelectionChange="handleSelectionChange" :tableLoading="editLoading"></lims-table>
          </div>
        </el-col>
      </el-row>
@@ -60,14 +46,9 @@
        <el-col :span="6" style="padding-top: 14px">
          <div style="display: flex;margin-left: 10px;align-items: center">
            <span style="width: 100px">分组类型:</span>
            <el-select v-model="groupType" clearable placeholder="请选择"
                       size="small"
                       style="width: 90%;" @change="getBarInfo">
              <el-option
                v-for="item in groupTypeList"
                :key="item.value"
                :label="item.label"
                :value="item.value">
            <el-select v-model="groupType" clearable placeholder="请选择" size="small" style="width: 90%;"
              @change="getBarInfo">
              <el-option v-for="item in groupTypeList" :key="item.value" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
          </div>
@@ -77,16 +58,8 @@
        <el-col :span="24">
          <div class="inspection-card">
            <div class="title">检验项数据对比</div>
            <Echarts ref="chart"
                     :chartStyle="chartStyle"
                     :dataset="dataset"
                     :grid="grid"
                     :options="echartsOptions"
                     :series="echartsSeries"
                     :tooltip="tooltip"
                     :xAxis="xAxis"
                     :yAxis="yAxis"
                     style="height: 40vh;"></Echarts>
            <Echarts ref="chart" :chartStyle="chartStyle" :dataset="dataset" :grid="grid" :options="echartsOptions"
              :series="echartsSeries" :tooltip="tooltip" :xAxis="xAxis" :yAxis="yAxis" style="height: 40vh;"></Echarts>
          </div>
        </el-col>
      </el-row>
@@ -94,29 +67,21 @@
        <el-col :span="24">
          <div class="inspection-card">
            <div class="title">原材料项检合格率</div>
            <Echarts ref="chart"
                     :chartStyle="chartStyle"
                     :dataset="dataset1"
                     :grid="grid"
                     :options="echartsOptions1"
                     :series="echartsSeries1"
                     :tooltip="tooltip"
                     :xAxis="xAxis"
                     :yAxis="yAxis1"
                     style="height: 40vh;"></Echarts>
            <Echarts ref="chart" :chartStyle="chartStyle" :dataset="dataset1" :grid="grid" :options="echartsOptions1"
              :series="echartsSeries1" :tooltip="tooltip" :xAxis="xAxis" :yAxis="yAxis1" style="height: 40vh;">
            </Echarts>
          </div>
        </el-col>
      </el-row>
    </div>
    <el-dialog :visible.sync="dataDialogVisible" title="数据查看" width="80%">
      <div v-if="dataDialogVisible" style="height: 70vh;overflow-y: auto;">
        <lims-table :tableData="tableData" :column="column"
                    @pagination="pagination" key="tableData"
                    :page="page" :tableLoading="tableLoading"></lims-table>
        <lims-table :tableData="tableData" :column="column" @pagination="pagination" key="tableData" :page="page"
          :tableLoading="tableLoading"></lims-table>
      </div>
    </el-dialog>
    <DataComparison v-if="isShowDataCom" :comparisonData="comparisonData"
                    :selectRow="selectRow" @goBack="goBack"></DataComparison>
    <DataComparison v-if="isShowDataCom" :comparisonData="comparisonData" :selectRow="selectRow" @goBack="goBack">
    </DataComparison>
  </div>
</template>
@@ -130,20 +95,20 @@
  getRawProductAnalysisAllList,
  getRawProductAnalysisRawPass, getRawSupplierCompare
} from "@/api/statisticalCharts/dataAnalysis";
import {selectSampleAndProductByOrderId} from "@/api/business/rawMaterialOrder";
import { selectSampleAndProductByOrderId } from "@/api/business/rawMaterialOrder";
export default {
  name: "ItemInspectionAnalysis",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {limsTable, Echarts, DataComparison},
  components: { limsTable, Echarts, DataComparison },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      selectChangeRows: [], // é€‰ä¸­çš„æ•°æ®
      groupTypeList: [
        {label: '样品', value: '0'},
        {label: '同一厂家, åŒä¸€åž‹å·, ä¸åŒæ‰¹æ¬¡', value: '1'},
        {label: '同一型号, ä¸åŒåނ家', value: '2'},
        { label: '样品', value: '0' },
        { label: '同一厂家, åŒä¸€åž‹å·, ä¸åŒæ‰¹æ¬¡', value: '1' },
        { label: '同一型号, ä¸åŒåނ家', value: '2' },
      ],
      itemNames: [], // æ£€éªŒé¡¹åç§°
      itemNamesList: [],
@@ -241,15 +206,15 @@
          label: '样品型号',
          minWidth: '300px',
          prop: 'sampleModel'
        },{
        }, {
          label: '下发时间',
          minWidth: '120px',
          prop: 'sendTime'
        },{
        }, {
          label: '抵达的采购数量',
          minWidth: '130px',
          prop: 'qtyArrived'
        },{
        }, {
          label: '单位',
          minWidth: '120px',
          prop: 'buyUnitMeas'
@@ -276,17 +241,17 @@
      tableData: [],
      tableLoading: false,
      column: [
        {label: '样品编号', prop: 'sampleCode'},
        {label: '样品名称', prop: 'sample'},
        {label: '检验项分类', prop: 'inspectionItemClass'},
        {label: '检验项', prop: 'inspectionItem'},
        {label: '检验子项', prop: 'inspectionItemSubclass'},
        {label: '单位', prop: 'unit'},
        {label: '样品型号', prop: 'model'},
        {label: '条件', prop: 'radius'},
        {label: '电缆标识', prop: 'cableTag'},
        {label: '试验要求', prop: 'tell'},
        {label: '检验结果', prop: 'lastValue'},
        { label: '样品编号', prop: 'sampleCode' },
        { label: '样品名称', prop: 'sample' },
        { label: '检验项分类', prop: 'inspectionItemClass' },
        { label: '检验项', prop: 'inspectionItem' },
        { label: '检验子项', prop: 'inspectionItemSubclass' },
        { label: '单位', prop: 'unit' },
        { label: '样品型号', prop: 'model' },
        { label: '条件', prop: 'radius' },
        { label: '电缆标识', prop: 'cableTag' },
        { label: '试验要求', prop: 'tell' },
        { label: '检验结果', prop: 'lastValue' },
        {
          dataType: 'tag',
          label: '结果判定',
@@ -309,16 +274,17 @@
              return 'danger'
            } else if (params == 3) {
              return ''
            }  else {
            } else {
              return null
            }
          }
        }
        },
        { label: "检验人", prop: "checkUserName" },
      ],
      page: {
        total:0,
        size:10,
        current:1
        total: 0,
        size: 10,
        current: 1
      },
      currentRow: {},
      isShowDataCom: false,
@@ -331,7 +297,7 @@
  },
  // æ–¹æ³•集合
  methods: {
    getBarInfo (val) {
    getBarInfo(val) {
      if (val === '1') {
        if (!this.modelName || !this.supplierName) {
          this.$message.warning('型号或供应商不能为空')
@@ -371,10 +337,12 @@
          return
        }
        for (let i = 0; i < res.data.itemNames.length; i++) {
          this.echartsSeries.push({type: 'line', label: {
          this.echartsSeries.push({
            type: 'line', label: {
              show: true,
              position: 'top'
            },})
            },
          })
        }
        this.dataset.dimensions = this.HaveJson(res.data.itemNames)
        this.dataset.dimensions.unshift('product')
@@ -399,15 +367,17 @@
          return
        }
        for (let i = 0; i < res.data.itemNames.length; i++) {
          this.echartsSeries1.push({type: 'line',tooltip: {
          this.echartsSeries1.push({
            type: 'line', tooltip: {
              valueFormatter: function (value) {
                return value + '%';
              }
            },label: {
            }, label: {
              show: true,
              position: 'top',
              formatter: (params) => params.value[params.dimensionNames[params.encode.y[0]]] + '%'
            },})
            },
          })
        }
        this.dataset1.dimensions = this.HaveJson(res.data.itemNames)
        this.dataset1.dimensions.unshift('product')
@@ -423,7 +393,7 @@
    },
    // æŸ¥è¯¢å›žè°ƒ
    refreshTable(row) {
      selectSampleAndProductByOrderId({id: row.id, ...this.page}).then(res => {
      selectSampleAndProductByOrderId({ id: row.id, ...this.page }).then(res => {
        this.tableLoading = false
        if (res.code === 200) {
          this.tableData = res.data.records
@@ -433,11 +403,11 @@
        this.tableLoading = false
      })
    },
    pagination (page) {
    pagination(page) {
      this.page.size = page.limit
      this.refreshTable(this.currentRow)
    },
    changeData () {
    changeData() {
      if (this.datePicker !== null && this.datePicker.length > 0) {
        this.beginDate = this.datePicker[0] + ' 00:00:00'
        this.endDate = this.datePicker[1] + ' 23:59:59'
@@ -449,7 +419,7 @@
      this.getBar1()
      this.getTableData()
    },
    getTableData () {
    getTableData() {
      this.editLoading = true
      const params = {
        beginDate: this.beginDate,
@@ -467,7 +437,7 @@
      })
    },
    // èŽ·å–æ£€éªŒé¡¹ä¸‹æ‹‰æ¡†
    getItemList () {
    getItemList() {
      this.selectLoading = true
      this.itemNamesList = []
      const params = {
@@ -490,10 +460,10 @@
        this.selectLoading = false
      })
    },
    goBack () {
    goBack() {
      this.isShowDataCom = false
    },
    openShowData () {
    openShowData() {
      if (this.selectChangeRows.length !== 5) {
        this.$message.warning('请选择5条数据')
        return
@@ -520,7 +490,7 @@
        this.isShowDataCom = true
      })
    },
    handleSelectionChange (val) {
    handleSelectionChange(val) {
      this.selectChangeRows = val
    },
  },
@@ -528,7 +498,7 @@
</script>
<style scoped>
.inspection-card{
.inspection-card {
  width: 100%;
  margin-top: 10px;
}
src/views/structural/capabilityAndLaboratory/capability/index.vue
@@ -283,7 +283,7 @@
                this.bindPartFirst(row);
              },
              disabled: (row) => {
                return row.product
                return !!row.product
              }
            },
            {