spring
2025-04-02 235f0b0e3605082bb2127dc6d87f4a7eef33c6de
src/views/business/materialOrder/copperOrder.vue
@@ -6,7 +6,8 @@
        <span>铜单丝下单</span>
      </div>
      <div>
        <el-button v-show="active==1 && addObj.orderType === '进厂检验'" :loading="noNeedCheckLoad" size="small" type="primary" @click="noNeedCheck">免检</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">
          <span style="color: #3A7BFA;">返回</span>
@@ -27,18 +28,20 @@
            </el-col>
            <el-col :span="6">
              <el-form-item class="addObj-form-item" label="到货数量:" prop="qtyArrived" required>
                <el-input v-model="addObj.qtyArrived" :disabled="active > 1" class="addObj-info"
                          clearable placeholder="" size="small"></el-input>
                <el-input v-model="addObj.qtyArrived" :disabled="active > 1" class="addObj-info" clearable
                  placeholder="" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item class="addObj-form-item" label="单位:" prop="buyUnitMeas">
                <el-input v-model="addObj.buyUnitMeas" :disabled="active > 1" clearable class="addObj-info" size="small"></el-input>
                <el-input v-model="addObj.buyUnitMeas" :disabled="active > 1" clearable class="addObj-info"
                  size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item class="addObj-form-item" label="批次号:" prop="updateBatchNo">
                <el-input v-model="addObj.updateBatchNo" :disabled="active > 1" class="addObj-info" clearable size="small"></el-input>
                <el-input v-model="addObj.updateBatchNo" :disabled="active > 1" class="addObj-info" clearable
                  size="small"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
@@ -46,32 +49,28 @@
            <el-col :span="6">
              <el-form-item class="addObj-form-item" label="检验类型:">
                <el-select v-model="addObj.orderType" clearable disabled size="small" style="width: 100%">
                  <el-option v-for="(a, ai) in dict.type.check_type" :key="ai" :label="a.label" :value="a.value"></el-option>
                  <el-option v-for="(a, ai) in dict.type.check_type" :key="ai" :label="a.label"
                    :value="a.value"></el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item class="addObj-form-item" label="约定时间:" prop="appointed">
                <el-date-picker
                  v-model="addObj.appointed"
                  :disabled="active > 1"
                  format="yyyy-MM-dd"
                  placeholder="选择日期"
                  size="small"
                  style="width: 100%"
                  type="date"
                  value-format="yyyy-MM-dd">
                <el-date-picker v-model="addObj.appointed" :disabled="active > 1" format="yyyy-MM-dd" placeholder="选择日期"
                  size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item class="addObj-form-item" label="材料厂家:" prop="supplierName">
                <el-input v-model="addObj.supplierName" :disabled="active > 1" class="addObj-info" clearable placeholder="" size="small"></el-input>
                <el-input v-model="addObj.supplierName" :disabled="active > 1" class="addObj-info" clearable
                  placeholder="" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item class="addObj-form-item" label="抽检数量:" prop="testQuantity">
                <el-input v-model="addObj.testQuantity" :disabled="active > 1" class="addObj-info" clearable placeholder="" size="small"></el-input>
                <el-input v-model="addObj.testQuantity" :disabled="active > 1" class="addObj-info" clearable
                  placeholder="" size="small"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
@@ -79,28 +78,23 @@
            <el-col :span="6">
              <el-form-item class="addObj-form-item" label="规格型号:" placeholder="请填写" prop="partDetail">
                <el-tooltip :content="addObj.partDetail" :disabled="!addObj.partDetail">
                  <el-input v-model="addObj.partDetail" :disabled="active > 1" clearable class="addObj-info" size="small"></el-input>
                  <el-input v-model="addObj.partDetail" :disabled="active > 1" clearable class="addObj-info"
                    size="small"></el-input>
                </el-tooltip>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item class="addObj-form-item" label="到货时间:" prop="declareDate">
                <el-date-picker
                    v-model="addObj.declareDate"
                    :disabled="active > 1"
                    format="yyyy-MM-dd"
                    placeholder="选择日期"
                    size="small"
                    style="width: 100%"
                    type="date"
                    value-format="yyyy-MM-dd HH:mm:ss">
                <el-date-picker v-model="addObj.declareDate" :disabled="active > 1" format="yyyy-MM-dd"
                  placeholder="选择日期" size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd HH:mm:ss">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item class="addObj-form-item" label="备注:">
                <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2}" :placeholder="active>1 ? '' : '请输入'" :disabled="active>1" clearable
                          size="small" type="textarea"></el-input>
                <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2 }"
                  :placeholder="active > 1 ? '' : '请输入'" :disabled="active > 1" clearable size="small"
                  type="textarea"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
@@ -110,18 +104,15 @@
        <div v-if="active==1">
          <el-form :inline="true" :model="addObj1" label-width="90px">
            <el-form-item label="样品型号:" style="margin-bottom: 6px;margin-top: 6px">
              <el-select v-model="model" :placeholder="active>1 ? '' : '请输入'"
                         allow-create clearable default-first-option filterable
                         size="small"
                         @change="changeModel">
              <el-select v-model="model" :placeholder="active > 1 ? '' : '请输入'" allow-create clearable
                default-first-option filterable size="small" @change="changeModel">
                <el-option v-for="item in models" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="检验标准:" style="margin-bottom: 6px;margin-top: 6px">
              <el-select v-model="standardMethodListId" :loading="methodLoad"
                         :placeholder="active>1 ? '' : '请输入'" clearable size="small"
                         @change="changeStandardMethodListId" @focus="methodFocus">
              <el-select v-model="standardMethodListId" :loading="methodLoad" :placeholder="active > 1 ? '' : '请输入'"
                clearable size="small" @change="changeStandardMethodListId" @focus="methodFocus">
                <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
                </el-option>
              </el-select>
@@ -129,13 +120,14 @@
          </el-form>
        </div>
        <div style="margin-bottom: 6px;margin-top: 6px">
          <el-button v-show="active==1" :disabled="sampleList.length === 3" size="small" type="primary" @click="handleSplitCountNum">拆分</el-button>
          <el-button v-show="active == 1" :disabled="sampleList.length === 3" size="small" type="primary"
            @click="handleSplitCountNum">拆分</el-button>
        </div>
      </div>
      <div style="height: auto;">
        <el-table ref="sampleTable" :data="sampleList" class="el-table sampleTable" highlight-current-row
                  :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border
                  max-height="400px" tooltip-effect="dark" @selection-change="selectSample" @row-click="rowClick">
          :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border max-height="400px"
          tooltip-effect="dark" @selection-change="selectSample" @row-click="rowClick">
          <el-table-column v-if="active==1" :selectable="selectable" type="selection" width="60"></el-table-column>
          <el-table-column align="center" label="序号" type="index" width="65"></el-table-column>
          <el-table-column align="center" label="样品名称" min-width="100" prop="sample">
@@ -160,16 +152,17 @@
          </el-table-column>
          <el-table-column v-if="!(active>1)" align="center" label="型号参数" prop="modelNum" width="130">
            <template slot-scope="scope">
              <el-input v-model="scope.row.modelNum" :disabled="active>1|| scope.$index !== 0" clearable placeholder="非必填"
                        size="small"
              <el-input v-model="scope.row.modelNum" :disabled="active > 1 || scope.$index !== 0" clearable
                placeholder="非必填" size="small"
                        @input="methodChange(scope.row.standardMethodListId, scope.row)"></el-input>
            </template>
          </el-table-column>
          <el-table-column align="center" label="检验标准" min-width="100" prop="standardMethodListId">
            <template slot-scope="scope">
              <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1 || scope.$index !== 0"
                         :loading="methodLoad" :readonly="active>1" clearable placeholder="检验标准"
                         size="small" style="width: 100%;" @change="(value)=>methodChange(value, scope.row)" @clear="productList = []" @focus="methodFocus">
              <el-select v-model="scope.row.standardMethodListId"
                :disabled="scope.row.model == null || active > 1 || scope.$index !== 0" :loading="methodLoad"
                :readonly="active > 1" clearable placeholder="检验标准" size="small" style="width: 100%;"
                @change="(value) => methodChange(value, scope.row)" @clear="productList = []" @focus="methodFocus">
                <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
                </el-option>
              </el-select>
@@ -195,43 +188,35 @@
          </el-table-column>
          <el-table-column align="center" label="待检项数量" prop="quantity" width="105"></el-table-column>
        </el-table>
        <el-table ref="productTable" v-loading="getProductLoad" :data="productList" :row-class-name="tableRowClassName" class="el-table"
                  :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border
                  max-height="400px" style="margin-bottom: 10px;" tooltip-effect="dark"
                  @select="selectOne" @selection-change="selectProduct" @select-all="handleAll">
        <el-table ref="productTable" v-loading="getProductLoad" :data="productList" :row-class-name="tableRowClassName"
          class="el-table" :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border max-height="400px"
          style="margin-bottom: 10px;" tooltip-effect="dark" @select="selectOne" @selection-change="selectProduct"
          @select-all="handleAll">
          <el-table-column v-if="active==1" :selectable="selectable" type="selection" width="65"></el-table-column>
          <el-table-column label="检验项分类" min-width="140" prop="inspectionItemClass" show-overflow-tooltip></el-table-column>
          <el-table-column label="检验项分类" min-width="140" prop="inspectionItemClass"
            show-overflow-tooltip></el-table-column>
          <el-table-column label="检验项" min-width="140" prop="inspectionItem" show-overflow-tooltip>
            <template slot="header" slot-scope="scope">
              <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
                <span>检验项</span>
                <el-input
                  v-if="active==1"
                  v-model="inspectionItem"
                  placeholder="请输入"
                  size="mini"
                <el-input v-if="active == 1" v-model="inspectionItem" placeholder="请输入" size="mini"
                  @input="searchFilterList"/>
              </div>
            </template>
          </el-table-column>
          <el-table-column label="检验项子项" min-width="140" prop="inspectionItemSubclass"
                           show-overflow-tooltip>
          <el-table-column label="检验项子项" min-width="140" prop="inspectionItemSubclass" show-overflow-tooltip>
            <template slot="header" slot-scope="scope">
              <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
                <span>检验项子项</span>
                <el-input
                  v-if="active==1"
                  v-model="inspectionItemSubclass"
                  placeholder="请输入"
                  size="mini"
                <el-input v-if="active == 1" v-model="inspectionItemSubclass" placeholder="请输入" size="mini"
                  @input="searchFilterList"/>
              </div>
            </template>
          </el-table-column>
          <el-table-column label="要求值" min-width="220px" prop="ask">
            <template slot-scope="scope">
              <el-input v-if="active==1&&isAskOnlyRead&&scope.row.inspectionValueType!='5'" v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求值"
                        size="small" type="textarea"
              <el-input v-if="active == 1 && isAskOnlyRead && scope.row.inspectionValueType != '5'" v-model="scope.row.ask"
                :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="要求值" size="small" type="textarea"
                        @change="e=>requestChange(e,scope.row,'ask')"></el-input>
              <span v-else>
                <!-- <template v-if="(scope.row.ask.indexOf('D')>-1
@@ -249,8 +234,8 @@
          </el-table-column>
          <el-table-column label="要求描述" min-width="220px" prop="tell">
            <template slot-scope="scope">
              <el-input v-if="active==1&&isAskOnlyRead" v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 3}" clearable placeholder="要求描述"
                        size="small" type="textarea"
              <el-input v-if="active == 1 && isAskOnlyRead" v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 3 }"
                clearable placeholder="要求描述" size="small" type="textarea"
                        @change="e=>requestChange(e,scope.row,'tell')"></el-input>
              <span v-else>
                <template >{{ scope.row.tell }}</template>
@@ -262,12 +247,7 @@
            <template slot="header" slot-scope="scope">
              <div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
                <span>试验方法</span>
                <el-input
                  v-if="active==1"
                  v-model="methodS"
                  placeholder="请输入"
                  size="mini"
                  @input="searchFilterList"/>
                <el-input v-if="active == 1" v-model="methodS" placeholder="请输入" size="mini" @input="searchFilterList" />
              </div>
            </template>
          </el-table-column>
@@ -277,23 +257,25 @@
          <el-table-column prop="manHour" label="工时系数" width="100" show-overflow-tooltip></el-table-column> -->
          <!-- <el-table-column prop="deviceGroup" label="设备组" width="120" show-overflow-tooltip></el-table-column> -->
          <el-table-column label="区间" min-width="120" prop="section" show-overflow-tooltip></el-table-column>
          <el-table-column :filter-method="filterHandler" :filters="filters" label="子实验室" min-width="130" prop="sonLaboratory"
                           show-overflow-tooltip></el-table-column>
          <el-table-column :filter-method="filterHandler" :filters="filters" label="子实验室" min-width="130"
            prop="sonLaboratory" show-overflow-tooltip></el-table-column>
        </el-table>
      </div>
    </div>
    <el-dialog :visible.sync="selectStandardTree" title="选择样品" width="500px">
      <div v-if="selectStandardTree" v-loading="selectStandardTreeLoading" class="body"  style="height: 60vh;overflow-y: auto;user-select: none;">
      <div v-if="selectStandardTree" v-loading="selectStandardTreeLoading" class="body"
        style="height: 60vh;overflow-y: auto;user-select: none;">
        <el-row>
          <el-col :span="24">
            <el-input v-model="search" clearable placeholder="输入关键字进行搜索" size="small"
                      style="margin-bottom: 5px;" suffix-icon="el-icon-search" @blur="searchFilter" @clear="searchFilter"
            <el-input v-model="search" clearable placeholder="输入关键字进行搜索" size="small" style="margin-bottom: 5px;"
              suffix-icon="el-icon-search" @blur="searchFilter" @clear="searchFilter"
                      @keyup.enter.native="searchFilter"></el-input>
          </el-col>
        </el-row>
        <el-tree ref="tree" :data="list" :default-expanded-keys="expandedKeys" :filter-node-method="filterNode"
                 :props="{ children: 'children', label: 'label' }" highlight-current node-key="label" @node-click="handleNodeClick"
                 @node-expand="nodeOpen" @node-collapse="nodeClose" @dblclick.native="activeStandardTree">
          :props="{ children: 'children', label: 'label' }" highlight-current node-key="label"
          @node-click="handleNodeClick" @node-expand="nodeOpen" @node-collapse="nodeClose"
          @dblclick.native="activeStandardTree">
          <div slot-scope="{ node, data }" class="custom-tree-node">
            <el-row>
              <el-col :span="24">
@@ -311,10 +293,8 @@
      </span>
    </el-dialog>
    <!--特殊值处理框-->
    <el-dialog :before-close="beforeClose" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false"
               :visible.sync="bsm1DiaAll"
               min-width="400px"
               title="检测到特殊项,请作出以下选择">
    <el-dialog :before-close="beforeClose" :close-on-click-modal="false" :close-on-press-escape="false"
      :show-close="false" :visible.sync="bsm1DiaAll" min-width="400px" title="检测到特殊项,请作出以下选择">
      <div v-for="(item, index) in bsm1DiaList" :key="item.id" class="body" style="max-height: 60vh;">
        <span>{{item.inspectionItem}}</span>
        <el-row v-if="item.bsm1">
@@ -322,7 +302,8 @@
            <div class="search_label" style="width: 80px;"><span class="required-span">* </span>选项:</div>
            <div class="search_input">
              <el-radio-group v-model="item.bsm1Val" v-removeAriaHidden @input="upBsmAll(item)">
                <el-radio v-for="(a, ai) in JSON.parse(item.bsmRow.sectionCopy)" :key="ai" :label="a" style="margin-bottom: 2px;margin-top: 2px;"></el-radio>
                <el-radio v-for="(a, ai) in JSON.parse(item.bsmRow.sectionCopy)" :key="ai" :label="a"
                  style="margin-bottom: 2px;margin-top: 2px;"></el-radio>
              </el-radio-group>
            </div>
          </el-col>
@@ -343,37 +324,22 @@
        </el-row>
      </span>
    </el-dialog>
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
               :show-close="false" :visible.sync="bsm3Dia"
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false" :visible.sync="bsm3Dia"
               title="区间值填写" width="800px">
      <el-table
        :data="editTable"
        height="80vh" style="width: 100%">
      <el-table :data="editTable" height="80vh" style="width: 100%">
        <!-- inspectionItemList -->
        <el-table-column
          label="检验项"
          prop="inspectionItemList"
          width="180">
        <el-table-column label="检验项" prop="inspectionItemList" width="180">
        </el-table-column>
        <el-table-column
          label="样品编号"
          prop="sampleCode"
          width="180">
        <el-table-column label="样品编号" prop="sampleCode" width="180">
        </el-table-column>
        <el-table-column
          label="样品型号"
          prop="model"
          width="180">
        <el-table-column label="样品型号" prop="model" width="180">
        </el-table-column>
        <el-table-column
          label="识别符号"
          prop="symbolItem">
        <el-table-column label="识别符号" prop="symbolItem">
        </el-table-column>
        <el-table-column
          label="识别符值"
          prop="value">
        <el-table-column label="识别符值" prop="value">
          <template slot-scope="scope">
            <el-input v-model="scope.row.value" placeholder="请输入" size="small" @input="inputValueHandler(scope.row,scope.$index)"></el-input>
            <el-input v-model="scope.row.value" placeholder="请输入" size="small"
              @input="inputValueHandler(scope.row, scope.$index)"></el-input>
          </template>
        </el-table-column>
      </el-table>
@@ -384,10 +350,7 @@
        </el-row>
      </span>
    </el-dialog>
    <el-dialog
      :visible.sync="noNeedCheckDia"
      title="免检提示"
      width="32%">
    <el-dialog :visible.sync="noNeedCheckDia" title="免检提示" width="32%">
      <span>确认免检当前检验单?</span>
      <span slot="footer" class="dialog-footer">
        <el-button :loading="noNeedCheckLoad" @click="noNeedCheckDia = false">取 消</el-button>
@@ -1208,39 +1171,30 @@
    handleNodeClick(val, node, el) {
      this.selectTree = ''
      this.models = val.children
      this.getNodeParent(node)
      let flag = false
      if (node.level == 3) {
        if(node.data.children.length>0){
          node.data.children.forEach(a => {
            let key = Object.keys(a)
            if(!key.includes('level')) {
              flag = true
            }
          })
        }
      }
      this.selectTree = this.selectTree.replace(' - ', '')
      if(flag) {
        this.selectTree =  ' -  - ' + this.selectTree
      }
      let data = this.selectTree.split(' - ')
      let data2 = ''
      for (let index = data.length - 1; index >= 0; index--) {
        data2 += " - " + data[index]
      }
      this.selectTree = data2.replace(' - ', '')
      this.selectTree = this.getReversedTreePath(node)
    },
    getNodeParent(val) {
      if (val.parent != null) {
        if (val.data.children === null) {
          this.selectTree += ' - ' + val.label + ' - ' + ''
        } else {
          this.selectTree += ' - ' + val.label
    /**
     * 获取反向拼接的树路径字符串
     * @param {Object} node - 当前节点
     * @returns {string} - 反向拼接的树路径
     */
    getReversedTreePath(node) {
      const pathParts = [];
      // 递归获取父节点路径
      const collectParentLabels = (currentNode) => {
        if (currentNode && currentNode.label) {
          pathParts.unshift(currentNode.label); // 将当前节点标签插入到数组开头
        }
        this.getNodeParent(val.parent)
        if (currentNode.parent) {
          collectParentLabels(currentNode.parent); // 递归处理父节点
      }
      };
      collectParentLabels(node);
      // 拼接路径并返回
      return pathParts.join(" - ");
    },
    selectStandardTreeList() {
      this.selectStandardTreeLoading = true
@@ -1805,9 +1759,11 @@
  justify-content: space-between;
  margin-bottom: 10px;
}
>>>.warning-row {
  color: #1890FF;
}
.node_i {
  color: orange;
  font-size: 18px;