zouyu
2 天以前 2e4a6c4526b6c22808d5877f2050da852bfaebe7
外购成品检验功能迁移v1
已添加6个文件
已修改11个文件
2541 ■■■■■ 文件已修改
src/api/business/ifsOrderInspection.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/ifsPartProps.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/outsourcingFinishProductInspection.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/rawMaterialOrder.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/bigEval.js 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionReview/index.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/index.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/inspection.vue 290 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/customsInspectionOrder.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/index.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/outsourcingFinishProduct/components/printDialog.vue 347 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/outsourcingFinishProduct/index.vue 1268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/productOrder/components/addOrder.vue 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/rawMaterialInspection/index.vue 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/reportPreparation/index.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/business/ifsOrderInspection.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
//销售订单报检查询接口
import request from '@/utils/request'
// é”€å”®è®¢å•报检查询全部
export function getIfsByAll(query) {
  return request({
    url: '/ifsOrderInspection/getIfsByAll',
    method: 'get',
    params: query
  })
}
// é”€å”®è®¢å•报检查看已完成信息
export function getIfsByFinish(query) {
  return request({
    url: '/ifsOrderInspection/getIfsByFinish',
    method: 'get',
    params: query
  })
}
src/api/business/ifsPartProps.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
//ifs零件属性接口
import request from '@/utils/request'
// æ–°å¢žæˆ–保存零件属性
export function saveOrUpdateProps(data) {
  return request({
    url: '/ifsPartProps/saveOrUpdateProps',
    method: 'post',
    data: data
  })
}
// æŸ¥è¯¢ifs订单的零件属性记录
export function getOneByIfsId(ifsId) {
  return request({
    url: '/ifsPartProps/getOneByIfsId/' + ifsId,
    method: 'get'
  })
}
src/api/business/outsourcingFinishProductInspection.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
// å¤–购下单页面相关接口
import request from '@/utils/request'
// æŸ¥è¯¢IFS订单-待报检
export function getWarehouseSubmit(query) {
  return request({
    url: '/outsourcingFinishProduct/getWarehouseSubmit',
    method: 'get',
    params: query
  })
}
// æŸ¥è¯¢IFS订单-待检验
export function getIfsByStateOne(query) {
  return request({
    url: '/outsourcingFinishProduct/getIfsByStateOne',
    method: 'get',
    params: query
  })
}
// æŸ¥è¯¢åŽŸææ–™ä¸‹å•-已检验
export function getIfsByOver(query) {
  return request({
    url: '/outsourcingFinishProduct/getIfsByOver',
    method: 'get',
    params: query
  })
}
// æŸ¥è¯¢åŽŸææ–™ä¸‹å•-全部
export function getIfsByAll(query) {
  return request({
    url: '/outsourcingFinishProduct/getIfsByAll',
    method: 'get',
    params: query
  })
}
src/api/business/rawMaterialOrder.js
@@ -295,3 +295,10 @@
    data: query
  })
}
// æ ¹æ®ifsId查询下单数量
export function getOrderCountByIfsId(ifsId) {
  return request({
    url: '/rawMaterialOrder/getOrderCountByIfsId/'+ifsId,
    method: 'get',
  })
}
src/main.js
@@ -49,8 +49,9 @@
import { getToken } from "@/utils/auth";
// æ—¶é—´è½¬æ¢
import Moment from "moment";
import Big from 'big.js'
// å…¨å±€æ–¹æ³•挂载
Vue.prototype.$Big = Big;
Vue.prototype.getDicts = getDicts;
Vue.prototype.getConfigKey = getConfigKey;
Vue.prototype.parseTime = parseTime;
src/router/index.js
@@ -174,6 +174,55 @@
        name: "AddOrder",
        meta: { title: "进行成品下单", activeMenu: "/business/productOrder",keepAlive: true },
      },
      {
        // å¤–购下单-进行外购下单
        path: "customsInspectionOrder",
        component: () =>
          import("@/views/business/productOrder/components/addOrder.vue"),
        name: "CustomsInspectionOrder",
        meta: {
          title: "进行外购成品下单",
          activeMenu: "/business/outsourcingFinishProduct",
          keepAlive: true
        },
      },
    ],
  },
  {
    // å¤–购成品下单
    path: "/outsourcingFinishProduct",
    component: Layout,
    hidden: true,
    permissions: ["business:outsourcingFinishProduct"],
    children: [
      {
        // æŸ¥çœ‹æˆå“ä¸‹å•详情
        path: "addView",
        component: () =>
          import("@/views/business/productOrder/components/addView.vue"),
        name: "AddView",
        meta: { title: "查看成品下单详情", activeMenu: "/business/outsourcingFinishProduct",keepAlive: true },
      },
      {
        // è¿›è¡Œä¸‹å•-成品下单
        path: "addOrder",
        component: () =>
          import("@/views/business/productOrder/components/addOrder.vue"),
        name: "AddOrder",
        meta: { title: "进行成品下单", activeMenu: "/business/outsourcingFinishProduct",keepAlive: true },
      },
      {
        // å¤–购下单-进行外购下单
        path: "customsInspectionOrder",
        component: () =>
          import("@/views/business/materialOrder/customsInspectionOrder"),
        name: "CustomsInspectionOrder",
        meta: {
          title: "进行外购成品下单",
          activeMenu: "/business/outsourcingFinishProduct",
          keepAlive: true
        },
      },
    ],
  },
  {
src/utils/bigEval.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,118 @@
import Big from "big.js";
/**
 * å®‰å…¨è®¡ç®—器(支持 + - * / å’Œæ‹¬å·ï¼‰
 * @param {string} expr æ•°å­¦è¡¨è¾¾å¼ï¼Œå¦‚ "(0.1 + 0.2) * 3"
 * @returns {string} è®¡ç®—结果字符串
 */
export function bigEval(expr) {
  console.log(expr)
  // æ­¥éª¤1:词法分析
  const tokens = tokenize(expr);
  // æ­¥éª¤2:转换为逆波兰表达式(后缀表达式)
  const rpn = shuntingYard(tokens);
  // æ­¥éª¤3:执行计算
  return evaluateRPN(rpn);
}
// è¯æ³•分析器
function tokenize(expr) {
  const tokens = [];
  let numBuffer = "";
  let prevToken = null;
  const flushNumber = () => {
    if (numBuffer) {
      // æ–°å¢žï¼šéªŒè¯æ•°å­—格式(支持负数、小数)
      if (!/^-?(\d+(\.\d*)?|\.\d+)$/.test(numBuffer)) {
        throw new Error(`无效数字格式: ${numBuffer}`);
      }
      if (numBuffer.startsWith(".")) numBuffer = "0" + numBuffer;
      tokens.push({ type: "number", value: numBuffer });
      numBuffer = "";
    }
  };
  for (let i = 0; i < expr.length; i++) {
    const c = expr[i];
    if (/\d|\./.test(c)) {
      numBuffer += c;
    } else if ("+-*/()".includes(c)) {
      // ä¿®æ”¹ï¼šå¢žåŠ  numBuffer ä¸ºç©ºçš„判断,确保负号只能作为数字前缀(关键修复)
      if (c === "-" && numBuffer === "" && (
        !prevToken ||
        (prevToken.type === "operator" && prevToken.value !== ")")
      )) {
        numBuffer += c;
      } else {
        flushNumber();
        tokens.push({ type: "operator", value: c });
      }
      prevToken = tokens[tokens.length - 1];
    } else if (c !== " ") {
      throw new Error(`非法字符: ${c}`);
    }
  }
  flushNumber();
  return tokens;
}
// è°ƒåº¦åœºç®—法生成逆波兰表达式
function shuntingYard(tokens) {
  const output = [];
  const stack = [];
  const precedence = { "+": 1, "-": 1, "*": 2, "/": 2 };
  for (const token of tokens) {
    if (token.type === "number") {
      output.push(token.value);
    } else if (token.value === "(") {
      stack.push(token.value);
    } else if (token.value === ")") {
      while (stack.length && stack[stack.length - 1] !== "(") {
        output.push(stack.pop());
      }
      stack.pop(); // å¼¹å‡ºå·¦æ‹¬å·
    } else {
      while (
        stack.length &&
        stack[stack.length - 1] !== "(" &&
        precedence[stack[stack.length - 1]] >= precedence[token.value]
        ) {
        output.push(stack.pop());
      }
      stack.push(token.value);
    }
  }
  while (stack.length) output.push(stack.pop());
  return output;
}
// æ‰§è¡Œé€†æ³¢å…°è¡¨è¾¾å¼è®¡ç®—
function evaluateRPN(rpn) {
  const stack = [];
  for (const token of rpn) {
    if (/[-]?\d|\./.test(token)) {
      stack.push(new Big(token));
    } else {
      const b = stack.pop();
      const a = stack.pop();
      switch (token) {
        case "+": stack.push(a.plus(b)); break;
        case "-": stack.push(a.minus(b)); break;
        case "*": stack.push(a.times(b)); break;
        case "/":
          if (b.eq(0)) throw new Error("除数不能为零");
          stack.push(a.div(b));
          break;
        default: throw new Error(`未知运算符: ${token}`);
      }
    }
  }
  return stack.pop().toString();
}
src/views/business/inspectionReview/index.vue
@@ -96,9 +96,11 @@
          dataType: "tag",
          formatData: (params) => {
            if (params == 0) {
              return "成品下单";
            } else {
              return "外购下单";
            } else if(params==1) {
              return "原材料下单";
            }else{
              return "委托下单";
            }
          },
        },
@@ -236,7 +238,8 @@
      currentTime: null,
      sonLaboratoryList: [],
      typeSourceList: [
        { label: '成品下单', value: 0 },
        { label: '委托下单', value: -1 },
        { label: '外购下单', value: 0 },
        { label: '原材料下单', value: 1 },
      ],
      isCopper: null,
src/views/business/inspectionTask/index.vue
@@ -278,8 +278,9 @@
      },
      claimVisible: false,
      tabList: [
        { label: "委托", value: 0 },
        { label: "委托", value: -1 },
        { label: "原材料", value: 1 },
        { label: "外购", value: 0 },
      ],
      active: 1,
      tabIndex: 0,
@@ -287,7 +288,7 @@
      planTotal: 0,
      insStateList: [],
      state: 0, // 0:台账页,1:检验页面,2检验页面(复核),默认为0,3数据查看
      typeSource: null, // 0:成品下单,1:原材料下单
      typeSource: -1, // 0:外购成品下单,1:原材料下单
      sonLaboratory: null, // 0:委托,1:原材料
      activeFace: 0, // 1:下单,2:查看,3:审核,默认为0
      currentId: null,
@@ -358,9 +359,11 @@
          dataType: "tag",
          formatData: (params) => {
            if (params == 0) {
              return "成品下单";
            } else {
              return "外购下单";
            } else if(params==1) {
              return "原材料下单";
            }else{
              return "委托下单";
            }
          },
        },
@@ -540,12 +543,14 @@
      lookTableLoading: false,
      // æ•°æ®æŸ¥çœ‹ç›¸å…³å­—段---结束
      retestVisible: false,
      upIndex: 0
      upIndex: 0,
      tabLabel: ''
    };
  },
  mounted() {
    this.getAuthorizedPerson();
    this.queryParams.userId = this.userId;
    this.queryParams.typeSource = this.typeSource
    this.currentTime = getYearAndMonthAndDays();
    this.getDicts("urgency_level").then((response) => {
      this.urgencyLevel = this.dictToValue(response.data);
@@ -564,6 +569,7 @@
    this.getDicts("inspection_task_state").then((response) => {
      this.inspectionTaskState = this.dictToValue(response.data);
    });
    this.queryParams.typeSource = this.typeSource
    this.refreshTable();
  },
  methods: {
@@ -636,7 +642,8 @@
    },
    refreshTable(e) {
      this.page.current = 1;
      this.queryParams.typeSource = this.tabIndex;
      this.queryParams.tabLabel = this.tabLabel;
      this.queryParams.typeSource = this.typeSource;
      this.getList();
    },
    // ä¸‹è½½æŠ¥å‘Š
@@ -723,6 +730,7 @@
    },
    handleTab(m, i) {
      this.tabIndex = i;
      this.typeSource =m.value;
      this.queryParams.sonLaboratory = "";
      this.refreshTable();
    },
src/views/business/inspectionTask/inspection.vue
@@ -1,7 +1,7 @@
<template>
  <div v-loading="loading" class="inspection" style="background-color: rgb(245, 247, 251);">
    <el-row class="title">
      <el-col :span="8" style="text-align: left">
      <el-col v-if="insOrder.ifsOrderType!=='02wg'" :span="8" style="text-align: left">
        <el-form :inline="true" :model="otherForm" class="form-inline" label-width="50px"
          style="text-align: right; padding-top: 0; display: inline">
          <el-form-item label="温度:" style="margin-bottom: 0">
@@ -16,10 +16,11 @@
          </el-form-item>
        </el-form>
      </el-col>
      <el-col :span="16" style="text-align: right">
      <el-col :span="insOrder.ifsOrderType!=='02wg'?16:24" style="text-align: right">
        <el-button v-if="insOrder.ifsOrderType && insOrder.ifsOrderType==='02wg'" size="small" type="primary" @click="showMaterialPropsDialog">IFS物料属性更新</el-button>
        <el-button size="small" type="primary" @click="refreshView">刷新</el-button>
        <el-button v-if="typeSource == 1" size="small" type="primary" @click="openPurchase">进货验证</el-button>
        <el-button v-if="state == 1 && typeSource == 1" size="small" type="primary"
        <el-button v-if="state == 1 && [0,1].includes(Number(typeSource))" size="small" type="primary"
          @click="openUnPassDialog('add')">不合格处理</el-button>
        <el-button size="small" type="primary" @click="sampleVisible = true; uploadSample();">样品切换</el-button>
        <!--        <el-button v-if="state == 1" size="small" type="primary" @click="taskVisible = true">任务切换</el-button>-->
@@ -32,49 +33,94 @@
      </el-col>
    </el-row>
    <div class="search">
      <el-form :inline="true" :model="searchForm" class="form-inline" label-position="right" label-width="100px">
        <el-form-item label="委托编号:">
          <el-input v-model="insOrder.entrustCode" clearable disabled placeholder="请输入" size="small"></el-input>
        </el-form-item>
        <el-form-item label="样品编号:">
          <el-tooltip :content="currentSample.sampleCode" :disabled="!currentSample.sampleCode">
            <el-input v-model="currentSample.sampleCode" clearable disabled placeholder="请输入" size="small"></el-input>
          </el-tooltip>
        </el-form-item>
        <el-form-item label="样品名称:">
          <el-input v-model="currentSample.sample" clearable disabled placeholder="请输入" size="small"></el-input>
        </el-form-item>
        <el-form-item label="样品数量:">
          <el-input v-model="sampleProduct.length" clearable disabled placeholder="请输入" size="small"></el-input>
        </el-form-item>
        <el-form-item label="样品型号:">
          <el-input v-model="currentSample.model" clearable disabled placeholder="请输入" size="small"></el-input>
        </el-form-item>
        <el-form-item label="下发时间:">
          <el-input v-model="insOrder.sendTime" clearable disabled placeholder="请输入" size="small"></el-input>
        </el-form-item>
        <el-form-item label="紧急程度:">
          <el-input v-model="insOrder.typeName" clearable disabled placeholder="请输入" size="small"></el-input>
        </el-form-item>
        <el-form-item label="约定时间:">
          <el-input v-model="insOrder.appointed" clearable disabled placeholder="请输入" size="small"></el-input>
        </el-form-item>
        <el-form-item v-if="typeSource === 1" label="抽检数量:">
          <el-input v-model="insOrder.testQuantity" clearable disabled placeholder="请输入" size="small"></el-input>
        </el-form-item>
        <el-form-item v-if="typeSource === 1" label="厂家密度:">
          <el-input v-model="supplierDensity" clearable disabled placeholder="请输入" size="small"></el-input>
        </el-form-item>
        <el-form-item label="当前样品位数:" label-width="120px">
          <el-tag v-if="currentKey">{{ `NO.${currentKey}` }}</el-tag>
        </el-form-item>
        <el-form-item label="备注:">
          <!--          <span style="color:red">{{ insOrder.remark?insOrder.remark:'-' }}</span>-->
<!--      <el-form :inline="true" :model="searchForm" class="form-inline" label-position="right" label-width="100px">-->
<!--        <el-form-item label="委托编号:">-->
<!--          <el-input v-model="insOrder.entrustCode" clearable disabled placeholder="请输入" size="small"></el-input>-->
<!--        </el-form-item>-->
<!--        <el-form-item label="样品编号:">-->
<!--          <el-tooltip :content="currentSample.sampleCode" :disabled="!currentSample.sampleCode">-->
<!--            <el-input v-model="currentSample.sampleCode" clearable disabled placeholder="请输入" size="small"></el-input>-->
<!--          </el-tooltip>-->
<!--        </el-form-item>-->
<!--        <el-form-item label="样品名称:">-->
<!--          <el-input v-model="currentSample.sample" clearable disabled placeholder="请输入" size="small"></el-input>-->
<!--        </el-form-item>-->
<!--        <el-form-item label="样品数量:">-->
<!--          <el-input v-model="sampleProduct.length" clearable disabled placeholder="请输入" size="small"></el-input>-->
<!--        </el-form-item>-->
<!--        <el-form-item label="样品型号:">-->
<!--          <el-input v-model="currentSample.model" clearable disabled placeholder="请输入" size="small"></el-input>-->
<!--        </el-form-item>-->
<!--        <el-form-item label="下发时间:">-->
<!--          <el-input v-model="insOrder.sendTime" clearable disabled placeholder="请输入" size="small"></el-input>-->
<!--        </el-form-item>-->
<!--        <el-form-item label="紧急程度:">-->
<!--          <el-input v-model="insOrder.typeName" clearable disabled placeholder="请输入" size="small"></el-input>-->
<!--        </el-form-item>-->
<!--        <el-form-item label="约定时间:">-->
<!--          <el-input v-model="insOrder.appointed" clearable disabled placeholder="请输入" size="small"></el-input>-->
<!--        </el-form-item>-->
<!--        <el-form-item v-if="typeSource === 1" label="抽检数量:">-->
<!--          <el-input v-model="insOrder.testQuantity" clearable disabled placeholder="请输入" size="small"></el-input>-->
<!--        </el-form-item>-->
<!--        <el-form-item v-if="typeSource === 1" label="厂家密度:">-->
<!--          <el-input v-model="supplierDensity" clearable disabled placeholder="请输入" size="small"></el-input>-->
<!--        </el-form-item>-->
<!--        <el-form-item label="当前样品位数:" label-width="120px">-->
<!--          <el-tag v-if="currentKey">{{ `NO.${currentKey}` }}</el-tag>-->
<!--        </el-form-item>-->
<!--        <el-form-item label="备注:">-->
<!--          &lt;!&ndash;          <span style="color:red">{{ insOrder.remark?insOrder.remark:'-' }}</span>&ndash;&gt;-->
<!--          <el-input v-model="insOrder.remark" :disabled="state != 1" clearable placeholder="请输入" size="small"-->
<!--            @blur="subOtherForm(insOrder.remark, 'remark')"></el-input>-->
<!--          &lt;!&ndash; <el-tag v-if="currentKey">{{ insOrder.remark }}</el-tag> &ndash;&gt;-->
<!--        </el-form-item>-->
<!--        <template v-if="insOrder.isSplitOrder && insOrder.isSplitOrder===1">-->
<!--          <el-form-item label="外护颜色:">-->
<!--            <el-input v-model="insOrder.outerColor" clearable disabled placeholder="" size="small"></el-input>-->
<!--          </el-form-item>-->
<!--          <el-form-item label="绝缘颜色:">-->
<!--            <el-input v-model="insOrder.insulationColor" clearable disabled placeholder="" size="small"></el-input>-->
<!--          </el-form-item>-->
<!--          <el-form-item label="盘号:">-->
<!--            <el-input v-model="insOrder.drumNo" clearable disabled placeholder="" size="small"></el-input>-->
<!--          </el-form-item>-->
<!--        </template>-->
<!--      </el-form>-->
      <el-descriptions title="检验单概况" :column="4" border>
        <template v-if="insOrder.ifsOrderType">
          <el-descriptions-item label="零件号">{{insOrder.partNo}}</el-descriptions-item>
          <el-descriptions-item label="零件名称">{{insOrder.partDetail}}</el-descriptions-item>
          <el-descriptions-item label="批次号">{{ insOrder.lotBatchNo }}</el-descriptions-item>
          <el-descriptions-item label="样品型号" >{{currentSample.model}}</el-descriptions-item>
          <el-descriptions-item label="抽检数量">{{insOrder.testQuantity}}</el-descriptions-item>
          <el-descriptions-item label="厂家密度">{{supplierDensity}}</el-descriptions-item>
          <template v-if="insOrder.ifsOrderType && insOrder.ifsOrderType==='02wg'">
            <el-descriptions-item label="载具编号">{{insOrder.drumNo}}</el-descriptions-item>
            <el-descriptions-item label="起始米标(km)">{{insOrder.startMeterMark}}</el-descriptions-item>
            <el-descriptions-item label="截止米标(km)">{{insOrder.endMeterMark}}</el-descriptions-item>
            <el-descriptions-item label="入库长度(km)">{{calcInbondLength(insOrder.startMeterMark,insOrder.endMeterMark)}}</el-descriptions-item>
            <el-descriptions-item label="绝缘颜色">{{insOrder.insulationColor}}</el-descriptions-item>
            <el-descriptions-item label="外护颜色">{{insOrder.outerColor}}</el-descriptions-item>
            <el-descriptions-item label="印字信息">{{insOrder.letteringInfo}}</el-descriptions-item>
          </template>
        </template>
        <template v-else>
          <el-descriptions-item label="委托编号">{{ insOrder.entrustCode }}</el-descriptions-item>
          <el-descriptions-item label="样品编号">{{ currentSample.sampleCode }}</el-descriptions-item>
          <el-descriptions-item label="样品名称">{{ currentSample.sample }}</el-descriptions-item>
          <el-descriptions-item label="样品数量">{{ sampleProduct.length }}</el-descriptions-item>
          <el-descriptions-item label="样品型号">{{ currentSample.model }}</el-descriptions-item>
          <el-descriptions-item label="下发时间">{{ insOrder.sendTime }}</el-descriptions-item>
          <el-descriptions-item label="紧急程度">{{ insOrder.typeName }}</el-descriptions-item>
          <el-descriptions-item label="约定时间">{{ insOrder.appointed }}</el-descriptions-item>
        </template>
        <el-descriptions-item label="当前样品位数"><el-tag v-if="currentKey">{{ `NO.${currentKey}` }}</el-tag></el-descriptions-item>
        <el-descriptions-item label="备注">
          <el-input v-model="insOrder.remark" :disabled="state != 1" clearable placeholder="请输入" size="small"
            @blur="subOtherForm(insOrder.remark, 'remark')"></el-input>
          <!-- <el-tag v-if="currentKey">{{ insOrder.remark }}</el-tag> -->
        </el-form-item>
      </el-form>
                    @blur="subOtherForm(insOrder.remark, 'remark')"></el-input>
        </el-descriptions-item>
      </el-descriptions>
    </div>
    <div class="center">
      <div class="search" style="
@@ -517,6 +563,49 @@
      :purchaseDialog="purchaseDialog" @resetPurchaseDialog="resetPurchaseDialog"></purchase-verification>
    <!--查看工时弹框-->
    <viewManHourDia ref="viewManHourDia" @submit="openAddVerifyDia"></viewManHourDia>
    <!--    IFS物料属性编辑弹框-->
    <el-dialog
      title="更新IFS库存物料批次属性"
      :visible.sync="ifsMaterialPropsVisible"
      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="入库长度">-->
        <!--          <el-input v-model="ifsMaterialPropsForm.inboundLength"></el-input>-->
        <!--        </el-form-item>-->
        <el-form-item label="外护颜色(Attr4):">
          <el-select 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 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 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>
@@ -527,6 +616,7 @@
import AddUnPass from "../unpass/components/addUnPass.vue";
import InspectionWord from "./components/InspectionWord.vue";
import PurchaseVerification from "../unpass/components/PurchaseVerification.vue";
import {getOneByIfsId,saveOrUpdateProps} from "@/api/business/ifsPartProps.js";
import {
  doInsOrder,
  getCableTag,
@@ -551,6 +641,7 @@
import html2canvas from "html2canvas";
import { mapGetters } from "vuex";
import viewManHourDia from "@/views/business/inspectionTask/components/viewManHourDia.vue";
import {getDicts} from "@/api/system/dict/data";
export default {
  name: 'Inspection',
  components: {
@@ -563,6 +654,21 @@
  },
  data() {
    return {
      outerColorList:[],
      insulationColorList:[],
      letteringInfoList: [],
      ifsMaterialPropsForm:{
        id:null,
        ifsInventoryId: null,
        drumNo: '', // è½½å…·ç¼–号
        startMeterMark: '', // èµ·å§‹ç±³æ ‡
        endMeterMark: '', // æˆªæ­¢ç±³æ ‡
        insulationColor: '', // ç»ç¼˜é¢œè‰²
        outerColor: '', // å¤–护颜色
        inboundLength: '', // å…¥åº“长度
        letteringInfo: '', // å°å­—信息
      },
      ifsMaterialPropsVisible:false,
      sonLaboratory: null,
      orderId: null,
      state: null,
@@ -879,6 +985,87 @@
    this.stopWorker();
  },
  methods: {
    validateQuality(){
      let inboundLength = Number(this.calcInbondLength(this.ifsMaterialPropsForm.startMeterMark,this.ifsMaterialPropsForm.endMeterMark));
      let testQuantity = Number(this.insOrder.testQuantity);
      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;
    },
    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.ifsMaterialPropsVisible = false;
    },
    getPartProps(ifsId){
      getOneByIfsId(ifsId).then((res)=>{
        if(res.code==200 && res.data){
          this.ifsMaterialPropsForm = res.data;
        }
      })
    },
    saveOrUpdatePartProp(){
      this.ifsMaterialPropsForm.ifsInventoryId = this.insOrder.ifsInventoryId
      saveOrUpdateProps({
        ...this.ifsMaterialPropsForm,
        partNo: this.insOrder.partNo,
        lotBatchNo: this.insOrder.lotBatchNo,
      }).then((res)=>{
        if(res.code==200){
          this.$message.success("保存成功");
          this.ifsMaterialPropsVisible = false;
          this.refreshView()
        }
      })
    },
    //打开IFS物料属性弹框
    showMaterialPropsDialog(){
      this.getPartProps(this.insOrder.ifsInventoryId)
      this.getOuterColorDicts()
      this.getInsulationColorDicts()
      this.getLetteringInfoDicts()
      this.$nextTick(()=>{
        this.ifsMaterialPropsVisible = true;
      })
    },
    // æ–‡ä»¶ç®¡ç†--开始
    getList() {
      this.tableLoading = true;
@@ -945,6 +1132,10 @@
        laboratory: this.sonLaboratory,
      }).then(async (res) => {
        this.insOrder = res.data.insOrder;
        if(res.data.insOrder.ifsOrderType==='02wg'){
          //查询零件属性
          this.getPartProps(res.data.insOrder.ifsInventoryId)
        }
        this.supplierDensity = res.data.supplierDensity;
        this.getList()
        this.urgentList.forEach((m) => {
@@ -2579,12 +2770,16 @@
        this.$message.error("请指定复核人员");
        return;
      }
      if (!this.otherForm.humidity) {
      if (!this.otherForm.humidity && this.insOrder.ifsOrderType!=='02wg') {
        this.$message.error("请输入湿度");
        return;
      }
      if (!this.otherForm.temperature) {
      if (!this.otherForm.temperature && this.insOrder.ifsOrderType!=='02wg') {
        this.$message.error("请输入温度");
        return;
      }
      if (!this.insOrder.lotPartId && this.insOrder.ifsOrderType==='02wg') {
        this.$message.error("请填写IFS库存物料批次属性");
        return;
      }
      this.submitLoading = true;
@@ -2939,6 +3134,7 @@
  background-color: #fff;
  border-radius: 3px;
  margin-bottom: 10px;
  padding: 10px;
}
.search .form-inline {
src/views/business/materialOrder/customsInspectionOrder.vue
@@ -1,6 +1,6 @@
<template>
  <div class="app-container">
    <div>
    <div v-show="!cableConfigShow&&!auxiliaryShow">
      <div class="header">
        <div>
          <span>采购订单信息</span>
@@ -24,6 +24,8 @@
          <el-button v-show="active==1" size="small" @click="templateDia=true">
            <span style="color: #3A7BFA;">保存模板</span>
          </el-button>
          <el-button v-if="active==1&&addObj.sample!=undefined&&(addObj.sample.indexOf('电缆')>-1 ||addObj.sample.indexOf('综合')>-1)" size="small" type="primary" @click="openCableConfig">电缆配置</el-button>
          <el-button v-if="active==1&&addObj.sample!=undefined&&addObj.sample.indexOf('电缆')>-1" size="small" type="primary" @click="openAuxiliaryCore">辅助线芯配置</el-button>
          <el-button v-show="active==1 && addObj.orderType === '进厂检验'" :loading="noNeedCheckLoad" size="small" type="primary" @click="noNeedCheck">免检</el-button>
          <el-button v-show="active==1" :loading="saveLoad" size="small" type="primary" @click="save">提交</el-button>
          <el-button size="small" @click="goBack">
@@ -32,7 +34,7 @@
        </div>
      </div>
    </div>
    <div class="search">
    <div class="search"  v-show="!cableConfigShow&&!auxiliaryShow">
      <el-form ref="addObj" :inline="true" :model="addObj" :rules="addObjRules" label-width="90px">
        <el-row>
          <el-col :span="6">
@@ -145,7 +147,7 @@
        </el-row>
      </el-form>
    </div>
    <div>
    <div  v-show="!cableConfigShow&&!auxiliaryShow">
      <div style="display: flex;justify-content: space-between;background-color: #F5F7FB;margin-bottom: 6px">
        <div v-if="active==1">
          <el-form :inline="true" :model="addObj1" label-width="90px">
@@ -433,6 +435,10 @@
        <el-button :loading="noNeedCheckLoad" type="primary" @click="handleNoNeedCheck">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <!--电缆配置-->
    <cableConfig v-if="cableConfigShow" ref="cableConfigShow" :active="active" :isSpecial="isSpecial" :sampleSelectionList="sampleSelectionList" @goBackAdd="goBackAdd"/>
    <!--辅助线芯配置-->
    <auxiliary-wire-core v-if="auxiliaryShow" :active="active" :isSpecial="isSpecial" :sampleSelectionList="sampleSelectionList" @goBackAdd2="goBackAdd2"></auxiliary-wire-core>
  </div>
</template>
@@ -451,15 +457,24 @@
  selectStandardProductList,
  selectStandardTreeListByPartNo
} from "@/api/business/rawMaterialOrder";
import {dateFormat} from "@/utils/date";
import {bigEval} from "@/utils/bigEval";
import AuxiliaryWireCore from "../productOrder/components/auxiliaryWireCore.vue";
import cableConfig from "../productOrder/components/cable-config.vue";
export default {
  name: "CustomsInspectionOrder",
  dicts: ['check_type', 'urgency_level'],
  components: {},
  components: {cableConfig, AuxiliaryWireCore},
  props: {
  },
  data() {
    return {
      cableConfigShow: false,
      auxiliaryShow: false,
      isSpecial: false,
      sampleSelectionList: [],//样品表格选中数据
      isOutsourcing: 'f',//是否外购成品
      customsInspection: {},
      orderType: '',
      active: 0,
@@ -614,6 +629,17 @@
    //   this.addObj.method = null
    //   this.productList = []
    // },
    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
        }
      }
    },
    productList: {
      deep: true,
      handler(val) {
@@ -643,6 +669,7 @@
  created() {
    this.active = this.$route.query.active
    this.orderType = this.$route.query.orderType
    this.isOutsourcing = this.$route.query.isOutsourcing
    this.currentId = this.$route.query.currentId
    this.isReport = this.$route.query.isReport
    this.customsInspection = this.$route.query.customsInspection
@@ -651,6 +678,7 @@
  activated() {
    this.active = this.$route.query.active
    this.orderType = this.$route.query.orderType
    this.isOutsourcing = this.$route.query.isOutsourcing
    this.currentId = this.$route.query.currentId
    this.isReport = this.$route.query.isReport
    this.customsInspection = this.$route.query.customsInspection
@@ -660,6 +688,82 @@
  //   this.getInfo() // èŽ·å–æ•°æ®
  // },
  methods: {
    goBackAdd () {
      this.cableConfigShow = false
    },
    goBackAdd2 () {
      this.auxiliaryShow = false
    },
    // ç¼–辑要求值表格
    editSpecial () {
      this.isSpecial = true
      this.$nextTick(() => {
        this.$refs.productTable.doLayout();
      });
    },
    areObjectsValuesEqual (objects, property) {
      if (!objects || objects.length === 0) return false;
      const firstValue = objects[0][property];
      return objects.every(obj => obj[property] === firstValue);
    },
    // è¾…助线芯配置
    openAuxiliaryCore () {
      if (this.active == 1) {
        if (this.sampleIds.length === 0) {
          this.$message.error("未选择样品")
        } else if (this.sampleIds.length === 1) {
          if (!this.sampleSelectionList[0].standardMethodListId) {
            this.$message.error("样品未选择检验标准")
            return
          }
          this.auxiliaryShow = true
        } else {
          // åŒæ—¶é…ç½®å¤šä¸ªæ ·å“çš„电缆配置时必须选择相同的检验标准
          if (!this.sampleSelectionList.every(value => value.standardMethodListId)) {
            this.$message.error("样品未选择检验标准")
          } else {
            if (!this.areObjectsValuesEqual(this.sampleSelectionList, 'standardMethodListId')) {
              this.$message.error("请选择相同的检验标准")
              return
            }
            this.auxiliaryShow = true
          }
        }
      } else {
        if (this.sampleId === null) {
          this.$message.error('未选中样品')
        }
      }
    },
    //打开电缆配置弹框
    openCableConfig() {
      if (this.active == 1) {
        if (this.sampleIds.length === 0) {
          this.$message.error("未选择样品")
        } else if (this.sampleIds.length === 1) {
          if (!this.sampleSelectionList[0].standardMethodListId) {
            this.$message.error("样品未选择检验标准")
            return
          }
          this.cableConfigShow = true
        } else {
          // åŒæ—¶é…ç½®å¤šä¸ªæ ·å“çš„电缆配置时必须选择相同的检验标准
          if (!this.sampleSelectionList.every(value => value.standardMethodListId)) {
            this.$message.error("样品未选择检验标准")
          } else {
            if (!this.areObjectsValuesEqual(this.sampleSelectionList, 'standardMethodListId')) {
              this.$message.error("请选择相同的检验标准")
              return
            }
            this.cableConfigShow = true
          }
        }
      } else {
        if (this.sampleId === null) {
          this.$message.error('未选中样品')
        }
      }
    },
    save1 () {
      if (this.bsm1DiaList.length > 0) {
        this.bsm1DiaList.forEach(item => {
@@ -771,6 +875,9 @@
            this.$set(this.addObj, 'receiverDate', this.customsInspection.receiverDate)
            this.$set(this.addObj, 'orderNo', this.customsInspection.orderNo)
            this.$set(this.addObj, 'declareUser', this.customsInspection.declareUser)
            if(this.isOutsourcing==='f'){
              this.$set(this.addObj, 'testQuantity', this.customsInspection.testQuantity)
            }
            this.$set(this.addObj, 'testQuantity', this.customsInspection.testQuantity)
            this.$set(this.addObj, 'buyUnitMeas', this.customsInspection.buyUnitMeas)
            this.$set(this.addObj, 'updateBatchNo', this.customsInspection.updateBatchNo)
@@ -1094,6 +1201,37 @@
        this.saveLoad = false
      })
    },
    /**
     * èŽ·å–å°æ•°çš„æœ€å¤§ä½æ•°
     * @param number  åž‹å·å‚æ•°
     * @param ask     è¦æ±‚值
     * @param calcNum è®¡ç®—值
     */
    getDecimalPlaces(number, ask, calcNum) {
      console.log("计算小数点-->", number, ask, calcNum);
      let count1 = 0;
      let count2 = 0;
      const reg = /(\d+\.)(\d+)/g;
      let matches = [];
      if (ask) {
        matches = ask.match(reg);
      }
      if (
        matches &&
        matches.length > 0 &&
        matches[0].toString().indexOf(".") > -1
      ) {
        count1 = matches[0].toString().split(".")[1].length;
      }
      if (number.toString().indexOf(".") > -1) {
        count2 = number.toString().split(".")[1].length;
      }
      if (calcNum.toString().indexOf(".") > -1) {
        const pointLength2 = calcNum.toString().split(".")[1].length;
        count2 = count2 > pointLength2 ? count2 : pointLength2;
      }
      return count1 > count2 ? count1 : count2;
    },
    handleAsk(ask,symbolItem, value) {
      try{
        let code = [">", "<", "=", ">", "<", "≥", "≤", "±", "*", "/"];
@@ -1106,7 +1244,13 @@
            let index = code.findIndex(b => m.includes(b))
            if (index > -1) {
              let arr = m.split(code[index]).filter(b => !!b)
              let num = eval(this.replaceAll(arr[0], symbolItem, value))
              let calcNum = this.$Big(
                bigEval(this.replaceAll(arr[0], symbolItem, value))
              );
              let num = calcNum.toFixed(
                this.getDecimalPlaces(value, ask, calcNum)
              );
              // let num = eval(this.replaceAll(arr[0], symbolItem, value))
              m = code[index] + '' + num
              arr1.push(m)
            }
@@ -1135,7 +1279,13 @@
          let index = code.findIndex(b => ask.includes(b))
          if (index > -1) {
            let arr = ask.split(code[index]).filter(b => !!b)
            let num = eval(this.replaceAll(arr[0], symbolItem, value))
            let calcNum = this.$Big(
              bigEval(this.replaceAll(arr[0], symbolItem, value))
            );
            let num = calcNum.toFixed(
              this.getDecimalPlaces(value, ask, calcNum)
            );
            // let num = eval(this.replaceAll(arr[0], symbolItem, value))
            return code[index] + '' + num
          }
        }
@@ -1442,6 +1592,9 @@
      })
    },
    getProNum() {
      this.sampleSelectionList.forEach((m, i) => {
        this.$set(this.sampleSelectionList[i], 'proNum', m.insProduct.filter(a => a.state == 1).length)
      })
      this.$refs.sampleTable.doLayout()
    },
    methodFocus() {
@@ -1511,6 +1664,7 @@
      val.forEach(a => {
        this.sampleIds.push(a.id)
      })
      this.sampleSelectionList = val
    },
    // é€‰ä¸­è¡¨æ ¼è¡Œçš„回调
    rowClick(row, column, event) {
@@ -1524,7 +1678,11 @@
      this.sampleId = row.id
      if (this.active !== 1) {
        this.sampleIds = []
        this.sampleIds.push(row.id)
        this.sampleSelectionList.forEach(ele=>{
          if(ele.id == row.id){
            this.sampleIds.push(row.id)
          }
        })
      }
      // this.productList = row.insProduct
      if (this.productList !== null) {
src/views/business/materialOrder/index.vue
@@ -201,7 +201,8 @@
  repealEnterRawOrder,
  repealQuarterRawOrder,
  revokeInspectionReport,
  updateEntrustCode
  updateEntrustCode,
  getOrderCountByIfsId
} from "@/api/business/rawMaterialOrder";
import { getWarehouseSubmit } from "@/api/business/materialInspection";
import {mapGetters} from "vuex";
@@ -1190,11 +1191,21 @@
    },
    // ä¸‹å•
    playOrder(row) {
      this.$router.push({ path: "/materialOrder/customsInspectionOrder", query: { orderType: 0, customsInspection: row, active: 1 } });
      //查询当前批次是否已经下单
      getOrderCountByIfsId(row.id).then(res=>{
        if(res.code===200 && res.data>0){
          this.$message.warning('该批次已下单,请勿重复下单')
          this.refreshTable('page')
          return
        }
        this.$router.push({ path: "/materialOrder/customsInspectionOrder", query: {isOutsourcing:'f', orderType: 0, customsInspection: row, active: 1 } });
      }).catch(error=>{
        console.error(error)
      })
    },
    // å­£åº¦æ£€éªŒä¸‹å•
    playOrderSec(row) {
      this.$router.push({ path: "/materialOrder/customsInspectionOrder", query: { orderType: 1, customsInspection: row, active: 1 } });
      this.$router.push({ path: "/materialOrder/customsInspectionOrder", query: {isOutsourcing:'f', orderType: 1, customsInspection: row, active: 1 } });
    },
    // ç‚¹å‡»æ ·å“åç§°æŸ¥çœ‹è¯¦æƒ…
    selectAllByOne(row) {
@@ -1357,6 +1368,7 @@
      } else {
        params = {...this.entity}
      }
      params.orderType = "01raw";
      rawAllExport(params).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
src/views/business/outsourcingFinishProduct/components/printDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,347 @@
<template>
  <div>
    <el-dialog :visible.sync="isShow" title="标签打印" top="5vh" width="600px" @close="$emit('closePrintDialog')">
      <div style="width:100%;height: 400px;overflow-y: auto;text-align: left">
        <div class="dia_body">
          <el-checkbox
            v-model="checkAll"
            :indeterminate="isIndeterminate"
            style="margin: 10px 5px;"
            @change="handleCheckAllChange">全选</el-checkbox>
          <el-checkbox-group v-model="checkIndexList" @change="changePrintCode()">
            <el-card v-for="(item, i) in barcodeData" :key="i" class="box-card" style="margin-bottom: 15px; font-size: 16px !important;">
              <el-checkbox :key="i" :label="i" style="position: relative;top:0;left:10px"><br></el-checkbox>
              <div>
                <div class="titleH1" style="text-align: center; margin-bottom: 2px;font-size: 16px">检测中心样品标识卡</div>
                <div style="text-align: center;">
                  <barcode :displayValue="false" :height="34" :value="item.barcode" :width="2"></barcode>
                </div>
                <div style="margin-left: 20px;text-align: left">
                  <div class="item">
                    <span class="full-title">样品名称</span>:
                    <span class="info">{{ item.sampleView }}</span>
                  </div>
                  <div class="item">
                    <span class="full-title">生产单位</span>:
                    <span class="info">{{ item.production }}</span>
                  </div>
                  <div class="item2">
                    <span class="full-title">规格型号</span>:
                    <span class="info">{{ item.sampleModel }}</span>
                  </div>
                  <div class="item">
                    <span class="full-title">委托日期</span>:
                    <span class="info">{{ item.sendTime }}</span>
                  </div>
                  <div class="item">
                    <span class="full-title">委托人</span>:
                    <span class="info2">{{ item.prepareUser }}</span>
                    <span class="full-title">检测编号</span>:
                    <span class="info">{{ item.entrustCode }}</span>
                  </div>
                  <div class="item">
                    <span class="full-title">样品数量</span>:
                    <span class="info2">{{ item.testQuantity }}</span>
                  </div>
                  <div style="font-weight: bold;display: flex;align-items: center;">
                    <span class="full-title">样品状态</span>:
                    <el-radio-group v-model="item.insState" v-removeAriaHidden style="margin-top: 7px;margin-left: 4px;">
                      <el-radio :label="0" style="font-weight: bold;margin-right: 7px;">待检</el-radio>
                      <el-radio :label="1" style="font-weight: bold;margin-right: 7px;">在检</el-radio>
                      <el-radio :label="2" style="font-weight: bold;margin-right: 7px;">已检</el-radio>
                    </el-radio-group>
                    <span>
                      <el-radio v-model="item.isLeave"
                                :label="true"
                                size="small" style="margin-left: 14px;margin-top: 3px;" @click.native.prevent="changeIsLeave(item)">留样</el-radio>
                    </span>
                  </div>
                </div>
              </div>
            </el-card>
          </el-checkbox-group>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="$emit('closePrintDialog')">取 æ¶ˆ</el-button>
          <el-button type="primary" @click="submitPrint">打 å°</el-button>
        </el-row>
      </span>
    </el-dialog>
    <div class="el-dialog-body" style="overflow-y: auto;margin-top: 0;position: fixed;top: 20px;right: 10px;z-index: 99999;">
      <div id="printOrder" ref="printOrder" class="printOrder">
        <el-card v-for="(item, i) in checkDataList" :key="i" class="box-card" style="font-size: 0.29cm !important;font-weight: 700;page-break-after: always;color: #000;box-shadow: none;margin: 0 !important;padding: 0 !important;">
          <div>
            <div class="titleH1" style="text-align: center;margin-bottom: 1px">检测中心样品标识卡</div>
            <div style="text-align: center;">
              <barcode :displayValue="false" :height="22" :value="item.barcode" :width="1.6"></barcode>
            </div>
            <div style="margin-left: 12px;text-align: left">
              <div class="item">
                <span class="full-title4">样品名称:</span>
                <span class="info4">{{ item.sampleView }}</span>
              </div>
              <div class="item">
                <span class="full-title2">生产单位</span>:
                <span class="info">{{ item.production }}</span>
              </div>
              <div class="item2">
                <span class="full-title4">规格型号:</span>
                <span class="info4">{{ item.sampleModel }}</span>
              </div>
              <div class="item">
                <span class="full-title2">委托日期</span>:
                <span class="info">{{ item.sendTime }}</span>
              </div>
              <div class="item">
                <span class="full-title2">委托人</span>:
                <span class="info3">{{ item.prepareUser }}</span>
                <span class="full-title2">检测编号</span>:
                <span class="info">{{ item.entrustCode }}</span>
              </div>
              <div class="item">
                <span class="full-title2">样品数量</span>:
                <span class="info3">{{ item.testQuantity }}</span>
              </div>
              <div>
                <span class="full-title2">样品状态</span>:
                <span style="white-space: nowrap;margin-left: 2px">
                  å¾…检<span v-if="item.insState!==0" class="scor"></span><span v-if="item.insState===0" class="checked">√</span>
                  åœ¨æ£€<span v-if="item.insState!==1" class="scor"></span><span v-if="item.insState===1" class="checked">√</span>
                  å·²æ£€<span v-if="item.insState!==2" class="scor"></span><span v-if="item.insState===2" class="checked">√</span>
                  ç•™æ ·<span v-if="!item.isLeave" class="scor"></span><span v-if="item.isLeave" class="checked">√</span>
                </span>
              </div>
            </div>
          </div>
        </el-card>
      </div>
    </div>
  </div>
</template>
<script>
import PrintJS from "print-js";
import {labelOrderPrinting} from "@/api/business/productOrder";
export default {
  name: "printDialog",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {},
  props: {
    printDialog: {
      type: Boolean,
      default: () => false
    },
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      isShow: this.printDialog,
      loadPint: false,
      isIndeterminate: false, // å¤šé€‰æ¡†æ ·å¼
      checkAll: false,
      checkIndexList: [], // é€‰æ‹©è¦æ‰“印的数据
      barcodeData: [],
      printLoading: false,
      checkDataList: []
    }
  },
  // æ–¹æ³•集合
  methods: {
    // èŽ·å–è¦æ‰“å°çš„æ•°æ®
    getLabelPrinting(selection) {
      try {
        this.loadPint = true;
        let ids = []
        selection.map(m => {
          ids.push(m.id)
        })
        labelOrderPrinting({
          ids: ids
        }).then(res => {
          if (res.code === 200 && res.data.length > 0) {
            res.data.forEach(item => {
              item.sendTime = item.sendTime && item.sendTime.substring(0, 10)
              item.sampleNumber = item.qtyArrived + item.buyUnitMeas
              this.$set(item, 'barcode', item.entrustCode)
              this.$set(item, 'isLeave', item.insState === '2')
            })
            this.barcodeData = res.data
          }
        })
      } catch (e) {
        console.log('获取要打印的数据---', e)
      }
    },
    changeIsLeave(item) {
      const index = this.barcodeData.findIndex(val => val.entrustCode === item.entrustCode)
      if (index > -1) {
        this.barcodeData[index].isLeave = !this.barcodeData[index].isLeave
      }
    },
    // å…¨é€‰å¤šé€‰æ¡†å›žè°ƒ
    handleCheckAllChange(val) {
      if (val) {
        for (var i = 0; i < this.barcodeData.length; i++) {
          this.checkIndexList.push(i)
        }
        this.checkDataList = this.barcodeData
      } else {
        this.checkIndexList = []
        this.checkDataList = []
      }
      this.isIndeterminate = false;
    },
    changeType(type) {
      type = type === '1' ? '0' : '1'
    },
    //选择要打印的二维码
    changePrintCode() {
      let indexList = this.checkIndexList
      let arr = []
      indexList.forEach(i => {
        if (i !== undefined) {
          arr.push(this.barcodeData[i])
        }
      })
      console.log('arr---', arr)
      this.checkDataList = arr
    },
    // æäº¤æ‰“印
    submitPrint() {
      if (this.checkDataList.length < 1) {
        this.$message.warning("请选择要打印的条形码")
        return
      }
      this.printDialogVisible = false;
      PrintJS({
        targetStyles: ["*"], // ä½¿ç”¨dom的所有样式,很重要
        printable: 'printOrder',//页面
        type: "html",//文档类型
        maxWidth: 360,
        header: '',
        style:
          `@page {
            margin: 0.4cm;
            margin-right: 0.4cm;
            margin-top: 0.4cm;
            margin-bottom: 0.4cm;
            padding-bottom: 0px;
            size: 400px 75px collapse;
          }
          html{
            zoom:100%;
          }
          @media print{
            width: 400px;
            height: 75px;
            margin:0;
          }`,
        onPrintDialogClose: this.erexcel = false,
        font_size: '0.29cm',
      });
    },
  },
  watch: {
    printDialog(newVal) {
      if (!newVal) {
        this.barcodeData = []
        this.checkIndexList = []
        this.checkDataList = []
        this.isIndeterminate = true;
      }
    }
  },
}
</script>
<style scoped>
.item {
  margin-bottom: 4px;
}
.item2 {
  margin-bottom: 8px;
  vertical-align: top;
}
.full-title {
  display: inline-block;
  width: 80px;
  text-align-last: justify;
}
.full-title2 {
  display: inline-block;
  width: 50px;
  text-align-last: justify;
}
.full-title4 {
  display: inline-block;
  width: 53px;
  text-align-last: justify;
  vertical-align: top;
}
.info {
  margin-left: 2px;
}
.info2 {
  margin-left: 2px;
  margin-right: 30px;
  width: 80px;
  display: inline-block;
}
.info3 {
  margin-left: 2px;
  margin-right: 8px;
  width: 44px;
  display: inline-block;
}
.info4 {
  display: inline-block;
  margin-left: 2px;
  white-space: normal;
  width: 260px;
}
.checkboxInfo {
  display: inline-block;
  margin-left: 10px;
}
.scor {
  width: 0.06cm;
  height: 0.06cm;
  border-radius: 1px;
  border: 1px solid #000;
  display: inline-block;
  margin-right: 14px;
  margin-left: 4px;
}
.checked {
  margin-right: 14px;
  margin-left: 4px;
}
>>> .el-checkbox {
  margin-right: 10px;
}
>>> .el-card {
  border: none;
}
>>> .el-card__body {
  padding: 4px 2px 6px 14px;
}
</style>
src/views/business/outsourcingFinishProduct/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1268 @@
<template>
  <div class="app-container">
    <div>
      <div class="search">
        <el-form :model="entity" ref="entity" size="small" :inline="true">
          <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="supplierName" >
            <el-input v-model="entity.supplierName" clearable placeholder="请输入" size="small"
                      @keyup.enter.native="goSearch">
            </el-input>
          </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-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" placeholder="选择日期" @change="goSearch"
                            range-separator="至" size="small" start-placeholder="开始日期" type="daterange" value-format="yyyy-MM-dd">
            </el-date-picker>
          </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="'calc(100vh - 290px)'"
                      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="'calc(100vh - 290px)'" 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="'calc(100vh - 290px)'" 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="'calc(100vh - 290px)'" 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>
    <!--    <Inspection v-if="state>0" :key="InspectionKey" :inspectorList="inspectorList" :orderId="orderId"-->
    <!--                :sonLaboratory="'原材料'" :state="state"-->
    <!--                :typeSource="typeSource"-->
    <!--                @goback="goback" @refreshView="refreshView"/>-->
  </div>
</template>
<script>
import PrintDialog from "@/views/business/materialOrderComponents/materialOrder/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 {
  concessionRelease,
  getIfsByQuarter,
  rawAllExport,
  rawOrderRelease,
  repealEnterRawOrder,
  repealQuarterRawOrder,
  revokeInspectionReport,
  updateEntrustCode
} from "@/api/business/rawMaterialOrder";
import {getWarehouseSubmit,getIfsByStateOne,getIfsByOver,getIfsByAll} from "@/api/business/outsourcingFinishProductInspection";
import {mapGetters} from "vuex";
export default {
  name: "MaterialOrder",
  // import å¼•入的组件需要注入到对象中才能使用
  components: { limsTable, DownFileDialog, FilesLookVisible, DataLookVisible, ShowInfo, PrintDialog },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      tableData: [],
      tableLoading: false,
      column: [
        { label: '批号', prop: 'updateBatchNo' },
        { label: '零件号', prop: 'partNo' },
        { label: '零件描述', prop: 'partDesc' },
        {
          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: '批号', 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' },
        {
          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: '委托编号',
          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' },
        {
          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: '报告下载',
              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: '委托编号', 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' },
        {
          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);
              },
            }
          ]
        }
      ],
      page3: {
        total: 0,
        size: 20,
        current: 1
      },
      entity: {
        updateBatchNo: null,
        entrustCode: null,
        partDesc: null,
        supplierName: null,
        sampleModel: null,
        partNo: null,
        inspectStatus: null,
        date: null,
        beginDeclareDate: null,
        endDeclareDate: null,
      },
      tabList: [
        {
          label: '待下单',
          value: 0
        },
        {
          label: '检验中',
          value: 1
        },
        {
          label: '已检验',
          value: 2
        },
        {
          label: '季度检验',
          value: 4
        },
        {
          label: '全部',
          value: 3
        }
      ],
      more: false,
      tabIndex: '',
      multipleSelection: [],
      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'])
  },
  mounted() {
    if (this.checkPermi(['get:raw:await'])) {
      this.tabIndex = 0
    } else {
      this.tabIndex = 2
    }
    this.refreshTable()
  },
  activated () {
    this.refreshTable()
  },
  // æ–¹æ³•集合
  methods: {
    // ç‚¹å‡»æŸ¥è¯¢å›žè°ƒ
    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, 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, 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, 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, ...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, 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.refresh()
          }
        })
      }).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) {
      this.$router.push({ path: "/outsourcingFinishProduct/customsInspectionOrder", query: {isOutsourcing:'t', orderType: 0, customsInspection: row, active: 1 } });
    },
    // ç‚¹å‡»æ ·å“åç§°æŸ¥çœ‹è¯¦æƒ…
    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.refresh()
        }
        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 = "02wg";
      rawAllExport(params).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '外购成品检测信息导出.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/productOrder/components/addOrder.vue
@@ -602,6 +602,7 @@
import limsTable from "@/components/Table/lims-table.vue";
import {selectCustomPageList} from "@/api/system/customer";
import {mapGetters} from "vuex";
import { bigEval } from "@/utils/bigEval";
import {addQuarter, updateQuarterOnOrder} from "@/api/business/finishedProductSampling";
export default {
@@ -860,6 +861,37 @@
    this.getInfo();
  },
  methods: {
    /**
     * èŽ·å–å°æ•°çš„æœ€å¤§ä½æ•°
     * @param number  åž‹å·å‚æ•°
     * @param ask     è¦æ±‚值
     * @param calcNum è®¡ç®—值
     */
    getDecimalPlaces(number, ask, calcNum) {
      console.log("计算小数点-->", number, ask, calcNum);
      let count1 = 0;
      let count2 = 0;
      const reg = /(\d+\.)(\d+)/g;
      let matches = [];
      if (ask) {
        matches = ask.match(reg);
      }
      if (
        matches &&
        matches.length > 0 &&
        matches[0].toString().indexOf(".") > -1
      ) {
        count1 = matches[0].toString().split(".")[1].length;
      }
      if (number.toString().indexOf(".") > -1) {
        count2 = number.toString().split(".")[1].length;
      }
      if (calcNum.toString().indexOf(".") > -1) {
        const pointLength2 = calcNum.toString().split(".")[1].length;
        count2 = count2 > pointLength2 ? count2 : pointLength2;
      }
      return count1 > count2 ? count1 : count2;
    },
    getInfo() {
      this.selectStandardTreeList()
      this.getAuthorizedPerson();
@@ -1045,7 +1077,13 @@
              let index = code.findIndex(b => m.includes(b))
              if (index > -1) {
                let arr = m.split(code[index]).filter(b => !!b)
                let num = eval(this.replaceAll(arr[0], symbolItem, value))
                let calcNum = this.$Big(
                  bigEval(this.replaceAll(arr[0], symbolItem, value))
                );
                let num = calcNum.toFixed(
                  this.getDecimalPlaces(value, ask, calcNum)
                );
                // let num = eval(this.replaceAll(arr[0], symbolItem, value))
                m = code[index] + '' + num
                arr1.push(m)
              }
@@ -1074,7 +1112,13 @@
            let index = code.findIndex(b => ask.includes(b))
            if (index > -1) {
              let arr = ask.split(code[index]).filter(b => !!b)
              let num = eval(this.replaceAll(arr[0], symbolItem, value))
              let calcNum = this.$Big(
                bigEval(this.replaceAll(arr[0], symbolItem, value))
              );
              let num = calcNum.toFixed(
                this.getDecimalPlaces(value, ask, calcNum)
              );
              // let num = eval(this.replaceAll(arr[0], symbolItem, value))
              return code[index] + '' + num
            }
          }
@@ -1306,7 +1350,7 @@
        })
      }else{
        // å¸¸è§„提交
        addInsOrder({insOrder: this.addObj, sampleList: sampleList}).then(res => {
        addInsOrder({insOrder: {...this.addObj,typeSource:-1}, sampleList: sampleList}).then(res => {
          this.saveLoad = false
          this.$message.success('已提交')
          this.bsm3Dia = false;
src/views/business/rawMaterialInspection/index.vue
@@ -47,6 +47,12 @@
              @keyup.enter.native="refreshTable">
            </el-input>
          </el-form-item>
          <el-form-item label="销售订单分类" prop="orderType" v-if="(tabIndex === 3 || tabIndex === 4) && more">
            <el-select v-model="componentData.orderType" clearable size="small"
                       @keyup.enter.native="refreshTable">
              <el-option v-for="(item,index) in orderTypeList" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option>
            </el-select>
          </el-form-item>
        </el-row>
      </el-form>
    </div>
@@ -65,7 +71,7 @@
            @click="handleDown">导出</el-button>
          <el-button v-if="tabIndex === 0" :loading="btnLoading" size="small" type="primary"
            @click="openIFS">获取IFS订单</el-button>
          <el-button v-if="tabIndex === 0" size="small" type="primary" @click="declareS">报检</el-button>
          <el-button v-if="tabIndex === 0" size="small" type="primary" @click="declareS">批量报检</el-button>
          <el-button v-if="tabIndex === 0" size="small" type="primary" @click="addDeclare">新增报检信息</el-button>
        </div>
      </div>
@@ -83,17 +89,24 @@
      </div>
    </div>
    <!-- æ‰¹é‡æŠ¥æ£€ -->
    <el-dialog :visible.sync="declareDialogSVisible" title="确认报检" width="30%">
      <p style="font-size:16px;color:#333333">是否确认报检选择的数据?</p>
    <el-dialog :visible.sync="declareDialogSVisible" title="批量报检" width="30%" :before-close="resetBatchFormData">
      <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-option v-for="(item,index) in orderTypeList" :value="item.dictValue" :label="item.dictLabel" :key="index"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="declareDialogSVisible = false">取 æ¶ˆ</el-button>
          <el-button @click="resetBatchFormData()">取 æ¶ˆ</el-button>
          <el-button :loading="submitDeclareLoading" type="primary" @click="submitDeclareS">ç¡® å®š</el-button>
        </el-row>
      </span>
    </el-dialog>
    <!-- ç¡®è®¤æŠ¥æ£€ -->
    <el-dialog :close-on-click-modal="false" :title="declareType === 'add' ? '新增报检信息' : '原材料报检'"
    <el-dialog :close-on-click-modal="false" :title="declareType === 'add' ? '新增报检信息' : '销售订单报检'"
      :visible.sync="declareDialogVisible" width="800px" @close="resetFormData">
      <el-form ref="declareObj" :inline="true" :model="declareObj" :rules="declareObjRules" label-width="130px"
        label-position="right">
@@ -139,6 +152,11 @@
          <el-select v-model="declareObj.isExpire" prop="isExpire" :disabled="declareType !== 'add'" clearable
            size="small">
            <el-option :value="1" label="过期物料"></el-option>
          </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-option v-for="(item,index) in orderTypeList" :value="item.dictValue" :label="item.dictLabel" :key="index"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
@@ -259,12 +277,15 @@
  addIfsInventoryQuantity,
  advancedGodown,
  concessionRelease, delIfsInventory,
  getIfsByAll,
  getIfsByFinish,
  getIfsOrder,
  getWarehouseSubmit, inspectionReport, inspectionReportOne, rawAllExport,
  revokeInspectionReport,downloadTemplate,confirmSplitOrder
} from '@/api/business/materialInspection'
import {
  getIfsByAll,
  getIfsByFinish,
} from '@/api/business/ifsOrderInspection'
import { getDicts } from "@/api/system/dict/data";
import limsTable from "@/components/Table/lims-table.vue";
import {transformExcel} from '@/utils/file'
@@ -280,6 +301,14 @@
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      declareBatchObj:{
        orderType:''
      },
      declareObjBatchRules:{
        orderType: [
          { required: true, message: '请选择销售订单分类', trigger: 'change' }
        ],
      },
      confirmSplitOrderLoading: false,
      detailDataLoading: false,
      pushToMes:false,//是否同步到mes
@@ -434,6 +463,7 @@
          }
        },
        { label: '订单号', prop: 'orderNo' },
        { label: '订单分类', prop: 'orderTypeName' },
        { label: '抵达的采购数量', prop: 'purQtyInStore' },
        { label: '报检时间', prop: 'declareDate' },
        { label: '批号', prop: 'updateBatchNo' },
@@ -549,6 +579,7 @@
        receiverDate: '', // æŽ¥æ”¶æ—¶é—´
        buyUnitMeas: '', // å•位
        isExpire: '', // å•位
        orderType: null, // é”€å”®è®¢å•分类
      },
      componentData: { // è¡¨æ ¼æ•°æ®
        updateBatchNo: null,
@@ -558,6 +589,7 @@
        date: null,
        entrustCode: '',
        inspectStatus: '',
        orderType: null, // é”€å”®è®¢å•分类
      },
      declareDialogVisible1: false,
      upLoad: false,
@@ -594,6 +626,9 @@
        buyUnitMeas: [
          { required: false, message: '请填写单位', trigger: 'blur' }
        ],
        orderType: [
          { required: true, message: '请选择销售订单分类', trigger: 'change' }
        ],
      },
      tabList: [
        {
@@ -628,13 +663,24 @@
      ],
      outLoading: false,
      upLoading: false,
      orderTypeList: [],
    }
  },
  mounted() {
    this.refreshTable()
    this.getOrderTypeList()
  },
  // æ–¹æ³•集合
  methods: {
    getOrderTypeList(){
      getDicts('inspection_type').then(res=>{
        if(res.code === 200){
          this.orderTypeList = res.data
        }
      }).catch(error=>{
        console.error(error)
      })
    },
    resetOrderSplitData(){
      this.orderSplitBasicData = []
      this.orderSplitDetailData = []
@@ -717,6 +763,9 @@
    // åˆ‡æ¢tab表格
    handleTab(m) {
      this.tabIndex = m;
      if([0,1].includes(this.tabIndex)){
        this.componentData.orderType = null
      }
      this.refreshTable()
    },
    // æŸ¥è¯¢å›žè°ƒ
@@ -887,21 +936,28 @@
    },
    // æäº¤æ‰¹é‡æŠ¥æ£€
    submitDeclareS() {
      let ids = []
      this.multipleSelection.forEach(item => {
        ids.push(item.id)
      })
      this.declareDialogSVisible = true
      inspectionReport({ ids: ids }).then(res => {
        if (res.code === 200) {
          this.declareDialogSVisible = false
          this.$message.success('报检成功')
          this.refreshTable()
      this.$refs.declareBatchObj.validate(valid=>{
        if(valid){
          let ids = []
          this.multipleSelection.forEach(item => {
            ids.push(item.id)
          })
          this.declareDialogSVisible = true
          inspectionReport({
            ids: ids,
            orderType: this.declareBatchObj.orderType
          }).then(res => {
            if (res.code === 200) {
              this.declareDialogSVisible = false
              this.$message.success('报检成功')
              this.refreshTable()
            }
            this.submitDeclareLoading = false
          }).catch(err => {
            this.submitDeclareLoading = false
            console.log(err)
          })
        }
        this.submitDeclareLoading = false
      }).catch(err => {
        this.submitDeclareLoading = false
        console.log(err)
      })
    },
    // æ‰“开报检确认弹框
@@ -947,7 +1003,8 @@
          if (valid) {
            inspectionReportOne({
              id: this.declareObj.id,
              updateBatchNo: this.declareObj.updateBatchNo
              updateBatchNo: this.declareObj.updateBatchNo,
              orderType: this.declareObj.orderType
            }).then(res => {
              if (res.code === 200) {
                this.declareDialogVisible = false
@@ -965,8 +1022,12 @@
      }
    },
    resetFormData() {
      this.$refs['declareObj'].resetFields();
      this.$refs.declareObj.resetFields();
      this.declareDialogVisible = false
    },
    resetBatchFormData() {
      this.$refs.declareBatchObj.resetFields();
      this.declareDialogSVisible = false
    },
    // æ‰“开删除弹框
    deleteMaterial(row) {
@@ -1027,6 +1088,7 @@
        receiverDate: '', // æŽ¥æ”¶æ—¶é—´
        buyUnitMeas: '', // å•位
        isExpire: '', // å•位
        orderType: null, // é”€å”®è®¢å•分类
      }
    }
  },
src/views/business/reportPreparation/index.vue
@@ -254,7 +254,8 @@
      verifyUser: null, // å®¡æ ¸äººå‘˜
      loadingVerify: false, // å®¡æ ¸äººå‘˜
      typeSourceList: [
        { label: '成品下单', value: 0 },
        { label: '委托下单', value: -1 },
        { label: '外购下单', value: 0 },
        { label: '原材料下单', value: 1 },
      ],
      orderTypeList: [
@@ -353,9 +354,11 @@
          dataType: "tag",
          formatData: (params) => {
            if (params == 0) {
              return "成品下单";
            } else {
              return "外购下单";
            } else if(params==1) {
              return "原材料下单";
            }else{
              return "委托下单";
            }
          },
        },