spring
2025-04-27 c85ea17d45adac17b780992e049685d72168fdda
src/views/technology/document/document-form.vue
@@ -12,23 +12,13 @@
    </div>
    <div class="page-main">
      <div class="document-basic" style="height: 28%;">
        <el-form
          :model="dataForm"
          :rules="dataRule"
          ref="dataForm"
          style="width: 100%"
          class="l-mes"
          :disabled="!editable"
          label-width="110px"
        >
        <el-form :model="dataForm" :rules="dataRule" ref="dataForm" style="width: 100%" class="l-mes"
          :disabled="!editable" label-width="110px">
          <el-row>
            <el-col :span="6">
              <el-form-item prop="name" label="文件名称">
                <el-tooltip class="item" effect="dark" :content="dataForm.name" >
                <el-input
                  v-model="dataForm.name"
                  placeholder="文件名称"
                ></el-input>
                <el-tooltip class="item" effect="dark" :content="dataForm.name">
                  <el-input v-model="dataForm.name" placeholder="文件名称"></el-input>
                </el-tooltip>
              </el-form-item>
            </el-col>
@@ -105,145 +95,74 @@
            <el-col :span="6">
              <el-form-item label="产品零件号" prop="partNo">
                <el-input disabled v-model="dataForm.partNo" placeholder="请选择零件">
                  <el-button
                    slot="append"
                    icon="el-icon-search"
                    @click="openPartDialog()"
                  ></el-button>
                  <el-button slot="append" icon="el-icon-search" @click="openPartDialog()"></el-button>
                </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="产品零件描述" prop="partName">
                <el-tooltip class="item" effect="dark" :content="dataForm.partName" >
                <el-input v-model="dataForm.partName" disabled> </el-input>
                <el-tooltip class="item" effect="dark" :content="dataForm.partName">
                  <el-input v-model="dataForm.partName" disabled> </el-input>
                </el-tooltip>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
              <el-col :span="6">
                <el-form-item prop="version" label="版本号">
                  <el-input
                    v-model="dataForm.version"
                    placeholder="版本号"
                  ></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="6">
                <el-form-item label="BOM" prop="bomId">
                  <el-select
                    :disabled="dataForm.id != null"
                    v-model="dataForm.bomId"
                    placeholder=""
                    style="width: 100%;"
                    filterable>
                    <el-option
                      v-for="item in bomList"
                      :key="item.id"
                      :label="item.number"
                      :value="item.id"
                    />
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="6">
                <el-form-item label="工艺路线编号" prop="routingList">
                  <el-select
                    :disabled="dataForm.id != null"
                    v-model="dataForm.routingId"
                    placeholder=""
                    style="width: 100%;"
                    filterable>
                    <el-option
                      v-for="item in routingList"
                      :key="item.id"
                      :label="item.routing_no"
                      :value="item.id"
                    />
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="6">
              <el-form-item label="项目号" prop="projectNo">
                <el-input
                  v-model="dataForm.projectNo"
                  placeholder="项目号"
                  style="width:100%"
                ></el-input>
            <el-col :span="6">
              <el-form-item prop="version" label="版本号">
                <el-input v-model="dataForm.version" placeholder="版本号"></el-input>
              </el-form-item>
            </el-col>
              <el-col :span="6">
                <el-form-item label="备注" prop="remark">
                  <el-input
                    type="textarea"
                    v-model="dataForm.remark"
                    placeholder="备注"
                    style="width:100%"
                  ></el-input>
                </el-form-item>
              </el-col>
            <el-col :span="6">
              <el-form-item label="BOM" prop="bomId">
                <el-select :disabled="dataForm.id != null" v-model="dataForm.bomId" placeholder="" style="width: 100%;"
                  filterable>
                  <el-option v-for="item in bomList" :key="item.id" :label="item.number" :value="item.id" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="工艺路线编号" prop="routingList">
                <el-select :disabled="dataForm.id != null" v-model="dataForm.routingId" placeholder=""
                  style="width: 100%;" filterable>
                  <el-option v-for="item in routingList" :key="item.id" :label="item.routing_no" :value="item.id" />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="项目号" prop="projectNo">
                <el-input v-model="dataForm.projectNo" placeholder="项目号" style="width:100%"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="6">
              <el-form-item label="备注" prop="remark">
                <el-input type="textarea" v-model="dataForm.remark" placeholder="备注" style="width:100%"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
      </div>
      <div class="document-detail">
        <el-tabs type="card" style="width: 100%;height: 100%">
          <el-tab-pane
            label="原材料用量"
            style="height: 100%"
            class="orimaterial-quantity"
          >
            <el-card
              shadow="never"
              style="margin-top: 12px;border: 1px solid #cfd5de;"
            >
          <el-tab-pane label="原材料用量" style="height: 100%" class="orimaterial-quantity">
            <el-card shadow="never" style="margin-top: 12px;border: 1px solid #cfd5de;">
              <div slot="header">
                <div>
                  <el-button
                    type="text"
                    size="small"
                    class="blue-but"
                    v-if="editable"
                    @click="calcMaterialCost()"
                    >计算用量
                  <el-button type="text" size="small" class="blue-but" v-if="editable" @click="calcMaterialCost()">计算用量
                  </el-button>
                  <el-button
                    type="text"
                    size="small"
                    @click="exportMaterialCost()"
                    >导出
                  <el-button type="text" size="small" @click="exportMaterialCost()">导出
                  </el-button>
                </div>
              </div>
              <el-table
                :data="materialCostList"
                border
                height="650"
                :span-method="objectSpanMethod"
                :header-cell-style="{ color: '#999' }"
                class="document-materialcost-table"
                show-summary
                :summary-method="getSummaries"
                ref="summeryTable"
              >
                <el-table-column
                  label="成品"
                  prop="finishedProduct"
                  align="center"
                >
              <el-table :data="materialCostList" border height="650" :span-method="objectSpanMethod"
                :header-cell-style="{ color: '#999' }" class="document-materialcost-table" show-summary
                :summary-method="getSummaries" ref="summeryTable">
                <el-table-column label="成品" prop="finishedProduct" align="center">
                </el-table-column>
                <el-table-column
                  label="Bom编号"
                  prop="bomNumber"
                  align="center"
                >
                <el-table-column label="Bom编号" prop="bomNumber" align="center">
                </el-table-column>
                <el-table-column
                  label="工序"
                  prop="operationName"
                  align="center"
                >
                <el-table-column label="工序" prop="operationName" align="center">
                </el-table-column>
                <el-table-column label="物料编号" prop="partNo" align="center">
                </el-table-column>
@@ -256,104 +175,38 @@
              </el-table>
            </el-card>
          </el-tab-pane>
          <el-tab-pane
            class="final-product-checkout"
            label="成品检测"
            style="height: 100%"
          >
            <TeststandardDialog
              :editable="editable"
              :key="dataForm.id"
              :documentId="dataForm.id"
            >
          <el-tab-pane class="final-product-checkout" label="成品检测" style="height: 100%">
            <TeststandardDialog :editable="editable" :key="dataForm.id" :documentId="dataForm.id">
            </TeststandardDialog>
          </el-tab-pane>
          <el-tab-pane label="产品结构工序参数" style="height: 100%">
            <div class="document-related-stock-part">
              <div
                style="padding-left:18px;font-size:14px;font-weight:700;color:#000;height:20px;line-height:20px;"
              >
              <div style="padding-left:18px;font-size:14px;font-weight:700;color:#000;height:20px;line-height:20px;">
                <span>相关库存零件</span>
              </div>
              <el-table
                :data="relatedStockPartList"
                @row-click="clickRelatedStockPart"
                highlight-current-row
                height="188px"
                :header-cell-style="relatedStockPartTableHeaderCellStyle"
                :row-style="{ height: '0' }"
                :cell-style="{ padding: '1px' }"
              >
                <el-table-column
                  label="零件编号"
                  prop="partNo"
                  align="center"
                  :show-overflow-tooltip="true"
                >
              <el-table :data="relatedStockPartList" @row-click="clickRelatedStockPart" highlight-current-row
                height="188px" :header-cell-style="relatedStockPartTableHeaderCellStyle" :row-style="{ height: '0' }"
                :cell-style="{ padding: '1px' }">
                <el-table-column label="零件编号" prop="partNo" align="center" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column
                  label="零件描述"
                  prop="partName"
                  align="center"
                  width="400"
                  :show-overflow-tooltip="true"
                >
                <el-table-column label="零件描述" prop="partName" align="center" width="400" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column
                  label="工艺路线编号"
                  prop="routingNo"
                  align="center"
                  :show-overflow-tooltip="true"
                >
                <el-table-column label="工艺路线编号" prop="routingNo" align="center" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column
                  label="工艺路线版本"
                  prop="routingVersion"
                  align="center"
                  :show-overflow-tooltip="true"
                >
                <el-table-column label="工艺路线版本" prop="routingVersion" align="center" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column
                  label="工艺替代号"
                  prop="routingAlternativeNo"
                  align="center"
                  :show-overflow-tooltip="true"
                >
                <el-table-column label="工艺替代号" prop="routingAlternativeNo" align="center" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column
                  label="工艺替代描述"
                  prop="routingAlternativeDesc"
                  align="center"
                  :show-overflow-tooltip="true"
                >
                <el-table-column label="工艺替代描述" prop="routingAlternativeDesc" align="center"
                  :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column
                  label="BOM号"
                  prop="bomNo"
                  align="center"
                  :show-overflow-tooltip="true"
                >
                <el-table-column label="BOM号" prop="bomNo" align="center" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column
                  label="BOM版本"
                  prop="bomVersion"
                  align="center"
                  :show-overflow-tooltip="true"
                >
                <el-table-column label="BOM版本" prop="bomVersion" align="center" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column
                  label="BOM替代号"
                  prop="bomAlternativeNo"
                  align="center"
                  :show-overflow-tooltip="true"
                >
                <el-table-column label="BOM替代号" prop="bomAlternativeNo" align="center" :show-overflow-tooltip="true">
                </el-table-column>
                <el-table-column
                  label="BOM替代描述"
                  prop="bomAlternativeDesc"
                  align="center"
                  :show-overflow-tooltip="true"
                >
                <el-table-column label="BOM替代描述" prop="bomAlternativeDesc" align="center" :show-overflow-tooltip="true">
                </el-table-column>
              </el-table>
            </div>
@@ -390,30 +243,14 @@
                  </el-button>
                </el-tooltip>
              </div> -->
              <el-collapse
                v-model="currTechnologyBomPartName"
                accordion
                @change="handleCompleteproductstructureChange"
              >
                <el-collapse-item
                  v-for="(item, i) in completeproductstructureData"
                  :key="i"
                  :name="item.bomRoutingId"
                >
              <el-collapse v-model="currTechnologyBomPartName" accordion @change="handleCompleteproductstructureChange">
                <el-collapse-item v-for="(item, i) in completeproductstructureData" :key="i" :name="item.bomRoutingId">
                  <template slot="title">
                    <el-checkbox
                      class="completeproductstructure-checkout"
                      v-model="item.expand"
                      disabled
                    >
                      <span style="font-weight:bold">工艺路线编号:</span
                      >{{ item.routingNo }}&nbsp;&nbsp;&nbsp;&nbsp;
                      <span style="font-weight:bold">零件号:</span
                      >{{ item.partNo }}&nbsp;&nbsp;&nbsp;&nbsp;
                      <span style="font-weight:bold">零件名称:</span
                      >{{ item.partName }}&nbsp;&nbsp;&nbsp;&nbsp;
                      <span style="font-weight:bold">Bom编号:</span
                      >{{ item.number == null ? '无' : item.number }}
                    <el-checkbox class="completeproductstructure-checkout" v-model="item.expand" disabled>
                      <span style="font-weight:bold">工艺路线编号:</span>{{ item.routingNo }}&nbsp;&nbsp;&nbsp;&nbsp;
                      <span style="font-weight:bold">零件号:</span>{{ item.partNo }}&nbsp;&nbsp;&nbsp;&nbsp;
                      <span style="font-weight:bold">零件名称:</span>{{ item.partName }}&nbsp;&nbsp;&nbsp;&nbsp;
                      <span style="font-weight:bold">Bom编号:</span>{{ item.number == null ? '无' : item.number }}
                    </el-checkbox>
                  </template>
                  <div style="display:flex;">
@@ -430,13 +267,12 @@
                    </div> -->
                    <div
                      style="font-size:13px;font-weight:bold;cursor: pointer;margin-left: 10px;border-radius:2px 2px 0px 0px;width:80px;text-align:center;"
                      :class="['highlight-tab-class']"
                    >
                      :class="['highlight-tab-class']">
                      工序参数
                    </div>
                  </div>
                 <!-- <div class="document-bom-div" v-show="item.showBom">
                  <!-- <div class="document-bom-div" v-show="item.showBom">
                    <el-tooltip
                      class="item"
                      effect="dark"
@@ -476,57 +312,30 @@
                  </div> -->
                  <div class="document-technology-div" v-show="item.showBom">
                    <div
                      style="border: 1px solid #ebeef5;height: 440px;overflow: auto;"
                    >
                      <el-collapse
                        v-model="currTechnologyOperationName"
                        accordion
                        @change="
                          handleTechnologyOperationChange(
                            $event,
                            item.bomRoutingId
                          )
                        "
                      >
                        <el-collapse-item
                          v-for="(ele, j) in item.technologyOperationData"
                          :key="j"
                          :name="ele.id"
                        >
                          <template slot="title"
                            ><span style="font-weight:300"
                              >&nbsp;&nbsp;工序名称:</span
                            >{{ ele.operationName }}&nbsp;&nbsp;&nbsp;&nbsp;
                            <span style="font-weight:300">工序编号:</span
                            >{{ ele.operationNo }}
                    <div style="border: 1px solid #ebeef5;height: 440px;overflow: auto;">
                      <el-collapse v-model="currTechnologyOperationName" accordion @change="
                        handleTechnologyOperationChange(
                          $event,
                          item.bomRoutingId
                        )
                        ">
                        <el-collapse-item v-for="(ele, j) in item.technologyOperationData" :key="j" :name="ele.id">
                          <template slot="title"><span style="font-weight:300">&nbsp;&nbsp;工序名称:</span>{{
                            ele.operationName }}&nbsp;&nbsp;&nbsp;&nbsp;
                            <span style="font-weight:300">工序编号:</span>{{ ele.operationNo }}
                          </template>
                          <el-tabs v-model="activeTemplateName" type="card">
                            <el-tab-pane
                              v-for="(paramTab, index) in paramTabs"
                              :key="index"
                              :label="paramTab.label"
                              :name="paramTab.name"
                            >
                            <el-tab-pane v-for="(paramTab, index) in paramTabs" :key="index" :label="paramTab.label"
                              :name="paramTab.name">
                              <el-table :data="paramTab.params">
                                <el-table-column
                                  prop="parameterItem"
                                  label="名称"
                                  align="center"
                                >
                                <el-table-column prop="parameterItem" label="名称" align="center">
                                  <template slot-scope="scope">
                                    <span
                                      >{{ scope.row.parameterItem }}({{
                                        scope.row.unit
                                      }})</span
                                    >
                                    <span>{{ scope.row.parameterItem }}({{
                                      scope.row.unit
                                    }})</span>
                                  </template>
                                </el-table-column>
                                <el-table-column
                                  prop="paramValue"
                                  label="值"
                                  align="center"
                                ></el-table-column>
                                <el-table-column prop="paramValue" label="值" align="center"></el-table-column>
                              </el-table>
                            </el-tab-pane>
                            <!-- <el-tab-pane label="备注" style="height: 100%">
@@ -741,33 +550,18 @@
        </el-tabs>
      </div>
    </div>
    <completeproductstructureDialog
      :currshowlist.sync="showCompleteproductstructure"
      :queryParam="bomQueryParam"
      @listenToCompleteproductstructureEvent="selectCompleteproductstructure"
    />
    <routingDialog
      :currshowlist.sync="showTechnology"
      :queryParam="queryParam"
      @listenToRoutingEvent="selectTechnology"
    />
    <qualityStandardDialog
      :currshowlist.sync="showQualityStandard"
      @listenToSelectTestStandardEvent="selectQualityStandard"
    />
    <completeproductstructureDialog :currshowlist.sync="showCompleteproductstructure" :queryParam="bomQueryParam"
      @listenToCompleteproductstructureEvent="selectCompleteproductstructure" />
    <routingDialog :currshowlist.sync="showTechnology" :queryParam="queryParam"
      @listenToRoutingEvent="selectTechnology" />
    <qualityStandardDialog :currshowlist.sync="showQualityStandard"
      @listenToSelectTestStandardEvent="selectQualityStandard" />
    <partDialog :currshowlist.sync="showPart" @listenToPartEvent="selectPart" />
    <spotCheckRule
      :currshowlist.sync="spotCheckRuleShow"
      :docBomId="currDocBomId"
      :routingOperationId="currRoutingOperationId"
      :routingOperationName="currRoutingOperationName"
      @refreshSpotCheckRuleList="refreshSpotCheckRuleList"
    />
    <spotCheckRuleEdit
      :currshowlist.sync="editSpotCheckRuleShow"
      :documentSamplingRuleId="currDocumentSamplingRuleId"
      @refreshSpotCheckRuleList="refreshSpotCheckRuleList"
    />
    <spotCheckRule :currshowlist.sync="spotCheckRuleShow" :docBomId="currDocBomId"
      :routingOperationId="currRoutingOperationId" :routingOperationName="currRoutingOperationName"
      @refreshSpotCheckRuleList="refreshSpotCheckRuleList" />
    <spotCheckRuleEdit :currshowlist.sync="editSpotCheckRuleShow" :documentSamplingRuleId="currDocumentSamplingRuleId"
      @refreshSpotCheckRuleList="refreshSpotCheckRuleList" />
  </div>
</template>
@@ -926,7 +720,7 @@
    spotCheckRuleEdit
  },
  computed: {
    editable: function() {
    editable: function () {
      if (!this.dataForm.id) {
        return true
      }
@@ -937,7 +731,7 @@
    }
  },
  created() {
  activated() {
    this.dataForm.id = this.$route.query.id
    this.init()
    this.getDict()
@@ -962,9 +756,9 @@
  },
  watch: {
    'dataForm.partId'(newValue, oldValue) {
      if (oldValue) {
        this.dataForm.bomId = null
      }
      // if (oldValue) {
      //   this.dataForm.bomId = null
      // }
      if (newValue) {
        getBomList(
          Object.assign({
@@ -994,6 +788,52 @@
      } else {
        this.routingList = []
      }
    },
    '$route.query.id': {
      immediate: true,
      handler(newVal, oldVal) {
        if (this.$route.name == '工艺文件详情') {
          if (newVal) {
            this.dataForm.id = this.$route.query.id
            this.init()
            this.getDict()
            this.getBomTypeDbOptions()
            this.initReportTypeSelect()
          } else {
            this.dataForm.id = null
            this.init()
            this.getDict()
            this.getBomTypeDbOptions()
            this.initReportTypeSelect()
            this.dataForm = {
              id: null,
              bomId: null,
              routingId: null,
              number: null,
              name: null,
              version: null,
              projectNo: null,
              projectType: null,
              country: null,
              state: null,
              remark: null,
              partNo: null,
              partId: null,
              partName: null,
              docType: 'M',
              insulationColor: null,
              sheathColor: null,
              testStandard: false,
              updateRealUser: null,
              updateRealTime: null
            }
            this.materialCostList = []
            this.relatedStockPartList = []
            this.currTechnologyBomPartName = null;
            this.completeproductstructureData = []
          }
        }
      },
    },
  },
  methods: {
@@ -1051,15 +891,15 @@
      }
      // flowTemp.loadData(jsondata)
      // 保存按钮事件
      _this.flowTemp.onBtnSaveClick = function() {
      _this.flowTemp.onBtnSaveClick = function () {
        _this.saveFlow()
      }
      // 重置按钮事件
      _this.flowTemp.onFreshClick = function() {
      _this.flowTemp.onFreshClick = function () {
        _this.getFlow()
      }
      // 打印按钮事件
      _this.flowTemp.onPrintClick = function() {
      _this.flowTemp.onPrintClick = function () {
        _this.flowTemp.exportDiagram('流程图')
      }
    },
@@ -1960,8 +1800,7 @@
    },
    handleFlowExceed(files, fileList) {
      this.$message.warning(
        `当前限制选择 1 个流程图文件,本次选择了 ${
          files.length
        `当前限制选择 1 个流程图文件,本次选择了 ${files.length
        } 个流程图文件,共选择了 ${files.length + fileList.length} 个流程图文件`
      )
    },
@@ -2150,30 +1989,22 @@
}
/*自定义disabled状态下checkbox的样式*/
.completeproductstructure-checkout
  .el-checkbox__input.is-disabled.is-checked
  .el-checkbox__inner {
.completeproductstructure-checkout .el-checkbox__input.is-disabled.is-checked .el-checkbox__inner {
  background-color: #006eff;
  border-color: #006eff;
}
.completeproductstructure-checkout
  .el-checkbox__input.is-disabled.is-checked
  + span.el-checkbox__label {
.completeproductstructure-checkout .el-checkbox__input.is-disabled.is-checked+span.el-checkbox__label {
  color: #006eff;
  border-color: #006eff;
}
.completeproductstructure-checkout
  .el-checkbox__input.is-disabled
  .el-checkbox__inner {
.completeproductstructure-checkout .el-checkbox__input.is-disabled .el-checkbox__inner {
  background-color: #ffffff;
  cursor: pointer;
}
.completeproductstructure-checkout
  .el-checkbox__input.is-disabled
  + span.el-checkbox__label {
.completeproductstructure-checkout .el-checkbox__input.is-disabled+span.el-checkbox__label {
  color: #606266;
  cursor: pointer;
}
@@ -2242,11 +2073,13 @@
.GooFlow .ico .ico_start:before {
  color: red;
}
.highlight-tab-class {
  color: #006eff;
  background: #e4e7ed;
  border-top: 1px solid #006eff;
}
.unhighlight-tab-class {
  border: 1px solid #e4e7ed;
  border-bottom: none;