Quellcode durchsuchen

Merge branch 'master' of http://git.dongkesoft.com:9001/DK-MES-3.0/mes-web

koushanshan vor 3 Jahren
Ursprung
Commit
8e172b774d
51 geänderte Dateien mit 1255 neuen und 632 gelöschten Zeilen
  1. 2 0
      src/api/pages/common/common.js
  2. 1 0
      src/api/pages/mst/mould.js
  3. 1 0
      src/api/pages/pdm/molding-record.js
  4. 4 0
      src/api/pages/report/detail-report.js
  5. BIN
      src/assets/images/app-image/carrier_printing.png
  6. BIN
      src/assets/images/app-image/carrier_reprinting.png
  7. BIN
      src/assets/images/app-image/mould_printing.png
  8. BIN
      src/assets/images/app-image/mould_reprinting.png
  9. 7 1
      src/components-app/base/dk-app-field/dk-app-field.vue
  10. 17 8
      src/components/base/dk-date-picker-pop/dk-date-picker-pop.vue
  11. 68 57
      src/components/base/dk-modal/dk-modal.vue
  12. 11 4
      src/components/base/dk-perspective/dk-pivot.vue
  13. 62 12
      src/components/base/dk-perspective/echarts.vue
  14. 10 10
      src/components/base/dk-table/dk-table.vue
  15. 157 158
      src/components/base/edit-table/edit-table.vue
  16. 2 1
      src/components/base/edit-tree-table/edit-tree-table.vue
  17. 5 1
      src/components/base/input-pop/input-pop.vue
  18. 5 1
      src/components/base/select-pop/select-pop.vue
  19. 7 2
      src/components/business/print/template.vue
  20. 2 2
      src/components/business/process/edge-modal/edge-modal.vue
  21. 27 17
      src/components/business/process/node-modal/node-modal.vue
  22. 168 175
      src/components/business/table-select/table-select.vue
  23. 4 0
      src/components/main/components/side-menu/side-menu.vue
  24. 3 0
      src/components/sub/xm-select/index.vue
  25. 9 1
      src/config/index.js
  26. 11 0
      src/locale/lang/zh-CN.js
  27. 2 2
      src/main.js
  28. 9 1
      src/mixins/appform.js
  29. 8 6
      src/mixins/form.js
  30. 80 19
      src/mixins/index.js
  31. 2 3
      src/store/index.js
  32. 1 1
      src/store/module/user.js
  33. 109 7
      src/view-app/app/prod-management/barcode-printing/index.vue
  34. 71 38
      src/view-app/app/report-management/product-tracking/index.vue
  35. 1 1
      src/view/core/factory/index.vue
  36. 1 1
      src/view/mst/molding/form.vue
  37. 17 1
      src/view/mst/mould/index.vue
  38. 19 12
      src/view/pdm/data-collection/climbKiln-add.vue
  39. 19 12
      src/view/pdm/data-collection/finishCheck-add.vue
  40. 19 12
      src/view/pdm/data-collection/halfCheck-add.vue
  41. 19 12
      src/view/pdm/data-collection/inKiln-add.vue
  42. 19 12
      src/view/pdm/data-collection/outKiln-add.vue
  43. 19 12
      src/view/pdm/data-collection/recover-add.vue
  44. 20 12
      src/view/pdm/data-collection/register-add.vue
  45. 19 12
      src/view/pdm/data-collection/uninstallKiln-add.vue
  46. 13 0
      src/view/pdm/molding-record/bind-barcode.vue
  47. 2 2
      src/view/pdm/molding-record/form.vue
  48. 17 0
      src/view/pdm/molding-record/index.vue
  49. 3 2
      src/view/process/process-flow/index.vue
  50. 2 2
      src/view/process/process-flow/process-setting.vue
  51. 181 0
      src/view/report/mould-follow-report/index.vue

+ 2 - 0
src/api/pages/common/common.js

@@ -169,6 +169,8 @@ export default {
     getColourForSet:'get_colour_for_set',
     //商标设定放大镜详细查询
     getLogoForSet:'get_logo_for_set',
+    
+    getPrintingData:'get_printing_data',
   }
 }
 

+ 1 - 0
src/api/pages/mst/mould.js

@@ -33,5 +33,6 @@ export const routeUrl = {
     mouldChangeStdNum: {key: 'mouldChangeStdNum', method: 'mouldChangeStdNum'},
     changeStdNum: {key: 'changeStdNum', method: 'changeStdNum'},
     modelMouldChange: {key: 'modelMouldChange', method: 'modelMouldChange'},
+    print: {key: 'print', method: 'print'},
   }
 }

+ 1 - 0
src/api/pages/pdm/molding-record.js

@@ -36,5 +36,6 @@ export const routeUrl = {
     bindBarcodeButton:{key: 'bindBarcodeButton', method: 'bindBarcodeButton'},
     clearBindBarcode:{key: 'clearBindBarcode', method: 'clearBindBarcode'},
     bindBarcode:{key: 'bind-barcode',url:'/pdm/molding-record/bind-barcode',chooseFlag: true},
+    print: {key: 'print', method: 'print'},
   }
 }

+ 4 - 0
src/api/pages/report/detail-report.js

@@ -27,6 +27,10 @@ export default {
     getProductFollowReportByPage:'get_product_follow_report_by_page',
     // 产品跟踪明细
     getProductFollowItemReportByPage:'get_product_follow_item_report_by_page',
+    // 模具跟踪明细表
+    getMouldFollowReportByPage:'get_mould_follow_report_by_page',
+    // 模具跟踪明细
+    getMouldFollowItemReportByPage:'get_mould_follow_item_report_by_page',
   }
 }
 

BIN
src/assets/images/app-image/carrier_printing.png


BIN
src/assets/images/app-image/carrier_reprinting.png


BIN
src/assets/images/app-image/mould_printing.png


BIN
src/assets/images/app-image/mould_reprinting.png


+ 7 - 1
src/components-app/base/dk-app-field/dk-app-field.vue

@@ -185,7 +185,7 @@ export default {
     placeholderTxt:{
       type: String,
       default: ''
-    }
+    },
   }
   ,
   data() {
@@ -211,6 +211,12 @@ export default {
         this.model = n
       }
     },
+    placeholderTxt(n, o){
+      //监听请输入 文字发生改变
+        if(n){
+          this.placeholder =  this.placeholderTxt 
+        }
+    }
   },
   mounted() {
   },

+ 17 - 8
src/components/base/dk-date-picker-pop/dk-date-picker-pop.vue

@@ -307,6 +307,22 @@ export default {
         this.$emit('input', null)
       }
     },
+    /**
+     * @desc   : 提供给resize用,控制openFlag
+     * @author : 周兴
+     * @date   : 2023/4/13 14:51
+     */
+    setOpenFlag(){
+      if (this.type == 'daterange') {
+        this.openFlag = false;
+        setTimeout(() => {
+          this.openFlag = null;
+        }, 300)
+      }
+    },
+  },
+  beforeDestroy() {
+    window.removeEventListener('resize',this.setOpenFlag)
   },
   mounted() {
     //监听窗口变化
@@ -314,14 +330,7 @@ export default {
     if (self.dkFormItem) {
       self.dkFormItem.setItems(self);   // 把当前组件赋值给formItem
     }
-    window.addEventListener('resize', function (e) {
-      if (self.type == 'daterange') {
-        self.openFlag = false;
-        setTimeout(() => {
-          self.openFlag = null;
-        }, 300)
-      }
-    })
+    window.addEventListener('resize', self.setOpenFlag)
   },
   created() {
     if (this.value instanceof Array) {

+ 68 - 57
src/components/base/dk-modal/dk-modal.vue

@@ -1,50 +1,51 @@
 <!-- @desc:modal弹窗  @auth:周兴  @time:2022/7/23 15:40 -->
 <template>
-
-  <Modal
-    ref="modal"
-    :width="width"
-    :ok-text="okText"
-    :cancel-text="cancelText"
-    :footer-hide="!footerFlag"
-    :transfer="transfer"
-    :scrollable="scrollable"
-    :fullscreen="fullscreen"
-    :draggable="draggable"
-    :sticky="sticky"
-    :reset-drag-position="resetDragPosition"
-    :sticky-distance="stickyDistance"
-    :closable="closable"
-    :lock-scroll="lockScroll"
-    v-model="showModal"
-    :class-name="className"
-    :styles="styles"
-    @on-ok="handleOk"
-    @on-cancel="handleCancel"
-    @on-visible-change="onVisibleChange"
-    :z-index="1000"
-    :title="title"
-    :mask-closable="maskClosable"
-    :mask="mask">
-    <div slot="header" class="header-class">
-      <span>{{ title }}</span>
-      <Poptip trigger="hover" transfer v-if="showHeaderIcon">
-        <Icon style="cursor: pointer" size="16" type="ios-information-circle" />
-        <div slot="content">
-          <slot name="headerTip"></slot>
-        </div>
-      </Poptip>
-    </div>
-    <slot></slot>
-    <div v-if="footerFlag" slot="footer">
-      <!--      <DkButton :loading="loading" v-if="okVisibleFlag" type="primary" @click="modalOk" name="confirm" :ref="saveFlag?'save':'confirm'">{{ saveFlag?$t('save') :$t('confirm') }}</DkButton>-->
-      <!--      <DkButton v-if="cancelVisibleFlag" @click="modalCancel" name="close" ref="close">{{ $t('close') }}</DkButton>-->
-      <DkButton :loading="loading" v-if="okVisibleFlag" type="primary" @click="modalOk" name="confirm"
-                :ref="saveFlag?'save':'confirm'">{{ saveFlag ? '保存(S)' : '确定(O)' }}
-      </DkButton>
-      <DkButton v-if="cancelVisibleFlag" @click="modalCancel" name="close" ref="close">{{ '关闭(X)' }}</DkButton>
-    </div>
-  </Modal>
+  <div ref="modal_div">
+    <Modal
+      ref="modal"
+      :width="width"
+      :ok-text="okText"
+      :cancel-text="cancelText"
+      :footer-hide="!footerFlag"
+      :transfer="transfer"
+      :scrollable="scrollable"
+      :fullscreen="fullscreen"
+      :draggable="draggable"
+      :sticky="sticky"
+      :reset-drag-position="resetDragPosition"
+      :sticky-distance="stickyDistance"
+      :closable="closable"
+      :lock-scroll="lockScroll"
+      v-model="showModal"
+      :class-name="className"
+      :styles="styles"
+      @on-ok="handleOk"
+      @on-cancel="handleCancel"
+      @on-visible-change="onVisibleChange"
+      :z-index="1000"
+      :title="title"
+      :mask-closable="maskClosable"
+      :mask="mask">
+      <div slot="header" class="header-class">
+        <span>{{ title }}</span>
+        <Poptip trigger="hover" transfer v-if="showHeaderIcon">
+          <Icon style="cursor: pointer" size="16" type="ios-information-circle"/>
+          <div slot="content">
+            <slot name="headerTip"></slot>
+          </div>
+        </Poptip>
+      </div>
+      <slot></slot>
+      <div v-if="footerFlag" slot="footer">
+        <!--      <DkButton :loading="loading" v-if="okVisibleFlag" type="primary" @click="modalOk" name="confirm" :ref="saveFlag?'save':'confirm'">{{ saveFlag?$t('save') :$t('confirm') }}</DkButton>-->
+        <!--      <DkButton v-if="cancelVisibleFlag" @click="modalCancel" name="close" ref="close">{{ $t('close') }}</DkButton>-->
+        <DkButton :loading="loading" v-if="okVisibleFlag" type="primary" @click="modalOk" name="confirm"
+                  :ref="saveFlag?'save':'confirm'">{{ saveFlag ? '保存(S)' : '确定(O)' }}
+        </DkButton>
+        <DkButton v-if="cancelVisibleFlag" @click="modalCancel" name="close" ref="close">{{ '关闭(X)' }}</DkButton>
+      </div>
+    </Modal>
+  </div>
 </template>
 
 <script>
@@ -174,22 +175,22 @@ export default {
       default: false
     },
     //点击遮罩层是否可以关闭model,默认可以
-    maskClosable:{
+    maskClosable: {
       type: Boolean,
       default: true
     },
     //是否显示遮罩层阴影,默认显示
-    mask:{
+    mask: {
       type: Boolean,
       default: true
     },
     // 是否显示表头图标
-    showHeaderIcon:{
+    showHeaderIcon: {
       type: Boolean,
       default: false
     },
     // 关闭是否清空数据
-    autoClearFlag:{
+    autoClearFlag: {
       type: Boolean,
       default: true
     }
@@ -357,6 +358,17 @@ export default {
         }
       }
     },
+    /**
+     * @desc   : 控制弹起
+     * @author : 周兴
+     * @date   : 2023/4/13 14:55
+     */
+    handleKeyup(e) {
+      if (e.key === 'Tab' && document.activeElement && document.activeElement.name === 'close') {
+        // 如果是到关闭按钮,就把当前打回第一控件上
+        this.focus();
+      }
+    },
   },
   created() {
     if (this.top) {
@@ -366,21 +378,20 @@ export default {
       Object.assign(this.styles, {left: this.left})
     }
   },
+  beforeDestroy() {
+    window.removeEventListener('keyup', this.handleKeyup)
+    this.showModal = null;
+  },
   mounted() {
     let self = this;
     //监听窗口变化
-    window.addEventListener('keyup', function (e) {
-      if (e.key === 'Tab' && document.activeElement && document.activeElement.name === 'close' ) {
-        // 如果是到关闭按钮,就把当前打回第一控件上
-        self.focus();
-      }
-    })
+    window.addEventListener('keyup', self.handleKeyup)
   }
 }
 </script>
 
 <style lang="scss" scoped>
-.header-class{
+.header-class {
   font-weight: bold;
 }
 
@@ -392,7 +403,7 @@ export default {
   height: 100%;
 }
 
-/deep/ .ivu-modal-fullscreen .ivu-modal-body{
+/deep/ .ivu-modal-fullscreen .ivu-modal-body {
   overflow-x: hidden !important;
 }
 

+ 11 - 4
src/components/base/dk-perspective/dk-pivot.vue

@@ -104,8 +104,8 @@
         <div style="height: 50px">
           <DkButton @click="currentType='table'">表格</DkButton>
           <DkButton @click="currentType='bar'">柱状图</DkButton>
-<!--          <DkButton @click="currentType='line'">折线图</DkButton>-->
-<!--          <DkButton @click="currentType='pie'">饼状图</DkButton>-->
+          <DkButton @click="currentType='line'">折线图</DkButton>
+          <DkButton @click="currentType='pie'">饼状图</DkButton>
         </div>
       </div>
 
@@ -213,7 +213,7 @@
         </div>
 
       </DkTable>
-      <Echarts slot="right" v-if="currentType!='table'" :type="currentType" :columns="internal"
+      <Echarts slot="right" v-if="currentType!='table'" :type="currentType" :columns="internal" ref="chart"
                :style="'height: '+tableHeight+'px; width: 100%'" :table-instance="$refs['table-select']"/>
     </DkSplit>
   </div>
@@ -518,7 +518,6 @@ export default {
       this.hideFlag = !this.hideFlag;
       if (this.hideFlag) {
         this.$refs['toolSplit'].hidePane();
-        ``
       }
     },
     /**
@@ -693,7 +692,15 @@ export default {
             })
           }
           this.isDataLoading = false;
+
+          //更新图表
+          if (this.currentType !== 'table') {
+            this.$nextTick(()=>{
+              this.$refs.chart.init()
+            })
+          }
         })
+
       }, 300)
       this.isDataComputing = false
       // this.updateInternalFields()

+ 62 - 12
src/components/base/dk-perspective/echarts.vue

@@ -7,7 +7,6 @@
 import { uuid } from '@tinymce/tinymce-vue/lib/es2015/main/ts/Utils'
 
 export default {
-  // name: 'echarts',
   props: {
     type: {
       type: String
@@ -26,7 +25,7 @@ export default {
   },
   watch: {
     type(){
-      this[this.type]()
+      this.init()
     }
   },
   methods: {
@@ -43,12 +42,20 @@ export default {
       return colList
     },
     /**
+     * @desc   : 获取表格数据
+     * @author : 洪旭东
+     * @date   : 2023-04-18 08:43
+     */
+    getData(){
+      return this.tableInstance.$refs.table.getTableData().tableData
+    },
+    /**
      * @desc   : 柱状图
      * @author : 洪旭东
      * @date   : 2023-04-14 16:46
      */
     bar() {
-      let tableData = this.tableInstance.$refs.table.getTableData().tableData
+      let tableData = this.getData()
       //表格全部列
       let colList = this.getColumn()
       //行
@@ -62,7 +69,6 @@ export default {
           showBackground: true,
         }
       })
-
       let echarts = require('echarts')
       let chart = echarts.init(document.getElementById(this.id))
       chart.setOption(
@@ -84,8 +90,13 @@ export default {
         }
       )
     },
+    /**
+     * @desc   : 折线图
+     * @author : 洪旭东
+     * @date   : 2023-04-17 17:04
+     */
     line() {
-      let tableData = this.tableInstance.$refs.table.getTableData().tableData
+      let tableData = this.getData()
       //表格全部列
       let colList = this.getColumn()
       //行
@@ -97,6 +108,11 @@ export default {
           data: tableData.map(m => m[c.field] || 0),
           type: 'line',
           showBackground: true,
+          emphasis: {
+            focus: 'series'
+          },
+          //面积图
+          // areaStyle: {},
         }
       })
 
@@ -105,7 +121,10 @@ export default {
       chart.setOption(
         {
           tooltip: {
-            trigger: 'item'
+            trigger: 'axis',
+            axisPointer: {
+              type: 'shadow'
+            }
           },
           xAxis: {
             type: 'category',
@@ -119,10 +138,19 @@ export default {
         }
       )
     },
+    /**
+     * @desc   : 饼状图
+     * @author : 洪旭东
+     * @date   : 2023-04-17 17:04
+     */
     pie() {
-      let _this = this
-      let col = this.tableInstance.$refs.table.getColumns().map(m => m.field).filter(f => f)
-      let tableData = this.tableInstance.$refs.table.getTableData().tableData
+      let tableData = this.getData()
+      //表格全部列
+      let colList = this.getColumn()
+      //行 中第一个字段
+      let keyField = colList.filter(f => this.columns.rowFieldKeys.indexOf(f.field)!==-1)[0].field
+      //值 中第一个字段
+      let valueField = colList.filter(f => this.columns.rowFieldKeys.indexOf(f.field)===-1)[0].field
 
       let echarts = require('echarts')
       let chart = echarts.init(document.getElementById(this.id))
@@ -139,17 +167,39 @@ export default {
             {
               type: this.type,
               data: tableData.map(m => {return {
-                value: m[col[1]],
-                name: m[col[0]]
+                value: m[valueField],
+                name: m[keyField]
               }}),
             }
           ]
         }
       )
     },
+    /**
+     * @desc   : 画图
+     * @author : 洪旭东
+     * @date   : 2023-04-17 13:02
+     */
+    init() {
+      this.dispose()
+      this[this.type]()
+    },
+    /**
+     * @desc   : 销毁实例
+     * @author : 洪旭东
+     * @date   : 2023-04-17 11:03
+     */
+    dispose() {
+      let echarts = require('echarts')
+      let chart = echarts.init(document.getElementById(this.id))
+      chart.dispose();
+    }
   },
   mounted() {
-    this[this.type]()
+    this.init()
+  },
+  beforeDestroy() {
+    this.dispose()
   }
 }
 </script>

+ 10 - 10
src/components/base/dk-table/dk-table.vue

@@ -1,6 +1,6 @@
 <!-- @desc:显示表格  @auth:周兴  @time:2022/11/14 16:29 -->
 <template>
-  <div :style="{height: 100 + '%',width:divWidth,paddingRight:'1px'}">
+  <div :style="{height: 100 + '%',width:divWidth,paddingRight:'1px'}" v-if="existsFlag">
     <loading :loading="loadingData"></loading>
     <vxe-table
       :cell-style="cellStyle"
@@ -366,6 +366,7 @@ export default {
     return {
       vm: vm,
       flag: true,
+      existsFlag:true,
       loadingData: false,
       exportCondition: {},
       userTableSetInfo:null,
@@ -1817,22 +1818,21 @@ export default {
       }, 100)
     },
   },
+  beforeDestroy() {
+    // 销毁
+    window.removeEventListener('resize',this.changeSettingLocation)
+    window.removeEventListener('scroll', this.hideAllPop)
+    this.existsFlag = null;
+  },
   mounted() {
     let self = this;
     //监听窗口变化
-    window.addEventListener('resize', function (e) {
-      setTimeout(() => {
-        self.settingLeft = self.$refs[self.name] ? (self.$refs[self.name].$el.offsetWidth + self.$refs[self.name].$el.offsetLeft - 26) + 'px' : 0// 设置图标居左的位置
-        self.settingTop = self.$refs[self.name] ? (self.$refs[self.name].$el.offsetTop + 1) + 'px' : 0;           // 设置图标居上的位置
-      }, 300)
-    })
+    window.addEventListener('resize', self.changeSettingLocation)
     setTimeout(() => {
       self.changeSettingLocation();
     }, 1000)
     // 监听滚动
-    window.addEventListener('scroll', function (e) {
-      self.hideAllPop() //关闭表头的pop
-    }, true)
+    window.addEventListener('scroll', self.hideAllPop)
   },
   created() {
     if (!this.checkDisable) {

+ 157 - 158
src/components/base/edit-table/edit-table.vue

@@ -1,6 +1,6 @@
 <!-- @desc:编辑表格  @auth:周兴  @time:2022/11/15 13:06 -->
 <template>
-  <div :style="{height: 100 + '%',width:divWidth,paddingRight:'3px'}">
+  <div :style="{height: 100 + '%',width:divWidth,paddingRight:'3px'}"  ref="edit-table-div" v-if="existsFlag">
     <div v-if="title" class="table-title">{{ title }}</div>
     <vxe-table
       border
@@ -68,31 +68,31 @@
                     :min-width="colItem.minWidth?colItem.minWidth:vm.$config.columnWidthMin"
                     :title="colItem.title?colItem.title:$t(colItem.field)" :params="{type:'tableSelect'}"
                     :edit-render="{autofocus: '.vxe-input--inner'}">
-          <template #header="{ row }">
-            <span>{{ colItem.title ? colItem.title : $t(colItem.field) }}</span>
-            <Poptip trigger="click" transfer @on-popper-hide="popperHide">
-              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"
-                    v-if="colItem.copyVisible"/>
-              <div slot="content">
-                <div style="display: flex;align-items: center;justify-content: center;">
-                  <TableSelect :field="colItem.field" :dataType="colItem.dataType"
-                               :sortBoolean="colItem.sortBoolean"
-                               :multiple="colItem.multiple"
-                               :showType="colItem.showType"
-                               :promotionType="colItem.promotionType"
-                               @onBatchChoose="onBatchChooseCopy($event,colItem,'batch')"
-                               @onChoose="onBatchChooseCopy($event,colItem)"
-                               :search-param="typeof colItem.param === 'function'? colItem.param():colItem.param"></TableSelect>
-                  <Button type="primary" size="small" @click="inputDown(colItem)">{{ $t('filling') }}</Button>
-                </div>
-              </div>
-            </Poptip>
-            <!--冻结/解冻列-->
-            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "
-                  v-if="freezeData && colItem.freezeFlag"
-                  type="ios-lock"
-                  @click="handleFreeze(colItem.field)"/>
-          </template>
+          <!--          <template #header="{ row }">-->
+          <!--            <span>{{ colItem.title ? colItem.title : $t(colItem.field) }}</span>-->
+          <!--            <Poptip trigger="click" transfer @on-popper-hide="popperHide">-->
+          <!--              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"-->
+          <!--                    v-if="colItem.copyVisible"/>-->
+          <!--              <div slot="content">-->
+          <!--                <div style="display: flex;align-items: center;justify-content: center;">-->
+          <!--                  <TableSelect :field="colItem.field" :dataType="colItem.dataType"-->
+          <!--                               :sortBoolean="colItem.sortBoolean"-->
+          <!--                               :multiple="colItem.multiple"-->
+          <!--                               :showType="colItem.showType"-->
+          <!--                               :promotionType="colItem.promotionType"-->
+          <!--                               @onBatchChoose="onBatchChooseCopy($event,colItem,'batch')"-->
+          <!--                               @onChoose="onBatchChooseCopy($event,colItem)"-->
+          <!--                               :search-param="typeof colItem.param === 'function'? colItem.param():colItem.param"></TableSelect>-->
+          <!--                  <Button type="primary" size="small" @click="inputDown(colItem)">{{ $t('filling') }}</Button>-->
+          <!--                </div>-->
+          <!--              </div>-->
+          <!--            </Poptip>-->
+          <!--            &lt;!&ndash;冻结/解冻列&ndash;&gt;-->
+          <!--            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "-->
+          <!--                  v-if="freezeData && colItem.freezeFlag"-->
+          <!--                  type="ios-lock"-->
+          <!--                  @click="handleFreeze(colItem.field)"/>-->
+          <!--          </template>-->
           <template style="width:100%;" #edit="{ row,column,rowIndex }">
             <TableSelect :text="row[colItem.field]" :field="colItem.field" :dataType="colItem.dataType"
                          v-if="setCellCanTableSelect(row,colItem) "
@@ -122,14 +122,14 @@
                     :formatter="formatColumn" :params="colItem"
                     :title="colItem.title?colItem.title:$t(colItem.field)">
           <!--标题-->
-          <template #header="{ row,column,columnIndex }">
-            <span>{{ colItem.title ? colItem.title : $t(colItem.field) }}</span>
-            <!--冻结/解冻列-->
-            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "
-                  v-if="freezeData && colItem.freezeFlag"
-                  type="ios-lock"
-                  @click="handleFreeze(colItem.field)"/>
-          </template>
+          <!--          <template #header="{ row,column,columnIndex }">-->
+          <!--            <span>{{ colItem.title ? colItem.title : $t(colItem.field) }}</span>-->
+          <!--            &lt;!&ndash;冻结/解冻列&ndash;&gt;-->
+          <!--            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "-->
+          <!--                  v-if="freezeData && colItem.freezeFlag"-->
+          <!--                  type="ios-lock"-->
+          <!--                  @click="handleFreeze(colItem.field)"/>-->
+          <!--          </template>-->
           <template #default="{ row,rowIndex,column }">
             <div class="edit-div-class" @dblclick.stop="copyValue(row,colItem,rowIndex)">{{
                 formatColumn({
@@ -148,14 +148,14 @@
                     :min-width="colItem.width?colItem.width:vm.$config.columnWidthMin" :params="colItem"
                     :title="colItem.title?colItem.title:$t(colItem.field)">
           <!--标题-->
-          <template #header="{ row,column,columnIndex }">
-            <span>{{ colItem.title ? colItem.title : $t(colItem.field) }}</span>
-            <!--冻结/解冻列-->
-            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "
-                  v-if="freezeData && colItem.freezeFlag"
-                  type="ios-lock"
-                  @click="handleFreeze(colItem.field)"/>
-          </template>
+          <!--          <template #header="{ row,column,columnIndex }">-->
+          <!--            <span>{{ colItem.title ? colItem.title : $t(colItem.field) }}</span>-->
+          <!--            &lt;!&ndash;冻结/解冻列&ndash;&gt;-->
+          <!--            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "-->
+          <!--                  v-if="freezeData && colItem.freezeFlag"-->
+          <!--                  type="ios-lock"-->
+          <!--                  @click="handleFreeze(colItem.field)"/>-->
+          <!--          </template>-->
           <template #default="{ row,rowIndex }">
             <i-switch size="small" :ref="colItem.field+'_default_'+rowIndex" v-model="row[colItem.field]"
                       :disabled="true"/>
@@ -169,26 +169,26 @@
                     :width="colItem.width?colItem.width:vm.$config.columnWidth"
                     :min-width="colItem.minWidth?colItem.minWidth:vm.$config.columnWidthMin"
                     :edit-render="{autofocus: '.vxe-input--inner'}">
-          <template #header="{ row }">
-            <span>{{ colItem.title ? colItem.title : $t(colItem.field) }}</span>
-            <Poptip trigger="click" transfer @on-popper-hide="popperHide">
-              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"
-                    v-if="colItem.copyVisible"/>
-              <div slot="content">
-                <div style="display: flex;align-items: center;justify-content: center;">
-                  <Input size="small" v-model="inputDownValue"
-                         :maxlength="colItem.maxlength?colItem.maxlength:vm.$config.maxlength"
-                         @keydown.13.native.stop="inputDown(colItem)" :name="colItem.field"></Input>
-                  <Button type="primary" size="small" @click="inputDown(colItem)">{{ $t('filling') }}</Button>
-                </div>
-              </div>
-            </Poptip>
-            <!--冻结/解冻列-->
-            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "
-                  v-if="freezeData && colItem.freezeFlag"
-                  type="ios-lock"
-                  @click="handleFreeze(colItem.field)"/>
-          </template>
+          <!--          <template #header="{ row }">-->
+          <!--            <span>{{ colItem.title ? colItem.title : $t(colItem.field) }}</span>-->
+          <!--            <Poptip trigger="click" transfer @on-popper-hide="popperHide">-->
+          <!--              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"-->
+          <!--                    v-if="colItem.copyVisible"/>-->
+          <!--              <div slot="content">-->
+          <!--                <div style="display: flex;align-items: center;justify-content: center;">-->
+          <!--                  <Input size="small" v-model="inputDownValue"-->
+          <!--                         :maxlength="colItem.maxlength?colItem.maxlength:vm.$config.maxlength"-->
+          <!--                         @keydown.13.native.stop="inputDown(colItem)" :name="colItem.field"></Input>-->
+          <!--                  <Button type="primary" size="small" @click="inputDown(colItem)">{{ $t('filling') }}</Button>-->
+          <!--                </div>-->
+          <!--              </div>-->
+          <!--            </Poptip>-->
+          <!--            &lt;!&ndash;冻结/解冻列&ndash;&gt;-->
+          <!--            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "-->
+          <!--                  v-if="freezeData && colItem.freezeFlag"-->
+          <!--                  type="ios-lock"-->
+          <!--                  @click="handleFreeze(colItem.field)"/>-->
+          <!--          </template>-->
           <template #edit="{ row,rowIndex }">
             <vxe-input v-model="row[colItem.field]" type="text" v-if="setCellCanInput( row ,colItem)"
                        :maxlength="colItem.maxlength?colItem.maxlength:vm.$config.maxlength"
@@ -212,29 +212,29 @@
                     :min-width="colItem.minWidth?colItem.minWidth:vm.$config.columnWidthMin"
                     :edit-render="{autofocus: '.vxe-input--inner', autoselect: true}" :formatter="formatColumn"
                     :params="colItem">
-          <template #header="{ row }">
-            <span>{{ colItem.title ? colItem.title : $t(colItem.field) }}</span>
-            <Poptip trigger="click" transfer @on-popper-show="popperShow(colIndex,'inputNumber')"
-                    @on-popper-hide="popperHide">
-              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"
-                    v-if="colItem.copyVisible"/>
-              <div slot="content">
-                <!--点回车相当于点按钮填充-->
-                <div style="display: flex;align-items: center;justify-content: center;">
-                  <InputNumberPop size="small" :digits="colItem.digits" v-model="inputDownValue"
-                                  :ref="'pop_' + colIndex"
-                                  @keydown.13.native.stop="inputDown(colItem)" :pop-visible="false"
-                                  :name="colItem.field"></InputNumberPop>
-                  <Button type="primary" size="small" @click="inputDown(colItem)">{{ $t('filling') }}</Button>
-                </div>
-              </div>
-            </Poptip>
-            <!--冻结/解冻列-->
-            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "
-                  v-if="freezeData && colItem.freezeFlag"
-                  type="ios-lock"
-                  @click="handleFreeze(colItem.field)"/>
-          </template>
+          <!--          <template #header="{ row }">-->
+          <!--            <span>{{ colItem.title ? colItem.title : $t(colItem.field) }}</span>-->
+          <!--            <Poptip trigger="click" transfer @on-popper-show="popperShow(colIndex,'inputNumber')"-->
+          <!--                    @on-popper-hide="popperHide">-->
+          <!--              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"-->
+          <!--                    v-if="colItem.copyVisible"/>-->
+          <!--              <div slot="content">-->
+          <!--                &lt;!&ndash;点回车相当于点按钮填充&ndash;&gt;-->
+          <!--                <div style="display: flex;align-items: center;justify-content: center;">-->
+          <!--                  <InputNumberPop size="small" :digits="colItem.digits" v-model="inputDownValue"-->
+          <!--                                  :ref="'pop_' + colIndex"-->
+          <!--                                  @keydown.13.native.stop="inputDown(colItem)" :pop-visible="false"-->
+          <!--                                  :name="colItem.field"></InputNumberPop>-->
+          <!--                  <Button type="primary" size="small" @click="inputDown(colItem)">{{ $t('filling') }}</Button>-->
+          <!--                </div>-->
+          <!--              </div>-->
+          <!--            </Poptip>-->
+          <!--            &lt;!&ndash;冻结/解冻列&ndash;&gt;-->
+          <!--            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "-->
+          <!--                  v-if="freezeData && colItem.freezeFlag"-->
+          <!--                  type="ios-lock"-->
+          <!--                  @click="handleFreeze(colItem.field)"/>-->
+          <!--          </template>-->
           <template #edit="{ row ,rowIndex}">
             <vxe-input v-model="row[colItem.field]" type="number"
                        :ref="colItem.field+rowIndex"
@@ -259,34 +259,34 @@
                     :width="colItem.width?colItem.width:vm.$config.columnWidth"
                     :min-width="colItem.minWidth?colItem.minWidth:vm.$config.columnWidthMin"
                     :edit-render="{autofocus: '.vxe-input--inner'}">
-          <template #header="{ row }">
-            <span>{{ $t(colItem.title ? colItem.title : colItem.field) }}</span>
-            <Poptip trigger="click" transfer @on-popper-hide="popperHide">
-              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"
-                    v-if="colItem.copyVisible"/>
-              <div slot="content">
-                <div style="display: flex;align-items: center;justify-content: center;">
-                  <!--                {{ colItem.options() }}-->
-                  <Select size="small" v-model="inputDownValue" style="width:200px" :multiple="colItem.multiple"
-                          clearable>
-                    <Option v-for="item in (typeof colItem.options === 'function'?colItem.options():colItem.options)"
-                            :key="item[colItem.valueKey]"
-                            :value="item[colItem.valueKey]"
-                            :label="item[colItem.labelKey]">
-                      {{ item[colItem.labelKey] }}
-                    </Option>
-                  </Select>
+          <!--          <template #header="{ row }">-->
+          <!--            <span>{{ $t(colItem.title ? colItem.title : colItem.field) }}</span>-->
+          <!--            <Poptip trigger="click" transfer @on-popper-hide="popperHide">-->
+          <!--              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"-->
+          <!--                    v-if="colItem.copyVisible"/>-->
+          <!--              <div slot="content">-->
+          <!--                <div style="display: flex;align-items: center;justify-content: center;">-->
+          <!--                  &lt;!&ndash;                {{ colItem.options() }}&ndash;&gt;-->
+          <!--                  <Select size="small" v-model="inputDownValue" style="width:200px" :multiple="colItem.multiple"-->
+          <!--                          clearable>-->
+          <!--                    <Option v-for="item in (typeof colItem.options === 'function'?colItem.options():colItem.options)"-->
+          <!--                            :key="item[colItem.valueKey]"-->
+          <!--                            :value="item[colItem.valueKey]"-->
+          <!--                            :label="item[colItem.labelKey]">-->
+          <!--                      {{ item[colItem.labelKey] }}-->
+          <!--                    </Option>-->
+          <!--                  </Select>-->
 
-                  <Button type="primary" size="small" @click="inputDown(colItem)">{{ $t('filling') }}</Button>
-                </div>
-              </div>
-            </Poptip>
-            <!--冻结/解冻列-->
-            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "
-                  v-if="freezeData && colItem.freezeFlag"
-                  type="ios-lock"
-                  @click="handleFreeze(colItem.field)"/>
-          </template>
+          <!--                  <Button type="primary" size="small" @click="inputDown(colItem)">{{ $t('filling') }}</Button>-->
+          <!--                </div>-->
+          <!--              </div>-->
+          <!--            </Poptip>-->
+          <!--            &lt;!&ndash;冻结/解冻列&ndash;&gt;-->
+          <!--            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "-->
+          <!--                  v-if="freezeData && colItem.freezeFlag"-->
+          <!--                  type="ios-lock"-->
+          <!--                  @click="handleFreeze(colItem.field)"/>-->
+          <!--          </template>-->
           <template #default="{ row }">
             <div class="edit-div-class" @dblclick.stop="copyValue(row,colItem)">{{
                 row[colItem.field + '_Name']
@@ -330,7 +330,6 @@
               {{ row[colItem.field + '_Name'] }}
             </div>
           </template>
-
         </vxe-column>
 
         <!--  date   -->
@@ -340,24 +339,24 @@
                     :width="colItem.width?colItem.width:vm.$config.columnWidth"
                     :min-width="colItem.minWidth?colItem.minWidth:vm.$config.columnWidthMin"
                     :title="$t(colItem.field)" :edit-render="{autofocus: '.vxe-input--inner'}">
-          <template #header="{ row }">
-            <span>{{ $t(colItem.title ? colItem.title : colItem.field) }}</span>
-            <Poptip trigger="click" transfer @on-popper-hide="popperHide">
-              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"
-                    v-if="colItem.copyVisible"/>
-              <div slot="content">
-                <div style="display: flex;align-items: center;justify-content: center;">
-                  <DatePicker transfer v-model="inputDownValue" type="date"></DatePicker>
-                  <Button type="primary" size="small" @click="inputDown(colItem)">{{ $t('filling') }}</Button>
-                </div>
-              </div>
-            </Poptip>
-            <!--冻结/解冻列-->
-            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "
-                  v-if="freezeData && colItem.freezeFlag"
-                  type="ios-lock"
-                  @click="handleFreeze(colItem.field)"/>
-          </template>
+          <!--          <template #header="{ row }">-->
+          <!--            <span>{{ $t(colItem.title ? colItem.title : colItem.field) }}</span>-->
+          <!--            <Poptip trigger="click" transfer @on-popper-hide="popperHide">-->
+          <!--              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"-->
+          <!--                    v-if="colItem.copyVisible"/>-->
+          <!--              <div slot="content">-->
+          <!--                <div style="display: flex;align-items: center;justify-content: center;">-->
+          <!--                  <DatePicker transfer v-model="inputDownValue" type="date"></DatePicker>-->
+          <!--                  <Button type="primary" size="small" @click="inputDown(colItem)">{{ $t('filling') }}</Button>-->
+          <!--                </div>-->
+          <!--              </div>-->
+          <!--            </Poptip>-->
+          <!--            &lt;!&ndash;冻结/解冻列&ndash;&gt;-->
+          <!--            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "-->
+          <!--                  v-if="freezeData && colItem.freezeFlag"-->
+          <!--                  type="ios-lock"-->
+          <!--                  @click="handleFreeze(colItem.field)"/>-->
+          <!--          </template>-->
           <template #default="{ row }">
             <span @dblclick.stop="copyValue(row,colItem)">{{ dateFormat(row[colItem.field]) }}</span>
           </template>
@@ -375,26 +374,26 @@
                     :width="colItem.width?colItem.width:vm.$config.columnWidth"
                     :min-width="colItem.minWidth?colItem.minWidth:vm.$config.columnWidthMin"
                     :field="$t(colItem.field)" :edit-render="{autofocus: '.vxe-input--inner'}">
-          <template #header="{ row }">
-            <span>{{ $t(colItem.title ? colItem.title : colItem.field) }}</span>
-            <Poptip trigger="click" transfer @on-popper-hide="popperHide">
-              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"
-                    v-if="colItem.copyVisible"/>
-              <div slot="content">
-                <div style="display: flex;align-items: center;justify-content: center;">
-                  <i-switch v-model="inputDownBooleanValue"/>
-                  <Button type="primary" style="margin-left:10px" size="small" @click="inputDown(colItem)">
-                    {{ $t('filling') }}
-                  </Button>
-                </div>
-              </div>
-            </Poptip>
-            <!--冻结/解冻列-->
-            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "
-                  v-if="freezeData && colItem.freezeFlag"
-                  type="ios-lock"
-                  @click="handleFreeze(colItem.field)"/>
-          </template>
+          <!--          <template #header="{ row }">-->
+          <!--            <span>{{ $t(colItem.title ? colItem.title : colItem.field) }}</span>-->
+          <!--            <Poptip trigger="click" transfer @on-popper-hide="popperHide">-->
+          <!--              <Icon type="iconfont iconfont icon-copy" style="cursor: pointer;" ref="down-input-icon"-->
+          <!--                    v-if="colItem.copyVisible"/>-->
+          <!--              <div slot="content">-->
+          <!--                <div style="display: flex;align-items: center;justify-content: center;">-->
+          <!--                  <i-switch v-model="inputDownBooleanValue"/>-->
+          <!--                  <Button type="primary" style="margin-left:10px" size="small" @click="inputDown(colItem)">-->
+          <!--                    {{ $t('filling') }}-->
+          <!--                  </Button>-->
+          <!--                </div>-->
+          <!--              </div>-->
+          <!--            </Poptip>-->
+          <!--            &lt;!&ndash;冻结/解冻列&ndash;&gt;-->
+          <!--            <Icon ref="freeze" :class="colItem.freezeFlag?'freezed-class':'freeze-class' "-->
+          <!--                  v-if="freezeData && colItem.freezeFlag"-->
+          <!--                  type="ios-lock"-->
+          <!--                  @click="handleFreeze(colItem.field)"/>-->
+          <!--          </template>-->
           <template #default="{ row,rowIndex }">
             <!--          <span>{{ row[colItem.field] ? '是' : '否' }}</span>-->
             <vxe-switch :ref="colItem.field+'_default_'+rowIndex" v-model="row[colItem.field]"
@@ -450,10 +449,11 @@
 import XEUtils from "xe-utils";
 import SeqButton from '@/components/sub/seq-button/index'
 import Sortable from "sortablejs";
+import TableSelect from '@/components/business/table-select'
 
 export default {
   name: 'EditTable',
-  components: {SeqButton},
+  components: {SeqButton, TableSelect},
   props: {
     value: {
       type: Array,
@@ -614,6 +614,7 @@ export default {
       vm: vm,
       rowIndex: -1,
       colIndex: -1,
+      existsFlag: true,  // 存在标识,用于销毁内部组件
       visibleRows: [],// 可见的行,用于控制
       header: {
         options: [
@@ -2657,12 +2658,7 @@ export default {
     }, 300)
     self.rowDrop();  //行移动
     //监听窗口变化
-    window.addEventListener('resize', function (e) {
-      setTimeout(() => {
-        self.settingLeft = self.$refs[self.name] ? (self.$refs[self.name].$el.offsetWidth + self.$refs[self.name].$el.offsetLeft - 26) + 'px' : 0// 设置图标居左的位置
-        self.settingTop = self.$refs[self.name] ? (self.$refs[self.name].$el.offsetTop + 1) + 'px' : 0;           // 设置图标居上的位置
-      }, 300)
-    })
+    window.addEventListener('resize', self.changeSettingLocation)
     self.handleSelectData()
     self.changeSettingLocation();
   },
@@ -2670,6 +2666,9 @@ export default {
     if (this.sortable) {
       this.sortable.destroy();
     }
+    this.sortable = null;
+    window.removeEventListener('resize', this.changeSettingLocation)
+    this.existsFlag = null
   },
   created() {
     // 初始化列

+ 2 - 1
src/components/base/edit-tree-table/edit-tree-table.vue

@@ -507,10 +507,11 @@
 
 import XEUtils from "xe-utils";
 import SeqButton from '@/components/sub/seq-button/index'
+import TableSelect from '@/components/business/table-select'
 
 export default {
   name: 'EditTreeTable',
-  components: {SeqButton},
+  components: {SeqButton,TableSelect},
   props: {
     data: {
       type: Array,

+ 5 - 1
src/components/base/input-pop/input-pop.vue

@@ -1,5 +1,6 @@
 <!-- @desc:文本输入框组件  @auth:周兴  @time:2022/5/9 14:32 -->
 <template>
+  <div v-if="existsFlag" style="width: 100%;">
   <Poptip popper-class="input-popper-class" ref="pop" transfer trigger="focus" placement="top-start" v-model="visible"
           :disabled="!visible">
     <div class="close-div-class" :class="addTabInputFlag?'add-table-input':''">
@@ -31,6 +32,7 @@
       <div class="pop-item-content">{{ this.value2 }}</div>
     </div>
   </Poptip>
+  </div>
 </template>
 
 <script>
@@ -155,6 +157,7 @@ export default {
     const vm = window.vm;
     return {
       vm: vm,
+      existsFlag:true,
       value2: '',
       placeholderData: null,
       label: '',
@@ -391,7 +394,8 @@ export default {
       }
     },
   },
-  activated() {
+  beforeDestroy() {
+    this.existsFlag = null;
   },
   mounted() {
     if (this.dkFormItem) {

+ 5 - 1
src/components/base/select-pop/select-pop.vue

@@ -1,6 +1,6 @@
 <!-- @desc:下拉组件  @auth:周兴  @time:2022/11/15 12:58 -->
 <template>
-  <div class="close-div-class">
+  <div class="close-div-class" v-if="existsFlag">
     <div :class="divClass && showClearFlag?'':'select-div-no-clear'" class="select-div" @keydown="handleKeyDown" @mousedown="handleMouseDown">
       <Input ref="input" class="select-input" @on-focus="handleInputFocus" @on-blur="handleInputBlur"></Input>
       <xmSelect ref="select" :multiple="multiple" v-model="model" @on-change="onChange" :label-key="labelKey"
@@ -153,6 +153,7 @@ export default {
     const vm = window.vm
     return {
       vm: vm,
+      existsFlag:true,
       model: null,
       label: '',
       optionsData:null,
@@ -429,6 +430,9 @@ export default {
       })
     },
   },
+  beforeDestroy() {
+    this.existsFlag = null ;
+  },
   mounted() {
     if (this.dkFormItem) {
       this.dkFormItem.setItems(this);   // 把当前组件赋值给formItem

+ 7 - 2
src/components/business/print/template.vue

@@ -1,7 +1,6 @@
 <!-- @desc:打印模板  @auth:洪旭东  @time:2022-05-20 14:31 -->
 <template>
   <div class="print-template" style="height: 100%;background: #f2f2f2;" onselectstart="return false">
-    {{tableInfo}}
     <div class="header">
       <img style="height: 60%;" src="http://www.dongkesoft.com/public/static/dongke/img/0logo.png"/>
       <div style="display:flex;">
@@ -1413,7 +1412,13 @@ export default {
       if (this.imgList.length > 0) {
         let objImg = { title: '图片', children: [], expand: true }
         this.imgList.forEach((it, index) => {
-          objImg.children.push({ title: it.name, index: index, expand: true, type: 'img', render: this.renderTreeImg })
+          let name = it.name
+          if (name === '$scanCode') {
+            name = '二维码'
+          } else if (name === '$barCode') {
+            name = '条形码'
+          }
+          objImg.children.push({ title: name, index: index, expand: true, type: 'img', render: this.renderTreeImg })
         })
         arr.push(objImg)
       }

+ 2 - 2
src/components/business/process/edge-modal/edge-modal.vue

@@ -131,7 +131,7 @@ export default {
       }else{
         cell.setAttrs({ line: { stroke: '#A2B1C3', }, },);
       }
-      this.setProcessEdgeModalDisplay(false)
+      this.setProcessEdgeModalDisplay(null)
       this.setCurrentEdgeId(undefined)
     },
     /**
@@ -140,7 +140,7 @@ export default {
      * @date   : 2023/1/5 10:38
      */
     modalCancel(){
-      this.setProcessEdgeModalDisplay(false)
+      this.setProcessEdgeModalDisplay(null)
       this.setCurrentEdgeId(undefined)
     },
   }

+ 27 - 17
src/components/business/process/node-modal/node-modal.vue

@@ -1,18 +1,17 @@
 <!-- @desc:工艺流程节点弹窗  @auth:张潇木  @time:2023/1/5 9:35 -->
 <template>
-  <div class="main-div">
+  <div class="main-div" ref="node-modal-div" v-if="existsFlag">
     <DkModal
       title="工艺节点"
       v-model="modalDisplay"
       :mask-closable="false"
       :mask="false"
-      :closable="false"
       draggable
       sticky
       fullscreen
-      :autoClearFlag="false"
       @modalOk="modalOk"
-      @modalCancel="modalCancel">
+      @modalCancel="modalCancel"
+      @on-cancel="modalCancel">
       <DkForm ref="formInline" v-model="nodeData" :label-max-words="6">
         <!--    节点名称    -->
         <DkFormItem prop="nodeName" :required="true">
@@ -113,7 +112,8 @@
         <!--    可回收分级    -->
         <DkFormItem prop="recycledGradeIds" v-if="nodeControl?.recycledGradeIds?.visible">
           <SelectPop ref="recycledGradeIds" v-model="nodeData.recycledGradeIds" label-key="gradeName"
-                     value-key="gradeId" :multiple="true" :options="productGradeList"/>
+                     value-key="gradeId" :multiple="true"
+                     :options="productGradeList.filter(it=>[$config.gradeKindType.decrease,$config.gradeKindType.inferior].includes(it.gradeKind))"/>
         </DkFormItem>
         <!--    回收后处理方式    -->
         <DkFormItem prop="recycledKind" :auto-label-width="true" v-if="nodeControl?.recycledKind?.visible" :required="true">
@@ -281,6 +281,7 @@ export default {
   data() {
     let self = this
     return {
+      existsFlag:true,
       routerTableFlag: true,
       modalDisplay: false,//如不定义此变量,则进入modal无动画
       split: 0.5,
@@ -406,6 +407,7 @@ export default {
           width: 'auto',
         },
         { field: 'defectName', type: 'disabled', width: 'auto' },
+        { field: 'defectTypesName', type: 'disabled', width: 'auto' },
         {
           field: 'jobId',
           type: 'select',
@@ -422,14 +424,14 @@ export default {
           field: 'node1Id',
           type: 'select',
           controlId: 'node1Id',
-          options: () => self.allNodes.filter(it=>!it.flgAloneJudge),
+          options: () => self.allNodes.filter(it=>!it.flgAloneJudge&&it.id!=self.process.currentNodeId),
           labelKey: 'name',
           valueKey: 'id',
           width: 'auto'
         },
         { field: 'backNodeId',
           type: 'select',
-          options: () => self.allNodes.filter(it=>!it.flgAloneJudge),
+          options: () => self.allNodes.filter(it=>!it.flgAloneJudge&&it.id!=self.process.currentNodeId),
           labelKey: 'name',
           valueKey: 'id',
           width: 'auto'
@@ -463,9 +465,10 @@ export default {
           param: () => {
             return {
               notInFlowId:[parseInt(this.$route.params.id)],
-              notInFlowKind:[this.$config.flowKind.start],
-              notInNodeKind:[this.$config.nodeKind.inKiln,this.$config.nodeKind.outKiln,this.$config.nodeKind.uninstallKiln,this.$config.nodeKind.recover,],
+              // notInFlowKind:[this.$config.flowKind.start],
+              notInNodeKind:[self.$config.nodeKind.inKiln,self.$config.nodeKind.outKiln,self.$config.nodeKind.uninstallKiln,self.$config.nodeKind.recover,self.$config.nodeKind.shaping],
               flgAloneJudge:false,
+              // nodeName:e,
             }
           },
           sortBoolean: false,
@@ -518,7 +521,7 @@ export default {
      */
     handleRouterType() {
       this.nodeData.routerType=4
-      if([this.$config.nodeKind.halfCheck,this.$config.nodeKind.finishCheck].includes(this.nodeData.nodeKind)){
+      if([this.$config.nodeKind.halfCheck,this.$config.nodeKind.finishCheck].includes(this.nodeData.nodeKind)&&this.nodeData.flgAloneJudge){
         this.nodeData.routerType=2
       }
       if(this.$config.recycledKind.before===this.nodeData.recycledKind&&this.nodeData.nodeKind===this.$config.nodeKind.recover){
@@ -640,7 +643,7 @@ export default {
       //设置业务数据
       this.setParams()
       //关闭modal
-      this.setProcessNodeModalDisplay(false)
+      this.setProcessNodeModalDisplay(null)
       //清空当前选中节点id
       this.setCurrentNodeId(undefined)
     },
@@ -654,7 +657,7 @@ export default {
       let cell = this.graph.getCellById(this.process.currentNodeId)
       cell.setData(this.nodeDataSocial, { overwrite: true })
       //设置显示隐藏状态以及清空当前节点id
-      this.setProcessNodeModalDisplay(false)
+      this.setProcessNodeModalDisplay(null)
       this.setCurrentNodeId(undefined)
     },
     /**
@@ -663,6 +666,7 @@ export default {
      * @date   : 2023/2/16 16:21
      */
     setParams() {
+      // console.log('this.$refs?.defectTable?.getTableDataFilter()',this.$refs?.jobDefectTable?.getTableDataFilter())
       // console.log("routerTable?.getTableDataFilter()",this.$refs?.routerTable?.getTableDataFilter())
       // region 设置表单数据
       // 半检、成检、成型 直接指定为生产工号类型
@@ -736,6 +740,7 @@ export default {
           pdtDefectId: it.pdtDefectId,
           defectCode: it.defectCode,
           defectName: it.defectName,
+          defectTypesName: it.defectTypesName,
           remarks: it.remarks,
           ftyId: this.$store.state.user.ftyId
         }
@@ -937,13 +942,13 @@ export default {
     if (this.graph == null) this.graph = Process.graph
     //获取业务数据
     this.nodeData = this.graph.getCellById(this.process.currentNodeId)?.data
-    //记录初始值
+    // //记录初始值
     this.nodeDataSocial =JSON.parse(JSON.stringify(this.nodeData));
-    //刷新节点属性控制
+    // //刷新节点属性控制
     this.nodeControl = this.dataKindList.find(it => it.kindCode === this.nodeData.nodeKind)?.kindTags
-    //处理无线路由类别
+    // //处理无线路由类别
     this.handleRouterType()
-    //过滤调节点组并将json解构成新结构数组
+    // //过滤调节点组并将json解构成新结构数组
     this.allNodes = this.graph.getNodes().filter(it => it.shape == 'custom-image').map((it) => {
       return { id: it.id, name: it.data.nodeName, flowKind:it.data.flowKind, nodeKind:it.data.nodeKind, flgAloneJudge: it.data.flgAloneJudge}
     })
@@ -951,6 +956,9 @@ export default {
     this.handleDataKindList()
   },
   mounted() {
+    if(!this.nodeData.displayNo){
+      this.nodeData.displayNo=this.allNodes.length
+    }
     this.modalDisplay = true
     //计算高度
     this.countTableHeight()
@@ -963,7 +971,9 @@ export default {
       }
     })
   },
-
+  beforeDestroy() {
+    this.existsFlag = null;
+  }
 
 }
 </script>

+ 168 - 175
src/components/business/table-select/table-select.vue

@@ -1,194 +1,176 @@
 <!-- @desc:选品组件  @auth:周兴  @time:2022/11/15 14:10 -->
 <template>
-  <Poptip ref="poptip" trigger="click" transfer :width="popWidth" @click.stop="()=>{}" @on-popper-show="onPopShow"
-          placement="bottom-start">
-    <Input type="text" ref="input" style="width:100%;" :readonly="disabled" v-model="inputModal"
-           @on-change="onChange($event)"
-           @on-keydown="onkeydown($event)"
-           @on-blur="handleInputBlur"
-           autofocus
-    />
-    <!--删除按钮-->
-    <Icon v-if="clearFlag&& inputModal" class="close-class" type="ios-close-circle" @click.stop="clearAll"/>
+  <div v-if="existsFlag">
+    <Poptip ref="poptip" trigger="click" transfer :width="popWidth" @click.stop="()=>{}" @on-popper-show="onPopShow"
+            placement="bottom-start">
+      <Input type="text" ref="input" style="width:100%;" :readonly="disabled" v-model="inputModal"
+             @on-change="onChange($event)"
+             @on-keydown="onkeydown($event)"
+             @on-blur="handleInputBlur"
+             autofocus
+      />
+      <!--删除按钮-->
+      <Icon v-if="clearFlag&& inputModal" class="close-class" type="ios-close-circle" @click.stop="clearAll"/>
 
-    <!--查询按钮-->
-    <icon v-if="searchDetailFlag" type="iconfont iconfont icon-search" class="icon-class" @click.stop="handleSearchClick"/>
-    <!--查询商品-->
-    <DkModal
-      ref="modal_search"
-      id="search-data-class"
-      class="search-data-class"
-      width="1050px"
-      v-model="showModal"
-      @modalOk="modalOk"
-      @on-visible-change="onVisibleChange"
-      title="请选择数据">
-      <BaseIndexButtonGroup id="BaseIndexButtonGroup">
-        <template #left>
-          <BaseIndexButton ref="search" name="search" @click="initData()"></BaseIndexButton>
-          <BaseIndexButton :finalFlag="true" ref="clear" name="clear"
-                           @click="$refs['searchCond'].clearCondition()"></BaseIndexButton>
-        </template>
-      </BaseIndexButtonGroup>
-      <SearchCond id="search-cond-div" width="1000px" v-if="searchContent && searchContent.length > 0" ref="searchCond"
-                  v-model="searchCond" :type="this.$config.pageCode.goods"
-                  :setFlag="false" :searchContent="searchContent"></SearchCond>
-      <div style="width: 100%;height: 10px"></div>
-      <DkTabs ref="tabs" :options="multiple?tabsOptions:tabsOptionsOnly" @on-click="tabsClick"
-              @on-clear="clearSelected"></DkTabs>
-      <loading :loading="loading"></loading>
-      <!--      商品种类列表-->
-      <div :style="'height: ' + tableHeight + 'px'">
-        <Split v-model="split" :min="minSplit" v-if="methodsNameLeft" v-show="tabIndex === 0">
-          <!-- 列表部分左侧   左侧都默认是id和name的格式-->
-          <div slot="left" class="split-pane">
-            <DkTable
-              ref="leftTable"
-              name="table"
-              :data="leftList"
-              :height="tableHeight"
-              :page-flag="false"
-              :select-flag="false"
-              :choose-flag="false"
-              :show-setting-flag="false"
-              @current-change="handleCurrentChange">
-              <DkTableColumn :title="$t(leftColumnName)" :field="leftColumnName"
-                             width="auto" :filter="false" :sortable="false" :freeze="false"></DkTableColumn>
-            </DkTable>
-          </div>
-          <!--列表部分右侧-->
-          <div slot="right" class="split-pane">
-            <DkTable :primaryKey="selectKey" :primary-search-key="selectSearchKey" ref="table-select"
+      <!--查询按钮-->
+      <icon v-if="searchDetailFlag" type="iconfont iconfont icon-search" class="icon-class"
+            @click.stop="handleSearchClick"/>
+
+      <!--查询商品-->
+      <DkModal
+        ref="modal_search"
+        id="search-data-class"
+        class="search-data-class"
+        width="1050px"
+        v-model="showModal"
+        @modalOk="modalOk"
+        @on-visible-change="onVisibleChange"
+        title="请选择数据">
+        <BaseIndexButtonGroup id="BaseIndexButtonGroup">
+          <template #left>
+            <BaseIndexButton ref="search" name="search" @click="initData()"></BaseIndexButton>
+            <BaseIndexButton :finalFlag="true" ref="clear" name="clear"
+                             @click="$refs['searchCond'].clearCondition()"></BaseIndexButton>
+          </template>
+        </BaseIndexButtonGroup>
+        <SearchCond id="search-cond-div" width="1000px" v-if="searchContent && searchContent.length > 0"
+                    ref="searchCond"
+                    v-model="searchCond" :type="this.$config.pageCode.goods"
+                    :setFlag="false" :searchContent="searchContent"></SearchCond>
+        <div style="width: 100%;height: 10px"></div>
+        <DkTabs ref="tabs" :options="multiple?tabsOptions:tabsOptionsOnly" @on-click="tabsClick"
+                @on-clear="clearSelected"></DkTabs>
+        <loading :loading="loading"></loading>
+        <!--      商品种类列表-->
+        <div :style="'height: ' + tableHeight + 'px'">
+          <Split v-model="split" :min="minSplit" v-if="methodsNameLeft" v-show="tabIndex === 0">
+            <!-- 列表部分左侧   左侧都默认是id和name的格式-->
+            <div slot="left" class="split-pane">
+              <DkTable
+                ref="leftTable"
+                name="table"
+                :data="leftList"
+                :height="tableHeight"
+                :page-flag="false"
+                :select-flag="false"
+                :choose-flag="false"
+                :show-setting-flag="false"
+                @current-change="handleCurrentChange">
+                <DkTableColumn :title="$t(leftColumnName)" :field="leftColumnName"
+                               width="auto" :filter="false" :sortable="false" :freeze="false"></DkTableColumn>
+              </DkTable>
+            </div>
+            <!--列表部分右侧-->
+            <div slot="right" class="split-pane">
+              <DkTable :primaryKey="selectKey" :primary-search-key="selectSearchKey" ref="table-select"
+                       :id="'table-'+$options.name" name="table"
+                       :data="rightList"
+                       :height="tableHeight"
+                       :clearCheckFlag="false"
+                       :refreshSelect="false"
+                       :tree-flag="treeFlag"
+                       :otherSearchParam="otherSearchParam"
+                       :lazy="treeFlag?true:false"
+                       :combinedField="combinedField"
+                       :data-type="this.$config.tableSelectType.goods"
+                       :multiple="multiple"
+                       :choose-flag="multiple"
+                       :freeze="false"
+                       :show-setting-flag="false"
+                       @load-children="loadChildren"
+                       @pageChange="pageSizeChange" @current-change="onCurrentChange"
+                       @select-change="handleSelectChange"
+                       :link-click-checked="true">
+                <!--              <DkTableColumn type="seq" align="center" width="40" :exchangeField="exchangeField"-->
+                <!--                             @on-exchange="handleExchange"></DkTableColumn>-->
+                <DkTableColumn v-for="(item,index) in columnsDetail" :key="index" :field="item.field"
+                               :title="item.title" :tree-node="item.treeNode"
+                               :data-type="item.columnType"
+                               :width="item.width"
+                               :resize-flag="index === columnsDetail.length - 1"></DkTableColumn>
+              </DkTable>
+            </div>
+          </Split>
+          <!--不显示列表左侧的-->
+          <div v-if="!methodsNameLeft" v-show="tabIndex === 0">
+            <DkTable :primaryKey="selectKey" :primary-search-key="selectSearchKey" ref="table-select-only"
                      :id="'table-'+$options.name" name="table"
                      :data="rightList"
                      :height="tableHeight"
                      :clearCheckFlag="false"
                      :refreshSelect="false"
                      :tree-flag="treeFlag"
-                     :otherSearchParam="otherSearchParam"
                      :lazy="treeFlag?true:false"
                      :combinedField="combinedField"
-                     :data-type="this.$config.tableSelectType.goods"
                      :multiple="multiple"
                      :choose-flag="multiple"
                      :freeze="false"
                      :show-setting-flag="false"
-                     @load-children="loadChildren"
                      @pageChange="pageSizeChange" @current-change="onCurrentChange"
                      @select-change="handleSelectChange"
                      :link-click-checked="true">
-              <!--              <DkTableColumn type="seq" align="center" width="40" :exchangeField="exchangeField"-->
-              <!--                             @on-exchange="handleExchange"></DkTableColumn>-->
               <DkTableColumn v-for="(item,index) in columnsDetail" :key="index" :field="item.field"
-                             :title="item.title" :tree-node="item.treeNode"
                              :data-type="item.columnType"
                              :width="item.width"
-                             :resize-flag="index === columnsDetail.length - 1"></DkTableColumn>
+                             :title="item.title"></DkTableColumn>
             </DkTable>
           </div>
-        </Split>
-        <!--不显示列表左侧的-->
-        <div v-if="!methodsNameLeft" v-show="tabIndex === 0">
-          <DkTable :primaryKey="selectKey" :primary-search-key="selectSearchKey" ref="table-select-only"
-                   :id="'table-'+$options.name" name="table"
-                   :data="rightList"
-                   :height="tableHeight"
-                   :clearCheckFlag="false"
-                   :refreshSelect="false"
-                   :tree-flag="treeFlag"
-                   :lazy="treeFlag?true:false"
-                   :combinedField="combinedField"
-                   :multiple="multiple"
-                   :choose-flag="multiple"
-                   :freeze="false"
-                   :show-setting-flag="false"
-                   @pageChange="pageSizeChange" @current-change="onCurrentChange"
-                   @select-change="handleSelectChange"
-                   :link-click-checked="true">
-            <DkTableColumn v-for="(item,index) in columnsDetail" :key="index" :field="item.field"
-                           :data-type="item.columnType"
-                           :width="item.width"
-                           :title="item.title"></DkTableColumn>
-          </DkTable>
-        </div>
 
-        <!--已选列表-->
-        <div v-show="tabIndex === 1">
-          <DkTable :primaryKey="selectKey" ref="table-selected" :id="'table-'+$options.name" name="table"
-                   :data="selectedTable"
-                   :height="tableHeight"
-                   :selectFlag="false"
-                   :operateFlag="true"
-                   :tree-flag="treeFlag"
-                   :lazy="treeFlag?true:false"
-                   :children="children"
-                   :page-flag="false"
-                   :link-click-checked="true"
-                   :show-setting-flag="false"
-                   @pageChange="pageSizeChange"
-                   @current-change="onCurrentChange"
-                   @delRow="delItem"
-          >
-            <DkTableColumn v-for="(item,index) in columnsDetail" :key="index" :field="item.field"
-                           :title="item.title" :tree-node="item.treeNode"
-                           :resize-flag="index === columnsDetail.length - 1"></DkTableColumn>
+          <!--已选列表-->
+          <div v-show="tabIndex === 1">
+            <DkTable :primaryKey="selectKey" ref="table-selected" :id="'table-'+$options.name" name="table"
+                     :data="selectedTable"
+                     :height="tableHeight"
+                     :selectFlag="false"
+                     :operateFlag="true"
+                     :tree-flag="treeFlag"
+                     :lazy="treeFlag?true:false"
+                     :children="children"
+                     :page-flag="false"
+                     :link-click-checked="true"
+                     :show-setting-flag="false"
+                     @pageChange="pageSizeChange"
+                     @current-change="onCurrentChange"
+                     @delRow="delItem"
+            >
+              <DkTableColumn v-for="(item,index) in columnsDetail" :key="index" :field="item.field"
+                             :title="item.title" :tree-node="item.treeNode"
+                             :resize-flag="index === columnsDetail.length - 1"></DkTableColumn>
 
-          </DkTable>
+            </DkTable>
+          </div>
         </div>
-      </div>
-    </DkModal>
+      </DkModal>
 
-    <!--切换子品-->
-    <DkModal
-      width="900"
-      class="child-modal-class"
-      @modalOk="exchangeOk"
-      v-model="showChild"
-      title="请选择需要替换的商品">
-      <DkTable :primaryKey="selectKey" ref="table-exchange" :id="'table-'+$options.name" name="table"
-               :multiple="false"
-               :data="exchangeData"
-               size="mini" :link-click-checked="true" :page-flag="false">
-        <DkTableColumn v-for="(item,index) in columnsExchange" :key="index" :field="item.field"
-                       :title="item.title"></DkTableColumn>
-      </DkTable>
-    </DkModal>
-
-    <!--下拉菜单-->
-    <div class="api" slot="content" @click.stop="()=>{}">
-      <DkTable ref="select" name="table"
-               :height="200"
-               :data="selectList"
-               :filter="false"
-               :freeze="false"
-               :show-setting-flag="false"
-               :pageTotalFlag="false"
-               :choose-flag="false"
-               :link-click-checked="true"
-               :page-flag="false"
-               @cell-click="cellClick">
-        <DkTableColumn v-for="(cItem,cIndex) in columns" :key="cIndex" :field="cItem.field"
-                       :title="cItem.title?cItem.title:$t(cItem.field)" :resize-flag="cIndex == columns.length-1"></DkTableColumn>
-      </DkTable>
-      <div style="width: 100%;text-align: right;" v-if="searchDetailFlag">
-        <a @click="lookMore">{{ $t('lookMore') }}</a>
+      <!--    下拉菜单-->
+      <div class="api" slot="content" @click.stop="()=>{}">
+        <DkTable ref="select" name="table"
+                 :height="200"
+                 :data="selectList"
+                 :filter="false"
+                 :freeze="false"
+                 :show-setting-flag="false"
+                 :pageTotalFlag="false"
+                 :choose-flag="false"
+                 :link-click-checked="true"
+                 :page-flag="false"
+                 @cell-click="cellClick">
+          <DkTableColumn v-for="(cItem,cIndex) in columns" :key="cIndex" :field="cItem.field"
+                         :title="cItem.title?cItem.title:$t(cItem.field)"
+                         :resize-flag="cIndex == columns.length-1"></DkTableColumn>
+        </DkTable>
+        <div style="width: 100%;text-align: right;" v-if="searchDetailFlag">
+          <a @click="lookMore">{{ $t('lookMore') }}</a>
+        </div>
       </div>
-    </div>
-  </Poptip>
+    </Poptip>
+  </div>
 </template>
 
 <script>
-import {button as buttonList} from "@/locale/lang/zh-CN";
-import {request} from "@/api/base";
 
 export default {
   name: 'TableSelect',
-  inject: {
-    dkEditTable: {
-      type: Object,
-      default: null
-    }
-  },
   props: {
     showType: {
       type: Number,
@@ -232,7 +214,7 @@ export default {
       default: ''
     },
     // 标题(select有用)
-    title:{
+    title: {
       type: String,
       default: ''
     },
@@ -286,10 +268,16 @@ export default {
       type: Boolean,
       default: false,
     },
+    dkEditTable: {
+      type: Object,
+      default: null
+    }
   },
   data() {
-    let self = this
+    const vm = Window.vm
     return {
+      vm: vm,
+      existsFlag: true,
       loading: false,
       leftParams: {},  // 左侧的查询条件
       optionsData: [], //存options临时文件
@@ -365,7 +353,7 @@ export default {
       //页数信息
       pageInfo: {
         total: 0,
-        pageSize: this.$config.pageSize,
+        pageSize: 10,
         currentPage: 1
       },
       documentKeyDownContent: Object,
@@ -388,7 +376,7 @@ export default {
       this.selectList = n
       this.optionsData = n ? JSON.parse(JSON.stringify(n)) : []
       // 设置列表
-      if(n && n.length > 0){
+      if (n && n.length > 0) {
         this.setOptionsColumn();
       }
     },
@@ -613,7 +601,7 @@ export default {
      */
     lookMore() {
       // 关闭弹出框
-      if(this.dkEditTable){
+      if (this.dkEditTable) {
         this.dkEditTable.closeAllPop();
       }
       this.showModal = true;
@@ -869,10 +857,10 @@ export default {
       this.excute(this.service, this.service[this.methodsNameDetail], Object.assign(param, this.searchTable)).then(res => {
         if (res.code === this.$config.SUCCESS_CODE) {
           let arr = []
-          if(res.data && res.data.list){
+          if (res.data && res.data.list) {
             arr = [...res.data.list]
           }
-          if(!arr && res.data){
+          if (!arr && res.data) {
             arr = [...res.data]
           }
           // arr.forEach(it => {
@@ -1491,11 +1479,13 @@ export default {
         this.selectLabel = 'defectName'
         this.columns = [
           {field: 'defectCode', width: '120'},
-          {field: 'defectName', width: 'auto'},
+          {field: 'defectName', width: '120'},
+          {field: 'defectTypesName', width: 'auto'},
         ]
         this.columnsDetail = [
           {field: 'defectCode', width: '150'},
           {field: 'defectName', width: '150'},
+          {field: 'defectTypesName', width: '120'},
           {field: 'remarks', width: 'auto'},
         ]
       }
@@ -1548,12 +1538,12 @@ export default {
         this.selectKey = 'jobId'
         this.selectLabel = 'jobName'
         this.columns = [
-          {field: 'jobCode', title:this.$t('blameJobCode'), width: 'auto'},
-          {field: 'jobName', title:this.$t('blameJobName'), width: 'auto'},
+          {field: 'jobCode', title: this.$t('blameJobCode'), width: 'auto'},
+          {field: 'jobName', title: this.$t('blameJobName'), width: 'auto'},
         ]
         this.columnsDetail = [
-          {field: 'jobCode', title:this.$t('blameJobCode'), width: 'auto'},
-          {field: 'jobName', title:this.$t('blameJobName'), width: 'auto'},
+          {field: 'jobCode', title: this.$t('blameJobCode'), width: 'auto'},
+          {field: 'jobName', title: this.$t('blameJobName'), width: 'auto'},
         ]
       }
       //责任工号
@@ -1575,12 +1565,12 @@ export default {
         this.selectKey = 'userId'
         this.selectLabel = 'userName'
         this.columns = [
-          {field: 'userCode', title:this.$t('blameUserCode'), width: 'auto'},
-          {field: 'userName', title:this.$t('blameUserName'), width: 'auto'},
+          {field: 'userCode', title: this.$t('blameUserCode'), width: 'auto'},
+          {field: 'userName', title: this.$t('blameUserName'), width: 'auto'},
         ]
         this.columnsDetail = [
-          {field: 'userCode', title:this.$t('blameUserCode'), width: 'auto'},
-          {field: 'userName', title:this.$t('blameUserName'), width: 'auto'},
+          {field: 'userCode', title: this.$t('blameUserCode'), width: 'auto'},
+          {field: 'userName', title: this.$t('blameUserName'), width: 'auto'},
         ]
       }
     },
@@ -1591,9 +1581,9 @@ export default {
      */
     setOptionsColumn() {
       this.columns = []
-      this.columns.push({field: this.label, title: this.title?this.title: vm.$t(this.field)})
+      this.columns.push({field: this.label, title: this.title ? this.title : vm.$t(this.field)})
       this.selectList = this.options
-      this.optionsData = this.options ? JSON.parse(JSON.stringify(this.options)) : []
+      // this.optionsData = this.options ? JSON.parse(JSON.stringify(this.options)) : []
       this.popWidth = 300
     },
     /**
@@ -1607,6 +1597,9 @@ export default {
       }
     },
   },
+  beforeDestroy() {
+    this.existsFlag = null
+  },
   mounted() {
   },
   created() {

+ 4 - 0
src/components/main/components/side-menu/side-menu.vue

@@ -396,6 +396,10 @@ export default {
       })
     }
   },
+  beforeDestroy() {
+    clearTimeout(this.overTimer)
+    this.overTimer = null;
+  },
   mounted() {
     this.menuListData = [...this.menuList]
     // console.log('openedNames',this.openedNames)

+ 3 - 0
src/components/sub/xm-select/index.vue

@@ -317,6 +317,9 @@ export default {
       this.init()
     }
   },
+  beforeDestroy() {
+    this.select = null ;
+  },
   created() {
     this.setData(this.options);  // 设置数据
     this.$nextTick(() => {

+ 9 - 1
src/config/index.js

@@ -524,7 +524,15 @@ export default {
    * @date   : 2023/4/14 14:34
    */
   productFollowItemTab: {
-    productFollowItem: 'prodCarryoverItem',
+    productFollowItem: 'productFollowItem',
+  },
+  /**
+   * @desc   : 模具跟踪明细
+   * @author : 姜宁
+   * @date   : 2023/4/14 14:34
+   */
+  mouldFollowItemTab: {
+    mouldFollowItem: 'mouldFollowItem',
   },
   /**
    * @desc   : 生产工号

+ 11 - 0
src/locale/lang/zh-CN.js

@@ -255,6 +255,7 @@ export const formTitle = {
   'product_draw': '画布',
   'pic_list': '图片列表',
   'product_follow_item':'产品跟踪明细',
+  'mould_follow_item':'模具跟踪明细',
 }
 
 /**
@@ -913,6 +914,9 @@ export const columns = {
   packagingBarcode:'包装码',
   processName:'工序名称',
   operatingInstructions:'操作说明',
+  opnKindName:'操作类型',
+  mouldItemCode:'模具序号',
+
 
   // 自定义报表
   reportName: '报表名称',
@@ -1081,6 +1085,7 @@ export const messages = {
   Q_016: '是否对选择数据进行卸载具操作?',
   Q_017: '是否报损未选择的盘点模具?',
   Q_018: '确定要切换用户吗?',
+  Q_019: '暂无此功能权限,请联系管理员',
 }
 
 /**
@@ -1468,6 +1473,9 @@ export const appColumns = {
   appCurrentNode: '当前工序',
   appLableInput: '请输入{param}',
   appPrint: '打印',
+  appVehicleBarcode: '载具条码',
+  appWuliaoBarcode: '物料条码',
+  appSheBeiBarcode: '设备条码',
 }
 /**
  * @desc   : app按钮
@@ -1534,6 +1542,9 @@ export const appOthers = {
   appCheckBarcode: '请输入条码',
   appCheckBarcodeIsCheck: '请验证产品条码',
   appMoldingBathSearchPlaceholder: '请输入成型批次',
+  appBarcode: '条码',
+  appSelectWords: '请验证{search-name}',
+  appNoPermission: '暂无此功能权限,请联系管理员',
   /**
    * @desc   : 上卸模 函数名称
    * @author : 于继渤

+ 2 - 2
src/main.js

@@ -194,9 +194,9 @@ Vue.component('DkTable', DkTable)
 import DkTree from '_c/base/dk-tree'
 
 Vue.component('DkTree', DkTree)
-import TableSelect from '_c/business/table-select'
 
-Vue.component('TableSelect', TableSelect)
+// import TableSelect from '_c/business/table-select'
+// Vue.component('TableSelect', TableSelect)
 
 import PrependTransparent from '_c/base/prepend-transparent'
 

+ 9 - 1
src/mixins/appform.js

@@ -192,7 +192,15 @@ export const appFormMixin = {
                 }
                 // 没有打卡 特殊处理 230324
                 if (this.$config.processTypeException.CHKCAR008 == t.exception) {
-                  this.$router.push({name: 'app-ws-clock-user'})
+                    //校验权限
+                  if(this.$libaray.checkButtonHasRight('ws-clock-user',this)){
+                    this.$router.push({name: 'app-ws-clock-user'})
+                  }else{
+                    this.$appDialog.alert({
+                      message: this.$t('appNoPermission'),
+                    })
+                  }
+                 
                 }
               });
             }

+ 8 - 6
src/mixins/form.js

@@ -416,14 +416,16 @@ export const formMixin = {
     //监听form页面滚动
     this.$nextTick(() => {
       let self = this
-      this.$el.addEventListener('scroll', (e) => {
-        self.scroll(e)
-      })
-      this.$el.addEventListener('resize', (e) => {
-        self.scroll(e)
-      })
+      this.$el.addEventListener('scroll', self.scroll)
+      this.$el.addEventListener('resize', self.scroll)
     })
   },
+  beforeDestroy() {
+    if(this.$el){
+      this.$el.removeEventListener('scroll', this.scroll)
+      this.$el.removeEventListener('resize', this.scroll)
+    }
+  },
   mounted() {
     this.focus();   // 光标聚焦到第一个组件
   },

+ 80 - 19
src/mixins/index.js

@@ -20,6 +20,7 @@ export const indexMixin = {
   data() {
     return {
       loading: false,
+      existsFlag:true,
       searchButtonName: null, // 查询按钮的权限名称
       initSearchFlag: true, // 初始查询标识
       formType: null,// 如果是同一个路由,要记录类型
@@ -51,6 +52,8 @@ export const indexMixin = {
       exportCondition: null,// 额外导出条件
       flagSameRouteFlag: false,// 控制相同页面多开的问题
       routeNameByExport: null, // 路由的名称 导出时用
+      _tableRefList: [],// 给表格右键使用(销毁使用)
+      _buttonList: [],// 给按钮使用(销毁使用)
       modalParams: {      // 打开modal传入的参数
         modalRef: 'modal_editAdd',
         button: 'add',
@@ -225,20 +228,20 @@ export const indexMixin = {
       let params = null;
       // 进行分页查询才会进行
       if (this.pageFlag) {
-        if(pageInfo && pageInfo.currentPage){
-          if(pageInfo.currentPage === 1){
+        if (pageInfo && pageInfo.currentPage) {
+          if (pageInfo.currentPage === 1) {
             //查询条件
             this.setCondition(this.searchCond)
             // 设置查询条件
             params = this._setSearchParams();
-          }else{
+          } else {
             params = {...this.searchParams}
           }
           this.pageInfo.currentPage = pageInfo.currentPage;
           this.pageInfo.pageSize = pageInfo.pageSize;
           params.currentPage = pageInfo.currentPage;
           params.pageSize = pageInfo.pageSize;
-        }else{
+        } else {
           if (this.pageInfo) {
             //查询条件
             this.setCondition(this.searchCond)
@@ -248,7 +251,7 @@ export const indexMixin = {
             params.pageSize = this.pageInfo.pageSize
           }
         }
-      }else{
+      } else {
         //查询条件
         this.setCondition(this.searchCond)
         // 设置查询条件
@@ -618,9 +621,9 @@ export const indexMixin = {
           code = 0
         }
         // 一秒钟失效,避免因为按了alt+tab之后再回来,按其他什么英文字母都不好使了的问题
-        setTimeout(()=>{
+        setTimeout(() => {
           code = 0
-        },1000)
+        }, 1000)
       }
     },
     /**
@@ -824,6 +827,25 @@ export const indexMixin = {
       }
     },
     /**
+     * @desc   : 点击按钮,供监听使用
+     * @author : 周兴
+     * @date   : 2023/4/13 17:08
+     */
+    buttonClick(e) {
+      if (this._buttonList && this._buttonList.length > 0) {
+        console.log('bb', this._buttonList, e,e.target._params)
+        this._buttonList.forEach(it => {
+          if (!it.button.disabledFlag) {
+            it.button.disabledFlag = true;
+            this.open(it.obj, this.tableRef, it.button.isMustChooseFlag)
+            setTimeout(() => {
+              it.button.disabledFlag = false;
+            }, 1000)
+          }
+        })
+      }
+    },
+    /**
      * @desc   : 创建时加载的方法
      * @author : 周兴
      * @date   : 2023/2/8 11:50
@@ -841,9 +863,9 @@ export const indexMixin = {
       //监听form页面滚动
       _this.$nextTick(() => {
         let self = this
-        _this.$el.addEventListener('scroll', (e) => {
-          self.scroll(e)
-        })
+        // _this.$el.addEventListener('scroll', (e) => {
+        //   self.scroll(e)
+        // })
       })
     },
     /**
@@ -871,14 +893,16 @@ export const indexMixin = {
       clearTimeout(this.overTimer)
       let _this = this
       //监听窗口变化
-      window.addEventListener('resize', function (e) {
-        _this.resizeTable()
-      })
+      // window.addEventListener('resize', function (e) {
+      //   _this.resizeTable()
+      // })
       // 初始化页面数据
       if (_this.mountedInit) {
         _this.mountedInit();
       }
       // 给dk-table列表注册cellMenu事件
+      _this._buttonList = []
+      _this._tableRefList = []
       if (_this.$refs) {
         let arr = Object.keys(_this.$refs);
         if (arr && arr.length > 0) {
@@ -886,9 +910,8 @@ export const indexMixin = {
             if (_this.$refs[it] && _this.$refs[it].$vnode && _this.$refs[it].$vnode.tag &&
               _this.$refs[it].$vnode.tag.endsWith('DkTable')) {
               // 说明是dk-table列表 增加右键事件 为了导出做准备
-              _this.$refs[it].$el.addEventListener('mousedown', function (e) {
-                _this.cellMenu(e, it);
-              });
+              _this._tableRefList.push(_this.$refs[it].$el)
+              _this.$refs[it].$el.addEventListener('mousedown', _this.cellMenu);
               // 在点开设置页面,为设置做准备
               if (_this.$refs[it].showSettingFlag) {
                 if (_this.$refs[it].$refs['setting']) {
@@ -908,15 +931,32 @@ export const indexMixin = {
                 if (buttonRef === 'search') {
                   obj = _this.$config.routeUrl[buttonRef]
                 }
-                _this.$refs[it].$vnode.componentInstance.$el.addEventListener('click', function (e) {
+                // 记录按钮,用于销毁
+                _this._buttonList.push({button: _this.$refs[it].$vnode.componentInstance, obj: obj});
+                // _this.$refs[it].$vnode.componentInstance.$el.addEventListener('click', _this.buttonClick, false);
+                const listener = new WeakMap()
+                let ele = _this.$refs[it].$vnode.componentInstance.$el;
+                listener.set(ele, function (e) {
                   if (!_this.$refs[it].$vnode.componentInstance.disabledFlag) {
                     _this.$refs[it].$vnode.componentInstance.disabledFlag = true;
                     _this.open(obj, _this.tableRef, _this.$refs[it].$vnode.componentInstance.isMustChooseFlag)
                     setTimeout(() => {
-                      _this.$refs[it].$vnode.componentInstance.disabledFlag = false;
+                      if (_this.$refs[it]) {
+                        _this.$refs[it].$vnode.componentInstance.disabledFlag = false;
+                      }
                     }, 1000)
                   }
-                });
+                })
+                ele.addEventListener('click', listener.get(ele), false)
+                // _this.$refs[it].$vnode.componentInstance.$el.addEventListener('click', function (e) {
+                //   if (!_this.$refs[it].$vnode.componentInstance.disabledFlag) {
+                //     _this.$refs[it].$vnode.componentInstance.disabledFlag = true;
+                //     _this.open(obj, _this.tableRef, _this.$refs[it].$vnode.componentInstance.isMustChooseFlag)
+                //     setTimeout(() => {
+                //       _this.$refs[it].$vnode.componentInstance.disabledFlag = false;
+                //     }, 1000)
+                //   }
+                // });
               }
             }
           })
@@ -949,6 +989,27 @@ export const indexMixin = {
     document.onkeydown = null;
   },
   beforeDestroy() {
+    clearTimeout(this.overTimer)
+    this.overTimer = null;
+    // 移除dk-table 监听
+    let _this = this
+    try{
+      if (_this._tableRefList && _this._tableRefList.length > 0) {
+        _this._tableRefList.forEach(it => {
+          it.removeEventListener('mousedown', _this.cellMenu)
+        })
+        _this._tableRefList = []
+      }
+      // 移除button的监听
+      if (_this._buttonList && _this._buttonList) {
+        _this._buttonList.forEach(it => {
+          it.removeEventListener('click', _this._buttonList)
+        })
+        _this._buttonList = []
+      }
+    }catch (e){
+    }
+    _this.existsFlag = null;
   },
   created() {
     this._createdInit();  // 调用创建时的方法

+ 2 - 3
src/store/index.js

@@ -34,11 +34,11 @@ export default new Vuex.Store({
     },
     process:{       //流程图
       nodeModal:{   //节点弹窗
-        display:false,
+        display:null,
         saveLoading:false
       },
       edgeModal:{   //连线弹窗
-        display:false,
+        display:null,
         saveLoading:false
       },
       currentNodeId:undefined,//当前点击节点id
@@ -63,7 +63,6 @@ export default new Vuex.Store({
       status.flowPermission1 = payload
     },
     setApprover(status, payload) {
-      console.log('setApprover',status, payload)
       status.approverDrawer = payload
     },
     setApproverConfig(status, payload) {

+ 1 - 1
src/store/module/user.js

@@ -231,7 +231,7 @@ export default {
       // 处理数据
       menu = handleMenu(menu);
       let arr = convertToChildrenMain(menu);
-      // console.log('menu', menu, arr)
+      console.log('menu', menu, arr)
       commit('setMenuList', arr.copy())
       sessionStorage.setItem('route', JSON.stringify(arr))
       router.addRoutes(filterAsyncRouter(arr))

+ 109 - 7
src/view-app/app/prod-management/barcode-printing/index.vue

@@ -5,6 +5,16 @@
     <!-- 顶部导航栏 -->
     <dk-app-nav-bar :title="title" @click-left="onClickLeft"></dk-app-nav-bar>
 
+
+    <van-tabs v-model="active" @click="onClick">
+      <van-tab :title="$t('appProductBarcode')"></van-tab>
+      <van-tab :title="$t('appMouldUniqueCode')"></van-tab>
+      <van-tab :title="$t('appVehicleBarcode')"></van-tab>
+      <van-tab :title="$t('appWuliaoBarcode')"></van-tab>
+      <van-tab :title="$t('appSheBeiBarcode')"></van-tab>
+
+    </van-tabs>
+
     <!-- 模板分类 -->
     <dk-app-field :label="$t('appPrintTemplate')" v-model="formData.printLayoutName" :readonly="true"
       @click="openDropdown('labelPrintLayout')" placeholderType="choose" is-link arrow-direction="down" />
@@ -12,9 +22,18 @@
     <dk-app-field v-model="formData.printerName" :label="$t('appPrinter')" :readonly="true"
       @click="openDropdown('labelPrinter')" placeholderType="choose" is-link arrow-direction="down" />
 
-    <!--    产品条码-->
-    <dk-app-field v-model="formData.mouldKindName" :label="$t('appProductBarcode')"
-      @changeBarCode="queryBarCode"></dk-app-field>
+    <!--    条码-->
+    <dk-app-field ref="barcode" v-model="formData.barcode" :placeholderTxtFlag="true" :placeholderFlag="false"
+      :placeholderTxt="'请输入' + barcodeLabel" :label="barcodeLabel" @changeBarCode="queryBarCode"></dk-app-field>
+
+
+
+
+
+
+
+
+
 
     <!-- 打印 -->
     <div class="app_save_bottom-class">
@@ -61,12 +80,16 @@ export default {
     let self = this
     return {
       title: '',
+      active: 0,
+      barcodeLabel: '',
+      titleFlagNum: null,
       loading: false,
       workStationAllFlag: false,
       labelPrinterFlag: false, //打印机
       labelPrintLayoutFlag: false, //打印模板
       ids: [],
       formData: {
+        id: null,
         printerId: null, //打印机
         printerName: '',
         printLayoutId: null, //打印机模板
@@ -164,7 +187,23 @@ export default {
      * @date   : 2023/2/10 11:46
      */
     queryBarCode() {
-
+      let params = {
+        code: this.formData.barcode,
+        ftyId: this.$store.state.user.ftyId,
+        dataSourceCode: this.dataSourceCode,
+      }
+      this.excute(this.$service.appCommonService, this.$service.appCommonService.getPrintingData, params, '', true).then(res => {
+        if (res.code === this.$config.SUCCESS_CODE) {
+          if (res.data && res.data.id) {
+            this.formData.id = res.data.id
+          } else {
+            this.$appDialog.alert({ message: this.$t('W_002', { 'param': this.$t('appBarcode') }) }).then(() => {
+              this.formData.barcode = ''
+              this.setFocus('barcode')
+            });
+          }
+        }
+      })
     },
 
     // endregion
@@ -184,6 +223,12 @@ export default {
      * @date   : 2023/2/10 11:46
      */
     validData(flag) {
+      if (!this.formData.id) {
+        this.appToastFail(this.$t('appSelectWords', { 'search-name': this.barcodeLabel }))
+        this.setFocus('barcode')
+        return false;
+      }
+
       if (!this.formData.printerId) { //打印机
         this.appToastFail(this.$t('selectWords', { 'search-name': this.$t('appPrinter') }))
         return false;
@@ -196,19 +241,76 @@ export default {
       return true;
     },
     /**
-     * @desc   : 保存方法
+     * @desc   : 打印方法
      * @author : 于继渤
      * @date   : 2023/2/10 11:46
      */
     saveData() {
-      //  return this.excute(this.$service.appMouldService, this.$service.appMouldService.insert, this.params);
+      return this.excute(this.$service.modelCarrierService,
+        this.$service.modelCarrierService.print + '/' + this.formData.printLayoutId + '/' + this.formData.printerId + '/' + this.formData.id, {});
     },
+    /**
+     * @desc   : 清除
+     * @author : 于继渤
+     * @date   : 2023/2/10 11:46
+     */
+    clear() {
+      this.formData = {
+        id: null,
+        printerId: null, //打印机
+        printerName: '',
+        printLayoutId: null, //打印机模板
+        printLayoutName: '',
+      }
+    },
+    onClick(e) {
+      console.log(e)
+      if (e === 0) {
+        this.barcodeLabel = this.$t('appProductBarcode')
+        this.dataSourceCode = 'product'
+      }
+      if (e === 1) {
+        this.barcodeLabel = this.$t('appMouldUniqueCode')
+       
+      }
+      if (e === 2) {
+        this.barcodeLabel = this.$t('appVehicleBarcode')
+       
+      }
+
+      if (e === 3) {
+        this.barcodeLabel = this.$t('appWuliaoBarcode')
+     
+      }
+      if (e === 4) {
+        this.barcodeLabel = this.$t('appSheBeiBarcode')
+      
+      }
+      this.formData = {
+        id: null,
+        printerId: null, //打印机
+        printerName: '',
+        printLayoutId: null, //打印机模板
+        printLayoutName: '',
+      }
+      //焦点输入框
+      this.setFocus('barcode')
+    },
+
+
+
     // endregion
 
   },
+  mounted(){
+    this.setFocus('barcode')
+  },
   created() {
     //设置标题
-    this.title = '' + this.$t('appStationPrinterSettingsTitle')
+    this.title = this.$t('appStationPrinterSettingsTitle')
+    this.barcodeLabel = this.$t('appProductBarcode')
+    this.dataSourceCode = 'product'
+   
   },
 
 

+ 71 - 38
src/view-app/app/report-management/product-tracking/index.vue

@@ -2,18 +2,25 @@
   <!--  产品跟踪-->
   <div class="main-app-form">
     <!-- 顶部导航栏 -->
-    <dk-app-nav-bar :title="moldingMoldManagementActiveTitle"  @click-left="onClickLeft"></dk-app-nav-bar>
-    <!-- 模具条码 -->
+    <dk-app-nav-bar :title="moldingMoldManagementActiveTitle" @click-left="onClickLeft"></dk-app-nav-bar>
+    <!-- 产品条码 -->
     <dk-app-field
-      ref="moldCode"
-      v-model="formData.moldCode"
-      :label="$t('appUniqueCode')"
+      ref="pdtUniqueCode"
+      v-model="formData.pdtUniqueCode"
+      :label="$t('appProductCode')"
       @changeBarCode="scanBarCode"
       placeholderType="scan"
     />
+
+    <!-- 产品条码 -->
+    <dk-app-field :readonly="true" :label="$t('appProductCode')" :placeholder-flag="false"
+                  v-model="formItemData.pdtUniqueCode"></dk-app-field>
+    <!-- 产品条码 -->
+    <dk-app-field :readonly="true" :label="$t('appProductUniqueCode')" :placeholder-flag="false"
+                  v-model="formItemData.modelCode"></dk-app-field>
     <!--    列表-->
     <div ref="scrollTable" class="main-app-table">
-      <dk-app-table :rows="rows" :tableRowData="tableRowData" >
+      <dk-app-table :rows="rows" :tableRowData="tableRowData">
       </dk-app-table>
     </div>
     <!-- 加载页面   -->
@@ -34,19 +41,20 @@ export default {
       tableRowData: [],                               //列表数据
       //列表数据列属性
       rows: [
-        {title: this.$t('appUniqueCode'), name: 'uniqueCode'},
-        {title: this.$t('appMouldKind'), name: 'mouldKindName'},
-        {title: this.$t('appProductModel'), name: 'modelName'},
-        {title: this.$t('appOutputUnusedNum'), name: 'unusedNum'},
-        {title: this.$t('appMoldingCode'), name: 'moldlineCode'},
-        {title: this.$t('appdateOfManufacture'), name: 'makeDate'},
-        {title: this.$t('appProductionJobNumber'), name: 'makeUserName'},
+        {title: this.$t('flowName'), name: 'flowName'},
+        {title: this.$t('processName'), name: 'nodeName'},
+        {title: this.$t('prodUserCode'), name: 'prodUserCode'},
+        {title: this.$t('operationTime'), name: 'opnTime'},
+        {title: this.$t('opCreateUserCode'), name: 'opCreateUserCode'},
+        {title: this.$t('opnUserName'), name: 'opnUserName'},
       ],
       formData: {
         ftyId: this.$store.state.user.ftyId,          //工厂
-        moldCode: '',                                 //模具条码
+        pdtUniqueCode: '',                            //条码
         operatingInstructions: '',                    //操作说明
+
       },
+      formItemData: {}
     }
   },
   methods: {
@@ -60,34 +68,56 @@ export default {
       // 设置查询条件
       let params = this.setSearchParams();
       // 查询模具信息     -报损和撤销保存的验证
-      this.excute(this.$service.appMouldService, this.$service.appMouldService.selectLossReporting, params)
+      this.excute(this.$service.detailReportService, this.$service.detailReportService.getProductFollowReportByPage, params)
         .then(res => {
-          // 模具查询后的处理   -报损和撤销保存的验证
-          this.selectLossReporting(res)
+          this.formData.pdtUniqueCode = ""
+          this.tableRowData = []
+          //成功
+          if (res.code === this.$config.SUCCESS_CODE) {
+            if (res.data.list == null || res.data.list.length == 0) {
+              // 如果不成功就提示错误信息
+              this.$appDialog.alert({message: this.$t('W_002', {'param': this.$t('appProductCode')}),}).then(() => {
+                this.$refs.pdtUniqueCode.$refs.input.focus()
+              });
+            } else {
+              this.formItemData = res.data.list[0]
+              this.getProductFollowItem()
+            }
+          }
         })
     },
 
     /**
-     * @desc   : 模具查询后的处理 -报损和撤销保存的验证
+     * @desc   : 获取生产数据明细
      * @author : 姜永辉
-     * @date   : 2023/2/10 11:32
+     * @date   : 2023/4/14 14:16
      */
-    selectLossReporting(res) {
-      this.loading = false
-      this.formData.moldCode = ""
-      this.tableRowData = []
-      //成功
-      if (res.code === this.$config.SUCCESS_CODE) {
-        let rowData = res.data
-        if (res.data == null) {
-          // 如果不成功就提示错误信息
-          this.$appDialog.alert({message: this.$t('W_002', {'param': this.$t('appUniqueCode')}),}).then(() => {
-            this.$refs.moldCode.$refs.input.focus()
-          });
-        } else {
-          this.tableRowData.push(rowData)
-        }
+    getProductFollowItem() {
+      let params = {
+        ftyId: this.$store.state.user.ftyId,
+        pdtUniqueId: this.formItemData.pdtUniqueId,
+        currentPage: 1,
+        pageSize: 10000,
       }
+      this.excute(this.$service.detailReportService, this.$service.detailReportService.getProductFollowItemReportByPage, params)
+        .then(res => {
+          //成功
+          if (res.code === this.$config.SUCCESS_CODE) {
+            let rowData = res.data.list
+            console.log(res.data)
+            if (rowData == null || rowData.length == 0) {
+              // 如果不成功就提示错误信息
+              this.$appDialog.alert({message: this.$t('W_002', {'param': this.$t('appProductCode')}),}).then(() => {
+                this.$refs.pdtUniqueCode.$refs.input.focus()
+              });
+            } else {
+              rowData.forEach(it=>{
+                it.operationTime = new Date(it.operationTime).format('yyyy-MM-dd hh:mm:ss')
+              })
+              this.tableRowData = rowData
+            }
+          }
+        })
     },
 
     /**
@@ -96,7 +126,7 @@ export default {
      * @date   : 2023/3/2 17:30
      */
     handleExcuteAlert(type) {
-      this.$refs.moldCode.$refs.input.focus()
+      this.$refs.pdtUniqueCode.$refs.input.focus()
     },
 
     /**
@@ -106,16 +136,19 @@ export default {
      */
     setSearchParams() {
       let params = {}
-      params.uniqueCode = this.formData.moldCode;
+      params.pdtUniqueCode = this.formData.pdtUniqueCode;
+      params.lan = "zh_CN"
       params.ftyId = this.$store.state.user.ftyId
+      params.currentPage = 1
+      params.pageSize = 10000
       return params
     },
   },
   mounted() {
     // 因为是封装的组件所以是两层
-    this.$refs.moldCode.$refs.input.focus()
+    this.$refs.pdtUniqueCode.$refs.input.focus()
     // 设置滚动的位置和高度
-    this.setAppTableHeight()
+    this.setAppTableHeight(0)
   },
   created(e) {
   }

+ 1 - 1
src/view/core/factory/index.vue

@@ -53,7 +53,7 @@
       <DkForm ref="formInline" v-model="formData" :col-count="1">
         <!--  工厂编码  -->
         <DkFormItem prop="ftyCode" :required="true">
-          <InputNumberPop v-model="formData.ftyCode" ref="ftyCode"/>
+          <InputPop v-model="formData.ftyCode" ref="ftyCode"/>
         </DkFormItem>
         <!--  工厂名称  -->
         <DkFormItem prop="ftyName" :required="true">

+ 1 - 1
src/view/mst/molding/form.vue

@@ -99,7 +99,7 @@
           </DkFormItem>
           <!--  日成型标准次数(多批次标识=false时,为1;true时>1;成型日计划时用)  -->
           <DkFormItem prop="stdBatcheNum">
-            <InputNumberPop v-model="formData.stdBatcheNum" :min="1" max="99999" :readonly="!formData.flgCanBatches"/>
+            <InputNumberPop v-model="formData.stdBatcheNum" :min="1" :max="99999" :readonly="!formData.flgCanBatches"/>
           </DkFormItem>
           <!--   备注     -->
           <DkFormItem prop="remarks" span="24">

+ 17 - 1
src/view/mst/mould/index.vue

@@ -17,6 +17,8 @@
         <BaseIndexButton right-button="mould-scrap" ref="scrap" name="scrap"/>
         <!--    撤销    -->
         <BaseIndexButton right-button="mould-reverse" ref="reverse" name="reverse"/>
+        <!--    打印    -->
+        <BaseIndexButton ref="print" name="print"></BaseIndexButton>
       </template>
       <template #right>
         <BaseIndexButton right-button="mould-add" ref="add" name="add"></BaseIndexButton>
@@ -162,16 +164,23 @@
           </DkSplit>
       </div>
     </DkModal>
+
+    <PrintModal ref="printModal" :label-kind="$config.modelKind.modelMould"
+                :service="$service.modelMouldService"
+                :id="($refs['table-select'] && $refs['table-select'].batchRows && $refs['table-select'].batchRows[0]) ?
+                $refs['table-select'].batchRows[0].modelId:null"/>
   </div>
 </template>
 
 <script>
 
 import {indexMixin} from '@/mixins'
+import PrintModal from '_c/business/print/modal'
 
 export default {
   name: 'mould',
   mixins: [indexMixin],
+  components: {PrintModal},
   data() {
     let self = this
     return {
@@ -744,7 +753,14 @@ export default {
         }
       })
     },
-
+    /**
+     * @desc   : 选择模板、打印机
+     * @author : 洪旭东
+     * @date   : 2023-04-10 13:45
+     */
+    print(){
+      this.$refs.printModal.showChooseTemplate = true
+    },
     // endregion
   },
   created() {

+ 19 - 12
src/view/pdm/data-collection/climbKiln-add.vue

@@ -188,19 +188,26 @@
             //没有打卡
             else if (res.code !== this.$config.SUCCESS_CODE &&
               this.$config.processTypeException.CHKCAR008 == res.exception) {
-              this.$IBMessage({
-                  content: this.$t('Q_013'),
-                  title: this.$t('systemQuestion'),
-                },
-                {
-                  ok: () => {
-                    this.onProdUserCodeFlag = false
-                    this.$router.push('/pdm/ws-clock/clock-user')
+              if (this.$libaray.checkButtonHasRight('ws-clock-user',this)) {
+                this.$IBMessage({
+                    content: this.$t('Q_013'),
+                    title: this.$t('systemQuestion'),
                   },
-                  cancel: () => {
-                    this.closeTag(this.$route)
-                  }
-                })
+                  {
+                    ok: () => {
+                      this.onProdUserCodeFlag = false
+                      this.$router.push('/pdm/ws-clock/clock-user')
+                    },
+                    cancel: () => {
+                      this.closeTag(this.$route)
+                    }
+                  })
+              } else {
+                this.$Modal.warning({
+                  title: this.$t('systemInfo'),
+                  content: this.$t('Q_019')
+                });
+              }
             } else {
               this.$Message.error(res.message)
             }

+ 19 - 12
src/view/pdm/data-collection/finishCheck-add.vue

@@ -331,19 +331,26 @@
             //没有打卡
             else if (res.code !== this.$config.SUCCESS_CODE &&
               this.$config.processTypeException.CHKCAR008 == res.exception) {
-              this.$IBMessage({
-                  content: this.$t('Q_013'),
-                  title: this.$t('systemQuestion'),
-                },
-                {
-                  ok: () => {
-                    this.onProdUserCodeFlag = false
-                    this.$router.push('/pdm/ws-clock/clock-user')
+              if (this.$libaray.checkButtonHasRight('ws-clock-user',this)) {
+                this.$IBMessage({
+                    content: this.$t('Q_013'),
+                    title: this.$t('systemQuestion'),
                   },
-                  cancel: () => {
-                    this.closeTag(this.$route)
-                  }
-                })
+                  {
+                    ok: () => {
+                      this.onProdUserCodeFlag = false
+                      this.$router.push('/pdm/ws-clock/clock-user')
+                    },
+                    cancel: () => {
+                      this.closeTag(this.$route)
+                    }
+                  })
+              } else {
+                this.$Modal.warning({
+                  title: this.$t('systemInfo'),
+                  content: this.$t('Q_019')
+                });
+              }
             } else {
               this.$Message.error(res.message)
             }

+ 19 - 12
src/view/pdm/data-collection/halfCheck-add.vue

@@ -331,19 +331,26 @@
             //没有打卡
             else if (res.code !== this.$config.SUCCESS_CODE &&
               this.$config.processTypeException.CHKCAR008 == res.exception) {
-              this.$IBMessage({
-                  content: this.$t('Q_013'),
-                  title: this.$t('systemQuestion'),
-                },
-                {
-                  ok: () => {
-                    this.onProdUserCodeFlag = false
-                    this.$router.push('/pdm/ws-clock/clock-user')
+              if (this.$libaray.checkButtonHasRight('ws-clock-user',this)) {
+                this.$IBMessage({
+                    content: this.$t('Q_013'),
+                    title: this.$t('systemQuestion'),
                   },
-                  cancel: () => {
-                    this.closeTag(this.$route)
-                  }
-                })
+                  {
+                    ok: () => {
+                      this.onProdUserCodeFlag = false
+                      this.$router.push('/pdm/ws-clock/clock-user')
+                    },
+                    cancel: () => {
+                      this.closeTag(this.$route)
+                    }
+                  })
+              } else {
+                this.$Modal.warning({
+                  title: this.$t('systemInfo'),
+                  content: this.$t('Q_019')
+                });
+              }
             } else {
               this.$Message.error(res.message)
             }

+ 19 - 12
src/view/pdm/data-collection/inKiln-add.vue

@@ -240,19 +240,26 @@
             //没有打卡
             else if (res.code !== this.$config.SUCCESS_CODE &&
               this.$config.processTypeException.CHKCAR008 == res.exception) {
-              this.$IBMessage({
-                  content: this.$t('Q_013'),
-                  title: this.$t('systemQuestion'),
-                },
-                {
-                  ok: () => {
-                    this.onProdUserCodeFlag = false
-                    this.$router.push('/pdm/ws-clock/clock-user')
+              if (this.$libaray.checkButtonHasRight('ws-clock-user',this)) {
+                this.$IBMessage({
+                    content: this.$t('Q_013'),
+                    title: this.$t('systemQuestion'),
                   },
-                  cancel: () => {
-                    this.closeTag(this.$route)
-                  }
-                })
+                  {
+                    ok: () => {
+                      this.onProdUserCodeFlag = false
+                      this.$router.push('/pdm/ws-clock/clock-user')
+                    },
+                    cancel: () => {
+                      this.closeTag(this.$route)
+                    }
+                  })
+              } else {
+                this.$Modal.warning({
+                  title: this.$t('systemInfo'),
+                  content: this.$t('Q_019')
+                });
+              }
             } else {
               this.$Message.error(res.message)
             }

+ 19 - 12
src/view/pdm/data-collection/outKiln-add.vue

@@ -238,19 +238,26 @@
             //没有打卡
             else if (res.code !== this.$config.SUCCESS_CODE &&
               this.$config.processTypeException.CHKCAR008 == res.exception) {
-              this.$IBMessage({
-                  content: this.$t('Q_013'),
-                  title: this.$t('systemQuestion'),
-                },
-                {
-                  ok: () => {
-                    this.onProdUserCodeFlag = false
-                    this.$router.push('/pdm/ws-clock/clock-user')
+              if (this.$libaray.checkButtonHasRight('ws-clock-user',this)) {
+                this.$IBMessage({
+                    content: this.$t('Q_013'),
+                    title: this.$t('systemQuestion'),
                   },
-                  cancel: () => {
-                    this.closeTag(this.$route)
-                  }
-                })
+                  {
+                    ok: () => {
+                      this.onProdUserCodeFlag = false
+                      this.$router.push('/pdm/ws-clock/clock-user')
+                    },
+                    cancel: () => {
+                      this.closeTag(this.$route)
+                    }
+                  })
+              } else {
+                this.$Modal.warning({
+                  title: this.$t('systemInfo'),
+                  content: this.$t('Q_019')
+                });
+              }
             } else {
               this.$Message.error(res.message)
             }

+ 19 - 12
src/view/pdm/data-collection/recover-add.vue

@@ -134,19 +134,26 @@
             //没有打卡
             else if (res.code !== this.$config.SUCCESS_CODE &&
               this.$config.processTypeException.CHKCAR008 == res.exception) {
-              this.$IBMessage({
-                  content: this.$t('Q_013'),
-                  title: this.$t('systemQuestion'),
-                },
-                {
-                  ok: () => {
-                    this.onProdUserCodeFlag = false
-                    this.$router.push('/pdm/ws-clock/clock-user')
+              if (this.$libaray.checkButtonHasRight('ws-clock-user',this)) {
+                this.$IBMessage({
+                    content: this.$t('Q_013'),
+                    title: this.$t('systemQuestion'),
                   },
-                  cancel: () => {
-                    this.closeTag(this.$route)
-                  }
-                })
+                  {
+                    ok: () => {
+                      this.onProdUserCodeFlag = false
+                      this.$router.push('/pdm/ws-clock/clock-user')
+                    },
+                    cancel: () => {
+                      this.closeTag(this.$route)
+                    }
+                  })
+              } else {
+                this.$Modal.warning({
+                  title: this.$t('systemInfo'),
+                  content: this.$t('Q_019')
+                });
+              }
             } else {
               this.$Message.error(res.message)
             }

+ 20 - 12
src/view/pdm/data-collection/register-add.vue

@@ -197,19 +197,26 @@
             //没有打卡
             else if (res.code !== this.$config.SUCCESS_CODE &&
               this.$config.processTypeException.CHKCAR008 == res.exception) {
-              this.$IBMessage({
-                  content: this.$t('Q_013'),
-                  title: this.$t('systemQuestion'),
-                },
-                {
-                  ok: () => {
-                    this.onProdUserCodeFlag = false
-                    this.$router.push('/pdm/ws-clock/clock-user')
+              if (this.$libaray.checkButtonHasRight('ws-clock-user',this)) {
+                this.$IBMessage({
+                    content: this.$t('Q_013'),
+                    title: this.$t('systemQuestion'),
                   },
-                  cancel: () => {
-                    this.closeTag(this.$route)
-                  }
-                })
+                  {
+                    ok: () => {
+                      this.onProdUserCodeFlag = false
+                      this.$router.push('/pdm/ws-clock/clock-user')
+                    },
+                    cancel: () => {
+                      this.closeTag(this.$route)
+                    }
+                  })
+              } else {
+                this.$Modal.warning({
+                  title: this.$t('systemInfo'),
+                  content: this.$t('Q_019')
+                });
+              }
             }
             //此工序有配置工位,工位不能为空
             else if (res.code !== this.$config.SUCCESS_CODE &&
@@ -266,6 +273,7 @@
           if (this.formData.carCode) {
             res.data.vehicleBarcode = this.formData.carCode
           }
+          res.data.prodUserCode = this.formData.prodUserCode
           this.tableData = this.tableData.concat(res.data)
           this.barCodeList.push(this.formData.barCode)
           this.$refs['table-select'].reloadData(this.tableData)

+ 19 - 12
src/view/pdm/data-collection/uninstallKiln-add.vue

@@ -187,19 +187,26 @@
             //没有打卡
             else if (res.code !== this.$config.SUCCESS_CODE &&
               this.$config.processTypeException.CHKCAR008 == res.exception) {
-              this.$IBMessage({
-                  content: this.$t('Q_013'),
-                  title: this.$t('systemQuestion'),
-                },
-                {
-                  ok: () => {
-                    this.onProdUserCodeFlag = false
-                    this.$router.push('/pdm/ws-clock/clock-user')
+              if (this.$libaray.checkButtonHasRight('ws-clock-user',this)) {
+                this.$IBMessage({
+                    content: this.$t('Q_013'),
+                    title: this.$t('systemQuestion'),
                   },
-                  cancel: () => {
-                    this.closeTag(this.$route)
-                  }
-                })
+                  {
+                    ok: () => {
+                      this.onProdUserCodeFlag = false
+                      this.$router.push('/pdm/ws-clock/clock-user')
+                    },
+                    cancel: () => {
+                      this.closeTag(this.$route)
+                    }
+                  })
+              } else {
+                this.$Modal.warning({
+                  title: this.$t('systemInfo'),
+                  content: this.$t('Q_019')
+                });
+              }
             } else {
               this.$Message.error(res.message)
             }

+ 13 - 0
src/view/pdm/molding-record/bind-barcode.vue

@@ -168,9 +168,22 @@
             }
           }
         }
+
+        //条码数字长度
+        let indexLength = (parseInt(lastNum) + parseInt(index)).toString().length
         for (let i = 0; i < this.moldingRecordList.length; i++) {
           if (!this.moldingRecordList[i].productUniqueCode && this.moldingRecordList[i].flgMolding || this.moldingRecordList[i].productUniqueCodeFlag) {
             let number = parseInt(lastNum) + parseInt(index)
+
+            //每次多一位数,就去掉前面一个0
+            if (indexLength != number.toString().length) {
+              if (zeroStr.length == 0) {
+                break
+              }
+              zeroStr = zeroStr.substring(0, zeroStr.length - 1)
+              indexLength = number.toString().length
+            }
+
             //数字在前
             if (beforeStr.length == 0) {
               if (zeroFlag) {

+ 2 - 2
src/view/pdm/molding-record/form.vue

@@ -139,10 +139,10 @@
 <script>
 
 import { formMixin } from '@/mixins/form'
-import { forEach } from '@/libs/tools/tools'
+import TableSelect from '@/components/business/table-select'
 
 export default {
-  components: {},
+  components: {TableSelect},
   mixins: [formMixin],
   data() {
     let self = this

+ 17 - 0
src/view/pdm/molding-record/index.vue

@@ -13,6 +13,8 @@
         <BaseIndexButton v-if="formType==$config.formCode.moldDamage" right-button="user-moldDamage" ref="moldDamage" name="moldDamage"></BaseIndexButton>
         <!--    绑定条码    -->
         <BaseIndexButton v-if="formType==$config.formCode.moldingRecord" right-button="user-bindBarcode" ref="bindBarcode" name="bindBarcode"></BaseIndexButton>
+        <!--    打印    -->
+        <BaseIndexButton ref="print" name="print"></BaseIndexButton>
       </template>
       <template #right>
         <!--   新建     -->
@@ -61,16 +63,23 @@
         <DkTableColumn field="remarks" width="auto"></DkTableColumn>
       </DkTable>
     </div>
+
+    <PrintModal ref="printModal" :label-kind="$config.modelKind.modelProduct"
+                :service="$service.modelProductService"
+                :id="($refs['table-select'] && $refs['table-select'].batchRows && $refs['table-select'].batchRows[0]) ?
+                $refs['table-select'].batchRows[0].modelId:null"/>
   </div>
 </template>
 
 <script>
 
 import {indexMixin} from '@/mixins'
+import PrintModal from '_c/business/print/modal'
 
 export default {
   name: 'molding-record',
   mixins: [indexMixin],
+  components: {PrintModal},
   data() {
     let self = this
     return {
@@ -182,6 +191,14 @@ export default {
       this.primaryKey = 'moldingId'  // 设置主键Id
       this.routeObjName = 'moldingRecord'  // 设置路由名称
     },
+    /**
+     * @desc   : 选择模板、打印机
+     * @author : 洪旭东
+     * @date   : 2023-04-10 13:45
+     */
+    print(){
+      this.$refs.printModal.showChooseTemplate = true
+    },
     // endregion
   },
   created() {

+ 3 - 2
src/view/process/process-flow/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="main-div">
+  <div class="main-div" v-if="existsFlag">
     <!--按钮区-->
     <BaseIndexButtonGroup id="BaseIndexButtonGroup">
       <template #left>
@@ -10,7 +10,7 @@
         <!--    编辑    -->
         <BaseIndexButton right-button="process-edit" ref="edit" name="edit"/>
         <!--    流程    -->
-        <BaseIndexButton right-button="process-setting" ref="processSetting" name="processSetting"/>
+        <BaseIndexButton right-button="process-setting" ref="processSetting" name="processSetting" @click="open($config.routeUrl.process.processSetting)"/>
       </template>
       <template #right>
         <!--   新建     -->
@@ -192,6 +192,7 @@ export default {
      * @date   : 2023/2/3 14:41
      */
     saveData() {
+      delete this.params.flowLayout
       if (this.modalParams.button === this.$config.formMode.add) {
         delete this.params.flowId
         return this.excute(this.$service.processService, this.$service.processService.insert, this.params)

+ 2 - 2
src/view/process/process-flow/process-setting.vue

@@ -80,8 +80,8 @@ export default {
   created() {
     this.setCurrentNodeId(undefined)
     this.setCurrentEdgeId(undefined)
-    this.setProcessNodeModalDisplay(false)
-    this.setProcessEdgeModalDisplay(false)
+    this.setProcessNodeModalDisplay(null)
+    this.setProcessEdgeModalDisplay(null)
   },
   mounted() {
     //创建流程图对象

+ 181 - 0
src/view/report/mould-follow-report/index.vue

@@ -0,0 +1,181 @@
+<!-- @desc:在产品明细表  @auth:姜宁  @time:2023/3/2 17:14 -->
+<template>
+  <div class="main-div">
+    <BaseIndexButtonGroup id="BaseIndexButtonGroup">
+      <template #left>
+        <!--    查询    -->
+        <BaseIndexButton right-button="in-product-report-select" ref="search" name="search"></BaseIndexButton>
+        <!--清空查询条件-->
+        <BaseIndexButton ref="clear" name="clear"></BaseIndexButton>
+      </template>
+    </BaseIndexButtonGroup>
+    <!--  查询条件区域  -->
+    <div id="search-cond-div" ref="search-cond-div" style="margin-top: 1px;padding: 0">
+      <SearchCond ref="searchCond" v-model="searchCond"
+                  @collapse-change="collapseChange" :setFlag="false"
+                  :searchContent="searchContent"
+      ></SearchCond>
+    </div>
+
+    <!--  表格部分  -->
+    <DkSplit mode="vertical" v-model="split" :height="tableHeight">
+      <DkTable slot="top" :id="'table-'+$options.name" ref="table-select" :data="tableData"
+               :height="this.tableHeight * split - 35" primaryKey="mouldUniqueId" @pageChange="pageSizeChange"
+               :pageFlag="false"
+               :choose-flag="false"
+               @current-change="currentChangeEvent($event)"
+               name="table">
+        <DkTableColumn field="mouldUniqueCode"></DkTableColumn>
+        <DkTableColumn field="mouldKindName"></DkTableColumn>
+        <DkTableColumn field="modelCodes" :title="$t('productCode')"></DkTableColumn>
+        <DkTableColumn field="makeDate" data-type="date"></DkTableColumn>
+        <DkTableColumn field="prodUserCode"></DkTableColumn>
+        <DkTableColumn field="stdNum" data-type="number"></DkTableColumn>
+        <DkTableColumn field="moldedNum" data-type="number"></DkTableColumn>
+        <DkTableColumn field="moldlineCode"></DkTableColumn>
+        <DkTableColumn field="mouldItemCode"></DkTableColumn>
+      </DkTable>
+
+      <div slot="bottom" >
+        <DkTabs v-model="mouldFollowItemTab" :options="detailOptions"></DkTabs>
+        <!--明细信息-->
+        <DkTable v-if="mouldFollowItemTab === this.$config.mouldFollowItemTab.mouldFollowItem"
+                 :height="this.tableHeight * (1-split) - 25"
+                 primaryKey="itemId"
+                 :id="'table-'+$options.name"
+                 name="table"
+                 ref="receipt-select"
+                 :choose-flag="false"
+                 :data="mouldOpnItem"
+                 :pageFlag="true"
+                 :page-total="detailPageInfo.total"
+                 :current-page="detailPageInfo.currentPage"
+                 @pageChange="detailPageSizeChange">
+          <DkTableColumn field="opnTime" :title="$t('operationTime')" data-type="dateTime"></DkTableColumn>
+          <DkTableColumn field="opCreateUserCode"></DkTableColumn>
+          <DkTableColumn field="opnKindName"></DkTableColumn>
+          <DkTableColumn field="stdNum" data-type="number"></DkTableColumn>
+          <DkTableColumn field="moldedNum" data-type="number"></DkTableColumn>
+          <DkTableColumn field="moldlineCode"></DkTableColumn>
+          <DkTableColumn field="mouldItemCode"></DkTableColumn>
+<!--          <DkTableColumn field="operatingInstructions" width="auto"></DkTableColumn>-->
+          <DkTableColumn field="remarks" width="auto"></DkTableColumn>
+        </DkTable>
+      </div>
+    </DkSplit>
+
+  </div>
+</template>
+
+<script>
+
+import {indexMixin} from '@/mixins'
+
+export default {
+  name: 'mould-follow-report',
+  mixins: [indexMixin],
+  data() {
+    let self = this
+    return {
+      searchContent:
+        [
+          {
+            itemCode: 'mouldUniqueCode',
+            valueFormat: {code: 'mouldUniqueCode'},
+            required:true
+          },
+        ],
+      split: 0.2,// 分区的默认
+      // 表单
+      formData: {},
+      detailPageInfo: {
+        total: 0,
+        pageSize: this.$config.pageSize,
+        currentPage: 1
+      },
+      mouldOpnItem:[],
+      mouldFollowItemTab: this.$config.mouldFollowItemTab.mouldFollowItem,
+      detailOptions: [{label: self.$t('mould_follow_item'), name: 'mouldFollowItem'}, //结转明细
+      ],
+    }
+  },
+  methods: {
+    // region 其他操作
+    /**
+     * @desc   : 获取数据
+     * @author : 姜宁
+     * @date   : 2023/1/29 11:11
+     */
+    getData(params) {
+      // 查询数据
+      return this.excute(this.$service.detailReportService, this.$service.detailReportService.getMouldFollowReportByPage, params);
+    },
+    /**
+     * @desc   : 行切换事件
+     * @author : 姜宁
+     * @date   : 2023/3/21 15:57
+     */
+    currentChangeEvent({row}) {
+      if (row != null) {
+        // 获取生产数据明细
+        this.getMouldFollowItem(row.mouldUniqueId, this.detailPageInfo).then(res => {
+          if (res.code === this.$config.SUCCESS_CODE) {
+            this.mouldOpnItem = res.data.list;
+            if (this.detailPageInfo.currentPage == 1) {
+              this.detailPageInfo.total = res.data.total
+              this.detailPageInfo.currentPage = 1;
+            }
+          }
+        });
+      }
+    },
+    /**
+     * @desc   : 分页查询
+     * @author : 姜宁
+     * @date   : 2023/3/22 15:20
+     */
+    detailPageSizeChange(detailPageInfo){
+      // 查询数据
+      this.getMouldFollowItem(this.$refs['table-select'].batchKeys[0],detailPageInfo).then(res => {
+        if (res.code === this.$config.SUCCESS_CODE) {
+          this.mouldOpnItem = res.data.list;
+          if (this.detailPageInfo.currentPage == 1) {
+            this.detailPageInfo.total = res.data.total
+            this.detailPageInfo.currentPage = 1;
+          }
+        }
+      });
+    },
+    /**
+     * @desc   : 获取生产数据明细
+     * @author : 姜宁
+     * @date   : 2023/4/14 14:16
+     */
+    getMouldFollowItem(mouldUniqueId,detailPageInfo) {
+      this.detailPageInfo.currentPage = detailPageInfo.currentPage;
+      this.detailPageInfo.pageSize = detailPageInfo.pageSize;
+      let params = {
+        ftyId: this.$store.state.user.ftyId,
+        mouldUniqueId: mouldUniqueId,
+        currentPage : this.detailPageInfo.currentPage,
+        pageSize : this.detailPageInfo.pageSize
+      }
+      return this.excute(this.$service.detailReportService, this.$service.detailReportService.getMouldFollowItemReportByPage, params)
+    },
+    // endregion
+  },
+
+  activated() {
+  }
+  ,
+  created() {
+    this.routeObjName = 'detailReoprt'  // 设置路由名称
+  }
+}
+</script>
+
+<style scoped>
+/deep/ .ivu-modal-fullscreen{
+  height: 100%;
+}
+</style>