Эх сурвалжийг харах

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

koushanshan 3 жил өмнө
parent
commit
ad2ccb7742
26 өөрчлөгдсөн 1465 нэмэгдсэн , 889 устгасан
  1. 22 0
      src/api/pages/app/pdm/prod-check-item.js
  2. 1 0
      src/api/pages/common/common.js
  3. 26 0
      src/api/pages/pdm/prod-carryover.js
  4. BIN
      src/assets/images/app-image/icon_role.png
  5. BIN
      src/assets/images/app-image/logo-small.jpg
  6. 4 11
      src/components-app/base/dk-app-table/dk-app-table.vue
  7. 119 60
      src/components-app/business/dk-app-muti-dropdown/dk-app-muti-dropdown.vue
  8. 65 16
      src/components-app/business/dk-app-single-dropdown/dk-app-single-dropdown.vue
  9. 52 23
      src/components/base/dk-pivot/dk-pivot.vue
  10. 18 14
      src/components/business/process/node-modal/node-modal.vue
  11. 9 0
      src/config/index.js
  12. 17 0
      src/locale/lang/zh-CN.js
  13. 81 35
      src/view-app/app/other/clock-user/index.vue
  14. 34 8
      src/view-app/app/piecework-procedure/finish-check/index.vue
  15. 37 9
      src/view-app/app/piecework-procedure/half-check/index.vue
  16. 75 20
      src/view-app/app/piecework-procedure/half-check/record-process.vue
  17. 1 1
      src/view-app/app/piecework-procedure/recover/index.vue
  18. 40 28
      src/view-app/app/piecework-procedure/register/index.vue
  19. 237 302
      src/view-app/app/prod-management/in-process-inventory-list/detail.vue
  20. 140 299
      src/view-app/app/prod-management/in-process-inventory-list/index.vue
  21. 5 5
      src/view-app/login/app-login.vue
  22. 1 1
      src/view-app/main/index.vue
  23. 148 3
      src/view-app/main/mine.vue
  24. 2 2
      src/view-app/main/other.vue
  25. 116 50
      src/view-app/main/report.vue
  26. 215 2
      src/view/pdm/prod-carryover/index.vue

+ 22 - 0
src/api/pages/app/pdm/prod-check-item.js

@@ -0,0 +1,22 @@
+/**
+ * @author : 于继渤
+ * @desc : 在产盘点单明细
+ * @date : 2023/3/20 9:39
+ */
+export default {
+  appProdCheckItemService: {
+    prefix: '/mdm-server/app/pdm/prod_check_item/',
+    /**
+     * @desc   : 盘点操作
+     * @author : 于继渤
+     * @date   : 2023/3/21 10:52
+     */
+    insertCheck: 'insert_check',
+    /**
+     * @desc   : 盘点明细数量
+     * @author : 于继渤
+     * @date   : 2023/3/21 11:11
+     */
+    selectCheckItemQuantity: 'select_check_item_quantity'
+  }
+}

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

@@ -138,6 +138,7 @@ export default {
     getDataKind: 'get_model_mould', // 获取模具型号
     getDataBasic: 'get_data_basic', // 获取基础数据
     selectUser: 'select_userid',//根据输入的usercode 查询 userid
+    selectStaff: 'select_staffid',//根据输入的staffcode 查询 staffid
     /**
      * @desc : 验证工序可检缺陷《PDA用) 检验工序输入缺陷代码时调用,返回此缺陷对应扣罚信息
      * @author : 于继渤

+ 26 - 0
src/api/pages/pdm/prod-carryover.js

@@ -0,0 +1,26 @@
+/**
+ * @desc   : 在产结转
+ * @author : 姜宁
+ * @date   : 2023/3/21 15:53
+ */
+export default {
+  prodCarryoverService:{
+    prefix:'/mdm-server/pdm/prodCarryover/',
+  },
+  prodCarryoverItemService:{
+    prefix:'/mdm-server/pdm/prodCarryoverItem/',
+    // 根据结转Id获取结转明细数据
+    getProdCarryoverItemById:'get_prod_carryover_item_by_id'
+  }
+}
+
+/**
+ * @desc   : 成型模具路由
+ * @author : 姜宁
+ * @date   : 2023/2/8 13:16
+ */
+export const routeUrl = {
+  prodCarryover: {
+    reverseCarroyover: {key: 'reverseCarroyover', method: 'reverseCarroyover'},
+  }
+}

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


BIN
src/assets/images/app-image/logo-small.jpg


+ 4 - 11
src/components-app/base/dk-app-table/dk-app-table.vue

@@ -90,12 +90,11 @@
             </div>
             <!-- 字段参数值-->
             <div :style="{width:(checkboxFlag ? '85%' : '100%')} ">
-              <div class="row" style="display: flow" v-for="(rowsItem,rowsIndex) in rows" :key="rowsIndex">
+              <div class="app-row " style="display: flow" v-for="(rowsItem,rowsIndex) in rows" :key="rowsIndex">
                 <div style="width: 100%;display: flex">
                   <div v-if="!rowsItem.collapseFlag  && !rowsItem.sidePullFlag  && !rowsItem.sidePullDateFlag" style="width: 100%">
-
                     <!-- 输入框-->
-                    <dk-app-field :focus="true" :label="rowsItem.title" :typeInput="rowsItem.typeInput"
+                    <dk-app-field :focus="true" :label="rowsItem.title" :typeInput="rowsItem.typeInput" :ref="rowsItem.name+''+tableDataIndex"
                                   :maxlength="rowsItem.maxlength"
                                   @changeBarCode="changeItemBarCode(rowsItem.sidePullKey,tableDataItem,tableDataIndex)"
                                   :placeholderFlag="rowsItem.placeholderFlag ? true : false"
@@ -145,7 +144,7 @@
               <div :style="checkboxFlag ? 'width: 88%;' : 'width: 100%;'">
                 <van-collapse v-model="tableDataItem.collapse" accordion>
                   <van-collapse-item :title="$t('appSeeMore')" name="1">
-                    <div class="row" style="display: flow" v-for="(rowsItem,rowsIndex) in rows" :key="rowsIndex">
+                    <div class="app-row " style="display: flow" v-for="(rowsItem,rowsIndex) in rows" :key="rowsIndex">
                       <div style="width: 100%;display: flex">
                         <!-- 标题字段-->
                         <div v-if="rowsItem.collapseFlag  && !rowsItem.sidePullFlag && !rowsItem.sidePullDateFlag" style="width: 100%">
@@ -189,18 +188,12 @@
                           />
                         </div>
                       </div>
-
                     </div>
                   </van-collapse-item>
                 </van-collapse>
               </div>
-
             </div>
-
-
           </div>
-
-
           <template #right>
             <van-button square type="danger" text="删除" @click="onDelClick(tableDataItem,tableDataIndex)"
                         class="delete-button"/>
@@ -507,7 +500,7 @@ export default {
 .van-cell{
   padding: 4px 0px !important;
 }
-.row {
+.app-row {
   font-family: 'PingFang HK';
   /*font-style: normal;*/
   font-weight: 400;

+ 119 - 60
src/components-app/business/dk-app-muti-dropdown/dk-app-muti-dropdown.vue

@@ -93,6 +93,14 @@ export default {
       type: String,
       default: ''
     },
+    typeFlag:{
+      type: Boolean,
+      default: true
+    },
+    dataListDef: {
+      type: Array,
+      default: () => [] //默认值
+    },
     ids: {
       type: Array,
       default: () => []  //已选id 数组
@@ -133,73 +141,21 @@ export default {
       if (dataList.length === 0 || this.linkageId) {
         let dataSourceCode = this.dataSourceCode
         let typeName = this.typeName
-        this.getData(dataSourceCode).then(res => {
-          let list = []
-          if (this.typeName === 'staff') {
-            list = res.data.list
-          } else {
-            list = res.data
-          }
-
-          if (list == null || list.length <= 0) return
-          let dataList = []
 
-          if (typeName === 'user') {
-            list.forEach(item2 => {
-              let item = {
-                id: item2.id,
-                name: item2.name,
-                code: item2.code,
-
-                checked: false
-              }
-              dataList.push(item)
-            })
-          } else if (this.typeName === 'staff') {
-            list.forEach(item2 => {
+        if(this.dataListDef && this.dataListDef .length > 0){
+          dataList = []
+          if(this.typeName === 'staff' ){
+            this.dataListDef.forEach(item2 => {
               let item = {
                 id: item2.staffId,
                 name: item2.staffName,
                 code: item2.staffCode,
-                jobId: item2.jobId,
-                checked: false
-              }
-              dataList.push(item)
-            })
-          } else if (this.typeName === 'processNode') { //盘点工序
-            list.forEach(item2 => {
-              let item = {
-                id: item2.nodeId,
-                name: item2.nodeName,
-                checked: false
-              }
-              dataList.push(item)
-            })
-
-          } else if (this.typeName === 'modelProduct') { //产品分类
-            list.forEach(item2 => {
-              let item = {
-                id: item2.id,
-                name: item2.name,
-                code: item2.code,
-                checked: false
-              }
-              dataList.push(item)
-            })
 
-          } else {
-            list.forEach(item2 => {
-              let item = {
-                id: item2.id,
-                name: item2.name,
-                code: item2.code,
                 checked: false
               }
               dataList.push(item)
             })
           }
-
-
           let finalList = [...dataList]
           this.dataList_p = dataList
 
@@ -230,8 +186,112 @@ export default {
           } else {
             this.setCheck()
           }
+        }else {
+          this.getData(dataSourceCode).then(res => {
+            let list = []
+            if (this.typeName === 'staff' ) {
+              list = res.data.list
+            } else {
+              list = res.data
+            }
+            if(!this.typeFlag){
+              list = []
+            }
+            if (list == null || list.length <= 0) return
+            let dataList = []
+
+            if (typeName === 'user') {
+              list.forEach(item2 => {
+                let item = {
+                  id: item2.id,
+                  name: item2.name,
+                  code: item2.code,
+
+                  checked: false
+                }
+                dataList.push(item)
+              })
+            } else if (this.typeName === 'staff' ) {
+              list.forEach(item2 => {
+                let item = {
+                  id: item2.staffId,
+                  name: item2.staffName,
+                  code: item2.staffCode,
+                  jobId: item2.jobId,
+                  checked: false
+                }
+                dataList.push(item)
+              })
+            } else if (this.typeName === 'processNode') { //盘点工序
+              list.forEach(item2 => {
+                let item = {
+                  id: item2.nodeId,
+                  name: item2.nodeName,
+                  checked: false
+                }
+                dataList.push(item)
+              })
+
+            } else if (this.typeName === 'modelProduct') { //产品分类
+              list.forEach(item2 => {
+                let item = {
+                  id: item2.id,
+                  name: item2.name,
+                  code: item2.code,
+                  checked: false
+                }
+                dataList.push(item)
+              })
+
+            } else {
+              list.forEach(item2 => {
+                let item = {
+                  id: item2.id,
+                  name: item2.name,
+                  code: item2.code,
+                  checked: false
+                }
+                dataList.push(item)
+              })
+            }
+
+
+            let finalList = [...dataList]
+            this.dataList_p = dataList
+
+            this.finalList = finalList
+            // 如果父级画面的组件需要默认值
+            // 则在调用父级画面使用方法setDefault 给组件赋初始值,默认取第一个值
+            if (this.$parent.setDefault && this.getDataInItFlag) {
+              this.$parent.setDefault(this.typeName, this.dataList_p.size() > 0 ? this.dataList_p[0] : [])
+              //打开侧拉默认选中
+              let ids = [this.dataList_p[0].id]
+
+              this.dataList_p.forEach(it => {
+                if (ids && ids.some(it2 => it2 === it.id)) {
+                  it.checked = true
+                }
+              })
+              let countList = this.dataList_p.filter(res => {
+                return res.checked
+              })
+              if (countList.length === 0) {
+                this.count = 0
+                this.label_title = '可选'
+              } else {
+                this.count = countList.length
+                this.label_title = '已选(' + countList.length + ')'
+              }
+
+            } else {
+              this.setCheck()
+            }
+
+          })
+        }
+
+
 
-        })
 
 
       }
@@ -276,7 +336,7 @@ export default {
         }
       })
       this.dataList_p = dataList
-      console.log('搜搜', this.dataList_p)
+
     },
     /**
      * 焦点离开事件
@@ -384,8 +444,7 @@ export default {
       }
       this.dataList_p = dataList
       this.finalList = finalList
-      console.log(this.dataList_p)
-      console.log(this.finalList)
+=
       this.count = count
       this.label_title = label_title
     },

+ 65 - 16
src/components-app/business/dk-app-single-dropdown/dk-app-single-dropdown.vue

@@ -113,6 +113,10 @@ export default {
       type: Number,
       default: null
     },
+    productId: {
+      type: Number,
+      default: null
+    },
     barCodeId: {
       type: Number,
       default: null
@@ -157,7 +161,7 @@ export default {
         let finalList = [...dataList_Temp]
         this.dataList_p = dataList_Temp
         this.finalList = finalList
-      } else if (this.dataSourceCode === 'defectDeduction') {
+      } else if (this.dataSourceCode === 'defectDeduction' ) {
 
         let dataList_Temp = []
         let list = this.dataListDef
@@ -174,7 +178,7 @@ export default {
         let finalList = [...dataList_Temp]
         this.dataList_p = dataList_Temp
         this.finalList = finalList
-      } else if (this.dataSourceCode === 'dutyFlowNode') { //责任工序
+      } else if (this.dataSourceCode === 'dutyFlowNode' && this.dataListDef.length > 0) { //责任工序
 
         let dataList_Temp = []
         let list = this.dataListDef
@@ -183,8 +187,11 @@ export default {
           item = {
             id: item2.nodeId,
             name: item2.nodeName,
-            jobList: item2.jobList,
-            userList: item2.userList,
+            jobId: item2.jobId,
+            jobName: item2.jobName,
+            userId: item2.userId,
+            userName: item2.userName,
+            clockList: item2.clockList,
             checked: false
           }
           dataList_Temp.push(item)
@@ -192,7 +199,7 @@ export default {
         let finalList = [...dataList_Temp]
         this.dataList_p = dataList_Temp
         this.finalList = finalList
-      } else if (this.dataSourceCode === 'dutyUserCode') { //责任工号
+      } else if (this.dataSourceCode === 'dutyUserCode'  && this.dataListDef.length > 0) { //责任工号
         let dataList_Temp = []
         let list = this.dataListDef
         list.forEach(item2 => {
@@ -207,7 +214,7 @@ export default {
         let finalList = [...dataList_Temp]
         this.dataList_p = dataList_Temp
         this.finalList = finalList
-      } else if (this.dataSourceCode === 'dutyKindWork') { //责任工种
+      } else if (this.dataSourceCode === 'dutyKindWork' && this.dataListDef.length > 0) { //责任工种
         let dataList_Temp = []
         let list = this.dataListDef
         list.forEach(item2 => {
@@ -277,7 +284,13 @@ export default {
             let dataSourceCode = this.dataSourceCode
             let typeName = this.typeName
             this.getdata(dataSourceCode).then(res => {
-              let list = res.data
+              let list = []
+              if(res.data.length > 0){
+                list = res.data
+              }else {
+                list = res.data.list ?  res.data.list : []
+              }
+
               if (list == null || list.length <= 0) return
               let dataList = []
               // 部门
@@ -310,7 +323,7 @@ export default {
                     code: item2.stationCode,
                     checked: false
                   }
-                }else if (this.typeName === 'productClassification') { //产品分级
+                } else if (this.typeName === 'productClassification') { //产品分级
                   item = {
                     id: item2.gradeId,
                     name: item2.gradeName,
@@ -325,6 +338,13 @@ export default {
                     code: item2.rangeNo,
                     checked: false
                   }
+                } else if (this.typeName === 'dutyUserCode') { //工号
+                  item = {
+                    id: item2.userId,
+                    name: item2.userName,
+                    code: item2.userCode,
+                    checked: false
+                  }
                 } else {
                   item = {
                     id: item2.id,
@@ -391,7 +411,6 @@ export default {
      * @param {*} e
      */
     onChangeInput(e) {
-      console.log('过滤数据1', e)
       let finalList = this.finalList
       if (finalList === null || finalList.length === 0) return
       // 复制
@@ -422,7 +441,6 @@ export default {
      * 焦点离开事件
      */
     blurInput(e) {
-      console.log('2', e)
       if (this.dataList.length <= 0) {
         this.reset()
       }
@@ -466,6 +484,12 @@ export default {
       let outputStdSum = ""
       let modelMouldOutput = ""
       let modelProduct = ""
+
+      let jobId = null
+      let jobName = ''
+      let userId = null
+      let userName = ''
+      let clockList = []
       dataList.forEach(item => {
         if (item.checked) {
           ids.push(item.id)
@@ -483,6 +507,11 @@ export default {
           userCode.push(item.userCode)
           jobList = item.jobList
           userList = item.userList
+          jobId = item.jobId
+          jobName = item.jobName
+          userId = item.userId
+          userName = item.userName
+          clockList = item.clockList
         }
       })
       let returnValue = {}
@@ -516,8 +545,11 @@ export default {
         returnValue = {
           ids: ids.join(','),
           names: names.join(','),
-          jobList: jobList,
-          userList: userList,
+          jobId: jobId,
+          jobName: jobName,
+          userId: userId,
+          userName: userName,
+          clockList: clockList,
         }
 
       } else if (this.typeName === 'productClassification') {
@@ -576,22 +608,39 @@ export default {
         param.dataSourceCode = dataSourceCode
         return this.excute(this.$service.commonService, this.$service.commonService.getWorkStation, param)
 
-      }else  if (dataSourceCode === 'wsStation') {//工位打卡- 选择工位
+      } else if (dataSourceCode === 'wsStation') {//工位打卡- 选择工位
         if (this.userId) {
           param.userId = this.userId
         }
         param.dataSourceCode = dataSourceCode
-        return   this.excute(this.$service.commonService, this.$service.commonService.getWsStation, param)
+        return this.excute(this.$service.commonService, this.$service.commonService.getWsStation, param)
 
       } else if (dataSourceCode === 'productClassification') {//产品分级
         param.nodeId = this.flowNodeId
         return this.excute(this.$service.commonService, this.$service.commonService.getProductGrade, param)
 
-      } else if (dataSourceCode === 'dutyFlowNode' || dataSourceCode === 'dutyUserCode' || dataSourceCode === 'dutyKindWork') { //查询责任工序、工号、工种
+      } else if (dataSourceCode === 'dutyFlowNode' ) { //查询责任工序、工号、工种
         param.pdtDefectId = this.pdtDefectId
         param.barCodeId = this.barCodeId
         return this.excute(this.$service.appCollectService, this.$service.appCollectService.getBlameNode, param)
       }
+
+      if (dataSourceCode === 'dutyUserCode') { //工号
+        param.productId = this.productId
+        param.leafFlag = true
+        param.flgValid = true
+        param.limit = 999
+        return this.excute(this.$service.commonService, this.$service.commonService.getUserByPage, param)
+      }
+       if (dataSourceCode === 'dutyKindWork') { //工种
+        param.productId = this.productId
+        param.leafFlag = true
+        param.flgValid = true
+         param.limit = 999
+        return this.excute(this.$service.commonService, this.$service.commonService.getJobByPage, param)
+      }
+
+
       if (dataSourceCode === 'carrierRange') {// 窑车位置
         param.carModelId = null
         return this.excute(this.$service.commonService, this.$service.commonService.getKilnCarPlace, param)
@@ -651,7 +700,7 @@ export default {
     } else if (this.typeName === 'wsStation') {  //工位打卡里的选择工位
       this.dataSourceCode = 'wsStation'
       this.name = '打卡工位'
-    }else if (this.typeName === 'materialType') {
+    } else if (this.typeName === 'materialType') {
       this.dataSourceCode = 'materialType'
       this.name = '原料类型'
     } else if (this.typeName === 'productLogo') { //产品商标

+ 52 - 23
src/components/base/dk-pivot/dk-pivot.vue

@@ -148,8 +148,9 @@
             <!--列维度(单维度)-->
             <div v-if="colFields.length === 1 && dataFields.length <= 1">
               <DkTableColumn v-for="(item,index) in [...colFields[0].valuesFiltered]"
+                             ref="col"
                              :key="index"
-                             :field="item+''"
+                             :field="setField"
                              width="auto" :filter="false" :freeze="false"
                              :title="item+''"></DkTableColumn>
             </div>
@@ -166,16 +167,18 @@
                       <div v-if="gIndex === groupCols.length - 1 && dataFields.length <= 1">
                         <!--子级(无值列或者一个值列)-->
                         <DkTableColumn v-for="(cItem,cIndex) in [...colFields[colFields.length - 1].valuesFiltered]"
+                                       ref="col"
                                        :key="cIndex"
-                                       :field="itemTop+'_'"
+                                       :field="setField"
                                        width="auto" :filter="false" :freeze="false"
                                        :title="cItem+''"></DkTableColumn>
                       </div>
                       <div v-if="gIndex === groupCols.length - 1 && dataFields.length > 1">
                         <!--子级(有多个值列)-->
                         <DkTableColumn v-for="(cItem,cIndex) in dataFields"
+                                       ref="col"
                                        :key="cIndex"
-                                       :field="cItem.key"
+                                       :field="setField"
                                        width="auto" :filter="false" :freeze="false"
                                        :title="cItem.label"></DkTableColumn>
                       </div>
@@ -186,16 +189,18 @@
                   <div v-if="dataFields.length <= 1">
                     <!--子级(无值列或者一个值列)-->
                     <DkTableColumn v-for="(cItem,cIndex) in [...colFields[colFields.length - 1].valuesFiltered]"
+                                   ref="col"
                                    :key="cIndex"
-                                   :field="cItem+''"
+                                   :field="setField"
                                    width="auto" :filter="false" :freeze="false"
                                    :title="cItem+''"></DkTableColumn>
                   </div>
                   <div v-else>
                     <!--子级(有多个值列)-->
                     <DkTableColumn v-for="(cItem,cIndex) in dataFields"
+                                   ref="col"
                                    :key="cIndex"
-                                   :field="cItem.key"
+                                   :field="setField"
                                    width="auto" :filter="false" :freeze="false"
                                    :title="cItem.label"></DkTableColumn>
                   </div>
@@ -332,6 +337,33 @@ export default {
     }
   },
   computed: {
+    /**
+     * @desc   : 设置表格的列名
+     * @author : 周兴
+     * @date   : 2023/3/21 9:19
+     */
+    setField() {
+      let field = ''
+      // // 最顶级
+      // if(this.colFields && this.colFields.length > 0){
+      //   field = this.colFields[0]
+      // }
+      // // 中间层
+      // if(this.groupCols && this.groupCols.length > 0){
+      //   this.groupCols.forEach(it=>{
+      //     field = field + '_' + it
+      //   })
+      // }
+      this.$nextTick(() => {
+        console.log('rrr', field, this.$refs.col)
+        if(this.$refs.col && this.$refs.col.length > 0){
+          this.$refs.col.forEach(it=>{
+
+          })
+        }
+      })
+      return field;
+    },
     // Fields with values extracted from data (if field has valueFilter)
     fieldsWithValues: function () {
       // Create object: field.key => field
@@ -360,14 +392,14 @@ export default {
         // 有过滤
         valueFilterableFields.forEach(field => {
           let value = field.getter(item);
-          if(value){
+          if (value) {
             fieldsWithValues[field.key].valuesSet.add(value)
           }
         })
         // 无过滤
         valueNoFilterableFields.forEach(field => {
           let value = field.getter(item);
-          if(value){
+          if (value) {
             fieldsWithValues[field.key].valuesFiltered.add(value)
           }
         })
@@ -377,7 +409,7 @@ export default {
       valueFilterableFields.forEach(field => {
         fieldsWithValues[field.key].values = Array.from(fieldsWithValues[field.key].valuesSet).sort(field.sort || naturalSort)
       })
-      console.log('fieldsWithValues',fieldsWithValues)
+      console.log('fieldsWithValues', fieldsWithValues)
       return fieldsWithValues
     },
     // Fields selected values as set
@@ -473,7 +505,7 @@ export default {
 
         dataFields.push(field)
       })
-      console.log('dataFields',dataFields)
+      console.log('dataFields', dataFields)
       return dataFields
     },
     // Drag area class
@@ -499,21 +531,18 @@ export default {
       this.dragging = false
     },
     /**
-     * @desc   : 设置表格的列名
+     * @desc   : 循环父级获取field
      * @author : 周兴
-     * @date   : 2023/3/21 9:19
+     * @date   : 2023/3/21 10:09
      */
-    setField(){
-      let field = ''
-      // 最顶级
-      if(this.colFields && this.colFields.length > 0){
-        field = this.colFields[0]
-      }
-      // 中间层
-      if(this.groupCols && this.groupCols.length > 0){
-        this.groupCols.forEach(it=>{
-          field = field + '_' + it
-        })
+    getField(obj, field) {
+      field = field + '_' + obj.$vnode.componentInstance.title;
+      // 如果上级没有或者,上级是表格,就直接返回
+      if (obj && obj.$parent && obj.$parent.$vnode && obj.$parent.$vnode.tag.endsWith('VxeColgroup')) {
+        this.getField(obj.$parent, field)
+      } else {
+        console.log('fff',field)
+        return field;
       }
     },
     /**
@@ -536,7 +565,7 @@ export default {
      * @author : 周兴
      * @date   : 2023/3/21 9:03
      */
-    updateValues(updateValuesHashTable = true){
+    updateValues(updateValuesHashTable = true) {
       this.isDataComputing = true;
       // Start a task to avoid blocking the page
       clearInterval(this.computingInterval)

+ 18 - 14
src/components/business/process/node-modal/node-modal.vue

@@ -684,20 +684,24 @@ export default {
         this.$message.error(this.$t('W_061', {'param': '载具'}))
         return false
       }
-      // 判断用户类型是否填写
-      let userList = this.$refs.userTable?.getTableData();
-      if (userList && userList.length > 0) {
-        for (let i in userList) {
-          if (userList[i].userId && !userList[i].userKind) {
-            let rowsNo = 1 + parseInt(i)
-            this.$message.error(this.$t('W_089', {
-              'param1': rowsNo + this.$t('rowNo'),
-              'param2': this.$t('userKind')
-            }))
-            this.setErrToRow(userList[i], this.$t('W_093', {
-              'param': this.$t('userKind')
-            }))// 给行增加错误提示信息
-            return false
+      // 工号类型可见才进行判断
+      if(this.nodeControl && this.nodeControl.userKind
+          && this.nodeControl.userKind.visible){
+        // 判断用户类型是否填写
+        let userList = this.$refs.userTable?.getTableData();
+        if (userList && userList.length > 0) {
+          for (let i in userList) {
+            if (userList[i].userId && !userList[i].userKind) {
+              let rowsNo = 1 + parseInt(i)
+              this.$message.error(this.$t('W_089', {
+                'param1': rowsNo + this.$t('rowNo'),
+                'param2': this.$t('userKind')
+              }))
+              this.setErrToRow(userList[i], this.$t('W_093', {
+                'param': this.$t('userKind')
+              }))// 给行增加错误提示信息
+              return false
+            }
           }
         }
       }

+ 9 - 0
src/config/index.js

@@ -40,6 +40,7 @@ export default {
   sysUuid: '00000002-b4ac-4912-a4c5-0945a775647f',
   appUuid: '6d2208ba-7ca9-41b2-96d3-b39a109ba811',
   appRegistMenuUuid: 'd891a6cc-8a94-47dd-8bda-2cfddee0710f',// pda数据采集的
+  appReportMenuUuid: 'd891a6cc-8a94-47dd-8bda-2cfddee0710f',// pda数据采集的
   redirectUrl: null,
 
   dkMallUrl: 'https://ibossmp.dongkesoft.com:7050/', /* 菜单查询的类型 1:change 2:Enter */
@@ -413,6 +414,14 @@ export default {
     mouldOutput: 'mouldOutput',
   },
   /**
+   * @desc   : 在产结转明细
+   * @author : 姜宁
+   * @date   : 2023/3/21 15:42
+   */
+  prodCarryoverItemTab: {
+    prodCarryoverItem: 'prodCarryoverItem',
+  },
+  /**
    * @desc   : 生产工号
    * @author : 姜宁
    * @date   : 2023/2/7 15:37

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

@@ -121,6 +121,8 @@ export const button = {
   moldingUserReplace:'工号变更(E)',
   bindBarcode:'绑定条码(B)',
   clearBindBarcode:'清空条码(C)',
+  carroyover:'结转(D)',
+  reverseCarroyover:'反结(U)',
 }
 
 /**
@@ -227,6 +229,7 @@ export const formTitle = {
   'register':'计件',
   'workStationPrinter':'工位打印机',
   'workStationUser':'工位工号',
+  'prod-carryover-item': '结转明细',
 }
 
 /**
@@ -790,6 +793,15 @@ export const columns = {
   productCategoryName:'产品类别',
   productionUserCode: '生产工号',
   productionProcess: '生产工序',
+  crovMonth:'结转月份',
+  crovCode:'结转单号',
+  dateBegin:'开始日期',
+  dateEnd:'结束日期',
+  makeUserCode:'制单工号',
+  opnMakeUserName:'制单员',
+  pdtProdQty:'生产数量',
+  pdtGradeName:'产品分级',
+  pdtGradekindName:'产品等级'
 }
 
 /**
@@ -1151,6 +1163,7 @@ export const appColumns = {
   appReasonForScrapping: '报废原因',
   appScrapResponsibility: '报废责任',
   appProductModel: '产品型号',
+  appPdtProdStatus: '产品状态',
   appOutputUnusedNum: '剩余成型数',
 
   appModelMould: '模具型号',
@@ -1265,6 +1278,9 @@ export const appColumns = {
   appFinishTime: '完成日期',
   appProductionUserIds: '生产工号',
   appProdCheckNode: '盘点工序',
+  appSaveWork: '上班',
+  appSaveOffWork: '下班',
+  appStaffInput: '请输入第{param}条员工',
 }
 /**
  * @desc   : app按钮
@@ -1304,6 +1320,7 @@ export const appOthers = {
   appMoldingMoldManagementActiveTitleTop: '成型模具管理-上模',
   appMoldingMoldManagementActiveTitleEnd: '成型模具管理-卸模',
   appMoldInventory: '模具盘点',
+  appInProcessInventory: '在产盘点',
   appMoldInventoryDetail: '盘点明细',
   appMoldInventorySearchText: '盘点单号/盘点单名',
   appQueryResults: '查询结果',

+ 81 - 35
src/view-app/app/other/clock-user/index.vue

@@ -3,9 +3,9 @@
   <div class="main-app-form">
     <!-- 顶部导航栏 -->
     <dk-app-nav-bar :title="$t('appWorkStationClockTitle')"
-                    @click-left="onClickLeft" :rightIcon="true"  ></dk-app-nav-bar>
-<!--    打卡记录-->
-    <div   style="margin: 10px">{{ $t('wsClockInformation') }}</div>
+                    @click-left="onClickLeft"  ></dk-app-nav-bar>
+    <!--    打卡记录-->
+    <div style="margin: 10px">{{ $t('wsClockInformation') }}</div>
     <!--  工位编码-->
     <dk-app-field
       v-model="formData.stationName"
@@ -18,20 +18,29 @@
     <dk-app-field
       :label="$t('stationName')"
       v-model="formData.stationName"
+      :placeholderFlag="false"
       :readonly="true"></dk-app-field>
 
     <div ref="scrollTable" class="main-app-table">
       <div v-if="wsClockItemList.length>0" style="margin: 10px">{{ $t('wsClockItemInformation') }}</div>
       <!--    产品信息-->
-      <dk-app-table :rows="rows" :tableRowData="wsClockItemList"   @changeItemBarCode="changeItemBarCode">
+      <dk-app-table ref="table" :rows="rows" :tableRowData="wsClockItemList" @changeItemBarCode="changeItemBarCode">
       </dk-app-table>
 
     </div>
     <!--  保存按钮-->
-    <div class="app_save_bottom-class">
-      <dk-app-button @click="save" >{{ $t('appSave') }}
+    <!--  保存按钮-->
+    <div class="app_save_bottom-class" style="display: flex">
+      <!--      上班-->
+      <dk-app-button :disabled="loading" @click="save(true)" style="margin: 1px">
+        {{ $t('appSaveWork') }}
+      </dk-app-button>
+      <!--      下班-->
+      <dk-app-button :disabled="loading" @click="save(false)" style="margin: 1px">
+        {{ $t('appSaveOffWork') }}
       </dk-app-button>
     </div>
+
     <div style="height: 0">
       <!--   选择工位 -->
       <dk-app-single-dropdown typeName="wsStation" :show="showStation" :userId="$store.state.user.id"
@@ -58,12 +67,12 @@ export default {
 
       rows: [
         {name: 'jobName', title: self.$t('appJobName')},//工种
-        {name: 'staffName', title: self.$t('staffName')},//工种                                             //员工名称
+        {name: 'replaceStaffName', title: self.$t('staffName')},//工种                                             //员工名称
         {
           name: 'staffCode',
           title: this.$t('staffCode'),
           fieldFlag: true,
-          placeholderFlag:true,
+          placeholderFlag: true,
         },                                            //替班员工
 
       ],//每一条的内容
@@ -73,8 +82,9 @@ export default {
         stationId: '',//工位id
         stationName: '',//工位名称
         stationCode: '',//工位code
+        ftyId: this.$store.state.user.ftyId,
       },
-      showStation:false,//是否显示工位选择控件
+      showStation: false,//是否显示工位选择控件
     }
   },
   methods: {
@@ -106,33 +116,39 @@ export default {
      * @author : 王英杰
      * @date   : 2023/2/10 9:16
      */
-    queryUser(index,usercode) {
+    queryUser(index, staffCode) {
       let params = {
         ftyId: this.$store.state.user.ftyId,
-        userCode: usercode,
+        staffCode: staffCode,
       }
-      this.excute(this.$service.appCommonService, this.$service.appCommonService.selectUser, params).then(res => {
+      this.excute(this.$service.appCommonService, this.$service.appCommonService.selectStaff, params).then(res => {
         if (res.code === this.$config.SUCCESS_CODE) {
-          this.$nextTick(()=>{
-            if (res.data) {
-              this.wsClockItemList[index].staffName =  res.data.userName
-              this.wsClockItemList[index].staffCode =  usercode
-            } else { //没查到
-              this.wsClockItemList[index].staffName =  ""
-              this.wsClockItemList[index].staffCode =  ""
-            }
+          let refsName = ""
+          if (res.data) { //查询 赋值 焦点给到下一个
+            this.$set(this.wsClockItemList[index], 'replaceStaffName', res.data.staffName)
+            this.$set(this.wsClockItemList[index], 'replaceStaffId', res.data.staffId)
+            this.$set(this.wsClockItemList[index], 'staffCode', staffCode)
+            let number = index == this.wsClockItemList.length ? index : index + 1
+            refsName = 'staffCode' + [number]
+          } else { //没查到  清空 焦点给回
+            this.$set(this.wsClockItemList[index], 'replaceStaffName', "")
+            this.$set(this.wsClockItemList[index], 'replaceStaffId', "")
+            this.$set(this.wsClockItemList[index], 'staffCode', "")
+            refsName = 'staffCode' + [index]
+          }
+          this.$nextTick(() => {
+            this.$refs.table.$refs[refsName][0].$refs.input.focus()
           })
-          console.log(" this.wsClockItemList", this.wsClockItemList)
         }
       })
     },
     /**
-        * @desc   : 输入框 列表键盘回车事件
-        * @author : 王英杰
-        * @date   : 2023/3/20 16:37
-        */
-    changeItemBarCode(e){
-      this.queryUser(e.index,e.item.staffCode) //根据输入的usercode 查询 userid
+     * @desc   : 输入框 列表键盘回车事件
+     * @author : 王英杰
+     * @date   : 2023/3/20 16:37
+     */
+    changeItemBarCode(e) {
+      this.queryUser(e.index, e.item.staffCode) //根据输入的usercode 查询 userid
     },
     /**
      * @desc   : 单选侧拉确定
@@ -160,7 +176,6 @@ export default {
     },
 
 
-
     // endregion
 
     // region 保存
@@ -171,6 +186,12 @@ export default {
      */
     setParams() {
       this.params = {...this.formData}
+      this.params.wsClockItemList = this.wsClockItemList
+      this.params.wsClockItemList.forEach(it => {
+        it.stationId = this.formData.stationId;
+        it.staffId = it.replaceStaffId
+        it.staffName = null
+      })
     },
     /**
      * @desc   : 检验
@@ -178,11 +199,21 @@ export default {
      * @date   : 2023/2/10 11:46
      */
     validData(flag) {
-      // 生产工号不能为空
-      if (!this.formData.makeUser) {
-        this.$appToast((this.$t('appProductionJobNumbeWrong')));
-        return false;
-      }
+      if (flag) { //上班
+        let table = this.wsClockItemList
+        // 判断是否有打卡明细信息
+        if (!table || table.length === 0) {
+          this.$appToast((this.$t('W_103')));
+          return false;
+        }
+        for (let i = 0; i < table.length; i++) {
+          // 员工和替班员工需要 二选一
+          if (!table[i].replaceStaffId) {
+            this.$appToast(this.$t('appStaffInput', {'param': (i + 1)}));
+            return false;
+          }
+        }
+      } //下班 不检验
 
       return true;
     },
@@ -191,8 +222,23 @@ export default {
      * @author : 王英杰
      * @date   : 2023/2/10 11:46
      */
-    saveData() {
-      return this.excute(this.$service.appMouldService, this.$service.appMouldService.insert, this.params);
+    saveData(flag) {
+      if (flag) {
+        return this.excute(this.$service.wsClockService, this.$service.wsClockService.insert, this.params)
+      } else {
+        let params = {
+          userId: this.$store.state.user.id,
+        }
+        return this.excute(this.$service.wsClockService, this.$service.wsClockService.saveOffWork, params)
+      }
+    },
+    /**
+     * @desc   : 保存之后的逻辑
+     * @author : 王英杰
+     * @date   : 2023/3/21 13:46
+     */
+    clear(){
+      this.$router.go(-1)
     },
     // endregion
 

+ 34 - 8
src/view-app/app/piecework-procedure/finish-check/index.vue

@@ -95,7 +95,7 @@
         {{ $t('appRecordProcess') }}
       </dk-app-button>
       <dk-app-button :disabled="loading" @click="saveCollectData" style="margin: 1px">
-        {{ $t('appSave') + (tableRowData.length > 0 ?   '(' + tableRowData.length + ')' : '')}}
+        {{ $t('appSave') + (tableRowData.length > 0 ? '(' + tableRowData.length + ')' : '') }}
       </dk-app-button>
     </div>
 
@@ -292,6 +292,27 @@ export default {
           this.formData.defectNoName = res.data.defectName //缺陷名称
           this.formData.defectFines = res.data.defectFines //赏罚
           this.formData.defectId = res.data.defectId //缺陷id
+          this.getBlameNode(res.data.defectId)
+        }
+      })
+    },
+    /**
+     * @desc   : 获取工序
+     * @author : 于继渤
+     * @date   : 2023/3/21 14:29
+     */
+    getBlameNode(pdtDefectId) {
+      let params = {}
+      params.ftyId = this.$store.state.user.ftyId
+      params.barCode = this.formData.barCode
+      params.barCodeId = this.formData.uniqueId
+      params.flowNodeId = this.formData.flowNodeId
+      params.pdtDefectId = pdtDefectId
+      this.excute(this.$service.appCollectService, this.$service.appCollectService.getBlameNode, params).then(res => {
+        if (res.code === this.$config.SUCCESS_CODE) {
+          if (res.data && res.data.length > 0) {
+            this.responsibleProcessList = res.data //工序、工号、工种
+          }
         }
       })
     },
@@ -363,15 +384,20 @@ export default {
         this.$appToast(this.$t('inputWords', {'search-name': this.$t('appDefectCode')}))
         return false;
       }
-      if (!this.formData.defectId) { //验证缺陷编码
-        this.$appDialog.alert({message: this.$t('appDefectNoIsTrue')}).then(res => {
-          this.$refs.defectNo.$refs.input.focus()
-        })
-        return false;
-      }
+      // if (!this.formData.defectId) { //验证缺陷编码
+      //   this.$appDialog.alert({message: this.$t('appDefectNoIsTrue')}).then(res => {
+      //     this.$refs.defectNo.$refs.input.focus()
+      //   })
+      //   return false;
+      // }
       this.$router.push({
         name: 'app-record-process',
-        params: {item: this.formData, tableRowData: this.tableRowData, productionDefectList: this.productionDefectList}
+        params: {
+          item: this.formData,
+          tableRowData: this.tableRowData,
+          productionDefectList: this.productionDefectList,
+          responsibleProcessList: this.responsibleProcessList
+        }
       })
     },
     /**

+ 37 - 9
src/view-app/app/piecework-procedure/half-check/index.vue

@@ -87,7 +87,7 @@
     <div v-if="productionDefectList.length > 0" style="margin: 10px">{{ $t('appDefectInformationDetail') }}</div>
     <!--    历史缺陷明细-->
     <dk-app-table :rows="productionDefectListRows" v-if="productionDefectList.length > 0"
-                  :tableRowData="productionDefectList"     >
+                  :tableRowData="productionDefectList">
     </dk-app-table>
 
 
@@ -305,13 +305,35 @@ export default {
           this.formData.defectNoName = res.data.defectName //缺陷名称
           this.formData.defectFines = res.data.defectFines //赏罚
           this.formData.defectId = res.data.defectId //缺陷id
-
+          this.getBlameNode(res.data.defectId)
           //焦点缺陷号
           //this.$refs.defectNo.$refs.input.focus()
         }
       })
     },
 
+    /**
+     * @desc   : 获取工序
+     * @author : 于继渤
+     * @date   : 2023/3/21 14:29
+     */
+    getBlameNode(pdtDefectId) {
+      let params = {}
+      params.ftyId = this.$store.state.user.ftyId
+      params.barCode = this.formData.barCode
+      params.barCodeId = this.formData.uniqueId
+      params.flowNodeId = this.formData.flowNodeId
+      params.pdtDefectId = pdtDefectId
+      this.excute(this.$service.appCollectService, this.$service.appCollectService.getBlameNode, params).then(res => {
+        if (res.code === this.$config.SUCCESS_CODE) {
+          if (res.data && res.data.length > 0) {
+            this.responsibleProcessList = res.data //工序、工号、工种
+          }
+        }
+      })
+    },
+
+
     // endregion
 
     //region 控件 回调
@@ -380,15 +402,20 @@ export default {
         this.$appToast(this.$t('inputWords', {'search-name': this.$t('appDefectCode')}))
         return false;
       }
-      if (!this.formData.defectId) { //验证缺陷编码
-        this.$appDialog.alert({message: this.$t('appDefectNoIsTrue')}).then(res => {
-          this.$refs.defectNo.$refs.input.focus()
-        })
-        return false;
-      }
+      // if (!this.formData.defectId) { //验证缺陷编码
+      //   this.$appDialog.alert({message: this.$t('appDefectNoIsTrue')}).then(res => {
+      //     this.$refs.defectNo.$refs.input.focus()
+      //   })
+      //   return false;
+      // }
       this.$router.push({
         name: 'app-record-process',
-        params: {item: this.formData, tableRowData: this.tableRowData, productionDefectList: this.productionDefectList}
+        params: {
+          item: this.formData,
+          tableRowData: this.tableRowData,
+          productionDefectList: this.productionDefectList,
+          responsibleProcessList: this.responsibleProcessList
+        }
       })
     },
     /**
@@ -463,6 +490,7 @@ export default {
      * @date   : 2023/2/10 11:46
      */
     validData(flag) {
+
       // 生产工号不能为空
       if (!this.formData.prodUserId) {
         this.$appToast((this.$t('appProductionJobNumbeWrong')));

+ 75 - 20
src/view-app/app/piecework-procedure/half-check/record-process.vue

@@ -88,24 +88,22 @@
     <!-- 责任工序-->
     <dk-app-single-dropdown typeName="dutyFlowNode" :show="dutyFlowNodeFlag" :pdtDefectId="pdtDefectId"
                             :barCodeId="barCodeId" :dataListDef="responsibleProcessList"
-
+                            :ids="[formData.responsibleProcessId]"
                             @mutiClose="singleClose('dutyFlowNode')"
                             @mutiCommit="singleCommit($event,'dutyFlowNode')"></dk-app-single-dropdown>
     <!-- 责任工号-->
-    <dk-app-single-dropdown typeName="dutyUserCode" :show="dutyUserCodeFlag" :pdtDefectId="pdtDefectId"
-                            :barCodeId="barCodeId" :dataListDef="userList"
-
+    <dk-app-single-dropdown typeName="dutyUserCode" :show="dutyUserCodeFlag" :productId="formData.uniqueId"
+                            :dataListDef="userList"
+                            :ids="[formData.userId]"
                             @mutiClose="singleClose('dutyUserCode')"
                             @mutiCommit="singleCommit($event,'dutyUserCode')"></dk-app-single-dropdown>
     <!-- 责任工种-->
-    <dk-app-single-dropdown typeName="dutyKindWork" :show="dutyKindWorkFlag" :pdtDefectId="pdtDefectId"
-                            :barCodeId="barCodeId" :dataListDef="jobList"
-
+    <dk-app-single-dropdown typeName="dutyKindWork" :show="dutyKindWorkFlag" :productId="formData.uniqueId"
                             @mutiClose="singleClose('dutyKindWork')"
                             @mutiCommit="singleCommit($event,'dutyKindWork')"></dk-app-single-dropdown>
     <!-- 责任员工-->
-    <dk-app-muti-dropdown typeName="staff" :show="staffFlag"
-                          @mutiClose="mutiClose('staff')"
+    <dk-app-muti-dropdown typeName="staff" :show="staffFlag" :ids="formData.staffIds" :typeFlag="false"
+                          @mutiClose="mutiClose('staff')" :dataListDef="clockList"
                           @mutiCommit="mutiCommit($event,'staff')"></dk-app-muti-dropdown>
     <!-- 加载页面   -->
     <dk-app-loading :loading="loading"></dk-app-loading>
@@ -121,6 +119,9 @@ export default {
   mixins: [appFormMixin],
   data() {
     return {
+      clockListIds: [],
+      clockList: [],
+      productId: null,
       defectDeductionFlag: false, //缺陷扣罚标识
       dutyFlowNodeFlag: false, //责任工序
       dutyUserCodeFlag: false, //责任工号
@@ -157,6 +158,7 @@ export default {
       this.excute(this.$service.appCommonService, this.$service.appCommonService.getCheckPlaceCode, params).then(res => {
         if (res.data) {
           this.formData.placeId = res.data.placeId
+          this.getBlameNode()
         }
       })
     },
@@ -166,13 +168,12 @@ export default {
      * @author : 于继渤
      * @date   : 2023/3/15 8:47
      */
-    getBlameNode(pdtDefectId) {
+    getBlameNode() {
       let params = {}
       params.ftyId = this.$store.state.user.ftyId
       params.barCode = this.formData.barCode
       params.barCodeId = this.formData.uniqueId
       params.flowNodeId = this.formData.flowNodeId
-      params.pdtDefectId = pdtDefectId
       this.excute(this.$service.appCollectService, this.$service.appCollectService.getBlameNode, params).then(res => {
         if (res.code === this.$config.SUCCESS_CODE) {
           if (res.data && res.data.length > 0) {
@@ -182,6 +183,34 @@ export default {
       })
     },
 
+    /**
+     * @desc   : 获取责任员工
+     * @author : 于继渤
+     * @date   : 2023/3/21 14:19
+     */
+    getTeamStaff() {
+      let params = {}
+      params.ftyId = this.$store.state.user.ftyId
+      params.userId = this.formData.userId
+      this.excute(this.$service.commonService, this.$service.commonService.getTeamStaff, params).then(res => {
+        if (res.code === this.$config.SUCCESS_CODE) {
+
+          if (res.data.list && res.data.list.length > 0) {
+            this.clockList = res.data.list
+            let ids = []
+            let names = []
+            res.data.list.forEach(it => {
+              ids.push(it.staffId)
+              names.push(it.staffName)
+            })
+            this.formData.staffIds = ids
+            this.formData.staffNames = names.join(',')
+          }
+
+        }
+      })
+    },
+
     // region 控件 回调
 
     /**
@@ -194,22 +223,36 @@ export default {
         this.formData.defectDeductionId = Number(e.ids)
         this.formData.defectDeductionName = e.names
         this.formData.deductNum = Number(e.deductNum)
-        if (Number(e.ids)) {
-          // 查询责任工序、工号、工种
-          this.getBlameNode(Number(e.ids))
-        }
+
       }
       if (typeName === 'dutyFlowNode') {  //责任工序
         this.formData.responsibleProcessId = e.ids
         this.formData.responsibleProcess = e.names
-        this.jobList = e.jobList
-        this.userList = e.userList
-        this.formData.jobId = 0
+
+        this.clockList = e.clockList
+        let staffNamesTemp = []
+        let staffIdsTemp = []
+        e.clockList.forEach(it => {
+          staffIdsTemp.push(it.staffId)
+          staffNamesTemp.push(it.staffName)
+
+        })
+        this.formData.staffNames = staffNamesTemp.join(',')
+        this.formData.staffIds = staffIdsTemp
+
+        this.formData.userId = e.userId
+        this.formData.userName = e.userName
+        this.formData.jobId = e.jobId
+        this.formData.jobName = e.jobName
       }
 
       if (typeName === 'dutyUserCode') {  //责任工号
         this.formData.userId = Number(e.ids)
         this.formData.userName = e.names
+        if (Number(e.ids)) {
+          this.getTeamStaff()
+        }
+
       }
 
       if (typeName === 'dutyKindWork') {  //责任工种
@@ -334,7 +377,7 @@ export default {
       }
       //校验缺陷信息位置重复数据
       for (let i = 0; i < this.tableRowData.length; i++) {
-        if (this.tableRowData[i].placeId === this.formData.placeId && this.tableRowData[i].defectId ===this.formData.defectId ) {
+        if (this.tableRowData[i].placeId === this.formData.placeId && this.tableRowData[i].defectId === this.formData.defectId) {
           this.$appDialog.alert({message: this.$t('appDataDuplication')}).then(res => {
             this.formData.placeCode = ''
             this.formData.placeId = null
@@ -345,7 +388,7 @@ export default {
       }
       //校验缺陷明细位置重复数据
       for (let i = 0; i < this.productionDefectList.length; i++) {
-        if (this.productionDefectList[i].pdtPlaceId === this.formData.placeId && this.productionDefectList[i].prodDefectId ===this.formData.defectId ) {
+        if (this.productionDefectList[i].pdtPlaceId === this.formData.placeId && this.productionDefectList[i].prodDefectId === this.formData.defectId) {
           this.$appDialog.alert({message: this.$t('appDataDuplication')}).then(res => {
             this.formData.placeCode = ''
             this.formData.placeId = null
@@ -383,6 +426,15 @@ export default {
      */
     saveCollectData() {
       if (this.validData()) {
+        if(this.clockList && this.clockList.length > 0){
+          this.clockList.forEach(res => {
+            this.formData.blameStaff.push(
+              {
+                blameStaffId:res.staffId
+              }
+            )
+          })
+        }
         localStorage.setItem("app-record-process-data", JSON.stringify(this.formData))
         this.$router.go(-1)
       }
@@ -411,6 +463,9 @@ export default {
     if (this.$route.params.productionDefectList) {
       this.productionDefectList = this.$route.params.productionDefectList
     }
+    if (this.$route.params.responsibleProcessList) {
+      this.responsibleProcessList = this.$route.params.responsibleProcessList
+    }
   }
 }
 </script>

+ 1 - 1
src/view-app/app/piecework-procedure/recover/index.vue

@@ -86,7 +86,7 @@ export default {
         {name: 'modelMouldCode', title: self.$t('appMoldNo')},           //模具编号
         {name: 'colourName', title: self.$t('colourName')},              //釉色名称
       ],//每一条的内容
-      tableRowData: [{}],
+      tableRowData: [],
       //标题
       appActiveTitle: this.$route.meta.title,
       formData: {

+ 40 - 28
src/view-app/app/piecework-procedure/register/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <!--  计件工序(单点 和 集中)     功能(functionCode) index : 预干(0101) 打磨(0102) 擦洗(0103) 施釉(0104) -->
+  <!--  计件工序(单点 和 集中)     -->
   <div class="main-app-form">
     <!-- 顶部导航栏 -->
     <dk-app-nav-bar :title="appActiveTitle"
@@ -30,7 +30,7 @@
                     (opnKind ==$config.processType.unloadKilnCar?$t('unloadKilnCar'):
                     (opnKind ==$config.processType.kilnCode?$t('vehicleCode'):$t('newCarCode'))
                     )"
-      :readonly ="(opnKind && (opnKind ==$config.processType.exchangeKilnCar ||opnKind ==$config.processType.dressKilnCar) && tableRowData.length>0)"
+      :readonly="(opnKind && (opnKind ==$config.processType.exchangeKilnCar ||opnKind ==$config.processType.dressKilnCar) && tableRowData.length>0)"
       ref="carCode"
       v-model="formData.carCode"
       @changeBarCode="onCarCode('carCode')"
@@ -57,7 +57,7 @@
     <div ref="scrollTable" class="main-app-table">
       <div v-if="tableRowData.length>0" style="margin: 10px">{{ $t('appProductInformation') }}</div>
       <!--    列表-->
-      <dk-app-table :rows="rows" :tableRowData="tableRowData" >
+      <dk-app-table :rows="rows" :tableRowData="tableRowData">
       </dk-app-table>
     </div>
     <!--  保存按钮 (集中才可以显示)-->
@@ -168,14 +168,13 @@ export default {
 
             this.IsPieceSingleFlag = false;
           }
-          if (!this.userKind || this.userKind == this.$config.operationUserType.produceUse) {//生产工号是只读得状态
-            // 焦点 优先给到 原载具 没有原载具就给到载具码 没有载具码 就给到生产条码
-            if (this.opnKind && (this.opnKind == this.$config.processType.exchangeKilnCar)) {
-              this.setFocus("productCode") //焦点给到原载具
-            } else if (this.opnKind && (this.opnKind != this.$config.processType.productCode)) {
+
+          if (!this.userKind || this.userKind == this.$config.operationUserType.produceUser) {//生产工号是只读得状态
+            // 焦点 优先给到 载具码   载具码不显示得话 焦点给到产品条码
+            if (this.opnKind && (this.opnKind != this.$config.processType.productCode)) {
               this.setFocus("carCode")     //焦点给到载具码
-            } else if (this.opnKind && (this.opnKind == this.$config.processType.productCode || this.opnKind == this.$config.processType.dressKilnCar)) {
-              this.setFocus("barCode")     //焦点给到产品条码
+            }   else if (this.opnKind && (this.opnKind == this.$config.processType.productCode || this.opnKind == this.$config.processType.dressKilnCar)) {
+              this.setFocus("barCode")     //焦点
             }
           } else {
             //接收参数
@@ -222,19 +221,17 @@ export default {
       this.excute(this.$service.appCollectService, this.$service.appCollectService.checkProdUserCode, params, 'queryUser').then(res => {
         if (res.code === this.$config.SUCCESS_CODE) {
           this.formData.prodUserId = parseInt(res.data)
-          // 焦点 优先给到 原载具 没有原载具就给到载具码 没有载具码 就给到生产条码
-          if (this.opnKind && (this.opnKind == this.$config.processType.exchangeKilnCar)) {
-            this.setFocus("productCode") //焦点给到原载具
-          } else if (this.opnKind && (this.opnKind != this.$config.processType.productCode)) {
+          // 焦点 优先给到 载具码   载具码不显示得话 焦点给到产品条码
+          if (this.opnKind && (this.opnKind != this.$config.processType.productCode)) {
             this.setFocus("carCode")     //焦点给到载具码
-          } else if (this.opnKind && (this.opnKind == this.$config.processType.productCode || this.opnKind == this.$config.processType.dressKilnCar)) {
-            this.setFocus("barCode")     //焦点给到产品条码
+          }   else if (this.opnKind && (this.opnKind == this.$config.processType.productCode || this.opnKind == this.$config.processType.dressKilnCar)) {
+            this.setFocus("barCode")     //焦点
           }
         }
       })
     },
     /**
-     * @desc   : 产品条码失焦事件
+     * @desc   : 产品条码扫描
      * @author : 王英杰
      * @date   : 2023/2/10 9:16
      */
@@ -299,22 +296,26 @@ export default {
               this.opnKind == this.$config.processType.kilnCode) {
               this.tableRowData = res.data.productList
               //单品并且不是装载具触发保存
-              if (this.$config.registerType.singleProduct == this.pieceKind &&  this.$config.processType.dressKilnCar != this.opnKind) {
+              if (this.$config.registerType.singleProduct == this.pieceKind && this.$config.processType.dressKilnCar != this.opnKind) {
                 this.barCodeList = []
                 this.barCodeList.push(this.formData.barCode)
                 this.save()
               }
             }
-            if (type == "productCode") { //如果有原载具 那么就一定有新载具 故焦点给到新载具上
-              this.setFocus("carCode")
-            } else if (this.opnKind && (this.opnKind == this.$config.processType.productCode || this.opnKind == this.$config.processType.dressKilnCar)) {
-              //新载具调完接口 如果 产品条码存在 把焦点给到产品条码
+            if (type == "carCode") { //新载具 完事后 原载具存在 焦点给原 不存在给到产品条码
+              if (this.opnKind && (this.opnKind == this.$config.processType.exchangeKilnCar)) {
+                this.setFocus("productCode") //焦点给到原载具
+              } else {
+                this.setFocus("barCode")
+              }
+            } else if (type == "productCode") {//如果是原载具 下面是 产品条码
               this.setFocus("barCode")
             }
+
           }
 
         })
-       }
+      }
     },
 
     /**
@@ -393,13 +394,24 @@ export default {
       if (!this.IsPieceSingleFlag) {
         this.tableRowData = []
       }
-      if((this.opnKind == this.$config.processType.unloadKilnCar )
-        ||(this.opnKind == this.$config.processType.kilnCode )){//卸载具 载具码  清载具码
-          this.formData.carCode = ""    //模具码
+      if ((this.opnKind == this.$config.processType.unloadKilnCar)
+        || (this.opnKind == this.$config.processType.kilnCode)) {//卸载具 载具码  清载具码
+        this.formData.carCode = ""    //模具码
       }
       this.barCodeList = []
-      this.setFocus("prodUser") //保存完事 焦点回落到生产工号
-      //todo  焦点问题
+      // 下面是焦点问题
+      if (!this.userKind || this.userKind == this.$config.operationUserType.produceUser) {//生产工号是只读得状态
+        // 焦点 优先给到 载具码   载具码不显示得话 焦点给到产品条码
+        if (this.opnKind && (this.opnKind != this.$config.processType.productCode)) {
+          this.setFocus("carCode")     //焦点给到载具码
+        }   else if (this.opnKind && (this.opnKind == this.$config.processType.productCode || this.opnKind == this.$config.processType.dressKilnCar)) {
+          this.setFocus("barCode")     //焦点
+        }
+      } else {
+        //接收参数
+        this.setFocus("prodUser") //集中得话 保存之后 焦点给到生产工号
+      }
+
     },
     /**
      * @desc   : 给参数赋值

+ 237 - 302
src/view-app/app/prod-management/in-process-inventory-list/detail.vue

@@ -1,375 +1,310 @@
 <template>
-  <!--  在产盘点 新建-->
+  <!-- 盘点操作 -->
   <div class="main-app-form">
+
     <!-- 顶部导航栏 -->
-    <dk-app-nav-bar :title="$t('appAddProdCheckTitle')"
+    <dk-app-nav-bar :title="$t('appMoldInventoryDetail')"
                     @click-left="onClickLeft"></dk-app-nav-bar>
-    <!-- 盘点单名 -->
-    <dk-app-field
-      ref="checkName"
-      v-model="formData.checkName"
-      :label="$t('appCheckName')"
-      @input="onInput($event,'checkName')"
-    />
-
-    <!--    盘点工序-->
+    <!-- 盘点单号   -->
     <dk-app-field
-      v-model="formData.processNodeName"
-      :label="$t('appProdCheckNode')"
+      v-model="item.checkCode"
+      :label="$t('appCheckCode')"
       :readonly="true"
-      @click="openMutiDropdown('processNode')"
-      placeholderType="choose" is-link arrow-direction="down"
-    />
-    <!--    完成时间-->
-    <dk-app-field
-      v-model="formData.finishTimeName"
-      :label="$t('appFinishTime')"
-      :readonly="true"
-      :clearable="true"
-      @click="onClickFinishTime"
-      placeholderType="choose" is-link arrow-direction="down"
-    />
-    <!--    生产工号-->
-    <dk-app-field
-      v-model="formData.prodUserName"
-      :label="$t('appProductionUserIds')"
-      :readonly="true"
-      @click="openMutiDropdown('prodUser')"
-      placeholderType="choose" is-link arrow-direction="down"
     />
 
-    <!--    产品型号-->
+    <!-- 产品条码   -->
     <dk-app-field
-      v-model="formData.modelProductName"
-      :label="$t('appProductModel')"
-      :readonly="true"
-      @click="openMutiDropdown('modelProduct')"
-      placeholderType="choose" is-link arrow-direction="down"
+      v-model="pdtBarcode"
+      soundEffect="sound"
+      :label="$t('appProductCode')"
+      placeholderType="scan"
+      ref="pdtBarcode"
+      @changeBarCode="changeBarCode"
     />
+    <!--    未盘数量 -->
+    <div style="display: flex">
+      <div style="width: 50%">
+        <dk-app-field
+          typeInput="number"
+          v-model="uncheckQty"
+          :label="$t('appNotCountedQuantity')"
+          :readonly="true"
+        />
+      </div>
+      <!--    已盘数量-->
+      <div style="width: 50%">
+        <dk-app-field
+          typeInput="number"
+          v-model="checkedQty"
+          :label="$t('appCountedQuantity')"
+          :readonly="true"
+        />
+      </div>
+    </div>
+
+    <!--    盘盈数量-->
+    <div style="display: flex">
+      <div style="width: 50%">
+        <dk-app-field
+          typeInput="number"
+          v-model="plusQty"
+          :label="$t('appInventorySurplusQuantity')"
+          :readonly="true"
+        />
+      </div>
+
+      <div style="width: 50%">
+        <!--    盘点总数-->
+        <dk-app-field
+          typeInput="number"
+          v-model="total"
+          :label="$t('appInventoryQuantity')"
+          :readonly="true"
+        />
+
+      </div>
 
-    <!--    盘点工号-->
-    <dk-app-field
-      v-model="formData.checkUserNames"
-      :label="$t('appCheckUserIds')"
-      :readonly="true"
-      @click="openMutiDropdown('user')"
-      placeholderType="choose" is-link arrow-direction="down"
-    />
 
-    <!--    保存-->
-    <div class="app_save_bottom-class">
-      <dk-app-button :soundEffectFlag="false" :disabled="loading" @click="save">{{ $t('appSave') }}
-      </dk-app-button>
     </div>
-    <div>
-
-      <!--      完成日期组件-->
-      <dk-app-dropdown-date-day :show="finishTimeFlag" @dateCommit="dateCommit" @onClose="onCloseDateDay"
-                                @onCloseChooseDate="onCloseDateDay"></dk-app-dropdown-date-day>
-      <!--      盘点工序-->
-      <dk-app-muti-dropdown typeName="processNode" :show="processNodeFlag" :ids="ids"
-                            @mutiClose="mutiClose('processNode')"
-                            @mutiCommit="mutiCommit($event,'processNode')"></dk-app-muti-dropdown>
-      <!--      员工-->
-      <dk-app-muti-dropdown typeName="user" :show="userFlag" :ids="ids"
-                            @mutiClose="mutiClose('user')"
-                            @mutiCommit="mutiCommit($event,'user')"></dk-app-muti-dropdown>
-      <!--      产品型号-->
-      <dk-app-muti-dropdown typeName="modelProduct" :show="modelProductFlag"
-                            @mutiClose="mutiClose('modelProduct')" :ids="ids"
-                            @mutiCommit="mutiCommit($event,'modelProduct')"></dk-app-muti-dropdown>
-      <!--      生产工号-->
-      <dk-app-muti-dropdown typeName="user" :show="prodUserFlag" :ids="ids"
-                            @mutiClose="mutiClose('prodUser')"
-                            @mutiCommit="mutiCommit($event,'prodUser')"></dk-app-muti-dropdown>
-      <dk-app-loading :loading="loading"></dk-app-loading>
+
+
+    <van-tabs v-model="active" @click="onClickTabs">
+      <!--      未盘点-->
+      <van-tab :title="$t('appNotCounted')">
+      </van-tab>
+      <!--      已盘点-->
+      <van-tab :title="$t('appCounted')">
+      </van-tab>
+      <!--      盘盈-->
+      <van-tab :title="$t('appInventorySurplus')">
+      </van-tab>
+
+
+    </van-tabs>
+    <div style="margin: 10px 10px 10px;border-radius: 7px;box-shadow:2px 2px 5px #e5e5e6;">
+      <div style="background: #FFFFFF;box-shadow: 0px 5px 10px rgba(225, 229, 238, 0.6);border-radius: 7px;">
+
+        <!--        列表-->
+        <dk-app-table :imgFlag="false"
+                      :columns="columns"
+                      :boxShadowFlag="false"
+                      :tableData="tableData"
+                      :rows="[]">
+        </dk-app-table>
+
+        <div style="height: 10px;"></div>
+      </div>
     </div>
 
+    <dk-app-loading :loading="loading"></dk-app-loading>
+
+
   </div>
-</template>
 
+
+</template>
 <script>
 
-import {appFormMixin} from '@/mixins/appform.js'
+import {appIndexMixin} from '@/mixins/appindex.js'
 
 export default {
   name: "app-in-process-inventory-detail",
-  mixins: [appFormMixin],
+  mixins: [appIndexMixin],
   data() {
     return {
-      ids: [],
-      showFinishTime: false,
-      prodUserFlag: false,
-      modelProductFlag: false,
-      finishTimeDefaultSearch: null,
-      userFlag: false, //员工标识
-      finishTimeFlag: false, //生产日期标识
-      modelCategoryFlag: false, //模具种类标识
-      processNodeFlag: false, //盘点工序
-      formData: {
-        checkName: '', //盘点单名
-        processNodeIds: null,//盘点工序
-        processNodeName: "",//盘点工序
-        checkUserIds: null,//盘点工号
-        checkUserNames: '', //盘点工号名称
-        modelProductName: '', //产品型号
-        modelProductIds: null, //产品型号id
-        prodUserName: '', //生产工号
-        prodUserIds: null, //生产工号id
-        finishTime: null,
-        finishTimeName: '', //完成日期
-        remarks: '', //备注
-        makeItems: {},  //制单条件
-        makeUserId: this.$store.state.user.id, //制单工号
-        ftyId: this.$store.state.user.ftyId //工厂id
-      },
+      active: 0, //table标识
+      activeTitle: this.$t('appNotCounted'), //标题
+      item: {},
+      pdtBarcode: '',
+      checkKind: this.$t('appCheckSu'), //盘点状态
+      tableData: [],
+      plusQty: 0, //盘盈数量
+      checkedQty: 0,//已盘数量
+      uncheckQty: 0, //盘盈
+      lossQty: 0, //盘亏
+      total: 0, //总数
+      columns: [
+        {name: 'pdtBarcode', title: this.$t('appProductCode'), width: '35%'}, //产品条码
+        {name: 'modelName', title: this.$t('appProductModel'), width: '35%'}, //产品型号
+        {name: 'pdtProdStatus', title: this.$t('appPdtProdStatus'), width: '30%'}, //产品状态
+
+      ],
 
     }
   },
   methods: {
 
-    // region 保存
-
+    // region 查询
     /**
-     * @desc   : 参数赋值
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     *   @desc   : 设置查询参数
+     *   @date   : 2023/02/01
+     *   @author : 于继渤
      */
-    setParams() {
-      this.params = {...this.formData}
-      this.params.checkCode = new Date().getTime() + ''
-      this.params.finishTimeStart = this.formData.finishTime ? this.formData.finishTime[0] : ''
-      this.params.finishTimeEnd = this.formData.finishTime ? this.formData.finishTime[1] : ''
-      //处理制单条件
-      this.params.makeItems = {
-        finishTime: this.params.finishTime ? this.params.finishTime : [],//完成日期范围
-        checkUserIds: this.params.checkUserIds ? this.params.checkUserIds : [],//盘点工号
-        prodUserIds: this.params.prodUserIds ? this.params.prodUserIds : [],//生产工号
-        modelProductIds: this.params.modelProductIds ? this.params.modelProductIds : [],//产品型号
-        processNodeIds: this.params.processNodeIds ? this.params.processNodeIds : [],//盘点工序
+    setSearchParams() {
+      let params = this.searchList
+      if (params === undefined) {
+        params = {}
       }
+      params.checkKind = this.checkKind //盘点状态
+      params.checkId = this.item.checkId
+      return params
     },
-
     /**
-     * @desc   : 检验
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    validData(flag) {
-      //盘点单名不能为空判
-      if (!this.formData.checkName) {
-        this.$appToast(this.$t('inputWords', {'search-name': this.$t('appCheckName')}));
-        return false;
-      }
-      if (!this.params.processNodeIds || this.params.processNodeIds.length === 0) {
-        this.$appToast(this.$t('selectWords', {'search-name': this.$t('appProdCheckNode')}));
-        return false;
-      }
-      return true;
-    },
-
-    /**
-     * @desc   : 保存方法
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     *   @desc   : 获取数据
+     *   @date   :  2023/02/01
+     *   @author : 于继渤
      */
-    saveData() {
-      return this.excute(this.$service.appProdCheckService, this.$service.appProdCheckService.insert, this.params)
+    getData() {
+      // 参数设置
+      let params = this.setSearchParams()
+      this.loading = true
+      this.excute(this.$service.appProdCheckItemService, this.$service.appProdCheckItemService.selectByCond, params).then(res => {
+        this.loading = false
+        if (res.code === this.$config.SUCCESS_CODE) {
+          if (res.data.list && res.data.list.length > 0) {
+            this.tableData = res.data.list
+          }
+
+        }
+      })
     },
     /**
-     * @desc   : 清空表单
+     * @desc   : 盘点数量
      * @author : 于继渤
-     * @date   : 2023/3/7 10:59
+     * @date   : 2023/3/7 10:55
      */
-    clear() {
-      this.ids = []
-      this.formData = {
-        checkName: '', //盘点单名
-        processNodeIds: null,//盘点工序
-        processNodeName: "",//盘点工序
-        checkUserIds: null,//盘点工号
-        checkUserNames: '', //盘点工号名称
-        modelProductName: '', //产品型号
-        modelProductIds: null, //产品型号id
-        prodUserName: '', //生产工号
-        prodUserIds: null, //生产工号id
-        finishTime: null,
-        finishTimeName: '', //完成日期
-        remarks: '', //备注
-        makeItems: {},  //制单条件
-        makeUserId: this.$store.state.user.id, //制单工号
-        ftyId: this.$store.state.user.ftyId //工厂id
+    getCheckItemQuantity(item) {
+      let params = {
+        checkId: item.checkId
       }
-    },
-    // endregion
-
-    // region 控件事件
-    /**
-     * @desc   : 输入事件
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    onInput(e, key) {
-      this.formData[key] = e
-    },
-
-    /**
-     * @desc   : 生产日期打开选择事件
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    onClickFinishTime(e) {
-      this.finishTimeFlag = true
-      this.finishTimeDefaultSearch = [new Date(), new Date()]
-    },
-
-
-    /**
-     * @desc   : 生产日期关闭选择事件
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    onCloseDateDay() {
-      this.finishTimeFlag = false
-    },
-
-    /**
-     * @desc   : 时间日期确定事件
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    dateCommit(e) {
-      this.finishTimeFlag = false
-      this.formData.finishTimeName = (e.date[0]) + ' 至 ' + (e.date[1])
-      this.formData.finishTime = [(e.date[0]), (e.date[1])]
+      this.loading = true
+      this.excute(this.$service.appProdCheckItemService, this.$service.appProdCheckItemService.selectCheckItemQuantity, params).then(res => {
+        this.loading = false
+        if (res.code === this.$config.SUCCESS_CODE) {
+          this.total = res.data.total ? res.data.total : 0
+          let plusQty = 0
+          let checkedQty = 0
+          let uncheckQty = 0
+          let lossQty = 0
+          if (res.data.checkKindQty && res.data.checkKindQty.length > 0) {
+            res.data.checkKindQty.forEach(item => {
+              if (item.checkkindqty === 'plusQty') {
+                plusQty = item.quantity
+              }
+              if (item.checkkindqty === 'checkedQty') {
+                checkedQty = item.quantity
+              }
+              if (item.checkkindqty === 'uncheckQty') {
+                uncheckQty = item.quantity
+              }
+              if (item.checkkindqty === 'lossQty') {
+                lossQty = item.quantity
+              }
+            })
+            //盘点数量
+            this.plusQty = plusQty
+            this.checkedQty = checkedQty
+            this.uncheckQty = uncheckQty
+            this.lossQty = lossQty
+          }
+
+        }
+      })
     },
 
+    // endregion
 
+    // region 保存
     /**
-     * @desc   : 日期格式返回方法
+     * @desc   : 模具条码回车事件
      * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     * @date   : 2023/2/8 10:05
      */
-    formatDate(date) {
-      return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
+    changeBarCode(e) {
+      let params = {
+        pdtBarcode: e,
+        checkId: this.item.checkId,
+        checkItemUserId: this.$store.state.user.id,
+        ftyId: this.$store.state.user.ftyId
+      }
+      this.loading = true
+      this.excute(this.$service.appProdCheckItemService, this.$service.appProdCheckItemService.insertCheck, params).then(res => {
+        this.loading = false
+        if (res.code === this.$config.SUCCESS_CODE) {
+          this.pdtBarcode = "" //清空模具条码
+          this.getData();
+          this.getCheckItemQuantity(this.item);
+        } else {
+          this.pdtBarcode = "" //清空模具条码
+          this.$appDialog.alert({message: res.message}).then(() => {
+            this.$refs.pdtBarcode.$refs.input.focus()
+          });
+
+        }
+      })
     },
 
-    /**
-     * @desc   : 生产日期确定时间
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    onConfirmProduceDate(date) {
-      this.showFinishTime = false;
-      this.finishTime = this.formatDate(date);
-    },
 
-    /**
-     * @desc   : 多选侧拉打开
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    openMutiDropdown(e) {
 
-      if (e === 'user') {
-        this.userFlag = true
-        this.ids = this.formData.checkUserIds
-      }
-      if (e === 'processNode') { //盘点工序
-        this.processNodeFlag = true
-        this.ids = this.formData.processNodeIds
-      }
-      //产品型号
-      if (e === 'modelProduct') {
-        this.modelProductFlag = true
-        this.ids = this.formData.modelProductIds
-      }
 
-      //盘点工序
-      if (e === 'processNode') {
-        this.processNodeFlag = true
-        this.ids = this.formData.processNodeIds
-      }
-      if (e === 'prodUser') {
-        this.prodUserFlag = true
-        this.ids = this.formData.prodUserIds
-      }
 
-    },
-    /**
-     * @desc   : 多选侧拉关闭
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    mutiClose(e) {
-      if (e === 'user') {
-        this.userFlag = false
-      }
-      if (e === 'processNode') {
-        this.processNodeFlag = false
-      }
-      //模具种类
-      if (e === 'modelProduct') {
-        this.modelProductFlag = false
-      }
-      if (e === 'prodUser') {
-        this.prodUserFlag = false
-      }
+    // endregion
 
-    },
     /**
-     * @desc   : 多选侧拉确定
+     * @desc   : TAB切换事件
      * @author : 于继渤
      * @date   : 2023/2/7 17:26
      */
-    mutiCommit(e, typeName) {
-      if (typeName === 'user') {
-        this.formData.checkUserNames = e.names
-        this.formData.checkUserIds = e.idList
-      }
-      if (typeName === 'processNode') {
-        this.formData.processNodeName = e.names
-        this.formData.processNodeIds = e.idList
-      }
-      //产品型号
-      if (typeName === 'modelProduct') {
-        this.formData.modelProductName = e.names
-        this.formData.modelProductIds = e.idList
-
+    onClickTabs(name, title) {
+      this.tableData = []
+      if (title === this.$t('appNotCounted')) {
+        //未
+        this.checkKind = this.$t('appCheckNo')
+        this.active = 0
+
+      } else if (title === this.$t('appCounted')) {
+        //已
+        this.checkKind = this.$t('appCheckSu')
+        this.active = 1
+      } else if (title === this.$t('appInventorySurplus')) {
+        //盈
+        this.checkKind = this.$t('appCheckWin')
+        this.active = 2
       }
-      //模具型号
-      if (typeName === 'modelMould') {
-        this.formData.modelMouldName = e.names
-        this.formData.modelMouldIds = e.idList
-      }
-      //生产工号
-      if (typeName === 'prodUser') {
-        this.formData.prodUserName = e.names
-        this.formData.prodUserIds = e.idList
-      }
-
-
+      this.activeTitle = title
+      this.getData()
     },
 
-    // endregion
 
   },
 
-  mounted() {
-    // 因为是封装的组件所以是两层
-    this.$refs.checkName.$refs.input.focus()
-  },
   /**
-   * @desc   : 初始生命周期
+   * @desc   : 页面初始化
    * @author : 于继渤
    * @date   : 2023/2/7 17:26
    */
   created(e) {
+    if (this.$route.params.item) {
+      this.item = this.$route.params.item.item
+      this.active = 1
+      this.getData()
+      this.getCheckItemQuantity(this.$route.params.item.item)
+    }
+  },
+  mounted() {
+    // 因为是封装的组件所以是两层
+    this.$refs.pdtBarcode.$refs.input.focus()
+  },
+}
+</script>
 
+<style lang="less">
+.van-tabs__line {
+  background-color: #DEC9A3 !important;
+}
 
-  }
+.van-tab--active {
+  color: #1B365D !important;
 }
-</script>
 
-<style scoped>
 </style>

+ 140 - 299
src/view-app/app/prod-management/in-process-inventory-list/index.vue

@@ -1,373 +1,214 @@
 <template>
-  <!--  在产盘点 新建-->
+  <!-- 在产盘点列表 -->
   <div class="main-app-form">
     <!-- 顶部导航栏 -->
-    <dk-app-nav-bar :title="$t('appAddProdCheckTitle')"
-                    @click-left="onClickLeft"></dk-app-nav-bar>
-    <!-- 盘点单 -->
+    <dk-app-nav-bar :title="$t('appInProcessInventory')"
+                    @click-left="onClickLeft" @click-right="onClickRight"></dk-app-nav-bar>
+    <!-- 盘点单 -->
     <dk-app-field
-      ref="checkName"
-      v-model="formData.checkName"
-      :label="$t('appCheckName')"
-      @input="onInput($event,'checkName')"
+      ref="searchText"
+      v-model="searchText"
+      :label="$t('appCheckCode')"
+      @changeBarCode="onSearch"
     />
-
-    <!--    盘点工序-->
-    <dk-app-field
-      v-model="formData.processNodeName"
-      :label="$t('appProdCheckNode')"
-      :readonly="true"
-      @click="openMutiDropdown('processNode')"
-      placeholderType="choose" is-link arrow-direction="down"
-    />
-    <!--    完成时间-->
-    <dk-app-field
-      v-model="formData.finishTimeName"
-      :label="$t('appFinishTime')"
-      :readonly="true"
-      :clearable="true"
-      @click="onClickFinishTime"
-      placeholderType="choose" is-link arrow-direction="down"
-    />
-    <!--    生产工号-->
-    <dk-app-field
-      v-model="formData.prodUserName"
-      :label="$t('appProductionUserIds')"
-      :readonly="true"
-      @click="openMutiDropdown('prodUser')"
-      placeholderType="choose" is-link arrow-direction="down"
-    />
-
-    <!--    产品型号-->
-    <dk-app-field
-      v-model="formData.modelProductName"
-      :label="$t('appProductModel')"
-      :readonly="true"
-      @click="openMutiDropdown('modelProduct')"
-      placeholderType="choose" is-link arrow-direction="down"
-    />
-
-    <!--    盘点工号-->
-    <dk-app-field
-      v-model="formData.checkUserNames"
-      :label="$t('appCheckUserIds')"
-      :readonly="true"
-      @click="openMutiDropdown('user')"
-      placeholderType="choose" is-link arrow-direction="down"
-    />
-
-    <!--    保存-->
-    <div class="app_save_bottom-class">
-      <dk-app-button :soundEffectFlag="false" :disabled="loading" @click="save">{{ $t('appSave') }}
-      </dk-app-button>
-    </div>
-    <div>
-
-      <!--      完成日期组件-->
-      <dk-app-dropdown-date-day :show="finishTimeFlag" @dateCommit="dateCommit" @onClose="onCloseDateDay"
-                                @onCloseChooseDate="onCloseDateDay"></dk-app-dropdown-date-day>
-      <!--      盘点工序-->
-      <dk-app-muti-dropdown typeName="processNode" :show="processNodeFlag" :ids="ids"
-                            @mutiClose="mutiClose('processNode')"
-                            @mutiCommit="mutiCommit($event,'processNode')"></dk-app-muti-dropdown>
-      <!--      员工-->
-      <dk-app-muti-dropdown typeName="user" :show="userFlag" :ids="ids"
-                            @mutiClose="mutiClose('user')"
-                            @mutiCommit="mutiCommit($event,'user')"></dk-app-muti-dropdown>
-      <!--      产品型号-->
-      <dk-app-muti-dropdown typeName="modelProduct" :show="modelProductFlag"
-                            @mutiClose="mutiClose('modelProduct')" :ids="ids"
-                            @mutiCommit="mutiCommit($event,'modelProduct')"></dk-app-muti-dropdown>
-      <!--      生产工号-->
-      <dk-app-muti-dropdown typeName="user" :show="prodUserFlag" :ids="ids"
-                            @mutiClose="mutiClose('prodUser')"
-                            @mutiCommit="mutiCommit($event,'prodUser')"></dk-app-muti-dropdown>
-      <dk-app-loading :loading="loading"></dk-app-loading>
+    <van-dropdown-menu    active-color="#1B365D">
+      <!-- 日期 -->
+      <van-dropdown-item ref='pick' :title="createTimeType.text">
+        <dk-app-dropdown-date ref="createTime" dateType="createTime" :blankFlag="false"
+                              :defaultValue='createTimeType.value' @dateCommit="dateCommit"></dk-app-dropdown-date>
+      </van-dropdown-item>
+    </van-dropdown-menu>
+    <!--    列表-->
+    <div ref="scrollTable" class="main-app-table">
+      <dk-app-table
+        :rows="rows"
+        :boxShadowFlag="false"
+        :tableRowData="tableRowData"
+        @onClickCheckbox="onClickCheckbox"
+        @onOpenDetail="onOpenDetail"
+      >
+      </dk-app-table>
     </div>
-
+    <dk-app-loading :loading="loading" ></dk-app-loading>
   </div>
 </template>
-
 <script>
 
-import {appFormMixin} from '@/mixins/appform.js'
+import {appIndexMixin} from '@/mixins/appindex.js'
 
 export default {
   name: "app-in-process-inventory-list",
-  mixins: [appFormMixin],
+  mixins: [appIndexMixin],
   data() {
     return {
-      ids: [],
-      showFinishTime: false,
-      prodUserFlag: false,
-      modelProductFlag: false,
-      finishTimeDefaultSearch: null,
-      userFlag: false, //员工标识
-      finishTimeFlag: false, //生产日期标识
-      modelCategoryFlag: false, //模具种类标识
-      processNodeFlag: false, //盘点工序
-      formData: {
-        checkName: '', //盘点单名
-        processNodeIds: null,//盘点工序
-        processNodeName: "",//盘点工序
-        checkUserIds: null,//盘点工号
-        checkUserNames: '', //盘点工号名称
-        modelProductName: '', //产品型号
-        modelProductIds: null, //产品型号id
-        prodUserName: '', //生产工号
-        prodUserIds: null, //生产工号id
-        finishTime: null,
-        finishTimeName: '', //完成日期
-        remarks: '', //备注
-        makeItems: {},  //制单条件
-        makeUserId: this.$store.state.user.id, //制单工号
-        ftyId: this.$store.state.user.ftyId //工厂id
-      },
-
+      loading: false, //加载标识
+      searchText: '', //搜索条件
+      createTimeSearch: [new Date().getTime() + 100, new Date().getTime() + 100], //创建日期
+      createTimeType: {
+        text: '本日',
+        value: 1
+      }, //日期文本
+      rightText: '', //右侧文本
+      showPopup: false, //弹窗标识
+      rows: [
+        {name: 'checkCode', title: this.$t('appCheckCode')}, // 盘点单号
+        {name: 'checkName', title: this.$t('appCheckName')}, // 盘点单名
+        {name: 'makeTime', title: this.$t('appMakeTime')}, //制单日期
+      ],
+      tableRowData: []
     }
   },
   methods: {
-
-    // region 保存
-
+    // region 查询
     /**
-     * @desc   : 参数赋值
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     *   @desc   : 设置查询参数
+     *   @date   : 2023/02/01
+     *   @author : 于继渤
      */
-    setParams() {
-      this.params = {...this.formData}
-      this.params.checkCode = new Date().getTime() + ''
-      this.params.finishTimeStart = this.formData.finishTime ? this.formData.finishTime[0] : ''
-      this.params.finishTimeEnd = this.formData.finishTime ? this.formData.finishTime[1] : ''
-      //处理制单条件
-      this.params.makeItems = {
-        finishTime: this.params.finishTime ? this.params.finishTime : [],//完成日期范围
-        checkUserIds: this.params.checkUserIds ? this.params.checkUserIds : [],//盘点工号
-        prodUserIds: this.params.prodUserIds ? this.params.prodUserIds : [],//生产工号
-        modelProductIds: this.params.modelProductIds ? this.params.modelProductIds : [],//产品型号
-        processNodeIds: this.params.processNodeIds ? this.params.processNodeIds : [],//盘点工序
-      }
+    setSearchParams() {
+      let params = this.searchList
+      if (params === undefined) {
+        params = {}
+      }
+      params.makeTimeStart = this.format(this.createTimeSearch[0]) ? this.format(this.createTimeSearch[0]) + ' 00:00:00' : ''// 开始时间
+      params.makeTimeEnd = this.format(this.createTimeSearch[1]) ? this.format(this.createTimeSearch[1]) + ' 23:59:59' : '' //结束时间
+      params.searchText = this.searchText
+      params.ftyId = this.$store.state.user.ftyId
+      params.checkUserId = this.$store.state.user.id
+      return params
     },
-
     /**
-     * @desc   : 检验
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     *   @desc   : 获取数据
+     *   @date   :  2023/02/01
+     *   @author : 于继渤
      */
-    validData(flag) {
-      //盘点单名不能为空判
-      if (!this.formData.checkName) {
-        this.$appToast(this.$t('inputWords', {'search-name': this.$t('appCheckName')}));
-        return false;
-      }
-      if (!this.params.processNodeIds || this.params.processNodeIds.length === 0) {
-        this.$appToast(this.$t('selectWords', {'search-name': this.$t('appProdCheckNode')}));
-        return false;
-      }
-      return true;
+    getData() {
+      // 参数设置
+      let params = this.setSearchParams()
+      let _this = this
+      // 查询职位接口
+      this.loading = true
+      this.excute(this.$service.appProdCheckService, this.$service.appProdCheckService.selectByCond, params).then(res => {
+        this.loading = false
+        if (res.code === _this.$config.SUCCESS_CODE) {
+          if (res.data.list && res.data.list.length > 0) {
+            // res.data.list.forEach(item => {
+            //   item.checked = false
+            // })
+            _this.tableRowData = res.data.list
+          }
+
+        }
+      })
     },
 
+
     /**
-     * @desc   : 保存方法
+     * @desc : 搜索事件
      * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     * @date : 2022/5/24 12:16
      */
-    saveData() {
-      return this.excute(this.$service.appProdCheckService, this.$service.appProdCheckService.insert, this.params)
-    },
-    /**
-     * @desc   : 清空表单
-     * @author : 于继渤
-     * @date   : 2023/3/7 10:59
-     */
-    clear() {
-      this.ids = []
-      this.formData = {
-        checkName: '', //盘点单名
-        processNodeIds: null,//盘点工序
-        processNodeName: "",//盘点工序
-        checkUserIds: null,//盘点工号
-        checkUserNames: '', //盘点工号名称
-        modelProductName: '', //产品型号
-        modelProductIds: null, //产品型号id
-        prodUserName: '', //生产工号
-        prodUserIds: null, //生产工号id
-        finishTime: null,
-        finishTimeName: '', //完成日期
-        remarks: '', //备注
-        makeItems: {},  //制单条件
-        makeUserId: this.$store.state.user.id, //制单工号
-        ftyId: this.$store.state.user.ftyId //工厂id
-      }
+    onSearch(e) {
+      this.searchText = e
+      this.tableRowData = []
+      this.getData()
     },
     // endregion
 
-    // region 件事件
+    // region 组件事件
     /**
-     * @desc   : 输入事件
+     * @desc : 日期组件后的回调
      * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     * @date : 2022/5/24 12:16
      */
-    onInput(e, key) {
-      this.formData[key] = e
+    dateCommit(e) {
+      this.$refs.pick.toggle(false)  //关闭日期下拉
+      let dateType = e.dateType
+      if (dateType === 'createTime') {
+        let data = e.date
+        this.createTimeSearch = data
+        this.createTimeType = e.dateDefault
+      }
+      this.tableRowData = []
+      this.getData()
     },
 
     /**
-     * @desc   : 生产日期打开选择事件
+     * @desc   : 日期格式化
      * @author : 于继渤
      * @date   : 2023/2/7 17:26
      */
-    onClickFinishTime(e) {
-      this.finishTimeFlag = true
-      this.finishTimeDefaultSearch = [new Date(), new Date()]
+    format(time) {
+      if (!time || time == '') {
+        return ''
+      }
+      let now = new Date(time);
+      let year = now.getFullYear()
+      let month = now.getMonth() + 1
+      let day = now.getDate()
+      return year + "-" + (month < 10 ? "0" + month : month) + "-" + (day < 10 ? "0" + day : day);
     },
 
 
     /**
-     * @desc   : 生产日期关闭选择事件
+     * @desc   : 复选框点击事件
      * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     * @date   : 2023/2/7 17:23
      */
-    onCloseDateDay() {
-      this.finishTimeFlag = false
-    },
-
-    /**
-     * @desc   : 时间日期确定事件
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    dateCommit(e) {
-      this.finishTimeFlag = false
-      this.formData.finishTimeName = (e.date[0]) + ' 至 ' + (e.date[1])
-      this.formData.finishTime = [(e.date[0]), (e.date[1])]
+    onClickCheckbox(item) {
     },
 
 
     /**
-     * @desc   : 日期格式返回方法
+     * @desc   : 列表组件点击事件
      * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     * @date   : 2023/2/7 17:23
      */
-    formatDate(date) {
-      return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
+    onOpenDetail(item) {
+      this.$router.push({name: 'app-in-process-inventory-detail', params: {item: item}})
     },
 
     /**
-     * @desc   : 生产日期确定时间
+     * @desc   : 点击标题右侧事件
      * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     * @date   : 2023/2/7 17:23
      */
-    onConfirmProduceDate(date) {
-      this.showFinishTime = false;
-      this.finishTime = this.formatDate(date);
+    onClickRight() {
+      this.showPopup = true
     },
 
     /**
-     * @desc   : 多选侧拉打开
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    openMutiDropdown(e) {
-
-      if (e === 'user') {
-        this.userFlag = true
-        this.ids = this.formData.checkUserIds
-      }
-      if (e === 'processNode') { //盘点工序
-        this.processNodeFlag = true
-        this.ids = this.formData.processNodeIds
-      }
-      //产品型号
-      if (e === 'modelProduct') {
-        this.modelProductFlag = true
-        this.ids = this.formData.modelProductIds
-      }
-
-      //盘点工序
-      if (e === 'processNode') {
-        this.processNodeFlag = true
-        this.ids = this.formData.processNodeIds
-      }
-      if (e === 'prodUser') {
-        this.prodUserFlag = true
-        this.ids = this.formData.prodUserIds
-      }
-
-    },
-    /**
-     * @desc   : 多选侧拉关闭
-     * @author : 于继渤
-     * @date   : 2023/2/7 17:26
-     */
-    mutiClose(e) {
-      if (e === 'user') {
-        this.userFlag = false
-      }
-      if (e === 'processNode') {
-        this.processNodeFlag = false
-      }
-      //模具种类
-      if (e === 'modelProduct') {
-        this.modelProductFlag = false
-      }
-      if (e === 'prodUser') {
-        this.prodUserFlag = false
-      }
-
-    },
-    /**
-     * @desc   : 多选侧拉确定
+     * @desc   : 关闭pupop弹窗
      * @author : 于继渤
-     * @date   : 2023/2/7 17:26
+     * @date   : 2023/2/7 17:23
      */
-    mutiCommit(e, typeName) {
-      if (typeName === 'user') {
-        this.formData.checkUserNames = e.names
-        this.formData.checkUserIds = e.idList
-      }
-      if (typeName === 'processNode') {
-        this.formData.processNodeName = e.names
-        this.formData.processNodeIds = e.idList
-      }
-      //产品型号
-      if (typeName === 'modelProduct') {
-        this.formData.modelProductName = e.names
-        this.formData.modelProductIds = e.idList
-
-      }
-      //模具型号
-      if (typeName === 'modelMould') {
-        this.formData.modelMouldName = e.names
-        this.formData.modelMouldIds = e.idList
-      }
-      //生产工号
-      if (typeName === 'prodUser') {
-        this.formData.prodUserName = e.names
-        this.formData.prodUserIds = e.idList
-      }
-
-
+    onClose() {
+      this.showPopup = false
     },
-
     // endregion
-
   },
 
-  mounted() {
-    // 因为是封装的组件所以是两层
-    this.$refs.checkName.$refs.input.focus()
-  },
   /**
    * @desc   : 初始生命周期
    * @author : 于继渤
-   * @date   : 2023/2/7 17:26
+   * @date   : 2023/2/7 17:23
    */
   created(e) {
-
-
-  }
+    //盘点单号  新建跳转来的
+    if (this.$route.params.checkCode) {
+      this.searchText = this.$route.params.checkCode
+      this.tableRowData = []
+      this.getData()
+    }else {
+      this.onSearch()
+    }
+  },
+  mounted() {
+    // 因为是封装的组件所以是两层
+    this.$refs.searchText.$refs.input.focus()
+    // 设置滚动的位置和高度
+    this.setAppTableHeight(0)
+  },
 }
 </script>
 

+ 5 - 5
src/view-app/login/app-login.vue

@@ -6,21 +6,22 @@
       style="height: 100%;width: 100%;display: flex;flex-direction: column;align-items: center;">
       <van-image style="width: 232px;height: 50px;margin-top: 15%" :src="hgLogon"></van-image>
 
-      <div style="width: 332px;height: 260px;margin-top:30px;  display: flex;border-radius: 10px; ;
+      <div style="width: 85%;height: 260px;margin-top:30px;  display: flex;border-radius: 10px;z-index:1;position:fixed; top: calc( 30px + 15% );
         flex-direction: column;align-items: center;justify-content: center;background: #8c939d">
         <div style="width: 80%;border-radius: 3px;margin: 10px 20px">
           <!-- 输输入用户名 -->
-          <dk-app-field ref="ftyCode" v-model="ftyCode"   :label="$t('appftyCode')"
+          <dk-app-field ref="ftyCode" v-model="ftyCode" :label="$t('appftyCode')"
                         @changeBarCode="setFocus('userCode')"/>
         </div>
         <div style="width: 80%;border-radius: 3px;margin: 10px 20px  ">
           <!-- 输输入用户名 -->
-          <dk-app-field ref="userCode" v-model="userCode"  :label="$t('appUserCode')"
+          <dk-app-field ref="userCode" v-model="userCode" :label="$t('appUserCode')"
                         @changeBarCode="setFocus('userPwd')"/>
         </div>
         <div style="width: 80%;border-radius: 3px;margin: 10px 20px ">
           <!-- 输入密码 -->
-          <dk-app-field ref="userPwd" v-model="userPwd" :formatter-flg="false" type-input="password" :label="$t('appUserPw')"
+          <dk-app-field ref="userPwd" v-model="userPwd" :formatter-flg="false" type-input="password"
+                        :label="$t('appUserPw')"
                         @changeBarCode="login"/>
         </div>
         <div
@@ -234,7 +235,6 @@ export default {
 .app_login_bottom-class {
   /*保存画面的按钮样式*/
   position: fixed;
-  z-index: 1;
   bottom: 0;
   width: 100%;
   height: 61px;

+ 1 - 1
src/view-app/main/index.vue

@@ -21,7 +21,7 @@
         <!--  模块名称-->
         <div class="app-name">{{ item.menuName }}</div>
         <div style="background: #fff;border-radius: 7px;">
-          <div style="display: flex;flex-wrap: wrap;padding: 21px 0px;align-items: center;">
+          <div style="display: flex;flex-wrap: wrap;padding: 21px 0px;align-items: flex-start;">
             <div class="app-item" v-for="(item2,index2) in functionItems" :id="'btn' + index + '-' + index2"
                  v-if="item.menuUuid==item2.parentUuid" @click="toApp(item2.objectCode,item2,'btn' + index + '-' + index2)"
                  style="width:25%;text-align: center;" icon-class="index-grid-item-icon-class"

+ 148 - 3
src/view-app/main/mine.vue

@@ -1,16 +1,161 @@
 <template>
   <!--app主页-我的-->
-  <div>
-我的
+  <div class="menu-box">
+    <div class="head">
+      <!-- logo -->
+      <div style="display: flex;align-items: center;">
+        <van-image style="width: 150px;height: 33px; margin: 20px " :src="hgLogon"></van-image>
+      </div>
+      <div class="nick-name" style="display: flex;align-items: center; margin: 20px">
+        <van-image
+          round
+          width="60"
+          height="60"
+          :src="userImg"
+        />
+        <div style="margin-left: 20px">
+          {{ userName }}
+        </div>
+      </div>
+    </div>
+
+
+    <div style="background-color:#f8f9fd;border-radius:20px 20px 0px 0px; ">
+      <div style="height: 18px;"></div >
+      <div class="todo-view">
+        <div class="todo-view-title">待办工作</div >
+        <div class="todo-view-app">
+
+
+
+        </div >
+      </div >
+
+
+
+
+
+
+      <div style="height: 20px;"></div >
+
+    </div >
   </div>
 </template>
 
 <script>
 export default {
-  name: "mini"
+  name: "mini",
+  data() {
+    return {
+      hgLogon: require('@/assets/images/app-image/hg-logo.png'),
+      userName: this.$store.state.user.userName,
+      userImg: require('@/assets/images/app-image/icon_role.png'),
+    }
+  },
 }
 </script>
 
 <style scoped>
+.menu-box {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  background: white;
+}
+
+.head {
+  z-index: 1;
+  height: 192px;
+  width: 100%;
+  background: #1B365D;
+}
+
+.head-center {
+  position: absolute;
+  width: 39px;
+  height: 40px;
+  top: 102px;
+}
+
+.nick-name {
+  width: 70% !important;
+  position: absolute;
+  font-family: 'PingFang HK';
+  font-style: normal;
+  font-weight: 600;
+  font-size: 16px;
+  line-height: 23px;
+  color: #FFFFFF;
+}
+
+.todo-view {
+  margin-left: 17px;
+  width: calc(100% - 34px  );
+  background: #FFFFFF;
+  box-shadow: 0px 10px 20px rgba(225, 229, 238, 0.6);
+  border-radius: 8px;
+  padding: 12px;
+  /* margin-top: 35rpx; */
+  z-index: 2;
+}
+
+.todo-view-title {
+  font-style: normal;
+  font-weight: 500;
+  font-size: 16px;
+  font-family: 'PingFang SC';
+}
+
+.todo-view-app {
+  padding-top: 12px;
+  display: -webkit-box;
+  overflow: auto;
+  width: 100%;
+}
+
+.todo-view-app-item {
+  width: 25%;
+  display: grid;
+  justify-items: center;
+}
+
+.todo-view-app-item-icon {
+  width: 33px;
+  height: 33px;
+  /* background-color: #B280E4; */
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: 50%;
+  position: relative;
+}
+
+.todo-view-app-item-icon-tip {
+  position: absolute;
+  width: 13px;
+  height: 1px;
+  top: -3px;
+  right: -3px;
+  font-size: 9px;
+  font-family: 'PingFang SC';
+  background: #FF594E;
+  border: 1px solid #FFFFFF;
+  border-radius: 50%;
+  color: #fff;
+  text-align: center;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
 
+.todo-view-app-item-name {
+  font-style: normal;
+  font-weight: 400;
+  font-size: 14px;
+  font-family: 'PingFang SC';
+  /* font-family: 'SimSun'; */
+  color: #1B365D;
+  margin-top: 5px;
+}
 </style>

+ 2 - 2
src/view-app/main/other.vue

@@ -21,10 +21,10 @@
         <!--  模块名称-->
         <div class="app-name">{{ item.menuName }}</div>
         <div style="background: #fff;border-radius: 7px;">
-          <div style="display: flex;flex-wrap: wrap;padding: 21px 0px;align-items: center;">
+          <div style="display: flex;flex-wrap: wrap;padding: 21px 0px;align-items: flex-start;  ">
             <div class="app-item" v-for="(item2,index2) in functionItems" :id="'btn' + index + '-' + index2"
                  v-if="item.menuUuid==item2.parentUuid" @click="toApp(item2.objectCode,item2.objectCode, 'btn' + index + '-' + index2)"
-                 style="width:25%;text-align: center;" icon-class="index-grid-item-icon-class"
+                 style="width:25%;text-align: center; " icon-class="index-grid-item-icon-class"
                  text-class="index-grid-item-text-class" content-class="index-grid-item-class">
               <van-image width="40" height="40" :src="(item2.ImageUri)"/>
               <div class="index-grid-item-text-class  van-grid-item__text">{{ item2.menuName }}</div>

+ 116 - 50
src/view-app/main/report.vue

@@ -1,128 +1,189 @@
 <template>
   <!--app主页-报表-->
-  <div class="main-app">
+  <div>
     <div class="menu-box">
       <div style="width:32%;background:white;">
         <!-- 顶部下拉-->
         <van-dropdown-menu>
-          <van-dropdown-item id="functionItem" title-class="title-class" v-model="value1" :options="optionFunc">
-            <dk-app-dropdown-switch></dk-app-dropdown-switch>
+          <van-dropdown-item ref="functionItem" title-class="title-class" :title="functionalPartition">
+            <dk-app-dropdown-switch :data-list="optionFunc" @commit='dropdowncommit'></dk-app-dropdown-switch>
           </van-dropdown-item>
         </van-dropdown-menu>
       </div>
       <!-- 顶部搜索-->
       <div style="width:69%;background:white;display:flex; align-items: center;">
-        <dk-app-search :placeholder="placeholder"></dk-app-search>
+        <dk-app-search v-model="allCondition"
+                       @search="filterFunction" :placeholder="placeholder"></dk-app-search>
       </div>
     </div>
-    <div class="panel-class" v-for="(item,index) in regions" v-if="hasAuth(functionRegions,item.menuName)">
-      <!--  模块名称-->
-      <div class="app-name">{{ item.menuName }}</div>
-      <div style="background: #fff;border-radius: 7px;">
-        <div style="display: flex;flex-wrap: wrap;padding: 21px 0px;align-items: center;">
-          <div class="app-item" v-for="(item2,index2) in functionItems"
-               v-if="item.menuUuid==item2.parentUuid" @click="toApp(item2.objectCode,item2.objectCode)"
-               style="width:25%;text-align: center;" icon-class="index-grid-item-icon-class"
-               text-class="index-grid-item-text-class" content-class="index-grid-item-class">
-            <van-image width="40" height="40" :src="(item2.ImageUri)"/>
-            <div class="index-grid-item-text-class">{{ item2.menuName }}</div>
+    <div :style="{height:(tableHeight-60-60-60)+'px'}" style="width: 100%; overflow-y: auto;overflow-x: hidden;">
+      <div class="panel-class" v-for="(item,index) in regions" v-if="hasAuth(functionRegions,item.menuName)">
+        <!--  模块名称-->
+        <div class="app-name">{{ item.menuName }}</div>
+        <div style="background: #fff;border-radius: 7px;">
+          <div style="display: flex;flex-wrap: wrap;padding: 21px 0px;align-items: flex-start;  ">
+            <div class="app-item" v-for="(item2,index2) in functionItems" :id="'btn' + index + '-' + index2"
+                 v-if="item.menuUuid==item2.parentUuid" @click="toApp(item2.objectCode,item2.objectCode, 'btn' + index + '-' + index2)"
+                 style="width:25%;text-align: center; " icon-class="index-grid-item-icon-class"
+                 text-class="index-grid-item-text-class" content-class="index-grid-item-class">
+              <van-image width="40" height="40" :src="(item2.ImageUri)"/>
+              <div class="index-grid-item-text-class  van-grid-item__text">{{ item2.menuName }}</div>
+            </div>
+
           </div>
 
         </div>
-
       </div>
     </div>
+
   </div>
 </template>
 
 <script>
+import {localRead, localSave,localRemove} from "@/libs/base/util";
+import {mapMutations} from "vuex";
+
 export default {
   name: "report",
   data() {
+    const vm = window.vm;
     return {
+      vm: vm,
       // 选择值
       value1: 0,
+      //搜索菜单
+      allCondition: '',
+      // 功能区分
+      functionalPartition: this.$t('appFunctionalPartition'),
       // placeholder
       placeholder: this.$t('appSearchMenu'),
       // 选择值
-      optionFunc: [
-        {text: this.$t('appFunctionalPartition'), value: 0}
-      ],
+      optionFunc: [],
       //功能分类-大功能模块
       regions: [],
       //功能分类-大功能模块-页面
       functionItems: [],
       // 区域
       functionRegions: [],
+      // 列表的高度
+      tableHeight: 667,
+      //图标的id,当出现滚动条时候,定位到当前可是区域的位置
+      btnId: null
     }
   },
-  methods:{
+  methods: {
+    ...mapMutations([
+      'setTagNavList',
+    ]),
+
+    /**
+     * @desc   : 验证权限
+     * @author : 姜永辉
+     * @date   : 2023/2/17 10:28
+     */
+    hasAuth(array, auth) {
+      return array.indexOf(auth) !== -1;
+    },
+
+    /**
+     * @desc   : 功能跳转
+     * @author : 姜永辉
+     * @date   : 2023/2/17 10:29
+     */
+    toApp(url, FunctionCode, btnId) {
+      this.btnId = btnId
+      let route = {name: url, params: {FunctionCode: FunctionCode}, meta: {notCache: false}}
+      // 功能跳转
+      this.$router.push(route)
+    },
+
+    /**
+     * @desc   : 选择下拉后查询
+     * @author : 姜永辉
+     * @date   : 2023/3/3 9:04
+     */
+    dropdowncommit(e) {
+      this.functionRegions = e.dataList
+      this.$refs.functionItem.toggle();
+    },
+
     /**
-     * @desc   : 获取常用功能的菜单
-     * @author : jyh
-     * @date   : 2022/8/22 10:47
+     * @desc   : 过滤菜单
+     * @author : 姜永辉
+     * @date   : 2023/3/3 9:27
      */
-    getCommonMenu() {
+    filterFunction() {
       let menuList = [...this.$store.state.app.menuList]
+      let searchtext = this.allCondition
+      this.optionFunc = []
+      this.functionItems = []
+      this.regions = []
+      this.functionRegions = []
       //默认是一行数据
       if (menuList && menuList.length > 0) {
         let funcList = []
         menuList.forEach(itMenu => {
-          let funcItem = {}
           // 查询子级
           if (itMenu.children && itMenu.children.length > 0) {
             itMenu.children.forEach(it => {
               // 导航的管理模块
-              this.regions.push(it)
-              this.functionRegions.push(it.menuName)
+              // 排除数据采集 和报表的模块
+              if (it.menuUuid != this.$config.appRegistMenuUuid) {
+                return;
+              }
+              let tmpFunctionItems = []
               // 如果还有子级,需要去查询子级
               if (it.children && it.children.length > 0) {
                 if (it.children && it.children.length > 0) {
                   it.children.forEach(c => {
+                    if (c.menuName.indexOf(searchtext) < 0) {
+                      // 没有查到 数据
+                      return
+                    }
                     // 主页显示图标
-                    if (c.fastImage){
+                    if (c.fastImage) {
                       c.ImageUri = require("@/assets/images/app-image/" + c.fastImage + "\.png")
                     }
-                    if (c.flgRight){
+                    if (c.flgRight) {
                       this.functionItems.push(c)
+                      tmpFunctionItems.push(c)
                     }
                   })
                 }
               }
+              // 查到子集后将管理模块的名称加入
+              if (tmpFunctionItems.size() > 0){
+                this.regions.push(it)
+                let functionRegionItem = {
+                  text: it.menuName,
+                  checked: true,
+                }
+                this.optionFunc.push(functionRegionItem)
+                this.functionRegions.push(it.menuName)
+              }
             })
           }
         })
       }
     },
 
-    /**
-     * @desc   : 验证权限
-     * @author : 姜永辉
-     * @date   : 2023/2/17 10:28
-     */
-    hasAuth(array, auth) {
-      return array.indexOf(auth) !== -1;
-    },
-
-    /**
-     * @desc   : 功能跳转
-     * @author : 姜永辉
-     * @date   : 2023/2/17 10:29
-     */
-    toApp(url, FunctionCode) {
-      // 功能跳转
-      this.$router.push({name: url, params: {FunctionCode: FunctionCode}})
-    },
   },
   created() {
+    this.tableHeight = window.screen.height;
     // 获取常用功能的菜单
-    //this.getCommonMenu()
+    this.filterFunction()
+  },
+  activated() {
+    // 表示元素的底部与当前区域的可见部分的尾部对齐(前提是当前区域可滚动)
+    if (this.btnId) {
+      document.getElementById(this.btnId).scrollIntoView(false)
+    }
   }
 
 }
 </script>
 
-<style scoped>
+<style lang="scss">
 
 .menu-box {
   width: 100%;
@@ -152,6 +213,11 @@ export default {
 }
 
 .app-item:nth-child(n+5) {
-  margin-top: 25px;
+  margin-top:  20px;
+}
+
+.title-class {
+  font-size: 16px !important;
+  color: #2E3853 !important;
 }
 </style>

+ 215 - 2
src/view/pdm/prod-carryover/index.vue

@@ -1,13 +1,226 @@
+<!-- @desc:模具档案  @auth:洪旭东  @time:2022-04-25 16:28 -->
 <template>
+  <div class="main-div">
+    <BaseIndexButtonGroup id="BaseIndexButtonGroup">
+      <template #left>
+        <!--    查询    -->
+        <BaseIndexButton right-button="prod-carryover-select" ref="search" name="search"></BaseIndexButton>
+        <!--    清空条件    -->
+        <BaseIndexButton ref="clear" name="clear" ></BaseIndexButton>
+        <!--    结转    -->
+        <BaseIndexButton right-button="prod-carryover-carroyover" ref="carroyover" name="carroyover"/>
+        <!--    反结    -->
+        <BaseIndexButton right-button="prod-carryover-reverseCarroyover" ref="reverseCarroyover" name="reverseCarroyover"/>
+      </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 - 45" primaryKey="crovId" @pageChange="pageSizeChange"
+               :pageFlag="true"
+               :choose-flag="false"
+               :page-total="pageInfo.total"
+               :current-page="pageInfo.currentPage"
+               @current-change="currentChangeEvent($event)"
+               name="table">
+        <DkTableColumn field="crovCode"></DkTableColumn>
+        <DkTableColumn field="crovMonth" data-type="date"></DkTableColumn>
+        <DkTableColumn field="dateBegin" data-type="date"></DkTableColumn>
+        <DkTableColumn field="dateEnd" data-type="date"></DkTableColumn>
+        <DkTableColumn field="makeUserCode"></DkTableColumn>
+        <DkTableColumn field="makeUserName" :title="$t('opnMakeUserName')"></DkTableColumn>
+        <DkTableColumn field="makeTime" data-type="dateTime"></DkTableColumn>
+        <DkTableColumn field="remarks" width="auto"></DkTableColumn>
+      </DkTable>
+
+      <div slot="bottom" >
+        <DkTabs v-model="prodCarryoverItemTab" :options="detailOptions"></DkTabs>
+        <!--结转明细信息-->
+        <DkTable v-if="prodCarryoverItemTab === this.$config.prodCarryoverItemTab.prodCarryoverItem" :pageFlag="false"
+                 :height="this.tableHeight * (1-split) - 10"
+                 :pageTotalFlag="false"
+                 primaryKey="itemId"
+                 :id="'table-'+$options.name"
+                 name="table"
+                 ref="receipt-select"
+                 :choose-flag="false"
+                 :data="prodCarryoverItem">
+          <DkTableColumn
+            v-for="(item, index) in prodCarryoverItemList"
+            :key="prodCarryoverItemTab+index"
+            align="center"
+            :type="item.type"
+            :data-type="item.dataType"
+            :field="item.field"
+            :title="item.title"
+            :sum="item.sum"
+            :digits="item.digits"
+            :width="item.width"
+          >
+          </DkTableColumn>
+        </DkTable>
+      </div>
+    </DkSplit>
+  </div>
 </template>
 
 <script>
+
+import {indexMixin} from '@/mixins'
+
 export default {
-  name: "prod-carryover"
+  name: 'prod-carryover',
+  mixins: [indexMixin],
+  data() {
+    let self = this
+    return {
+      searchContent:
+        [
+          // 结转月份
+          {
+            itemCode: 'crovMonth',
+            valueFormat: {code: 'crovMonth', default: [new Date().toDateStr(), new Date().toDateStr()]},
+            valueKind: 'DATE_RANGE',
+          },
+        ],
+      prodCarryoverItem:[], // 用于结转明细数据
+      prodCarryoverItemList:[
+        {field: 'nodeName', width: '200px', type: 'text'},
+        {field: 'stationName', width: '200px', type: 'text'},
+        {field: 'logoName', width: '200px', type: 'text'},
+        {field: 'colourName', width: '200px', type: 'text'},
+        {field: 'erpModelCode', width: '200px', dataType: 'text'},
+        {field: 'pdtProdQty', width: '200px', dataType: 'number'},
+        {field: 'pdtGradeName', width: '200px', dataType: 'text'},
+        {field: 'pdtGradekindName', width: '200px', dataType: 'text'},
+        {field: 'remarks', width: '200px', type: 'text'},
+      ],
+      prodCarryoverItemTab: this.$config.prodCarryoverItemTab.prodCarryoverItem,
+      detailOptions: [{label: self.$t('prod-carryover-item'), name: 'prodCarryoverItem'}, //结转明细
+      ],
+      // 表单
+      formData: {},
+    }
+  },
+  methods: {
+
+    // region 功能按钮操作
+
+    // endregion
+
+    // region 其他操作
+    /**
+     * @desc   : 加载数据
+     * @author : 姜宁
+     * @date   : 2023/1/29 11:03
+     */
+    initData() {
+      // 获取模具状态数据源
+      this.getMouldKind();
+      // 获取数据字典--模具原料
+      this.getMaterialType();
+    },
+    /**
+     * @desc   : 获取模具状态数据源
+     * @author : 姜宁
+     * @date   : 2023/2/7 14:09
+     */
+    getMouldKind() {
+      let params = {
+        ftyId: this.$store.state.user.ftyId,
+        kindType: this.$config.kindType.mouldKind,
+      }
+      this.excute(this.$service.commonService, this.$service.commonService.getDataKind, params).then(res => {
+        if (res.code === this.$config.SUCCESS_CODE) {
+          let list = this.searchContent.filter(it => it.valueFormat.code == 'mouldKinds')
+          if (list.length > 0) {
+            list[0].valueFormat.data = res.data
+            // 赋值默认值
+            this.$refs['searchCond'].setDefault('mouldKinds',[this.$config.modelKind.mouldKindInventory])
+          }
+        }
+      })
+    },
+    /**
+     * @desc   : 获取数据字典--模具原料
+     * @author : 姜宁
+     * @date   : 2023/2/7 14:51
+     */
+    getMaterialType() {
+      let params = {
+        ftyId: this.$store.state.user.ftyId,
+        dictCode: this.$config.dictType.materialType,
+      }
+      this.excute(this.$service.commonService, this.$service.commonService.getDictionaryData, params).then(res => {
+        if (res.code === this.$config.SUCCESS_CODE) {
+          let list = this.searchContent.filter(it => it.valueFormat.code == 'materialTypes')
+          if (list.length > 0) {
+            list[0].valueFormat.data = res.data
+          }
+        }
+      })
+    },
+   /**
+    * @desc   : 获取在产结转明细信息
+    * @author : 姜宁
+    * @date   : 2023/3/21 15:57
+    */
+    getProdCarryoverItem(crovId) {
+      let params = {
+        ftyId: this.$store.state.user.ftyId,
+        crovId: crovId,
+      }
+      return this.excute(this.$service.prodCarryoverItemService, this.$service.prodCarryoverItemService.getProdCarryoverItemById, params)
+    },
+    /**
+     * @desc   : 行切换事件
+     * @author : 姜宁
+     * @date   : 2023/3/21 15:57
+     */
+    currentChangeEvent({row}) {
+      if (row != null) {
+        // 获取在产结转明细信息
+        this.getProdCarryoverItem(row.crovId).then(res => {
+          if (res.code === this.$config.SUCCESS_CODE) {
+            this.prodCarryoverItem = res.data;
+          }
+        });
+      }
+    },
+    /**
+     * @desc   : 获取数据
+     * @author : 姜宁
+     * @date   : 2023/1/29 11:11
+     */
+    getData(params) {
+      // 查询数据
+      return this.excute(this.$service.prodCarryoverService, this.$service.prodCarryoverService.selectByCond, params);
+    },
+    /**
+     * @desc   : 给参数赋值
+     * @author : 姜宁
+     * @date   : 2023/1/29 15:15
+     */
+    setParams(){
+      this.params = this.formData
+    },
+    // endregion
+  },
+  created() {
+    this.routeObjName = 'prodCarryover'  // 设置路由名称
+  }
 }
 </script>
 
-<style scoped>
+<style lang="less" scoped>
 
 </style>