liding
6 天以前 ce247af69bdbd81f50213e637cab608ba1bb6938
feat(outsourcing): 新增外协订单管理模块及配套功能优化
已添加2个文件
已修改4个文件
1715 ■■■■■ 文件已修改
src/api/business/outsourcingOrder.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Sidebar/SidebarItem.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/inspection.vue 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/customsInspectionOrder.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/outsourcingOrder/index.vue 1605 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/rawMaterialInspection/index.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/outsourcingOrder.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
// å¤–协下单页面相关接口
import request from '@/utils/request'
// æŸ¥è¯¢å¤–协订单待下单数据。
export function getWarehouseSubmit(query) {
  return request({ url: '/rawMaterialOrder/getOutsourceWarehouseSubmit', method: 'get', params: query })
}
// æŸ¥è¯¢å¤–协订单检验中数据。
export function getIfsByStateOne(query) {
  return request({ url: '/rawMaterialOrder/getOutsourceByStateOne', method: 'get', params: query })
}
// æŸ¥è¯¢å¤–协订单已检验数据。
export function getIfsByOver(query) {
  return request({ url: '/rawMaterialOrder/getOutsourceByOver', method: 'get', params: query })
}
// æŸ¥è¯¢å½“前外协分类的全部报检数据。
export function getIfsByAll(query) {
  return request({ url: '/rawMaterialOrder/getOutsourceByAll', method: 'get', params: query })
}
src/layout/components/Sidebar/SidebarItem.vue
@@ -3,7 +3,7 @@
    <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
      <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path, onlyOneChild.query)">
        <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
          <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
          <item :icon="menuIcon(onlyOneChild)" :title="menuTitle(onlyOneChild)" />
        </el-menu-item>
      </app-link>
    </template>
@@ -55,6 +55,19 @@
    return {}
  },
  methods: {
    // å…¼å®¹å·²åˆ›å»ºä½†å°šæœªé…ç½®å›¾æ ‡çš„外协子菜单。
    menuIcon(menu) {
      const icon = menu.meta.icon || (this.item.meta && this.item.meta.icon)
      if (icon && icon !== '#') return icon
      if (this.basePath.endsWith('/outsourcingOrder/incoming')) return 'form'
      if (this.basePath.endsWith('/outsourcingOrder/subcontract')) return 'table'
      return icon
    },
    // ä¾§æ çœç•¥å¤–协父目录的重复前缀,保留页面完整名称。
    menuTitle(menu) {
      const title = menu.meta.title
      return this.basePath.includes('/outsourcingOrder/') ? title.replace(/^外协订单-/, '') : title
    },
    hasOneShowingChild(children = [], parent) {
      if (!children) {
        children = [];
src/views/business/inspectionTask/inspection.vue
@@ -6,7 +6,7 @@
  >
    <el-row class="title">
      <el-col
        v-if="insOrder.ifsOrderType !== '02wg'"
        v-if="effectiveOrderType !== '02wg'"
        :span="8"
        style="text-align: left"
      >
@@ -42,11 +42,11 @@
        </el-form>
      </el-col>
      <el-col
        :span="insOrder.ifsOrderType !== '02wg' ? 16 : 24"
        :span="effectiveOrderType !== '02wg' ? 16 : 24"
        style="text-align: right"
      >
        <el-button
          v-if="insOrder.ifsOrderType && insOrder.ifsOrderType === '02wg'"
          v-if="effectiveOrderType === '02wg'"
          size="small"
          type="primary"
          @click="showMaterialPropsDialog"
@@ -179,7 +179,7 @@
            supplierDensity
          }}</el-descriptions-item>
          <template
            v-if="insOrder.ifsOrderType && insOrder.ifsOrderType === '02wg'"
            v-if="effectiveOrderType === '02wg'"
          >
            <el-descriptions-item label="载具编号">{{
              insOrder.drumNo
@@ -1545,6 +1545,10 @@
  // ç”¨äºŽä¸Šä¼ æ–‡ä»¶çš„信息
  computed: {
    ...mapGetters(["userId"]),
    // ä½¿ç”¨åŽå°ç¡®å®šçš„处理流程,真实销售分类仍保留在 ifsOrderType。
    effectiveOrderType() {
      return this.insOrder.flowOrderType || this.insOrder.ifsOrderType;
    },
    action() {
      return this.javaApi + "/insOrderPlan/uploadFile";
    },
@@ -1835,7 +1839,7 @@
        laboratory: this.sonLaboratory,
      }).then(async (res) => {
        this.insOrder = res.data.insOrder;
        if (res.data.insOrder.ifsOrderType === "02wg") {
        if (this.effectiveOrderType === "02wg") {
          //查询零件属性
          this.getPartProps(res.data.insOrder.ifsInventoryId);
        }
@@ -3539,18 +3543,18 @@
        this.$message.error("请指定复核人员");
        return;
      }
      if (!this.otherForm.humidity && this.insOrder.ifsOrderType !== "02wg") {
      if (!this.otherForm.humidity && this.effectiveOrderType !== "02wg") {
        this.$message.error("请输入湿度");
        return;
      }
      if (
        !this.otherForm.temperature &&
        this.insOrder.ifsOrderType !== "02wg"
        this.effectiveOrderType !== "02wg"
      ) {
        this.$message.error("请输入温度");
        return;
      }
      if (!this.insOrder.lotPartId && this.insOrder.ifsOrderType === "02wg") {
      if (!this.insOrder.lotPartId && this.effectiveOrderType === "02wg") {
        this.$message.error("请填写IFS库存物料批次属性");
        return;
      }
src/views/business/materialOrder/customsInspectionOrder.vue
@@ -632,13 +632,8 @@
    // },
    isOutsourcing:{
      deep:  true,
      handler(newVal){
        if(newVal && newVal==='t'){
          this.addObj.appointed = dateFormat(new Date(),'yyyy-MM-dd')
          this.addObj.testQuantity = this.customsInspection.qtyArrived
          this.addObj.orderType = '进厂检验'
          this.addObj.typeSource = 0
        }
      handler(){
        this.initOrderSource()
      }
    },
    productList: {
@@ -674,6 +669,7 @@
    this.currentId = this.$route.query.currentId
    this.isReport = this.$route.query.isReport
    this.customsInspection = this.$route.query.customsInspection
    this.initOrderSource()
    this.getInfo();
  },
  activated() {
@@ -683,12 +679,23 @@
    this.currentId = this.$route.query.currentId
    this.isReport = this.$route.query.isReport
    this.customsInspection = this.$route.query.customsInspection
    this.initOrderSource()
    this.getInfo();
  },
  // getInfo() {
  //   this.getInfo() // èŽ·å–æ•°æ®
  // },
  methods: {
    // æ¯æ¬¡è¿›å…¥ä¸‹å•页面明确设置来源,避免复用缓存页面时沿用上一张订单。
    initOrderSource() {
      if (this.active !== 1) return
      this.addObj.typeSource = this.isOutsourcing === 't' ? 0 : 1
      if (this.isOutsourcing === 't') {
        this.addObj.appointed = dateFormat(new Date(),'yyyy-MM-dd')
        this.addObj.testQuantity = this.customsInspection.qtyArrived
        this.addObj.orderType = '进厂检验'
      }
    },
    goBackAdd () {
      this.cableConfigShow = false
    },
src/views/business/outsourcingOrder/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1605 @@
<template>
  <div class="app-container">
    <div>
      <div class="search">
        <el-form :model="entity" ref="entity" size="small" :inline="true">
          <el-form-item label="IFS域" prop="contract">
            <el-select @keyup.enter.native="refreshTable" v-model="entity.contract" clearable placeholder="请选择" size="small">
              <el-option label="ZTNS" value="ZTNS"/>
              <el-option label="KJNS" value="KJNS"/>
            </el-select>
          </el-form-item>
          <el-form-item label="批号" prop="updateBatchNo">
            <el-input v-model="entity.updateBatchNo" clearable placeholder="请输入" size="small"
              @keyup.enter.native="goSearch">
            </el-input>
          </el-form-item>
          <el-form-item label="委托编号" prop="entrustCode" v-if="tabIndex !== 0">
            <el-input v-model="entity.entrustCode" clearable placeholder="请输入" size="small"
              @keyup.enter.native="goSearch">
            </el-input>
          </el-form-item>
          <el-form-item label="零件号" prop="partNo">
            <el-input v-model="entity.partNo" clearable placeholder="请输入" size="small" @keyup.enter.native="goSearch">
            </el-input>
          </el-form-item>
          <el-form-item label="零件描述" prop="partDesc">
            <el-input v-model="entity.partDesc" clearable placeholder="请输入" size="small" @keyup.enter.native="goSearch">
            </el-input>
          </el-form-item>
          <el-form-item label="物料属性" prop="materialProp">
            <el-select clearable size="small" v-model="entity.materialProp" style="width: 100%" @change="refreshTable()">
              <el-option v-for="dict in dict.type.material_prop_type" :key="dict.value" :label="dict.label"
                :value="dict.value">
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label=" ä¾›åº”商名称" prop="supplierName">
            <el-input v-model="entity.supplierName" clearable placeholder="请输入" size="small"
              @keyup.enter.native="goSearch">
            </el-input>
          </el-form-item>
          <el-form-item label="样品型号" prop="sampleModel"
            v-if="(tabIndex === 2 || tabIndex === 3 || tabIndex === 4) && more">
            <el-input v-model="entity.sampleModel" clearable placeholder="请输入" size="small"
              @keyup.enter.native="goSearch">
            </el-input>
          </el-form-item>
          <el-form-item label="检验状态" prop="inspectStatus"
            v-if="(tabIndex === 2 || tabIndex === 3 || tabIndex === 4) && more">
            <el-select v-model="entity.inspectStatus" clearable size="small" @change="goSearch">
              <el-option v-for="(a, i) in inspectStatusList" :key="i" :label="a.label" :value="a.value"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="下发时间" prop="date" v-if="(tabIndex === 2 || tabIndex === 3 || tabIndex === 4) && more">
            <el-date-picker v-model="entity.date" end-placeholder="结束日期" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"
                            :default-time="['00:00:00','23:59:59']"
              @change="goSearch" range-separator="至" size="small" start-placeholder="开始日期" type="datetimerange">
            </el-date-picker>
          </el-form-item>
          <el-form-item>
            <el-button v-if="tabIndex === 2 || tabIndex === 3 || tabIndex === 4"
                       :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'" style="color: #3A7BFA;" type="text"
                       @click="more = !more">{{ !more ? '更多' : '收起' }}</el-button>
            <el-button size="mini" type="primary" @click="goSearch">查询</el-button>
            <el-button size="mini" @click="refresh()">重置</el-button>
          </el-form-item>
        </el-form>
      </div>
      <div class="table">
        <div class="table-tab">
          <div>
            <ul class="tab">
              <li :class="{ active: tabIndex === 0 }" v-if="checkPermi(['get:raw:await'])" @click="handleTab(0)">待下单
              </li>
              <li :class="{ active: tabIndex === 1 }" v-if="checkPermi(['get:raw:testing'])" @click="handleTab(1)">检验中
              </li>
              <li :class="{ active: tabIndex === 2 }" v-if="checkPermi(['get:raw:check'])" @click="handleTab(2)">已检验
              </li>
              <li :class="{ active: tabIndex === 3 }" v-if="checkPermi(['get:Ifs:ByAll'])" @click="handleTab(3)">全部</li>
            </ul>
          </div>
          <div>
            <el-button v-show="tabIndex === 3" :loading="outLoading" size="small" type="primary"
              @click="handleOut">导出</el-button>
            <el-button v-if="tabIndex !== 0" size="small" type="primary" @click="openPrint">标签打印</el-button>
          </div>
        </div>
        <!--待下单-->
        <div class="table">
          <lims-table :tableData="tableData" :column="column" v-if="tabIndex === 0" @pagination="pagination"
            ref="tableData" :rowClassName="changeRowClass" :height="50" :more="more" key="tableData" :page="page"
            :tableLoading="tableLoading"></lims-table>
        </div>
        <!--检验中-->
        <div class="table">
          <lims-table :tableData="tableData1" :column="column1" v-if="tabIndex === 1" :isSelection="true"
            :rowClassName="changeRowClass" :handleSelectionChange="selectMethod" @pagination="pagination1"
            :height="50" :more="more" key="tableData1" :page="page1" :tableLoading="tableLoading1"></lims-table>
        </div>
        <!--已检验-->
        <div class="table">
          <lims-table :tableData="tableData2" :column="column2" v-if="tabIndex === 2" :isSelection="true"
            :rowClassName="changeRowClass" :handleSelectionChange="selectMethod" @pagination="pagination2"
            :height="50" :more="more" key="tableData2" :page="page2" :tableLoading="tableLoading2"></lims-table>
        </div>
        <!--全部-->
        <div class="table">
          <lims-table :tableData="tableData3" :column="column3" v-if="tabIndex === 3" :isSelection="true"
            :rowClassName="changeRowClass" :handleSelectionChange="selectMethod" @pagination="pagination3"
            :height="50" :more="more" key="tableData3" :page="page3" :tableLoading="tableLoading3"></lims-table>
        </div>
      </div>
    </div>
    <!-- ç¡®è®¤å…æ£€å¼¹æ¡† -->
    <el-dialog :visible.sync="exemptionVisible" title="确认免检" width="42%">
      <div style="display: flex">
        <span style="width: 90px; line-height: 32px">规格型号:</span>
        <el-input v-model="exemptionInfo.partDetail" clearable placeholder="请输入" size="small"></el-input>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="exemptionVisible = false">取 æ¶ˆ</el-button>
          <el-button :loading="exemptionLoading" type="primary" @click="submitExemption">ç¡® å®š</el-button>
        </el-row>
      </span>
    </el-dialog>
    <!-- æ’¤é”€æŠ¥æ£€ -->
    <el-dialog :visible.sync="declareDialogVisible" title="报检撤销" width="30%">
      <p style="font-size:16px;color:#333333">批号<span style="color:#34BD66">{{ this.insOrderRow.updateBatchNo
          }}</span>的信息是否<span style="color: #FF4902">撤销报检</span>
      </p>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="declareDialogVisible = false">取 æ¶ˆ</el-button>
          <el-button :loading="upLoad" type="primary" @click="submitDeclare">ç¡® å®š</el-button>
        </el-row>
      </span>
    </el-dialog>
    <!-- æ’¤é”€ä¸‹å• -->
    <el-dialog :visible.sync="quashDialogVisible" title="下单撤销" width="30%">
      <el-button size="small" type="primary" @click="cancelQuashOrder('enterOrderId')">撤销进厂检验下单</el-button>
      <el-button size="small" type="primary" @click="cancelQuashOrder('quarterOrderId')">撤销季度检验下单</el-button>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="quashDialogVisible = false">取 æ¶ˆ</el-button>
        </el-row>
      </span>
    </el-dialog>
    <!-- ä¿®æ”¹å§”托编号弹框 -->
    <el-dialog :visible.sync="entrustCodeVisible" title="提示" width="30%">
      <el-input v-model="entrustCodeInfo.entrustCode"></el-input>
      <span slot="footer" class="dialog-footer">
        <el-button @click="entrustCodeVisible = false">取 æ¶ˆ</el-button>
        <el-button :loading="submitCodeLoading" type="primary" @click="submitCode">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <!--标签打印弹框-->
    <print-dialog v-if="printDialog" ref="printDialog" :printDialog="printDialog"
      @closePrintDialog="closePrintDialog"></print-dialog>
    <!--数据查看弹框-->
    <data-look-visible v-if="dataDialogVisible" ref="dataDialogVisible" :dataDialogVisible="dataDialogVisible"
      :dataLookInfo="dataLookInfo" @closeDataLook="closeDataLook"></data-look-visible>
    <!--附件查看弹框-->
    <files-look-visible v-if="filesDialogVisible" ref="filesDialogVisible" :filesDialogVisible="filesDialogVisible"
      :filesLookInfo="filesLookInfo" @closeFilesLook="closeFilesLook"></files-look-visible>
    <!--报告下载弹框-->
    <down-file-dialog v-if="downFileDialogVisible" ref="downFileDialogVisible"
      :downFileDialogVisible="downFileDialogVisible" :downLoadInfo="downLoadInfo"
      @closeDownFileDialog="closeDownFileDialog"></down-file-dialog>
    <!--产业链信息查看-->
    <ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo>
    <!--检验任务信息查看-->
    <el-dialog :visible.sync="InspectInfoDialog" title="数据查看" width="400px" @closed="closeInsInfoDialog">
      <div style="margin-bottom: 8px">
        <span style="font-size: 16px;">进厂检验原始数据</span>
        <el-link :disabled="!insInfo.enterOrderId" :underline="false" style="vertical-align: bottom;margin-left: 6px"
          type="primary" @click="viewInsInfo0">查看</el-link>
      </div>
      <div>
        <span style="font-size: 16px;">季度检验原始数据</span>
        <el-link :disabled="!insInfo.quarterOrderId" :underline="false" style="vertical-align: bottom;margin-left: 6px"
          type="primary" @click="viewInsInfo1">查看</el-link>
      </div>
    </el-dialog>
    <!--    IFS物料属性编辑弹框-->
    <el-dialog
      title="更新IFS库存物料批次属性"
      :visible.sync="ifsMaterialPropsVisible"
      :close-on-click-modal="false"
      width="20%">
      <el-form style="width:100%" :model="ifsMaterialPropsForm">
        <el-form-item label="载具编号(Attr1):">
          <el-input placeholder="载具编号" size="small" v-model="ifsMaterialPropsForm.drumNo"></el-input>
        </el-form-item>
        <el-form-item label="起始米标(Attr2):">
          <el-input @blur="validateQuality()" placeholder="起始米标" size="small" v-model="ifsMaterialPropsForm.startMeterMark">
            <span slot="suffix">km</span>
          </el-input>
        </el-form-item>
        <el-form-item label="截止米标(Attr3):">
          <el-input @blur="validateQuality()" placeholder="截止米标" size="small" v-model="ifsMaterialPropsForm.endMeterMark">
            <span slot="suffix">km</span>
          </el-input>
        </el-form-item>
        <el-form-item label="外护颜色(Attr4):">
          <el-select style="width:100%" size="small" v-model="ifsMaterialPropsForm.outerColor">
            <el-option v-for="(item,index) in outerColorList" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="绝缘颜色(Attr5):">
          <el-select style="width:100%" size="small" v-model="ifsMaterialPropsForm.insulationColor">
            <el-option v-for="(item,index) in insulationColorList" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="印字信息(Attr8):">
          <el-select style="width:100%" size="small" v-model="ifsMaterialPropsForm.letteringInfo" placeholder="请选择">
            <el-option v-for="(item,index) in letteringInfoList" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
    <el-button @click="closePartPropDialog()">取 æ¶ˆ</el-button>
    <el-button type="primary" @click="saveOrUpdatePartProp()">ç¡® å®š</el-button>
  </span>
    </el-dialog>
  </div>
</template>
<script>
import PrintDialog from "@/views/business/outsourcingFinishProduct/components/printDialog.vue";
import ShowInfo from "@/views/business/materialOrderComponents/materialOrder/showInfo.vue";
import DataLookVisible from "@/views/business/materialOrderComponents/materialOrder/dataLookVisible.vue";
import FilesLookVisible from "@/views/business/materialOrderComponents/materialOrder/filesLookVisible.vue";
import DownFileDialog from "@/views/business/materialOrderComponents/materialOrder/downFileDialog.vue";
import limsTable from "@/components/Table/lims-table.vue";
import {getDicts} from "@/api/system/dict/data";
import {
  concessionRelease,
  getIfsByQuarter,
  rawAllExport,
  rawOrderRelease,
  repealEnterRawOrder,
  repealQuarterRawOrder,
  revokeInspectionReport,
  updateEntrustCode,
  getOrderCountByIfsId
} from "@/api/business/rawMaterialOrder";
import { getWarehouseSubmit, getIfsByStateOne, getIfsByOver, getIfsByAll } from "@/api/business/outsourcingOrder";
import {getOneByIfsId,saveOrUpdateProps} from "@/api/business/ifsPartProps.js";
import { mapGetters } from "vuex";
export default {
  name: "OutsourcingOrder",
  // import å¼•入的组件需要注入到对象中才能使用
  components: { limsTable, DownFileDialog, FilesLookVisible, DataLookVisible, ShowInfo, PrintDialog },
  dicts: ['material_prop_type'],
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      selectedRow:{},
      outerColorList:[],
      insulationColorList:[],
      letteringInfoList: [],
      ifsMaterialPropsForm:{
        id:null,
        ifsInventoryId: null,
        drumNo: '', // è½½å…·ç¼–号
        startMeterMark: '', // èµ·å§‹ç±³æ ‡
        endMeterMark: '', // æˆªæ­¢ç±³æ ‡
        insulationColor: '', // ç»ç¼˜é¢œè‰²
        outerColor: '', // å¤–护颜色
        inboundLength: '', // å…¥åº“长度
        letteringInfo: '', // å°å­—信息
      },
      ifsMaterialPropsVisible:false,
      tableData: [],
      tableLoading: false,
      column: [
        {
          label: 'IFS域',
          prop: 'contract',
          width: '120px',
          dataType: 'tag',
          formatData: (params) => {
            return params
          },
          formatType: (params) => {
            if (params === 'ZTNS') {
              return ''
            } else if (params === 'KJNS') {
              return 'success'
            }else {
              return null
            }
          }
        },
        { label: '批号', prop: 'updateBatchNo' },
        { label: '零件号', prop: 'partNo' },
        { label: '零件描述', prop: 'partDesc' },
        {
          label: '物料属性',
          prop: 'materialProp',
          formatData: (params) => {
            if (!params) return null
            for (let i = 0; i < this.dict.type.material_prop_type.length; i++) {
              const item = this.dict.type.material_prop_type[i]
              if (item.value == params) {
                return item.label
              }
            }
            return null
          }
        },
        {
          dataType: 'tag',
          label: '物料类型',
          prop: 'isExpire',
          formatData: (params) => {
            if (params == 1) {
              return '过期物料'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'info'
            } else {
              return null
            }
          }
        },
        { label: '抵达的采购数量', prop: 'purQtyInStore', width: '130px' },
        { label: '单位', prop: 'buyUnitMeas' },
        { label: '订单号', prop: 'orderNo' },
        { label: '接收时间', prop: 'receiverDate' },
        { label: '报检时间', prop: 'declareDate' },
        {
          dataType: 'action',
          label: '操作',
          operation: [
            {
              name: '下单',
              type: 'text',
              clickFun: (row) => {
                this.playOrder(row);
              }
            },
            {
              name: '免检',
              type: 'text',
              clickFun: (row) => {
                this.exemption(row);
              },
            },
            {
              name: '撤销报检',
              type: 'text',
              clickFun: (row) => {
                this.cancelDeclare(row);
              },
            },
          ]
        }
      ],
      page: {
        total: 0,
        size: 20,
        current: 1
      },
      tableData1: [],
      tableLoading1: false,
      column1: [
        {
          label: 'IFS域',
          prop: 'contract',
          width: '120px',
          dataType: 'tag',
          formatData: (params) => {
            return params
          },
          formatType: (params) => {
            if (params === 'ZTNS') {
              return ''
            } else if (params === 'KJNS') {
              return 'success'
            }else {
              return null
            }
          }
        },
        { label: '批号', prop: 'updateBatchNo' },
        {
          label: '委托编号',
          prop: 'entrustCode',
          width: "160px",
          dataType: "link",
          linkMethod: "changeEntrustCode",
        },
        { label: '零件号', prop: 'partNo' },
        { label: '零件描述', prop: 'partDesc' },
        {
          label: '样品名称',
          prop: 'sampleName',
          width: "160px",
          dataType: "link",
          linkMethod: "selectAllByOne",
        },
        { label: '样品型号', prop: 'sampleModel' },
        { label: '检验人', prop: 'userName' },
        { label: '下发时间', prop: 'sendTime' },
        {
          label: '物料属性',
          prop: 'materialProp',
          formatData: (params) => {
            if (!params) return null
            for (let i = 0; i < this.dict.type.material_prop_type.length; i++) {
              const item = this.dict.type.material_prop_type[i]
              if (item.value == params) {
                return item.label
              }
            }
            return null
          }
        },
        {
          dataType: 'tag',
          label: '物料类型',
          prop: 'isExpire',
          formatData: (params) => {
            if (params == 1) {
              return '过期物料'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'info'
            } else {
              return null
            }
          }
        },
        { label: '抵达的采购数量', prop: 'purQtyInStore', width: '130px' },
        { label: '单位', prop: 'buyUnitMeas' },
        { label: '订单号', prop: 'orderNo' },
        { label: '接收时间', prop: 'receiverDate' },
        { label: '报检时间', prop: 'declareDate' },
        {
          dataType: 'action',
          fixed: 'right',
          label: '操作',
          operation: [
            {
              name: '数据查看',
              type: 'text',
              clickFun: (row) => {
                this.handleDataLook(row);
              },
            },
            {
              name: '附件查看',
              type: 'text',
              clickFun: (row) => {
                this.handleFileLook(row);
              },
            },
            {
              name: '撤销下单',
              type: 'text',
              clickFun: (row) => {
                this.cancelOrder(row);
              },
            },
          ]
        }
      ],
      page1: {
        total: 0,
        size: 20,
        current: 1
      },
      tableData2: [],
      tableLoading2: false,
      column2: [
        {
          label: 'IFS域',
          prop: 'contract',
          width: '120px',
          dataType: 'tag',
          formatData: (params) => {
            return params
          },
          formatType: (params) => {
            if (params === 'ZTNS') {
              return ''
            } else if (params === 'KJNS') {
              return 'success'
            }else {
              return null
            }
          }
        },
        {
          label: '委托编号',
          prop: 'entrustCode',
          width: "160px",
          dataType: "link",
          linkMethod: "changeEntrustCode",
        },
        {
          dataType: 'tag',
          label: '检验状态',
          prop: 'inspectStatus',
          formatData: (params) => {
            if (params == 0) {
              return '检验中'
            } else if (params == 1) {
              return '合格'
            } else if (params == 2) {
              return '不合格'
            } else if (params == 3) {
              return '未下单'
            } else if (params == 4) {
              return '让步放行'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return 'warning'
            } else if (params == 1) {
              return 'success'
            } else if (params == 2) {
              return 'danger'
            } else if (params == 3) {
              return 'info'
            } else if (params == 4) {
              return ''
            } else {
              return null
            }
          }
        },
        { label: '订单号', prop: 'orderNo' },
        { label: '抵达的采购数量', prop: 'purQtyInStore', width: '130px' },
        { label: '下发时间', prop: 'sendTime' },
        { label: '批号', prop: 'updateBatchNo' },
        { label: '零件号', prop: 'partNo' },
        { label: '零件描述', prop: 'partDesc' },
        { label: '供应商名称', prop: 'supplierName' },
        { label: '不合格描述', prop: 'unqualifiedDesc' },
        {
          dataType: 'tag',
          label: '免检',
          prop: 'isExemption',
          formatData: (params) => {
            if (params == 1) {
              return '免检'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
            } else {
              return null
            }
          }
        },
        {
          label: '样品名称',
          prop: 'sampleName',
          width: "160px",
          dataType: "link",
          linkMethod: "selectAllByOne",
        },
        { label: '样品型号', prop: 'sampleModel' },
        { label: '检验人', prop: 'userName' },
        {
          label: '物料属性',
          prop: 'materialProp',
          formatData: (params) => {
            if (!params) return null
            for (let i = 0; i < this.dict.type.material_prop_type.length; i++) {
              const item = this.dict.type.material_prop_type[i]
              if (item.value == params) {
                return item.label
              }
            }
            return null
          }
        },
        { label: '单位', prop: 'buyUnitMeas' },
        { label: '接收时间', prop: 'receiverDate' },
        { label: '报检时间', prop: 'declareDate' },
        {
          dataType: 'action',
          fixed: 'right',
          label: '操作',
          operation: [
            {
              name: '数据查看',
              type: 'text',
              clickFun: (row) => {
                this.handleDataLook(row);
              }
            },
            {
              name: '附件查看',
              type: 'text',
              clickFun: (row) => {
                this.handleFileLook(row);
              }
            },
            {
              name: '报告下载',
              type: 'text',
              clickFun: (row) => {
                this.download(row);
              }
            },
            {
              name: '原始记录',
              type: 'text',
              clickFun: (row) => {
                this.viewInspectInfo(row);
              },
              disabled: (row) => {
                return row.sampleName === null
              },
            },
            {
              name: '放行',
              type: 'text',
              clickFun: (row) => {
                this.goPass(row);
              },
              disabled: (row) => {
                return row.inspectStatus != 2
              },
              showHide: (row) => {
                return this.checkPermi([
                  "get:raw:check:operation",
                ]);
              },
            },
            {
              name: '季度撤销',
              type: 'text',
              clickFun: (row) => {
                this.repealQuarter(row);
              },
              disabled: (row) => {
                return row.quarterOrderId == null || row.quarterReportId != null
              },
              showHide: (row) => {
                return this.checkPermi([
                  "get:raw:check:operation",
                ]);
              },
            },
          ]
        }
      ],
      page2: {
        total: 0,
        size: 20,
        current: 1
      },
      tableData3: [],
      tableLoading3: false,
      column3: [
        {
          label: 'IFS域',
          prop: 'contract',
          width: '120px',
          dataType: 'tag',
          formatData: (params) => {
            return params
          },
          formatType: (params) => {
            if (params === 'ZTNS') {
              return ''
            } else if (params === 'KJNS') {
              return 'success'
            }else {
              return null
            }
          }
        },
        { label: '委托编号', prop: 'entrustCode', width: "160px", },
        {
          dataType: 'tag',
          label: '检验状态',
          prop: 'inspectStatus',
          formatData: (params) => {
            if (params == 0) {
              return '检验中'
            } else if (params == 1) {
              return '合格'
            } else if (params == 2) {
              return '不合格'
            } else if (params == 3) {
              return '未下单'
            } else if (params == 4) {
              return '让步放行'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return 'warning'
            } else if (params == 1) {
              return 'success'
            } else if (params == 2) {
              return 'danger'
            } else if (params == 3) {
              return 'info'
            } else if (params == 4) {
              return ''
            } else {
              return null
            }
          }
        },
        { label: '订单号', prop: 'orderNo' },
        { label: '抵达的采购数量', prop: 'purQtyInStore', width: '130px' },
        { label: '下发时间', prop: 'sendTime' },
        { label: '批号', prop: 'updateBatchNo' },
        { label: '零件号', prop: 'partNo' },
        { label: '零件描述', prop: 'partDesc' },
        { label: '供应商名称', prop: 'supplierName' },
        { label: '不合格描述', prop: 'unqualifiedDesc' },
        {
          dataType: 'tag',
          label: '免检',
          prop: 'isExemption',
          formatData: (params) => {
            if (params == 1) {
              return '免检'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
            } else {
              return null
            }
          }
        },
        {
          label: '样品名称',
          prop: 'sampleName',
          width: "160px",
          dataType: "link",
          linkMethod: "selectAllByOne",
        },
        { label: '样品型号', prop: 'sampleModel' },
        { label: '检验人', prop: 'userName' },
        {
          label: '物料属性',
          prop: 'materialProp',
          formatData: (params) => {
            if (!params) return null
            for (let i = 0; i < this.dict.type.material_prop_type.length; i++) {
              const item = this.dict.type.material_prop_type[i]
              if (item.value == params) {
                return item.label
              }
            }
            return null
          }
        },
        {
          dataType: 'tag',
          label: '物料类型',
          prop: 'isExpire',
          formatData: (params) => {
            if (params == 1) {
              return '过期物料'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'info'
            } else {
              return null
            }
          }
        },
        { label: '单位', prop: 'buyUnitMeas' },
        { label: '接收时间', prop: 'receiverDate' },
        { label: '报检时间', prop: 'declareDate' },
        {
          dataType: 'action',
          fixed: 'right',
          label: '操作',
          operation: [
            {
              name: '数据查看',
              type: 'text',
              clickFun: (row) => {
                this.handleDataLook(row);
              }
            },
            {
              name: '附件查看',
              type: 'text',
              clickFun: (row) => {
                this.handleFileLook(row);
              },
            },
            {
              name: '更新IFS批次属性',
              type: 'text',
              clickFun: (row) => {
                this.showMaterialPropsDialog(row);
              },
            }
          ]
        }
      ],
      page3: {
        total: 0,
        size: 20,
        current: 1
      },
      entity: {
        contract: null,
        updateBatchNo: null,
        entrustCode: null,
        partDesc: null,
        supplierName: null,
        sampleModel: null,
        partNo: null,
        inspectStatus: null,
        date: null,
        beginDeclareDate: null,
        endDeclareDate: null,
        materialProp: null
      },
      tabList: [
        {
          label: '待下单',
          value: 0
        },
        {
          label: '检验中',
          value: 1
        },
        {
          label: '已检验',
          value: 2
        },
        {
          label: '季度检验',
          value: 4
        },
        {
          label: '全部',
          value: 3
        }
      ],
      more: false,
      tabIndex: '',
      multipleSelection: [],
      orderCheckVersion: 0,
      active: 0, //1:下单,2:查看
      orderType: 0, //0:原材料下单,1:季度检验下单
      currentId: null,
      btnLoading: false,
      quashDialogVisible: false, // æ’¤é”€ä¸‹å•提醒弹框
      declareDialogVisible: false, // æ’¤é”€æŠ¥æ£€æé†’弹框
      insOrderRow: {},
      upLoad: false,
      filesDialogVisible: false, // é™„件查看弹框
      printDialog: false, // æ ‡ç­¾æ‰“印弹框
      showInfoDialog: false, // äº§ä¸šé“¾ä¿¡æ¯æŸ¥çœ‹
      dataDialogVisible: false, // æ•°æ®æŸ¥çœ‹å¼¹æ¡†
      dataLookInfo: {}, // æ•°æ®æŸ¥çœ‹å¼¹æ¡†æ•°æ®
      filesLookInfo: {}, // é™„件查看弹框数据
      downFileDialogVisible: false, // æŠ¥å‘Šä¸‹è½½å¼¹æ¡†
      downLoadInfo: {}, // æŠ¥å‘Šä¸‹è½½å¼¹æ¡†
      entrustCodeVisible: false, // ä¿®æ”¹å§”托编号弹框
      entrustCodeInfo: {},
      submitCodeLoading: false,
      exemptionVisible: false, // å…æ£€ç¡®è®¤å¼¹æ¡†
      exemptionLoading: false,
      exemptionInfo: {},
      inspectStatusList: [
        { label: '检验中', value: 0 },
        { label: '合格', value: 1 },
        { label: '不合格', value: 2 },
        { label: '未下单', value: 3 },
        { label: '让步放行', value: 4 },
      ],
      state: 0,
      orderId: 0,
      inspectorList: [],//检验人员列表
      InspectionKey: 1,
      typeSource: null,// 0:成品下单,1:原材料下单, 2: é“œå•丝下单
      InspectInfoDialog: false, // æ•°æ®æŸ¥çœ‹å¼¹æ¡†
      insInfo: {},
      outLoading: false
    }
  },
  computed: {
    ...mapGetters(['nickName']),
    // ä¸¤ä¸ªå¤–协菜单分别按真实销售订单分类查询。
    salesOrderType() {
      return this.$route.path.includes('/incoming') ? '03incoming' : '04subcontract'
    }
  },
  watch: {
    // åˆ‡æ¢å¤–协菜单时重置筛选、分页和选中数据。
    '$route.path'(path) {
      if (path.includes('/outsourcingOrder/')) {
        this.resetForm('entity')
        this.multipleSelection = []
        this.goSearch()
      }
    }
  },
  mounted() {
    if (this.checkPermi(['get:raw:await'])) {
      this.tabIndex = 0
    } else {
      this.tabIndex = 2
    }
    this.refreshTable()
  },
  activated() {
    this.refreshTable()
  },
  // ç¦»å¼€é¡µé¢æˆ–进入缓存后,使尚未完成的下单校验失效。
  beforeRouteLeave(to, from, next) {
    this.orderCheckVersion++
    next()
  },
  deactivated() {
    this.orderCheckVersion++
  },
  beforeDestroy() {
    this.orderCheckVersion++
  },
  // æ–¹æ³•集合
  methods: {
    validateQuality(){
      let inboundLength = Number(this.calcInbondLength(this.ifsMaterialPropsForm.startMeterMark,this.ifsMaterialPropsForm.endMeterMark));
      let testQuantity = Number(this.selectedRow.purQtyInStore);
      if(inboundLength!=null && testQuantity!==inboundLength){
        this.$message.warning(`入库长度(${inboundLength}km)与检验数量(${testQuantity}km)不符,请确认!`);
      }
    },
    calcInbondLength(startMeterMark,endMeterMark){
      let inboundLength = null;
      if((startMeterMark!=null && startMeterMark!=='') && (endMeterMark!=null&&endMeterMark!=='')){
        let minus = this.$Big(endMeterMark).minus(this.$Big(startMeterMark));
        inboundLength = Math.abs(minus)
      }
      return inboundLength;
    },
    saveOrUpdatePartProp(){
      this.ifsMaterialPropsForm.ifsInventoryId = this.selectedRow.id
      saveOrUpdateProps({
        ...this.ifsMaterialPropsForm,
        partNo: this.selectedRow.partNo,
        lotBatchNo: this.selectedRow.updateBatchNo,
        contract: this.selectedRow.contract
      }).then((res)=>{
        if(res.code==200){
          this.$message.success("保存成功");
          this.ifsMaterialPropsVisible = false;
          this.refreshView()
        }
      })
    },
    getPartProps(ifsId){
      getOneByIfsId(ifsId).then((res)=>{
        if(res.code==200 && res.data){
          this.ifsMaterialPropsForm = res.data;
        }
      })
    },
    //打开IFS物料属性弹框
    showMaterialPropsDialog(row){
      this.selectedRow = row
      this.getPartProps(row.id)
      this.getOuterColorDicts()
      this.getInsulationColorDicts()
      this.getLetteringInfoDicts()
      this.$nextTick(()=>{
        this.ifsMaterialPropsVisible = true;
      })
    },
    getLetteringInfoDicts(){
      getDicts("lettering_info_type").then(res=>{
        if(res.code==200){
          this.letteringInfoList = res.data
        }
      })
    },
    getInsulationColorDicts(){
      getDicts("insulation_color_type").then(res=>{
        if(res.code==200){
          this.insulationColorList = res.data
        }
      })
    },
    getOuterColorDicts(){
      getDicts("outer_color_type").then(res=>{
        if(res.code==200){
          this.outerColorList = res.data
        }
      })
    },
    closePartPropDialog(){
      this.ifsMaterialPropsForm = {
        id:null,
        ifsInventoryId: null,
        drumNo: '', // è½½å…·ç¼–号
        startMeterMark: '', // èµ·å§‹ç±³æ ‡
        endMeterMark: '', // æˆªæ­¢ç±³æ ‡
        insulationColor: '', // ç»ç¼˜é¢œè‰²
        outerColor: '', // å¤–护颜色
        inboundLength: '', // å…¥åº“长度
        letteringInfo: '', // å°å­—信息
      }
      this.selectedRow = {}
      this.ifsMaterialPropsVisible = false;
    },
    // ç‚¹å‡»æŸ¥è¯¢å›žè°ƒ
    goSearch() {
      this.page.current = 1
      this.page1.current = 1
      this.page2.current = 1
      this.page3.current = 1
      this.refreshTable()
    },
    // æŸ¥è¯¢å›žè°ƒ
    refreshTable() {
      if (this.tabIndex === 0) {
        // å¾…下单查询
        this.getPurchaseOrderList()
      } else if (this.tabIndex === 1) {
        // æ£€éªŒä¸­æŸ¥è¯¢
        this.getIfsByStateOneList()
      } else if (this.tabIndex === 2) {
        // å·²æ£€éªŒæŸ¥è¯¢
        this.getIfsByOverList()
      } else if (this.tabIndex === 4) {
        // æŸ¥è¯¢å­£åº¦æ£€éªŒ
        this.getIfsByQuarterList()
      } else {
        // å…¨éƒ¨æŸ¥è¯¢
        this.getIfsByAllList()
      }
    },
    // å¾…下单查询
    getPurchaseOrderList() {
      this.tableLoading = true
      const params = { ...this.entity, orderType: this.salesOrderType, isInspect: 1, state: 0, ...this.page }
      getWarehouseSubmit(params).then(res => {
        this.tableLoading = false
        if (res.code === 200) {
          this.tableData = res.data.records
          this.page.total = res.data.total
        }
      }).catch(err => {
        this.tableLoading = false
      })
    },
    // æ£€éªŒä¸­æŸ¥è¯¢
    getIfsByStateOneList() {
      this.tableLoading1 = true
      const params = { ...this.entity, orderType: this.salesOrderType, orderState: 1, state: 1, ...this.page1 }
      getIfsByStateOne(params).then(res => {
        this.tableLoading1 = false
        if (res.code === 200) {
          this.tableData1 = res.data.records
          this.page1.total = res.data.total
        }
      }).catch(err => {
        this.tableLoading1 = false
      })
    },
    // å·²æ£€éªŒæŸ¥è¯¢
    getIfsByOverList() {
      this.tableLoading2 = true
      if (null != this.entity.date) {
        this.entity.beginDeclareDate = this.entity.date[0]
        this.entity.endDeclareDate = this.entity.date[1]
      } else {
        this.entity.beginDeclareDate = ''
        this.entity.endDeclareDate = ''
      }
      const params = { ...this.entity, orderType: this.salesOrderType, orderState: 4, state: 2, ...this.page2 }
      getIfsByOver(params).then(res => {
        this.tableLoading2 = false
        if (res.code === 200) {
          this.tableData2 = res.data.records
          this.page2.total = res.data.total
        }
      }).catch(err => {
        this.tableLoading2 = false
      })
    },
    // æŸ¥è¯¢å­£åº¦æ£€éªŒ
    getIfsByQuarterList() {
      this.tableLoading4 = true
      if (null != this.entity.date) {
        this.entity.beginDeclareDate = this.entity.date[0]
        this.entity.endDeclareDate = this.entity.date[1]
      } else {
        this.entity.beginDeclareDate = ''
        this.entity.endDeclareDate = ''
      }
      const params = { ...this.entity, orderType: this.salesOrderType, ...this.page4 }
      getIfsByQuarter(params).then(res => {
        this.tableLoading4 = false
        if (res.code === 200) {
          this.tableData4 = res.data.records
          this.page4.total = res.data.total
        }
      }).catch(err => {
        this.tableLoading4 = false
      })
    },
    // å…¨éƒ¨
    getIfsByAllList() {
      this.tableLoading3 = true
      if (null != this.entity.date) {
        this.entity.beginDeclareDate = this.entity.date[0]
        this.entity.endDeclareDate = this.entity.date[1]
      } else {
        this.entity.beginDeclareDate = ''
        this.entity.endDeclareDate = ''
      }
      const params = { ...this.entity, orderType: this.salesOrderType, isInspect: 1, ...this.page3 }
      getIfsByAll(params).then(res => {
        this.tableLoading3 = false
        if (res.code === 200) {
          this.tableData3 = res.data.records
          this.page3.total = res.data.total
        }
      }).catch(err => {
        this.tableLoading3 = false
      })
    },
    // é‡ ç½®
    refresh() {
      this.resetForm('entity')
      this.refreshTable()
    },
    pagination(page) {
      this.page.size = page.limit
      this.refreshTable()
    },
    pagination1(page) {
      this.page1.size = page.limit
      this.refreshTable()
    },
    pagination2(page) {
      this.page2.size = page.limit
      this.refreshTable()
    },
    pagination3(page) {
      this.page3.size = page.limit
      this.refreshTable()
    },
    pagination4(page) {
      this.page4.size = page.limit
      this.refreshTable()
    },
    // æŸ¥çœ‹æ£€éªŒæ•°æ®
    viewInspectInfo(row) {
      //当前检验任务的检验人列表
      let inspectorList = []
      if (row.userName) {
        inspectorList = row.userName.split(',')
      }
      inspectorList.push(this.nickName)
      this.inspectorList = inspectorList
      this.insInfo = row
      this.InspectInfoDialog = true
    },
    closeInsInfoDialog() {
      this.InspectInfoDialog = false
    },
    // ç›´æŽ¥æ”¾è¡Œ
    goPass(row) {
      this.$confirm('是否放行当前数据?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        concessionRelease({ ifsInventoryId: row.id }).then(res => {
          if (res.code === 200) {
            this.$message({
              type: 'success',
              message: '放行成功!'
            });
            this.refreshTable()
          }
        })
      }).catch(() => {
        this.$message({
          type: 'error',
          message: '放行失败'
        });
      });
    },
    // å­£åº¦æ’¤é”€
    repealQuarter(row) {
      this.$confirm('是否撤销季度下单?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        repealQuarterRawOrder({ quarterOrderId: row.quarterOrderId }).then(res => {
          if (res.code === 200) {
            this.$message.success('撤销成功')
            this.refreshTable('page')
          }
        })
      }).catch(() => { })
    },
    viewInsInfo0() {
      let inspectorList = []
      inspectorList.push(this.nickName)
      this.InspectInfoDialog = false
      if (this.checkPermi(['business:inspectionView'])) {
        this.$router.push({
          name: "InspectionView",
          query: {
            sonLaboratory: '原材料',
            state: 3,
            typeSource: this.insInfo.typeSource,
            orderId: this.insInfo.enterOrderId,
            inspectorList: inspectorList,
          },
        })
      } else {
        this.$router.push({
          path: "/inspectionTask/inspection",
          query: {
            sonLaboratory: '原材料',
            state: 3,
            typeSource: this.insInfo.typeSource,
            orderId: this.insInfo.enterOrderId,
            inspectorList: inspectorList,
          },
        })
      }
    },
    viewInsInfo1() {
      let inspectorList = []
      inspectorList.push(this.nickName)
      this.InspectInfoDialog = false
      if (this.checkPermi(['business:inspectionView'])) {
        this.$router.push({
          name: "InspectionView",
          query: {
            sonLaboratory: '原材料',
            state: 3,
            typeSource: this.insInfo.typeSource,
            orderId: this.insInfo.quarterOrderId,
            inspectorList: inspectorList,
          },
        })
      } else {
        this.$router.push({
          path: "/inspectionTask/inspection",
          query: {
            sonLaboratory: '原材料',
            state: 3,
            typeSource: this.insInfo.typeSource,
            orderId: this.insInfo.quarterOrderId,
            inspectorList: inspectorList,
          },
        })
      }
    },
    goback() {
      this.state = 0
      this.refreshTable('page')
    },
    // åˆ·æ–°é¡µé¢
    refreshView() {
      this.InspectionKey++
    },
    // é“œææ–™ä¸‹å•
    copper() {
      this.$router.push({ path: "/materialOrder/copperOrder", query: { active: 1 } });
    },
    // æ‰“开标签打印弹框
    openPrint() {
      if (this.multipleSelection.length > 0) {
        this.printDialog = true
        this.$nextTick(() => {
          let selection = this.multipleSelection
          this.$refs.printDialog.getLabelPrinting(selection)
        })
      } else {
        this.$message.error('请选择需要打印的数据')
      }
    },
    // å…³é—­æ ‡ç­¾æ‰“印弹框
    closePrintDialog() {
      this.printDialog = false
    },
    // å¤–协订单根据分类及物料属性字典键值复用对应下单流程。
    playOrder(row) {
      const orderType = row.orderType
      if (!['03incoming', '04subcontract'].includes(orderType)) {
        this.$message.error('非法的外协订单分类,请刷新列表')
        return
      }
      if (orderType === '04subcontract' && !['半成品', '成品'].includes(row.materialProp)) {
        this.$message.error('委外加工的物料属性只能为半成品或成品')
        return
      }
      const currentPath = this.$route.path
      const requestVersion = ++this.orderCheckVersion
      getOrderCountByIfsId(row.id).then(res => {
        // ä»…当前页面最新一次校验可以导航,分流使用点击时的真实订单分类。
        if (this._isDestroyed || this._inactive || requestVersion !== this.orderCheckVersion
          || this.$route.path !== currentPath) return
        if (res.code !== 200) return
        if (res.data > 0) {
          this.$message.warning('该批次已下单,请勿重复下单')
          this.refreshTable()
          return
        }
        const isProduct = orderType === '04subcontract' && row.materialProp === '成品'
        this.$router.push({
          path: isProduct ? '/outsourcingFinishProduct/customsInspectionOrder' : '/materialOrder/customsInspectionOrder',
          query: { isOutsourcing: isProduct ? 't' : 'f', orderType: 0, customsInspection: row, active: 1 }
        })
      }).catch(error => {
        console.error(error)
      })
    },
    // ç‚¹å‡»æ ·å“åç§°æŸ¥çœ‹è¯¦æƒ…
    selectAllByOne(row) {
      if (row.isCopper == 1) {
        this.currentId = row.enterOrderId
        this.$router.push({ path: "/materialOrder/CopperView", query: { customsInspection: row, active: 2, currentId: this.currentId } });
      } else {
        this.currentId = row.insOrderId
        this.$router.push({ path: "/materialOrder/customsInspectionView", query: { customsInspection: row, active: 2, currentId: this.currentId } });
      }
    },
    // æ‰“开免检弹框
    exemption(row) {
      this.exemptionVisible = true
      this.exemptionInfo = row
      this.$set(this.exemptionInfo, 'partDetail', row.partDesc)
    },
    // æäº¤å…æ£€ä¿¡æ¯
    submitExemption() {
      this.exemptionLoading = true
      rawOrderRelease({
        ifsInventoryId: this.exemptionInfo.id,
        partDetail: this.exemptionInfo.partDetail
      }).then(res => {
        if (res.code === 200) {
          this.exemptionVisible = false
          this.$message.success('操作成功')
          this.refreshTable()
        }
        this.exemptionLoading = false
      }).catch(err => {
        console.log(err)
        this.exemptionLoading = false
      })
    },
    // æ‰“开撤销报检弹框
    cancelDeclare(row) {
      this.declareDialogVisible = true
      this.insOrderRow = row
    },
    // æäº¤æ’¤é”€æŠ¥æ£€ç”³è¯·
    submitDeclare() {
      revokeInspectionReport({ id: this.insOrderRow.id }).then(res => {
        if (res.code === 200) {
          this.declareDialogVisible = false
          this.refreshTable()
          this.$message.success("撤销报检成功")
        }
      }).catch(err => {
        console.log(err)
      })
    },
    // æ‰“开撤销下单的弹框
    cancelOrder(row) {
      if (row.enterOrderId && row.quarterOrderId) {
        this.quashDialogVisible = true
      } else if (row.enterOrderId && !row.quarterOrderId) {
        this.$confirm('是否撤销进厂下单?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          repealEnterRawOrder({ enterOrderId: row.enterOrderId }).then(res => {
            if (res.code === 200) {
              this.$message.success('撤销成功')
              this.refreshTable('page')
            }
          })
        }).catch(() => { })
      } else if (!row.enterOrderId && row.quarterOrderId) {
        this.$confirm('是否撤销季度下单?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          repealQuarterRawOrder({ quarterOrderId: row.quarterOrderId }).then(res => {
            if (res.code === 200) {
              this.$message.success('撤销成功')
              this.refreshTable('page')
            }
          })
        }).catch(() => { })
      }
      this.insOrderRow = row
    },
    cancelQuashOrder(type) {
      if (type === 'enterOrderId') {
        this.$confirm('是否撤销当前数据?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          repealEnterRawOrder({ enterOrderId: this.insOrderRow.enterOrderId }).then(res => {
            if (res.code === 200) {
              this.$message.success('撤销成功')
              this.refreshTable('page')
            }
          })
        }).catch(() => { })
      } else {
        this.$confirm('是否撤销当前数据?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          repealQuarterRawOrder({ quarterOrderId: this.insOrderRow.quarterOrderId }).then(res => {
            if (res.code === 200) {
              this.$message.success('撤销成功')
              this.refreshTable()
            }
          })
        }).catch(() => { })
      }
    },
    // æ•°æ®æŸ¥çœ‹
    handleDataLook(row) {
      this.dataLookInfo = row
      this.dataDialogVisible = true;
    },
    // å…³é—­æ•°æ®æŸ¥çœ‹å¼¹æ¡†
    closeDataLook() {
      this.dataDialogVisible = false
    },
    // é™„件查看
    handleFileLook(row) {
      this.filesDialogVisible = true
      this.filesLookInfo = row
    },
    // å…³é—­é™„件查看弹框
    closeFilesLook() {
      this.filesDialogVisible = false
    },
    // æŠ¥å‘Šä¸‹è½½
    download(row) {
      this.downFileDialogVisible = true
      this.downLoadInfo = row
    },
    // å…³é—­æŠ¥å‘Šä¸‹è½½å¼¹æ¡†
    closeDownFileDialog() {
      this.downFileDialogVisible = false
    },
    // æŸ¥çœ‹äº§ä¸šé“¾ä¿¡æ¯
    openInfoDialog(row) {
      this.showInfoDialog = true
      this.$nextTick(() => {
        this.$refs.showInfoDialog.getInfo(row.id)
      })
    },
    // ä¿®æ”¹å§”托编号
    changeEntrustCode(row) {
      this.entrustCodeVisible = true
      this.entrustCodeInfo = { ...row }
    },
    // å¯¼å‡º
    handleOut() {
      this.outLoading = true
      let params = {}
      if (this.multipleSelection.length > 0) {
        params.ids = this.multipleSelection.map(item => item.id).join(',');
      } else {
        params = { ...this.entity }
      }
      params.orderType = this.salesOrderType;
      rawAllExport(params).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, this.salesOrderType === '03incoming' ? '外协来料加工检测信息导出.xlsx' : '外协委外加工检测信息导出.xlsx');
      })
    },
    // æäº¤ä¿®æ”¹å§”托编号信息
    submitCode() {
      this.submitCodeLoading = true
      try {
        updateEntrustCode({
          id: this.entrustCodeInfo.id,
          entrustCode: this.entrustCodeInfo.entrustCode,
        }).then(res => {
          if (res.code === 200) {
            this.entrustCodeVisible = false
            this.$message.success('修改成功')
          }
          this.refreshTable()
          this.submitCodeLoading = false
        })
      } catch (e) {
        this.submitCodeLoading = false
      }
    },
    // åˆ‡æ¢ä¸‹å•tab表格
    handleTab(m) {
      this.tabIndex = m;
      this.multipleSelection = []
      this.refreshTable()
    },
    // è¡¨æ ¼é€‰æ‹©æ–¹æ³•
    selectMethod(val) {
      this.multipleSelection = val
    },
    changeRowClass({ row, rowIndex }) {
      if (row.isFirst == 1) {
        return 'highlight-danger-row-border'
      }
      return ''
    },
  },
}
</script>
<style scoped>
.table-tab {
  display: flex;
  justify-content: space-between;
}
.tab {
  list-style-type: none;
  display: flex;
  margin-bottom: 12px;
  margin-top: 0;
  padding-left: 0;
}
.tab li {
  line-height: 24px;
  padding: 6px 14px;
  font-size: 14px;
  color: #333333;
  border: 1px solid #EEEEEE;
  cursor: pointer;
}
.tab li:nth-child(1) {
  border-radius: 8px 0 0 8px;
}
.tab li:nth-child(4) {
  border-radius: 0 8px 8px 0;
}
.tab li.active {
  border-color: #3A7BFA;
  color: #3A7BFA;
}
</style>
src/views/business/rawMaterialInspection/index.vue
@@ -93,17 +93,17 @@
      </div>
    </div>
    <!-- æ‰¹é‡æŠ¥æ£€ -->
    <el-dialog :visible.sync="declareDialogSVisible" title="批量报检" width="30%" :before-close="resetBatchFormData">
    <el-dialog :visible.sync="declareDialogSVisible" title="批量报检" width="30%" :before-close="resetBatchFormData" @open="refreshDeclareDicts">
      <el-form ref="declareBatchObj" :inline="true" :model="declareBatchObj" :rules="declareObjBatchRules" label-width="130px"
               label-position="right">
        <el-form-item class="declareObj-form-item" label="销售订单分类:" prop="orderType">
          <el-select v-model="declareBatchObj.orderType" prop="orderType" clearable size="small">
          <el-select v-model="declareBatchObj.orderType" prop="orderType" clearable size="small" @change="changeOrderType(declareBatchObj)">
            <el-option v-for="(item,index) in orderTypeList" :value="item.dictValue" :label="item.dictLabel" :key="index"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item class="declareObj-form-item" label="物料属性:" prop="materialProp">
          <el-select v-model="declareBatchObj.materialProp" clearable size="small">
            <el-option v-for="(item,index) in materialPropList" :value="item.dictValue" :label="item.dictLabel" :key="index"></el-option>
            <el-option v-for="(item,index) in getMaterialProps(declareBatchObj.orderType)" :value="item.dictValue" :label="item.dictLabel" :key="index"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
@@ -116,7 +116,7 @@
    </el-dialog>
    <!-- ç¡®è®¤æŠ¥æ£€ -->
    <el-dialog :close-on-click-modal="false" :title="declareType === 'add' ? '新增报检信息' : '销售订单报检'"
      :visible.sync="declareDialogVisible" width="800px" @close="resetFormData">
      :visible.sync="declareDialogVisible" width="800px" @close="resetFormData" @open="refreshDeclareDicts">
      <el-form ref="declareObj" :inline="true" :model="declareObj" :rules="declareObjRules" label-width="130px"
        label-position="right">
        <el-form-item class="declareObj-form-item" label="订单号:" prop="orderNo">
@@ -170,13 +170,13 @@
          </el-select>
        </el-form-item>
        <el-form-item class="declareObj-form-item" label="销售订单分类:" prop="orderType">
          <el-select v-model="declareObj.orderType" clearable size="small">
          <el-select v-model="declareObj.orderType" clearable size="small" @change="changeOrderType(declareObj)">
            <el-option v-for="(item,index) in orderTypeList" :value="item.dictValue" :label="item.dictLabel" :key="index"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item class="declareObj-form-item" label="物料属性:" prop="materialProp">
          <el-select v-model="declareObj.materialProp" clearable size="small">
            <el-option v-for="(item,index) in materialPropList" :value="item.dictValue" :label="item.dictLabel" :key="index"></el-option>
            <el-option v-for="(item,index) in getMaterialProps(declareObj.orderType)" :value="item.dictValue" :label="item.dictLabel" :key="index"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
@@ -298,7 +298,7 @@
      :visible.sync="materialPropVisible"
      width="15%">
      <el-select placeholder="请选择物料属性" v-model="declareObj.materialProp" clearable size="small">
        <el-option v-for="(item,index) in materialPropList" :value="item.dictValue" :label="item.dictLabel" :key="index"></el-option>
        <el-option v-for="(item,index) in getMaterialProps(declareObj.orderType)" :value="item.dictValue" :label="item.dictLabel" :key="index"></el-option>
      </el-select>
      <span slot="footer" class="dialog-footer">
    <el-button type="primary" @click="confirmSplitOrder">ç¡® å®š</el-button>
@@ -773,6 +773,24 @@
  },
  // æ–¹æ³•集合
  methods: {
    // æ¯æ¬¡æ‰“开报检弹窗重新获取字典,避免页面保留修改前的选项。
    refreshDeclareDicts() {
      this.getOrderTypeList()
      this.getMaterialPropList()
    },
    // å§”外加工按字典键值限定半成品和成品。
    getMaterialProps(orderType) {
      if (orderType === '04subcontract') {
        return this.materialPropList.filter(item => ['半成品', '成品'].includes(item.dictValue))
      }
      return this.materialPropList
    },
    // åˆ‡æ¢è®¢å•分类时清除不适用的物料属性。
    changeOrderType(form) {
      if (!this.getMaterialProps(form.orderType).some(item => item.dictValue === form.materialProp)) {
        form.materialProp = null
      }
    },
    getOrderTypeList(){
      getDicts('inspection_type').then(res=>{
        if(res.code === 200){