spring
2025-04-27 c85ea17d45adac17b780992e049685d72168fdda
工艺文件缓存
已修改6个文件
708 ■■■■■ 文件已修改
src/permission.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/views/index.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/tags.js 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/document/document-form.vue 491 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/document/index.vue 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/technology/routing/routing-form.vue 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/permission.js
@@ -21,14 +21,6 @@
    } else {
      const value = to.query.src || to.fullPath
      const label = to.query.name || to.name
      // 检查当前要进入的页面是否在标签列表中
      const existingTag = store.getters.tagList.find(
        (tag) => tag.label === label
      )
      if (existingTag) {
        // 如果存在,删除该标签
        store.commit('DEL_TAG', existingTag)
      }
      if (
        meta.isTab !== false &&
        !validatenull(value) &&
src/router/views/index.js
@@ -48,7 +48,7 @@
    children: [
      {
        path: 'routing-form',
        name: '工艺详情',
        name: '工艺路线详情',
        component: () =>
          import(/* webpackChunkName: "views" */ '@/views/technology/routing/routing-form'),
        meta: {
@@ -116,12 +116,12 @@
    children: [
      {
        path: 'document-form',
        name: 'documentForm',
        name: '工艺文件详情',
        component: () =>
          import(/* webpackChunkName: "views" */ '@/views/technology/document/document-form'),
        meta: {
          keepAlive: false,
          isTab: false,
          keepAlive: true,
          isTab: true,
          isAuth: false
        }
      }
src/store/modules/tags.js
@@ -1,6 +1,7 @@
import { getStore, setStore } from '@/util/store'
import { diff } from '@/util/util'
import website from '@/const/website'
import Vue from 'vue'
const isFirstPage = website.isFirstPage
const tagWel = website.fistPage
@@ -17,7 +18,7 @@
  if (list.length === 1) {
    list[0].close = false
  } else {
    list.forEach(ele => {
    list.forEach((ele) => {
      if (ele.value === tagWel.value && isFirstPage === false) {
        ele.close = false
      } else {
@@ -36,15 +37,24 @@
  actions: {},
  mutations: {
    ADD_TAG: (state, action) => {
      if (state.tagList.some((ele) => diff(ele, action))) return
      Vue.prototype.$nextTick(() => {
        const index = state.tagList.findIndex(
          (ele) => ele.label == action.label
        )
        if (index > -1) {
          state.tagList[index] = action
        } else {
          state.tagList.push(action)
        }
      })
      state.tag = action
      setStore({ name: 'tag', content: state.tag, type: 'session' })
      if (state.tagList.some(ele => diff(ele, action))) return
      state.tagList.push(action)
      setFistTag(state.tagList)
      setStore({ name: 'tagList', content: state.tagList, type: 'session' })
    },
    DEL_TAG: (state, action) => {
      state.tagList = state.tagList.filter(item => {
      state.tagList = state.tagList.filter((item) => {
        return !diff(item, action)
      })
      setFistTag(state.tagList)
@@ -55,10 +65,13 @@
      setStore({ name: 'tagList', content: state.tagList, type: 'session' })
    },
    DEL_TAG_OTHER: (state) => {
      state.tagList = state.tagList.filter(item => {
      state.tagList = state.tagList.filter((item) => {
        if (item.value === state.tag.value) {
          return true
        } else if (!website.isFirstPage && item.value === website.fistPage.value) {
        } else if (
          !website.isFirstPage &&
          item.value === website.fistPage.value
        ) {
          return true
        }
      })
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;
src/views/technology/document/index.vue
@@ -1,15 +1,8 @@
<template>
  <div class="mod-config">
    <basic-container>
      <ttable
        :table="table"
        @handleSelectionChange="handleSelectionChange"
        @tableRowClassName="tableRowClassName"
        :prelang="prelang"
        :options="options"
        :ajaxFun="ajaxFun"
        ref="documentTable"
      >
      <ttable :table="table" @handleSelectionChange="handleSelectionChange" @tableRowClassName="tableRowClassName"
        :prelang="prelang" :options="options" :ajaxFun="ajaxFun" ref="documentTable">
        <template #toolbar>
          <!-- <el-button
            type="primary"
@@ -19,38 +12,18 @@
          > -->
        </template>
      </ttable>
      <el-dialog
        title="导入"
        :visible.sync="importTestStandardVisible"
        width="50%"
      >
      <el-dialog title="导入" :visible.sync="importTestStandardVisible" width="50%">
        <div>
          <el-upload
            style="margin-left:8px;display: inline;"
            class="upload-demo"
            drag
            :headers="headers"
            :action="testStandardUploadInfo.url"
            :beforeUpload="beforeAvatarUpload"
            :limit="1"
            :show-file-list="false"
            :file-list="testStandardFileList"
            :on-success="testStandardFileSuccessUploadScan"
            :on-error="handleError"
          <el-upload style="margin-left:8px;display: inline;" class="upload-demo" drag :headers="headers"
            :action="testStandardUploadInfo.url" :beforeUpload="beforeAvatarUpload" :limit="1" :show-file-list="false"
            :file-list="testStandardFileList" :on-success="testStandardFileSuccessUploadScan" :on-error="handleError"
            accept=".xlsx,.xls,.csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
            :auto-upload="true"
            ref="testStandardUploadScan"
            multiple
          >
            :auto-upload="true" ref="testStandardUploadScan" multiple>
            <i class="el-icon-upload"></i>
            <div class="el-upload__text"><em>导入数据</em></div>
            <div class="el-upload__tip" slot="tip">
              只能上传xlsx/xls文件,且不超过10M<el-button
                type="text"
                style="font-size:12px;"
                @click="downTestStandardDataTemplate"
                >下载模板</el-button
              >
              只能上传xlsx/xls文件,且不超过10M<el-button type="text" style="font-size:12px;"
                @click="downTestStandardDataTemplate">下载模板</el-button>
            </div>
          </el-upload>
        </div>
@@ -384,37 +357,37 @@
  activated() {
    this.getData()
  },
  created() {
    if(this.permissions.technology_document_add){
  created() {
    if (this.permissions.technology_document_add) {
      this.table.toolbar.push({
        text: '新增',
        type: 'primary',
        disabled: false,
        fun: ()=>{this.addOrUpdateHandle()},
        fun: () => { this.addOrUpdateHandle() },
        permitArr: [],
      })
    }
    if(this.permissions.technology_document_accept){
    if (this.permissions.technology_document_accept) {
      this.table.toolbar.push({
        text: '批准',
        disabled: true,
        fun: ()=>{this.changeState('accept')},
        fun: () => { this.changeState('accept') },
        permitArr: ['01draft', '03accepted', '04reject'],
      })
    }
    if(this.permissions.technology_document_reject){
    if (this.permissions.technology_document_reject) {
      this.table.toolbar.push({
        text: '拒绝',
        disabled: true,
        fun: () => {this.changeState('reject')},
        fun: () => { this.changeState('reject') },
        permitArr: ['01draft', '03accepted', '04reject'],
      })
    }
    if(this.permissions.technology_document_cancel){
    if (this.permissions.technology_document_cancel) {
      this.table.toolbar.push({
        text: '撤销',
        disabled: true,
        fun: ()=>{this.changeState('cancel')},
        fun: () => { this.changeState('cancel') },
        permitArr: ['01draft', '03accepted', '04reject'],
      })
    }
@@ -423,10 +396,10 @@
        text: '批量删除',
        type: 'primary',
        disabled: false,
        fun: ()=>{this.deleteBatch()},
        fun: () => { this.deleteBatch() },
        permitArr: [],
      })
    }
    }
    if (this.permissions.technology_document_del) {
      this.table.operator = [{
        text: '删除',
@@ -438,14 +411,14 @@
          key: 'state'
        }
      }]
    }
    }
    this.getBomTypeDbOptions()
  },
  watch:{
    multipleSelection(newVal){
      if(newVal.length==0){
        this.table.toolbar.forEach(ele=>{
          if(ele.text=='拒绝' || ele.text=='批准' || ele.text=='撤销'){
  watch: {
    multipleSelection(newVal) {
      if (newVal.length == 0) {
        this.table.toolbar.forEach(ele => {
          if (ele.text == '拒绝' || ele.text == '批准' || ele.text == '撤销') {
            ele.disabled = true
          }
        })
@@ -478,7 +451,7 @@
        that.multipleSelection.forEach((item) => {
          ids.push(item.id)
        })
        changeState(ids, event).then(function() {
        changeState(ids, event).then(function () {
          that.getData()
        })
      } else {
@@ -492,12 +465,12 @@
    },
    // 新增 / 修改
    addOrUpdateHandle(row) {
      if(!this.permissions.technology_document_edit && row.id!=null){
      if (!this.permissions.technology_document_edit && row.id != null) {
        this.$message.error("该角色没有操作权限")
        return
      }
      this.$router.push({
        name: 'documentForm',
        path: '/technology/document/document-form',
        query: { id: row == null ? null : row.id }
      })
    },
@@ -509,7 +482,7 @@
        closeOnClickModal: false,
        type: 'warning'
      })
        .then(function() {
        .then(function () {
          return delObj(row.id)
        })
        .then((response) => {
@@ -548,7 +521,7 @@
    handleSelectionChange(val) {
      // 根据状态,禁用表头按钮
      // 筛选出选中记录的状态
      var stateArr = val.map(function(value, index) {
      var stateArr = val.map(function (value, index) {
        return value.state
      })
      // 选中状态数组元素去重
@@ -582,7 +555,7 @@
      var selectVals = []
      if (val != null) {
        selectVals.push(val)
        var stateArr = selectVals.map(function(value, index) {
        var stateArr = selectVals.map(function (value, index) {
          return value.state
        })
        // 选中状态数组元素去重
src/views/technology/routing/routing-form.vue
@@ -1,5 +1,5 @@
<template>
  <div style="height: 100%">
  <div style="height: 100%" :key="itemKey">
    <div class="page-header">
      <div class="header-left">
        <a @click="$router.go(-1)"><i class="icon-btn-back"></i></a>
@@ -584,47 +584,49 @@
    '$route.query.id': {
      immediate: true,
      handler(newVal, oldVal) {
        if (newVal) {
          this.dataForm.id = this.$route.query.id
          this.getParamType()
          this.init()
          this.itemKey = Math.random()
          this.getBomTypeDbOptions()
          this.getWorkCenterOptions()
          this.getRunTimeCodeDbOptions()
          this.getLaborClassNo()
        } else {
          this.dataForm.id = null
          this.getParamType()
          this.init()
          this.dataForm = {
            id: null,
            routingNo: null,
            name: null,
            partId: null,
            partNo: null,
            partName: null,
            description: null,
            state: null,
            master: false,
            bomId: null,
            operations: [],
            refs: [],
            bomTypeDb: 'M',
            alternativeNo: '*',
            alternativeDesc: null,
            ifsSync: false,
            phaseInDate: null,
            phaseOutDate: null,
            version: null,
            wireCore: null
        if (this.$route.name == '工艺路线详情') {
          if (newVal) {
            this.dataForm.id = this.$route.query.id
            this.getParamType()
            this.init()
            this.itemKey = Math.random()
            this.getBomTypeDbOptions()
            this.getWorkCenterOptions()
            this.getRunTimeCodeDbOptions()
            this.getLaborClassNo()
          } else {
            this.dataForm.id = null
            this.getParamType()
            this.init()
            this.dataForm = {
              id: null,
              routingNo: null,
              name: null,
              partId: null,
              partNo: null,
              partName: null,
              description: null,
              state: null,
              master: false,
              bomId: null,
              operations: [],
              refs: [],
              bomTypeDb: 'M',
              alternativeNo: '*',
              alternativeDesc: null,
              ifsSync: false,
              phaseInDate: null,
              phaseOutDate: null,
              version: null,
              wireCore: null
            }
            this.operationPart = {}
            this.itemKey = Math.random()
            this.getBomTypeDbOptions()
            this.getWorkCenterOptions()
            this.getRunTimeCodeDbOptions()
            this.getLaborClassNo()
          }
          this.operationPart = {}
          this.itemKey = Math.random()
          this.getBomTypeDbOptions()
          this.getWorkCenterOptions()
          this.getRunTimeCodeDbOptions()
          this.getLaborClassNo()
        }
      },
    },
@@ -649,6 +651,7 @@
    this.getWorkCenterOptions()
    this.getRunTimeCodeDbOptions()
    this.getLaborClassNo()
    console.log(4444)
  },
  methods: {
    // 查询结构类型字典