Explorar o código

车间系统通用版代码

QuYueTing hai 2 meses
pai
achega
8907945efb
Modificáronse 17 ficheiros con 888 adicións e 376 borrados
  1. 88 88
      fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/package-lock.json
  2. 16 9
      fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/planView/component/planComponent.vue
  3. 61 13
      fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/planView/todayPlan/distribution.vue
  4. 1 1
      fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/statisticsView/statisticsDetail.vue
  5. 1 1
      fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/statisticsView/statisticsView.vue
  6. 28 7
      fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/workView/fillReport.vue
  7. 2 1
      fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/workView/workView.vue
  8. 104 2
      fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/plan/orderInsert.vue
  9. 109 11
      fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/plan/planComponent.vue
  10. 5 0
      fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/plan/planComponentDetil.vue
  11. 69 4
      fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/product/list.vue
  12. 4 0
      fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/settings/settings.vue
  13. 158 23
      fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/statistic/index.vue
  14. 0 3
      fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/team/index.vue
  15. 43 14
      fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/workReport/daily.vue
  16. 196 196
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/customerNew.html
  17. 3 3
      fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/templates/customerNew.html

+ 88 - 88
fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/package-lock.json

@@ -1817,6 +1817,59 @@
           "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
           "dev": true
         },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "emojis-list": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
         "minimist": {
           "version": "1.2.5",
           "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz",
@@ -1846,6 +1899,41 @@
           "requires": {
             "ansi-regex": "^5.0.0"
           }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "vue-loader-v16": {
+          "version": "npm:vue-loader@16.8.3",
+          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
+          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chalk": "^4.1.0",
+            "hash-sum": "^2.0.0",
+            "loader-utils": "^2.0.0"
+          },
+          "dependencies": {
+            "chalk": {
+              "version": "4.1.2",
+              "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+              "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "ansi-styles": "^4.1.0",
+                "supports-color": "^7.1.0"
+              }
+            }
+          }
         }
       }
     },
@@ -12112,94 +12200,6 @@
         }
       }
     },
-    "vue-loader-v16": {
-      "version": "npm:vue-loader@16.8.3",
-      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
-      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "hash-sum": "^2.0.0",
-        "loader-utils": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
     "vue-router": {
       "version": "3.5.1",
       "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-3.5.1.tgz?cache=0&sync_timestamp=1617697843139&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-router%2Fdownload%2Fvue-router-3.5.1.tgz",

+ 16 - 9
fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/planView/component/planComponent.vue

@@ -20,6 +20,9 @@
                 <div class="PlanItem">
                   <div>项目代码:</div><span>{{ item.product.code }}</span>
                 </div>
+                <div class="PlanItem">
+                  <div>项目名称:</div><span>{{ item.product.projectName }}</span>
+                </div>
                 <div class="PlanItem">
                   <div>计划总工价:</div><span class="textBeyondHiding">{{item.totalMoney}}</span>
                 </div>
@@ -44,6 +47,9 @@
                 <div class="PlanItem">
                   <div>每辆数量:</div><span class="textBeyondHiding">{{ item.product.vehicleNumber }}</span>
                 </div>
+                <div class="PlanItem">
+                  <div>列序号:</div><span class="textBeyondHiding">{{ item.columnNumStart }}-{{ item.columnNumEnd }}</span>
+                </div>
                 <div class="PlanItemBtn">
                   <span class="text" @click="hidePlan(item.id,item.hideState)">
                     {{ jisuanDate(item.startDate)>30 ? '隐藏' : ''}}
@@ -284,26 +290,27 @@ export default {
         flex-wrap: wrap;
 
         .PlanItem {
-          width: 50%;
+          // width: 50%;
           display: flex;
           padding-top: 8px;
 
-          &:first-child {
-            width: 100%;
+          // &:first-child {
+          //   width: 100%;
 
-            span {
-              width: 200px;
-              word-break: break-all;
-            }
-          }
+          //   span {
+          //     width: 200px;
+          //     word-break: break-all;
+          //   }
+          // }
 
           div {
-            width: 100px;
+            width: 110px;
             text-align: right;
             color: #666;
           }
 
           span {
+            flex: 1;
             display: inline-block;
             color: #333;
           }

+ 61 - 13
fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/planView/todayPlan/distribution.vue

@@ -2,18 +2,22 @@
 <div>
   <div class="distribution">
     <van-nav-bar :title="titleText" left-text="返回" :right-text="!todayAndTomorrow ? '下发计划' : ''" @click-left="back" @click-right="placeAnOrder" fixed left-arrow/>
-    <div class="distribution_header">
-      <div>{{ productName }}</div>
-      <div>{{ productSchedulingNum }}</div>
-      <div>{{ dates }}</div>
+    <div style="display: flex;justify-content: space-between;">
+      <div class="distribution_header">
+        <div>{{ productName }}</div>
+        <div>{{ productSchedulingNum }}</div>
+        <div>{{ dates }}</div>
+      </div>
+      <van-button @click="batchUnReceive()" :disabled="!isCanAgree || distributionList.length == 0" type="info" size="small">批量拒收</van-button>
     </div>
+    
     <div class="distribution_con contentRoll">
       <div class="distribution_box" v-for="item,index in distributionList" :key="index">
         <div class="distribution_ItemBom">
-          <van-checkbox v-if="todayAndTomorrow" :disabled="item.checkboxDisabled"  v-model="item.prodProcedure.isSelected"  @click="itemChecked" shape="square">
+          <van-checkbox v-if="todayAndTomorrow" :disabled="item.checkboxDisabled  || (item.teamNames&&item.teamNames.indexOf(user.name) == -1)"  v-model="item.prodProcedure.isSelected"  @click="itemChecked" shape="square">
           </van-checkbox>
           <div class="PlanItem">
-            <span>{{ item.prodProcedure.name }}</span>
+            <span>{{item.prodProcedure.seq}}. {{ item.prodProcedure.name }}</span>
           </div>
           <div class="PlanItem">
             <div>单件工价:</div><span class="textBeyondHiding">{{ item.prodProcedure.unitPrice }}</span>
@@ -55,7 +59,7 @@
                             <span class="" v-if="second_item.status==0&&beDeptList" @click="deletePeople(second_item.id)"  style="color: #1989fa;">删除</span>
                       </div>
                       <p style="margin-top:20px;">
-                        <span class="" v-if="beDeptList" @click="distributionProp(item,index,'add')"  style="color: #1989fa;">新增</span>
+                        <span class="" v-if="beDeptList && item.totalProgress<100" @click="distributionProp(item,index,'add')"  style="color: #1989fa;">新增</span>
                       </p>
                     </div>
                 </div>
@@ -72,8 +76,8 @@
   <div class="formBatch" v-if="todayAndTomorrow">
         <van-checkbox v-model="isAllChecked" :disabled="distributionList.length == 0" @click="allChecked" shape="square" style="padding-left:3vw"></van-checkbox>
         <div style="padding:1vh 2vw">
-        <van-button @click="batchReceive()" :disabled="!isCanAgree || distributionList.length == 0" type="info" size="small">批量接收</van-button>
-        <!-- <van-button @click="cancellationReceiveBatch()" :disabled="!isCanAgree || distributionList.length == 0" type="info" size="small">批量取消接收</van-button> -->
+        <van-button style="margin-right: 10px;" @click="batchReceive()" :disabled="!isCanAgree || distributionList.length == 0" type="info" size="small">批量接收</van-button>
+        <van-button @click="cancellationReceiveBatch()" :disabled="!isCanAgree || distributionList.length == 0" type="info" size="small">批量取消接收</van-button>
         <!-- <van-button @click="batchAgree(false)" :disabled="!isCanAgree || distributionList.length == 0" type="danger" size="small" style="margin-left:2vw">批量驳回</van-button> -->
         </div>
   </div>
@@ -118,6 +122,7 @@ export default {
       ChooseSomeoneKey: 1,
 
       peopleListIdObj: null, // 杯换人的所有信息
+
     };
   },
   computed: {},
@@ -148,7 +153,7 @@ export default {
         let resArr=  this.distributionList.map(item=>{
           if(item.prodProcedure.isSelected){
             if(item.prodProcedureTeamList.filter(i=>i.userId==this.user.id).length>0){
-               return item.prodProcedureTeamList.filter(i=>i.userId==this.user.id)[0].planProcedureId
+               return item.prodProcedureTeamList.filter(i=>i.userId==this.user.id)[0].id
             }else{
               return "-1"
             }
@@ -176,18 +181,27 @@ export default {
     },
     // 批量操作
     allChecked(){
+        let status=false
         if(this.isAllChecked){
             for(let i in this.distributionList){
-                this.distributionList[i].prodProcedure.isSelected = true
-                console.log('===============');
+                if(this.distributionList[i].teamNames&&this.distributionList[i].teamNames.indexOf(this.user.name) != -1){
+                  this.distributionList[i].prodProcedure.isSelected = true
+                  status=true
+                }
             }
             this.isCanAgree = true
+            if(!status){
+              this.$toast.success('当前不存在可以接受/拒收工序');
+              this.isCanAgree = false
+              this.isAllChecked=false
+            }
         }else{
             for(let i in this.distributionList){
                 this.distributionList[i].prodProcedure.isSelected = false
             }
             this.isCanAgree = false
         }
+        console.log(this.distributionList)
         this.$forceUpdate();
     },
     itemChecked(){
@@ -237,6 +251,40 @@ export default {
             }).catch(err => { this.$toast.clear(); })
         }
     },
+    batchUnReceive(bol){
+        let ids = ''
+        console.log(this.user)
+        let resArr=  this.distributionList.map(item=>{
+          if(item.prodProcedure.isSelected){
+            if(item.prodProcedureTeamList.filter(i=>i.userId==this.user.id).length>0){
+               return item.prodProcedureTeamList.filter(i=>i.userId==this.user.id)[0].id
+            }else{
+              return "-1"
+            }
+          }
+         })
+         console.log('res===============',resArr)
+         ids = resArr.join(",").trim()
+        if(resArr.length > 0){
+            this.$axios.post(
+              "/plan/unReceivePlan",
+              {
+                ids:ids
+              }
+            ).then(res => {
+              if (res.code === "ok") {
+                this.isAllChecked=false
+                this.isCanAgree=false
+                this.getDistributionList()
+                this.$toast.success('拒收成功');
+              } else {
+                this.$toast.clear();
+                console.log("bbb")
+                this.$toast.fail(res.msg);
+              }
+            }).catch(err => { this.$toast.clear(); })
+        }
+    },
     workShowHide(index) {
       this.distributionList[index].flg = !this.distributionList[index].flg;
       console.log('=========>',this.distributionList[index].flg)
@@ -309,7 +357,7 @@ export default {
           for(var i in arr) {
             arr[i].checkboxDisabled = true
             if(arr[i].prodProcedureTeamList&&arr[i].prodProcedureTeamList.length > 0) {
-              let arrList = arr[i].prodProcedureTeamList.filter(item => item.status == 0 && item.userId==this.user.id)
+              let arrList = arr[i].prodProcedureTeamList.filter(item => (item.status == 0||item.status == 1) && item.userId==this.user.id)
               console.log(arrList, 'arrList')
               if(arrList.length > 0) {
                 arr[i].checkboxDisabled = false

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/statisticsView/statisticsDetail.vue

@@ -84,7 +84,7 @@ export default {
         detailStatus:0,
         userId:this.userId,
       };
-      this.$axios.post("/report/getPersonWorkHoursWagesDetail", postData)
+      this.$axios.post("/report/getPersonWorkHoursWagesDetailForMob", postData)
         .then(res => {
           this.saving = false;
             if(res.code == "ok") {

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/statisticsView/statisticsView.vue

@@ -102,7 +102,7 @@ export default {
         endDate:this.endDate,
         checkStatus:this.checkStatus
       };
-      this.$axios.post("/report/getPersonWorkHoursWagesDetail", postData)
+      this.$axios.post("/report/getPersonWorkHoursWagesDetailForMob", postData)
         .then(res => {
           this.saving = false;
             if(res.code == "ok") {

+ 28 - 7
fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/workView/fillReport.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="distribution">
     <van-nav-bar title="报工" left-text="返回" @click-left="back" fixed left-arrow />
-    <van-cell title="报工日期" :value="reportDate" @click="reportDateShow = true" is-link>
+    <van-cell title="报工日期" :value="reportDate" @click="showReportDate" is-link>
     </van-cell>
     <van-cell title="产品名称" :value="reportForm.product_name"></van-cell>
     <van-cell :title="reportForm.plan_type == 0?'排产工单号':'任务变更通知号'" :value="reportForm.plan_type == 0 ? reportForm.product_scheduling_num : reportForm.task_change_notice_num"></van-cell>
@@ -37,13 +37,13 @@
               <van-stepper v-model="reportForm.finishNum" step="0.1" :min="0" :max="reportForm.num" :decimal-length="2" @change="onFinishNumChange"/>
             </template>
           </van-cell>
-          <van-cell title="完成全部工作" >
+          <!-- <van-cell title="完成全部工作" >
             <template>
               <div style="float:right;">
                 <van-checkbox v-model="reportForm.isFinish" />
               </div>
             </template>
-          </van-cell>
+          </van-cell> -->
           <van-cell title="中止工作" v-if="!reportForm.isFinish">
             <template>
               <div style="float:right;">
@@ -57,7 +57,7 @@
           </van-cell>
         </van-cell-group>
         <div style="margin: 16px;">
-          <van-button round block type="primary" native-type="submit" :loading="saving">
+          <van-button round block type="primary" native-type="submit" v-if="supplementaryReportFlag || dateOfTheDay == reportDate" :loading="saving">
             提交
           </van-button>
           <p v-if="reportForm.canBeDeleted" @click="deleteReport" style="margin:16px;text-align:center;color:#666;">删除</p>
@@ -101,7 +101,9 @@ export default {
         progress: 10,
       },
       inputSteelNum:null,
-      oldPlanSteelStampNumberList:[]
+      oldPlanSteelStampNumberList:[],
+      supplementaryReportFlag: true, // 是否补报
+      dateOfTheDay: this.getDateOfTheDay(), // 当天日期
     };
   },
   computed: {},
@@ -116,8 +118,24 @@ export default {
     this.reportId = this.$route.query.otherId;
 
     this.getMyPlanProcedureList();
+    const { functionList = [] } = this.user
+    this.supplementaryReportFlag = functionList.filter(item => item.name == '补报').length > 0
   },
   methods: {
+    // 获取当天的日期 YYYY-MM-DD
+    getDateOfTheDay() {
+      const date = new Date();
+      const year = date.getFullYear();
+      const month = date.getMonth() + 1;
+      const day = date.getDate();
+      return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;
+    },
+    showReportDate() {
+      if(!this.supplementaryReportFlag) {
+        return
+      }
+      this.reportDateShow = true
+    },
     formatDate(date) {
       // 中国标准时间转成 YYYY-MM-DD
       const year = date.getFullYear();
@@ -156,7 +174,9 @@ export default {
       //件数发生改变时,检测如果和计划总件数一样,则算完成
       if (this.reportForm.finishNum == this.reportForm.num) {
           this.$set(this.reportForm, 'isFinish',true);
-      } 
+      } else {
+         this.$set(this.reportForm, 'isFinish',false);
+      }
     },
     back() {
       this.$router.go(-1);
@@ -226,8 +246,9 @@ export default {
         .then(res => {
           this.saving = false;
           if (res.code == "ok") {
+            this.$toast.success('提交成功')
           } else {
-            this.$toast.fail(res.msg);
+            this.$toast.fail({ message: res.msg, duration: 5000});
           }
         }).catch(err => { this.$toast.clear(); });
     },

+ 2 - 1
fhKeeper/formulahousekeeper/timesheet-workshop-h5-stand/src/views/workView/workView.vue

@@ -47,7 +47,7 @@
             <div v-if="reportBoolean" class="marginBtnPro">{{ item.productSchedulingNum }}</div>
             <div>
               <van-row>
-                <van-col span="19">{{ prod.plan_type == 0 ? item.procedure_name : prod.task_change_notice_num }}</van-col>
+                <van-col span="19">{{item.seq}}. {{ prod.plan_type == 0 ? item.procedure_name : prod.task_change_notice_num }}</van-col>
                 <van-col span="5" style="text-align:right;"><span style="color:goldenrod;font-size:16px;">{{ item.work_time
                 }}</span> <span style="font-size:12px;">分钟</span></van-col>
               </van-row>
@@ -257,6 +257,7 @@ export default {
             job_of_money: item.jobOfMoney,
             plan_check_type: item.planCheckType,
             procedure_name: item.procedureName,
+            seq: item.seq,
             progress: item.progress,
             work_time: item.workingTime,
             finishNum: item.finishNum,

+ 104 - 2
fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/plan/orderInsert.vue

@@ -15,6 +15,8 @@
           </div>
         </div>
         <div class="OutSide_right">
+          <el-link type="primary" :underline="false" @click="showReportingDialog()">{{ "同步临时报工"
+          }}</el-link>
           <el-link type="primary" :underline="false" @click="(taskTypeDialog = true)">{{ "任务类型管理"
           }}</el-link>
           <el-link type="primary" :underline="false" @click="addPlan()">{{
@@ -131,9 +133,10 @@
           </el-form-item>
           <el-form-item label="计划工时" prop="planWorkHour">
             <div style="display: flex;">
-              <el-input v-model="todayPlanForm.planWorkHour" type="number" placeholder="请输入" style="flex: 1;"
+              <el-input v-model="todayPlanForm.planWorkHour" type="number" placeholder="请输入" style="width: 100px"
                 maxlength="5"></el-input>
               <div style="margin-left: 10px;">分钟</div>
+              <div style="margin-left: 10px;">{{ hourNum }} 小时</div>
             </div>
           </el-form-item>
           <el-form-item label="单价" prop="moneyOfJob">
@@ -167,6 +170,9 @@
               value-format="yyyy-MM-dd">
             </el-date-picker>
           </el-form-item>
+          <el-form-item label="结算总额(元)" prop="settlementAmount">
+            <el-input v-model="todayPlanForm.settlementAmount"></el-input>
+          </el-form-item>
           <el-form-item label="描述" style="width: 100%">
             <el-input type="textarea" :rows="6" placeholder="请输入描述" v-model="todayPlanForm.describtion" maxlength="200">
             </el-input>
@@ -218,6 +224,29 @@
       </span>
     </el-dialog>
 
+    <!-- 同步临时报工 -->
+    <el-dialog title="同步临时报工" :visible.sync="synchronousReportingDialog" width="600px" :before-close="handleClose">
+      <div class="tongbu">
+        <div :style="`color: ${reportWorkDayDisable ? 'red' : '#999'}`">选择的日期在三十天内</div>
+        <el-date-picker
+          v-model="reportWorkDay"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          :clearable="false"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          @change="handleDateChange">
+        </el-date-picker>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="
+          (synchronousReportingDialog = false)
+          ">取 消</el-button>
+        <el-button type="primary" :loading="reportWorkLoading" :disabled="reportWorkDayDisable" @click="reportWorkCli()">确定</el-button>
+      </span>
+    </el-dialog>
+
     <!-- 任务类型新增 -->
     <el-dialog title="新增任务类型" :visible.sync="taskTypeAddDialog" width="800" :before-close="handleClose">
       <div>
@@ -286,6 +315,10 @@ export default {
   },
   data() {
     return {
+      synchronousReportingDialog: false, 
+      reportWorkDay: [],
+      reportWorkDayDisable: false,
+      reportWorkLoading: false,
       steelStampNumber: "",
       todayDate: this.dayjs().format('YYYY-MM-DD'),
       planDate: this.dayjs().format('YYYY-MM-DD'),
@@ -370,7 +403,13 @@ export default {
       }
     };
   },
-  computed: {},
+  computed: {
+    hourNum() {
+      let hour = Math.floor((this.todayPlanForm.planWorkHour || 0) / 60);
+      let xiaos = (this.todayPlanForm.planWorkHour || 0) % 60
+      return `${hour}.${xiaos}`
+    }
+  },
   watch: {},
   mounted() {
     this.getDepartmentList(),
@@ -380,6 +419,55 @@ export default {
       this.getTaskTypeList();
   },
   methods: {
+    reportWorkCli() {
+      this.reportWorkLoading = true;
+      this.http.post(
+        "/wx-corp-info/testSyncTemporaryJobApplication",
+        { startDate: this.reportWorkDay[0], endDate: this.reportWorkDay[1] },
+        (res) => {
+          this.reportWorkLoading = false;
+          if (res.code == "ok") {
+            this.synchronousReportingDialog = false
+            this.$message({
+              message: '同步成功',
+              type: "success",
+            });
+            this.getTableData()
+          } else {
+            this.$message({
+              message: res.msg,
+              type: "error",
+            });
+          }
+        },
+        (error) => {
+          this.reportWorkLoading = false;
+          this.$message({
+            message: error,
+            type: "error",
+          });
+        }
+      );
+    },
+    // 显示临时报工
+    showReportingDialog() {
+      this.reportWorkDay = [this.dayjs().format('YYYY-MM-DD'), this.dayjs().format('YYYY-MM-DD')]
+      this.synchronousReportingDialog = true
+    },
+    handleDateChange(value) {
+      const startDate = value[0];
+      const endDate = value[1];
+      const d1 = this.dayjs(startDate);
+      const d2 = this.dayjs(endDate);
+      const diffDays = Math.abs(d1.diff(d2, 'day'));
+      if (diffDays > 30) {
+        this.reportWorkDayDisable = true
+        console.log('日期相隔超过三十天');
+      } else {
+        console.log('日期相隔不超过三十天');
+        this.reportWorkDayDisable = false
+      }
+    },
     // 初始化 Form
     initTodayPlanForm() {
       this.todayPlanForm = {
@@ -1048,6 +1136,20 @@ export default {
 };
 </script>
 <style scoped lang='scss'>
+
+.tongbu {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  &>div {
+    margin-bottom: 15px;
+    color: #999;
+    &:last-child {
+      margin-bottom: 0;
+    }
+  }
+}
 .colorText {
   color: #02a7f0;
   cursor: pointer;

+ 109 - 11
fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/plan/planComponent.vue

@@ -18,6 +18,17 @@
             <span class="demonstration">{{ "钢印号" }}</span><el-input v-model="steelStampNumber" size="small"
               @change="getTableData(hasChooseDept)" placeholder="请输入内容" clearable="true"></el-input>
           </div>
+          <div class="OutSide" style="padding-bottom: 0;">
+              <el-input placeholder="请输入内容"  v-model="searchValue" class="input-with-select" size="small">
+              <el-select v-model="searchType" slot="prepend" placeholder="请选择">
+                <el-option label="排产工单号" value="1"></el-option>
+                <el-option label="项目名称" value="2"></el-option>
+                <el-option label="产品名称" value="3"></el-option>
+                <el-option label="订单号" value="4"></el-option>
+              </el-select>
+              <el-button slot="append" icon="el-icon-search" @click="getTableData()"></el-button>
+            </el-input>
+          </div>
         </div>
         <div class="OutSide_right">
           <!-- <el-link type="primary" :underline="false" @click="(deptSetDialog = true), getPlanDeptSet()">{{ "部门设置"
@@ -84,6 +95,10 @@
               </div>
             </template>
           </el-table-column>
+          <el-table-column prop="productOrderNum" label="生产订单号" width="180">
+          </el-table-column>
+          <el-table-column prop="projectName" label="项目名称" width="180">
+          </el-table-column>
           <el-table-column prop="productName" label="产品名称" width="180">
           </el-table-column>
           <el-table-column prop="projectCode" label="项目代码" width="180">
@@ -133,16 +148,25 @@
           <el-form-item label="排产工单号" style="width: 100%" prop="productSchedulingNum">
             <el-input v-model="todayPlanForm.productSchedulingNum" maxlength="50"></el-input>
           </el-form-item>
+          <el-form-item label="生产订单号" style="width: 100%" prop="productOrderNum">
+            <el-input v-model="todayPlanForm.productOrderNum" maxlength="50"></el-input>
+          </el-form-item>
+          <el-form-item label="项目名称" style="width: 100%" prop="projectName">
+            <!-- <el-input :disabled="todayPlanForm.id==null?false:true"  v-model="todayPlanForm.projectName" maxlength="50" @blur="filterProductList(todayPlanForm.projectName)"></el-input> -->
+            <el-select :disabled="todayPlanForm.id==null?false:true" filterable remote reserve-keyword :remote-method="getProjectNames" @change="filterProductList(todayPlanForm.projectName)" v-model="todayPlanForm.projectName" placeholder="请输入项目名称" class="w100">
+              <el-option v-for="item in projectNameList" :key="item.label" :label="item.value" :value="item.value">
+              </el-option>
+            </el-select> 
+          </el-form-item>
           <el-form-item label="产品名称" style="width: 100%" prop="productId">
             <el-select :disabled="todayPlanForm.id==null?false:true" v-model="todayPlanForm.productId" placeholder="请选择" class="w100" @change="setProductCode" filterable>
               <el-option v-for="item in productList" :key="item.id" :label="item.name" :value="item.id">
               </el-option>
-            </el-select>
+            </el-select>  
           </el-form-item>
           <el-form-item label="项目代码" style="width: 100%" prop="projectCode">
             <el-input :disabled="todayPlanForm.id==null?false:true" v-model="todayPlanForm.projectCode" maxlength="50" readonly></el-input>
           </el-form-item>
-
           <div v-for="(item, index) in todayPlanForm.steelStampNumberList" style="width: 100%;margin-bottom: 10px;">
             <el-form-item label="钢印号" :key="index" style="width: 100%" prop="steelStampNumberStart">
               <el-input class="w45" v-model="item.steelStampNumberStart" maxlength="20"></el-input>
@@ -167,6 +191,11 @@
           <!-- <el-form-item label="进度"  :style="this.titleName==='编辑今日计划'?'':'width: 100%'" prop="progress">
             <el-input v-model="todayPlanForm.progress" maxlength="20"></el-input>
           </el-form-item> -->
+          <el-form-item label="列序号" style="width: 100%" prop="columnNumStart">
+            <el-input-number class="w45" v-model="todayPlanForm.columnNumStart" maxlength="20"></el-input-number>
+            {{ "-" }}
+            <el-input-number class="w45" v-model="todayPlanForm.columnNumEnd" maxlength="20"></el-input-number>
+          </el-form-item>
           <el-form-item label="车辆序号" style="width: 100%" prop="steelStampNumberStart">
             <el-input-number class="w45" v-model="todayPlanForm.vehicleNumStart" maxlength="20"></el-input-number>
             {{ "-" }}
@@ -395,8 +424,12 @@ export default {
         productSchedulingNum: [
           { required: true, message: "排产工单号", trigger: "blur" },
         ],
+        productOrderNum: [
+          { required: true, message: "生产订单号", trigger: "blur" },
+        ],
         productId: [{ required: true, message: "产品名称", trigger: "blur" }],
         projectCode: [{ required: true, message: "项目代码", trigger: "blur" }],
+        projectName: [{ required: true, message: "项目名称", trigger: "blur" }],
         // steelStampNumberStart: [
         //   { required: true, message: "钢印号", trigger: "blur" },
         // ],
@@ -412,6 +445,9 @@ export default {
       },
       exportDialog: false,
       exportParam: { productId: null, rangeDatas: this.getCurrentRangeTime() },
+      searchType:'1',
+      searchValue:'',
+      projectNameList:[]
     };
   },
   computed: {},
@@ -427,13 +463,13 @@ export default {
     addInput() {
       console.log('===========', this.todayPlanForm.steelStampNumberList)
       console.log('===========', this.todayPlanForm)
-      if (this.todayPlanForm.steelStampNumberList.length >= 9) {
-        this.$message({
-          message: '超过最大条数(9)',
-          type: "error",
-        });
-        return
-      }
+      // if (this.todayPlanForm.steelStampNumberList.length >= 9) {
+      //   this.$message({
+      //     message: '超过最大条数(9)',
+      //     type: "error",
+      //   });
+      //   return
+      // }
       this.todayPlanForm.steelStampNumberList.push({
         id: null,
         steelStampNumberStart: '',
@@ -442,6 +478,34 @@ export default {
         ruleIndexEnd: '',
       });   // 在数组中添加一个空对象
     },
+    filterProductList(value){
+      this.todayPlanForm.productId=null,
+      this.todayPlanForm.projectCode=null,
+      this.http.post(
+          "/product/getProductPage",
+          {
+            pageIndex: null,
+            pageSize: null,
+            projectName:value
+          },
+          (res) => {
+            if (res.code == "ok") {
+              this.productList = res.data.records;
+            } else {
+              this.$message({
+                message: res.msg,
+                type: "error",
+              });
+            }
+          },
+          (error) => {
+            this.$message({
+              message: error,
+              type: "error",
+            });
+          }
+        );
+    },
     deleteInput(index) {
       this.todayPlanForm.steelStampNumberList.splice(index, 1)
     },
@@ -471,8 +535,12 @@ export default {
     setProductCode() {
       let arrList = this.productList.filter(item => item.id == this.todayPlanForm.productId)
       console.log('====>', arrList)
-      this.todayPlanForm.projectCode = arrList[0].code
-      this.todayPlanForm.productName = arrList[0].name
+      // this.todayPlanForm.projectCode = arrList[0].code
+      // this.todayPlanForm.projectName = arrList[0].projectName
+      // this.todayPlanForm.productName = arrList[0].name
+      this.$set(this.todayPlanForm, "projectCode", arrList[0].code)
+      // this.$set(this.todayPlanForm, "projectName", arrList[0].projectName)
+      this.$set(this.todayPlanForm, "productName", arrList[0].name)
     },
     today() {
       let date = new Date();
@@ -675,6 +743,34 @@ export default {
       this.hasChooseDept = item.departmentId;
       this.getTableData(item.departmentId);
     },
+    getProjectNames(value){
+      if(value != '') {
+        this.http.post(
+          "/product/getProductProjectNames",
+          {
+            value:value,
+          },
+          (res) => {
+            if (res.code == "ok") {
+              this.projectNameList = res.data;
+            } else {
+              this.$message({
+                message: res.msg,
+                type: "error",
+              });
+            }
+          },
+          (error) => {
+            this.$message({
+              message: error,
+              type: "error",
+            });
+          }
+        );
+      } else {
+        this.projectNameList = []
+      }
+    },
     // 获取车间数据
     getTableData(departmentId) {
       console.log(this.planDate, departmentId);
@@ -688,6 +784,8 @@ export default {
           steelStampNumber: this.steelStampNumber,
           pageIndex: this.pageIndex,
           pageSize: this.pageSize,
+          searchValue:this.searchValue,
+          searchType:this.searchType
         },
         (res) => {
           this.tableDataLoading = false;

+ 5 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/plan/planComponentDetil.vue

@@ -29,6 +29,11 @@
           :height="tableHight"
           v-if="TabIndex == 0" v-loading="tableDataLoading"
         >
+        <el-table-column label="序号" width="60">
+            <template slot-scope="scope">{{
+              scope.row.prodProcedure.seq
+            }}</template>
+          </el-table-column>
           <el-table-column label="工序名称" width="400">
             <template slot-scope="scope">
                 <div class="disFlexscope">

+ 69 - 4
fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/product/list.vue

@@ -14,6 +14,16 @@
                     <el-input v-model="code" placeholder="请输入" clearable="true" size="small">
                     </el-input>
                 </el-form-item>
+                <el-form-item label="产品状态">
+                    <el-select v-model="status" placeholder="请选择">
+                        <el-option
+                        v-for="item in productStatus"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
                 <el-form-item>
                     <el-button @click="getList" size="small">查询</el-button>
                 </el-form-item>
@@ -60,6 +70,7 @@
                             </el-form-item>
                             <el-form-item>
                                 <el-table :data="props.row.tableProdProcedure.procedureList" border style="width: 100%">
+                                    <el-table-column prop="seq" label="序号" width="60"></el-table-column>
                                     <el-table-column prop="name" label="工序名称" width="180">
                                     </el-table-column>
                                     <el-table-column prop="workingTime" label="单件工时" width="180">
@@ -114,16 +125,18 @@
             <el-table-column type="selection" width="55">
             </el-table-column>
             <el-table-column prop="name" label="产品名称"  width="300"></el-table-column>
+            <el-table-column prop="projectName" label="项目名称" width="200"></el-table-column>
             <el-table-column prop="code" label="项目代码" width="200"></el-table-column>
             <el-table-column prop="orderNumber" label="订单数量" width="100"></el-table-column>
             <el-table-column prop="unit" label="单位" width="100"></el-table-column>
             <el-table-column prop="groupNumber" label="编组"></el-table-column>
             <el-table-column prop="columnNumber" label="每列数量"></el-table-column>
             <el-table-column prop="vehicleNumber" label="每辆数量"></el-table-column>
-            <el-table-column label="操作" width="200" fixed="right">
+            <el-table-column label="操作" width="250" fixed="right">
                 <template slot-scope="scope">
                     <el-button size="mini" @click="handleAdd(scope.$index, scope.row)">编辑</el-button>
                     <el-button size="mini" @click="copyProduct(scope.row)">复制</el-button>
+                    <el-button size="mini" @click="deactivate(scope.row)">{{scope.row.status==0?'停用':'启用'}}</el-button>
                 </template>
             </el-table-column>
         </el-table>
@@ -176,6 +189,10 @@
                         <el-input v-model="addForm.name" :placeholder="$t('peaseenterthe')" clearable maxlength="50"
                             show-word-limit="true"></el-input>
                     </el-form-item>
+                    <el-form-item label="项目名称" prop="projectName">
+                        <el-input v-model="addForm.projectName" :placeholder="$t('peaseenterthe')" clearable maxlength="50"
+                            show-word-limit="true"></el-input>
+                    </el-form-item>
                     <el-form-item label="项目代码" prop="code">
                         <!-- <el-input v-model="addForm.code" :disabled="!permissions.projectManagement && addForm.creatorId != user.id" placeholder="请输入项目编号" clearable></el-input> -->
                         <el-input v-model="addForm.code" :placeholder="$t('peaseenterthe')" clearable maxlength="50"
@@ -223,7 +240,7 @@
                  <!--此处是录入工序的模块-->
 
 
-                <el-input placeholder="请输入工序版本号" v-model="procedureVersion" clearable maxlength="50" class="input-pM"></el-input>
+                <el-input placeholder="请输入工序版本号" v-model="procedureVersion" clearable maxlength="50" class="input-pM" @change="getProdProcedureListWithVersion(productId,procedureVersion)"></el-input>
                 <el-table :data="procedureLit" style="width: 100%">
                     <el-table-column prop="name" label="工序名称"  width="350">
                         <template slot-scope="scope">
@@ -788,6 +805,7 @@ export default {
             rules: {
                 name: [{ required: true, message: this.$t('pleaseentername'), trigger: "blur" }],
                 code: [{ required: true, message: "请输入项目代码", trigger: "blur" }],
+                projectName: [{ required: true, message: "请输入项目名称", trigger: "blur" }],
                 orderNumber: [{ required: true, message:' 请输入订单数量', trigger: "blur" }],
                 unit: [{ required: true, message: '请输入单位', trigger: "blur" }],
                 groupNumber: [{ required: true, message: '请输入编组', trigger: "blur" }],
@@ -885,7 +903,17 @@ export default {
             dataListBf: [],
             imgUrlLists: '',
             imgUrlListFlg: false,
-            estimatedWorkTime: ''
+            estimatedWorkTime: '',
+            productStatus:[
+                {
+                value: '0',
+                label: '启用'
+                }, {
+                value: '1',
+                label: '停用'
+                }
+            ],
+            status:'0'
         };
     },
     // 过滤器
@@ -1193,6 +1221,15 @@ export default {
                     })
             }
 
+        },
+        getProdProcedureListWithVersion(id,version) {
+            if (version != null && version != '') {
+                this.http.post("/prod-procedure/getInfo", { version: version, productId: id },
+                    res => {
+                        this.procedureLit=res.data
+                    })
+            }
+
         },
         getProdMaterialVersion(id, index) {
             if (this.prodMaterialVersion != null && this.prodMaterialVersion != '') {
@@ -1586,6 +1623,33 @@ export default {
                     });
                 });
         },
+        deactivate(item){
+            var value
+            item.status==0?value=1:value=0
+            this.http.post('/product/deactivate', {
+                id:item.id,value:value
+            },
+            res => {
+                if (res.code == "ok") {
+                    this.$message({
+                        message: item.status==0?'停用成功':'启用成功',
+                        type: "success"
+                    });
+                } else {
+                    this.$message({
+                        message: res.msg,
+                        type: "error"
+                    });
+                }
+                this.getList()
+            },
+            error => {
+                this.$message({
+                    message: error,
+                    type: "error"
+                });
+            });
+        },
         addProjectLevel(row) {
             this.addProjectLevelDialog = true
             if (!row) {
@@ -3007,7 +3071,8 @@ export default {
                 pageSize: this.size,
                 name: this.name,
                 code: this.code,
-                cateId: this.cateId
+                cateId: this.cateId,
+                status:this.status
             }
 
             this.http.post('/product/getProductPage', parameter,

+ 4 - 0
fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/settings/settings.vue

@@ -34,6 +34,10 @@
         <div style="width:400px;margin:0 auto;padding:20px;">
             <h3>系统部署</h3>
             <el-form style="padding:35px;">
+                <el-form-item label="系统日志" >
+                    <span>{{ param.h5Url }}</span>
+                    <el-button type="primary" size="small" style="margin-left: 32px;"><a style="text-decoration:none; color:#fff" href="/api/common/downLoadLog">下载日志</a></el-button>
+                </el-form-item>
                 <el-form-item label="前端H5安装包" >
                     <span>{{ param.h5Url }}</span>
                     <el-upload ref="upload" action="#" :limit="1" :http-request="importH5" :show-file-list="false">

+ 158 - 23
fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/statistic/index.vue

@@ -39,7 +39,7 @@
       <div class="headScreen" :style="'width:72%'">
           <!-- 部门筛选 -->
           <el-cascader v-if="ins!=5 && !isViewUser" v-model="departmentIdArray" :options="departmentList" :placeholder="$t('qing-xuan-ze-bu-men')"
-            :props="{ checkStrictly: true,expandTrigger: 'hover' }" collapse-tags :show-all-levels="false" clearable
+            :props="{ multiple: true, checkStrictly: true,expandTrigger: 'hover' }" collapse-tags :show-all-levels="false" clearable
             @change="selcts()" size="small" style="margin-bottom: 10px;width:180px"
           ></el-cascader>
 
@@ -88,17 +88,28 @@
                 <el-table-column align="center" prop="name" label="人员" min-width="100" fixed="left"></el-table-column>
                 <el-table-column v-for="(item, index) in personWorkHoursWagesHead" :key="index" :label="item" align="center" min-width="150">
                     <template slot-scope="scope">
-                        <div v-for="(items, indexs) in scope.row.personWorkHoursWages" :key="indexs" @click="showReportDetail(scope.row,item,0)" :class="`${scope.row.departmentCascade== '小计' ? '' : 'colorText'}`">
-                            <div v-if="items.crateDate == item">
-                               <div> {{items.workTime}}分钟 </div> 
-                               <div>{{items.cost}}元</div>
+                        <div v-for="(items, indexs) in scope.row.personWorkHoursWages" :key="indexs" :class="`${scope.row.departmentCascade== '小计' ? '' : 'colorText'}`">
+                            <div v-if="items.crateDate == item" @click.stop="showReportDetail(scope.row,item,0)">
+                              <div  style="color: black;" v-if="items.planWorkTime">平均 {{items.planWorkTime}}分钟  {{items.planCost}}元</div>
+                              <!-- <div @click.stop="showReportDetail(scope.row,item,0)" v-if="items.workTime>0">已填 {{items.workTime}}分钟  {{items.cost}}元 </div>{{items.leave}}
+                              <div style="color: green;" @click.stop="showTempReportDetail(scope.row,item,0)" v-if="items.tempWorkTime>0||items.tempCost>0">临时报工 {{items.tempWorkTime}}分钟  {{items.tempCost}}元</div> -->
+                              <div  v-if="items.workTime>0">已填 {{items.workTime}}分钟  {{items.cost}}元 </div>{{items.leave}}
+                              <div style="color: green;" v-if="items.tempWorkTime>0||items.tempCost>0">临时报工 {{items.tempWorkTime}}分钟  {{items.tempCost}}元</div>
+                              <div style="color: red;" v-if="items.surplusTime">剩余 {{items.surplusTime}}分钟  {{items.surplusCost}}元</div>
                             </div>
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column align="center" prop="totalResult" label="合计" min-width="150">
+                <el-table-column align="center" prop="totalResult" label="合计" min-width="180">
                    <template slot-scope="scope" >
-                    <span :class="`${'colorText'}`" @click="showReportDetail(scope.row,item,1)">{{scope.row.totalResult}}</span>
+                    <div @click="showReportDetail(scope.row,item,1)">
+                      <div style="color: black;">{{scope.row.totalPlanResult | formatStr('平均') }}</div>
+                      <!-- <div style="color: #02a7f0;"  @click="showReportDetail(scope.row,item,1)"> {{scope.row.totalResult | formatStr('已填')}}</div> 
+                      <div style="color: green;"  @click="showTempReportDetail(scope.row,item,1)">{{scope.row.totalTempResult | formatStr('临时报工')}}</div>  -->
+                      <div style="color: #02a7f0;" > {{scope.row.totalResult | formatStr('已填')}}</div> 
+                      <div style="color: green;" >{{scope.row.totalTempResult | formatStr('临时报工')}}</div> 
+                      <div style="color: red;">{{scope.row.totalSurplusResult | formatStr('剩余') }}</div>
+                    </div>
                   </template>
                 </el-table-column>
             </el-table>
@@ -154,6 +165,9 @@
                 <el-table-column align="center" prop="productName" label="产品名称" min-width="150">
                   <template slot-scope="scope">{{scope.row.productName}}</template>
                 </el-table-column>
+                <el-table-column align="center" prop="projectName" label="项目名称" min-width="150">
+                  <template slot-scope="scope">{{scope.row.projectName}}</template>
+                </el-table-column>
                 <el-table-column align="center" prop="startDate" label="开始日期" width="150">
                   <template slot-scope="scope">{{scope.row.startDate}}</template>
                 </el-table-column>
@@ -352,7 +366,10 @@
           <div>
             <el-table
               :data="personWorkHoursWagesDetail"
-              style="width: 100%">
+              style="width: 100%"
+              :row-class-name="tableRowClassName"
+              height="500"
+              >
               <el-table-column
                 prop="date"
                 label="计划(开始-结束日期)"
@@ -364,17 +381,19 @@
               <el-table-column prop="productName" label="产品名称" width="180"></el-table-column>
               <el-table-column prop="product_scheduling_num" label="排产工单号" width="180"></el-table-column>
               <el-table-column prop="procedureName" label="工序名称" width="180"></el-table-column>
+              <el-table-column prop="taskName" label="任务名称" width="250"></el-table-column>
+              <el-table-column prop="task_type_name" label="任务类型" width="180"></el-table-column>
               <el-table-column prop="finishNum" label="完成件数" width="80">
                 <template slot-scope="scope">
-                  {{scope.row.finishNum?scope.row.finishNum:0}}
+                  {{scope.row.finishNum?scope.row.finishNum:''}}
                 </template>
               </el-table-column>
               <el-table-column prop="cost" label="工钱" width="80"></el-table-column>
               <el-table-column prop="checkType" label="质检方式" width="80"></el-table-column>
               <el-table-column prop="checkerName" label="质检人" width="180"></el-table-column>
               <el-table-column prop="working_time" label="工作时长" width="180">
-                <template slot-scope="scope">
-                  {{scope.row.working_time}}分钟
+                <template slot-scope="scope" v-if="scope.row.working_time">
+                  {{scope.row.working_time}}{{'分钟'}}
                 </template>
               </el-table-column>
             </el-table>
@@ -734,6 +753,13 @@ export default {
       personWorkHoursWorkTime(value) {
         let val = +((value ? value : 0) * 60).toFixed(2) + 0
         return val
+      },
+      formatStr(val, str) {
+        if(!val) {
+          return ''
+        }
+        let relut = val.replace(/\b0\.\d+\S*\s*/g, '')
+        return`${relut ? str : ''} ${relut}`
       }
   },
   methods: {
@@ -756,6 +782,15 @@ export default {
       this.detailUserId=row.id
       this.getPersonWorkHoursWagesDetail(item,viewAll)
     },
+    showTempReportDetail(row,item,viewAll){
+      if(row.departmentCascade=='小计'){
+          return
+      }
+      console.log(item)
+      this.reportDetailDialog=true
+      this.detailUserId=row.id
+      this.getPersonWorkHoursWagesDetailForTemp(item,viewAll)
+    },
     authorityToJudge() {
     //   if(this.permissions.reportProject || this.permissions.reportAllProject) {this.ssl(0);this.defaultActive = '1-1';return} else
     //   if(this.permissions.reportTask || this.permissions.reportAllTask) {this.ssl(1);this.defaultActive = '1-2';return} else
@@ -817,6 +852,17 @@ export default {
           });
       });
     },
+    //处理列类别
+    tableRowClassName({row}) {
+      if (row.colorType == "blue") {
+        return 'blue-row';
+      } else if (row.colorType == "black") {
+        return 'black-row';
+      }else if(row.colorType == "green"){
+        return 'green-row';
+      }
+      return '';
+    },
     getUserList(e) {
       let param={}
       if(e){
@@ -889,13 +935,18 @@ export default {
     },
     //人员工时工价表数据
     getPersonWorkHoursWagesList(){
+        let deptArr = []
+        for(var i in this.departmentIdArray){
+          let itemList = this.departmentIdArray[i] 
+          deptArr.push(itemList[itemList.length - 1])
+        }
         this.listLoading=true
         this.http.post( "/report/getPersonWorkHoursWagesList", {
             startDate:this.rangeDatas[0],
             endDate:this.rangeDatas[1],
             pageIndex: this.page,
             pageSize: this.size,
-            deptId:this.departmentIdArray[this.departmentIdArray.length - 1],
+            deptIds:deptArr.join(','),
             userId:this.userId
         },
         res => {
@@ -959,15 +1010,59 @@ export default {
         });
       });
     },
+    getPersonWorkHoursWagesDetailForTemp(item,viewAll){
+      this.listLoading=true
+      let param={
+        userId:this.detailUserId
+      }
+      if(viewAll==1){
+        this.simpleDateChoose=''
+        param={
+          ...param,
+          startDate:this.rangeDatas[0],
+          endDate:this.rangeDatas[1]
+        }
+      }else{
+        this.simpleDateChoose=item
+        param={
+          ...param,
+          date: this.simpleDateChoose.substring(0,4)+"-"+this.simpleDateChoose.substring(4,6)+"-"+this.simpleDateChoose.substring(6,this.simpleDateChoose.length),
+        }
+      }
+      this.http.post( "/report/getPersonWorkHoursWagesDetailForTemp", param,
+      res => {
+        if (res.code == "ok") {
+          this.personWorkHoursWagesDetail=res.data.record
+          this.totalCost=res.data.totalCost
+          this.totalWorkingTime=res.data.totalWorkingTime
+        } else {
+          this.$message({
+            message: res.msg,
+            type: "error"
+          });
+        }
+        this.listLoading=false
+      },error => {
+        this.$message({
+          message: error,
+          type: "error"
+        });
+      });
+    },
     //工序实际工时表
     getProcedureRealTimeProgressList(){
       this.listLoading=true
+      let deptArr = []
+        for(var i in this.departmentIdArray){
+          let itemList = this.departmentIdArray[i] 
+          deptArr.push(itemList[itemList.length - 1])
+        }
         this.http.post( "/report/getProcedureRealTimeProgressList", {
             startDate:this.rangeDatas[0],
             endDate:this.rangeDatas[1],
             pageIndex: this.page,
             pageSize: this.size,
-            deptId:this.departmentIdArray[this.departmentIdArray.length - 1],
+            deptIds:deptArr.join(','),
             userId:this.userId
         },
         res => {
@@ -991,12 +1086,17 @@ export default {
     //部门生产统计表
     getDpetStatisticsProgressList(){
       this.listLoading=true
+      let deptArr = []
+        for(var i in this.departmentIdArray){
+          let itemList = this.departmentIdArray[i] 
+          deptArr.push(itemList[itemList.length - 1])
+        }
         this.http.post( "/report/getDpetStatisticsProgressList", {
             startDate:this.rangeDatas[0],
             endDate:this.rangeDatas[1],
             pageIndex: this.page,
             pageSize: this.size,
-            deptId:this.departmentIdArray[this.departmentIdArray.length - 1],
+            deptIds:deptArr.join(','),
         },
         res => {
           if (res.code == "ok") {
@@ -1019,12 +1119,17 @@ export default {
     //计划实际工时表
     getPlanRealTimeProgressList(){
       this.listLoading=true
+      let deptArr = []
+        for(var i in this.departmentIdArray){
+          let itemList = this.departmentIdArray[i] 
+          deptArr.push(itemList[itemList.length - 1])
+        }
         this.http.post( "/report/getPlanRealTimeProgressList", {
             startDate:this.rangeDatas[0],
             endDate:this.rangeDatas[1],
             pageIndex: this.page,
             pageSize: this.size,
-            deptId:this.departmentIdArray[this.departmentIdArray.length - 1],
+            deptIds:deptArr.join(','),
             userId:this.userId
         },
         res => {
@@ -1048,12 +1153,17 @@ export default {
     //人员工时工价表数据
     getWorkReportQuery(){
       this.listLoading=true
+      let deptArr = []
+        for(var i in this.departmentIdArray){
+          let itemList = this.departmentIdArray[i] 
+          deptArr.push(itemList[itemList.length - 1])
+        }
         this.http.post( "/report/workReportQuery", {
             startDate:this.rangeDatas[0],
             endDate:this.rangeDatas[1],
             pageIndex: this.page,
             pageSize: this.size,
-            deptId:this.departmentIdArray[this.departmentIdArray.length - 1],
+            deptIds:deptArr.join(','),
             userId:this.userId,
             productId:this.productId,
             vehicleNum:this.vehicleNum,
@@ -1107,12 +1217,17 @@ export default {
     },
     //车间工位计划表
     getPlanDataWithStation(deptId){
+      let deptArr = []
+        for(var i in this.departmentIdArray){
+          let itemList = this.departmentIdArray[i] 
+          deptArr.push(itemList[itemList.length - 1])
+        }
       let param={
         startDate:this.rangeDatas[0],
         endDate:this.rangeDatas[1],
         pageIndex: this.page,
         pageSize: this.size,
-        stationId:this.departmentIdArray[this.departmentIdArray.length - 1],
+        stationIds:deptArr.join(','),
       }
       if(deptId){
         this.exportDeptId=deptId
@@ -1327,26 +1442,31 @@ export default {
     var url = "/report";
     var fName = "";
     var sl = {}
+    let deptArr = []
+    for(var i in this.departmentIdArray){
+      let itemList = this.departmentIdArray[i] 
+      deptArr.push(itemList[itemList.length - 1])
+    }
     if (this.ins == 0) {  
         fName = '人员工时工价表_' + '.xlsx';
         url += "/exportPersonWorkHoursWorkTime";
         sl.startDate=this.rangeDatas[0];
         sl.endDate=this.rangeDatas[1];
-        sl.deptId=this.departmentIdArray[this.departmentIdArray.length-1];
+        sl.deptIds=deptArr.join(',');
         sl.userId=this.userId;
     } else if (this.ins == 1) {
         fName = '工序实时进度表_' + '.xlsx';
         url += "/exportProcedureRealTimeProgressList";
         sl.startDate=this.rangeDatas[0];
         sl.endDate=this.rangeDatas[1];
-        sl.deptId=this.departmentIdArray[this.departmentIdArray.length-1];
+        sl.deptIds=deptArr.join(',');
         sl.userId=this.userId;
     }else if (this.ins == 2) {
         fName = '报工详情表_' + '.xlsx';
         url += "/exportWorkReportQuery";
         sl.startDate=this.rangeDatas[0];
         sl.endDate=this.rangeDatas[1];
-        sl.deptId=this.departmentIdArray[this.departmentIdArray.length-1];
+        sl.deptIds=deptArr.join(',');
         sl.userId=this.userId;
         sl.vehicleNum=this.vehicleNum;
         sl.steelNum=this.steelNum;
@@ -1356,14 +1476,14 @@ export default {
         url += "/exportPlanRealTimeProgressList";
         sl.startDate=this.rangeDatas[0];
         sl.endDate=this.rangeDatas[1];
-        sl.deptId=this.departmentIdArray[this.departmentIdArray.length-1];
+        sl.deptIds=deptArr.join(',');
         sl.userId=this.userId;
     } else if (this.ins == 4) {
         fName = '部门生产统计表_' + '.xlsx';
         url += "/exportDpetStatisticsProgressList";
         sl.startDate=this.rangeDatas[0];
         sl.endDate=this.rangeDatas[1];
-        sl.deptId=this.departmentIdArray[this.departmentIdArray.length-1];
+        sl.deptIds=deptArr.join(',');
     }
     else if (this.ins == 5) {
         fName = '月度生产件数表_' + '.xlsx';
@@ -1378,7 +1498,7 @@ export default {
         sl.endDate=this.rangeDatas[1];
         if(!this.personnelFlag){
           url += "/exportPlanDataWithStation";
-          sl.deptId=this.departmentIdArray[this.departmentIdArray.length-1];
+          sl.deptIds=deptArr.join(',');
           if(this.exportDeptId){
           sl.filterDeptId=this.exportDeptId;
           sl.isFilterDept=1
@@ -1492,6 +1612,8 @@ export default {
     }else{
       this.getUserList()
     }
+    this.page=1
+    this.size=20
     console.log(this.userId,'==============')
     this.getList(true)
     },
@@ -1756,3 +1878,16 @@ export default {
 }
 
 </style>
+<style>
+.el-table .blue-row {
+  color: #02a7f0;
+}
+
+.el-table .black-row {
+  color: black;
+}
+
+.el-table .green-row {
+  color: green;
+}
+</style>

+ 0 - 3
fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/team/index.vue

@@ -109,9 +109,6 @@
                      <el-form-item style="float:right;" v-if="permissions.structureExport">
                           <el-link type="primary" :underline="false" @click="showWorkTypeDialog">自定义工种</el-link>
                       </el-form-item>
-                      <el-form-item style="float:right;" >
-                        <el-link type="primary" :underline="false" @click="openInsertDialog(null)">添加人员</el-link>
-                      </el-form-item>
                     
                     <el-form-item style="float:right;">
                         <span style="color: #666666">{{ $t('jiao-se') }}</span>

+ 43 - 14
fhKeeper/formulahousekeeper/timesheet-workshop-stand/src/views/workReport/daily.vue

@@ -669,11 +669,13 @@
                         <el-option v-for="item in allPlanList"  :key="item.id" :label="item.productName" :value="item.id"></el-option>
                     </el-select>
                 </el-form-item> -->
-                <el-form-item prop="departmentId" :label="'选择工位'" v-if="permissions.reportsCompany">
+                <el-form-item :label="'选择工位'" v-if="permissions.reportsCompany">
 
-                    <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="exportParam.departmentId" :placeholder="$t('other.allDepartments')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 350px;"></el-cascader>
-
-                    <vueCascader :size="'medium'" :widthStr="'350'" :clearable="true" :subject="departmentList" :radios="true" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
+                    <!-- 部门筛选 -->
+                    <el-cascader  v-model="departmentIdArray" :options="departmentList" :placeholder="$t('qing-xuan-ze-bu-men')"
+                        :props="{ multiple: true, checkStrictly: true,expandTrigger: 'hover' }" collapse-tags :show-all-levels="false" clearable
+                        size="small" style="margin-bottom: 10px;width:180px"
+                    ></el-cascader>
 
                 </el-form-item>
                 <el-form-item prop="projectId" :label="$t('time.dateRange')">
@@ -1379,7 +1381,7 @@
         },
         data() {
             return {
-                
+                props:{ multiple: true },
                 checkTypeTxt:['自检','互检','专检'],
                 modItemDataId: null,
                 modImportTime: null,
@@ -1465,7 +1467,7 @@
                 weekDay : [this.$t('weekDay.sunday'), this.$t('weekDay.monday'), this.$t('weekDay.tuesday'), this.$t('weekDay.wednesday'), this.$t('weekDay.thursday'), this.$t('weekDay.friday'), this.$t('weekDay.saturday')],
                 statusStyle:["waiting", "filledReportStyle", "RejectStyle", "waitSubmitStyle"],
                 fillStatusList: [],
-                exportParam:{projectId: null, dateRange:[], departmentId: null},
+                exportParam:{projectId: null, dateRange:[], deptIds: null},
                 exportDialog:false,
                 timeFields:['timeType', 'workingTime', 'startTime', 'progress'],
                 subProjectList:[],
@@ -1653,6 +1655,7 @@
                 totalReportHours: 0, // 合计的工时
 
                 allPlanList: [], // 所有计划
+                departmentIdArray:[],
             };
         },
         watch: {
@@ -1697,7 +1700,7 @@
             this.exportParam.dateRange = [startStr,t];
             this.getAllDate(1);
             this.getReportList();
-            
+            this.getDepartmentList()
             // this.getFillProjectList();
             // this.getTimeType();
             this.getDepartment();
@@ -3856,7 +3859,25 @@
                         });
                 }
             },
-            
+            getDepartmentList() {
+            this.http.post( this.port.manage.depList, {},
+                res => {
+                if (res.code == "ok") {
+                    let dptlist = JSON.parse(JSON.stringify(res.data));
+                    this.departmentList = this.changeArr(dptlist);
+                } else {
+                    this.$message({
+                    message: res.msg,
+                    type: "error"
+                    });
+                }
+                },error => {
+                this.$message({
+                    message: error,
+                    type: "error"
+                });
+                });
+            },
             // 获取部门列表
             getDepartment() {
                 let day = (this.choseDay+1) > 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
@@ -3871,7 +3892,7 @@
                             // })
                             return
                         }
-                        this.departmentList = JSON.parse(JSON.stringify(res.data))
+                        // this.departmentList = JSON.parse(JSON.stringify(res.data))
                         var list = res.data , list1 = JSON.parse(JSON.stringify(res.data));
                         // let noAllData = JSON.parse(JSON.stringify(res.data));
                         // if (this.user.role > 0) {
@@ -4127,7 +4148,7 @@
                 let day = (this.choseDay +1)> 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
                 sessionStorage.msg = this.date + day,
                 this.getReportList();
-                this.getDepartment();
+                // this.getDepartment();
                 this.curDate = item.date;
             },
             canClick(i, item){
@@ -4311,20 +4332,28 @@
             //导出日报
             exportReport() {
                 this.listLoading = true;
+                var fName ='日报统计表_' + '.xlsx';
                 var param = {};
                 const { dateRange, departmentId } = this.exportParam
                 param.startDate = dateRange[0]
                 param.endDate = dateRange[1]
-                console.log(departmentId)
-                if(departmentId && departmentId.length > 0) {
-                    param.departmentId = departmentId[departmentId.length - 1]
+                let deptArr = []
+                for(var i in this.departmentIdArray){
+                let itemList = this.departmentIdArray[i] 
+                deptArr.push(itemList[itemList.length - 1])
                 }
+                param.deptIds = deptArr.join(',')
                 this.http.post('/report/exportReport', param,
                 res => {
                     this.listLoading = false;
                     if (res.code == "ok") {
-                        location.href = res.data;
+                        var filePath = res.data;
                         this.exportDialog = false;
+                        const a = document.createElement('a'); // 创建a标签
+                        a.setAttribute('download', fName);// download属性
+                        a.setAttribute('href', filePath);// href链接
+                        a.click(); //自执行点击事件
+                        a.remove();
                     } else {
                         this.$message({
                             message: res.msg,

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 196 - 196
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/static/customerNew.html


+ 3 - 3
fhKeeper/formulahousekeeper/webttkuaiban/src/main/resources/templates/customerNew.html

@@ -6,7 +6,7 @@
   <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
   <meta name="keywords" content="客户关系管理系统,CRM系统,销售订单管理,随访任务,线索,商机,联系人,产品,智能客户关系管理" />
   <meta name="description"
-    content="智能客户管家是一款结合了AI人工智能技术的客户关系管理系统(CRM),帮助企业全面管理客户和订单信息,降低客户流失率,促进成单。可以有效降低企业的营销管理成本。" />
+    content="智能客户管家是一款结合了人工智能技术的客户关系管理系统(CRM),使用DeepSeek大模型能力帮助企业全面管理客户和订单信息,降低客户流失率,促进成单。可以有效降低企业的营销管理成本。" />
   <title>AI智能客户管家|客户关系管理系统|CRM系统|-客户管家是强大易用的客户关系管理系统。销售订单|客户管理|线索|商机|联系人|产品|报表分析|智能BI</title>
   <link rel="shortcut icon" type="image/x-icon" href="./favicon.ico" />
   <link href="css/styles.css" rel="stylesheet">
@@ -47,7 +47,7 @@
       <img src="./image/customerNew/banner.gif" alt="" />
       <div class="bannar_text">
         <div class="bannar_text_title">AI智能客户管家</div>
-        <div class="bannar_text_item">· 节约企业营销成本<br />· 降低客户流失率<br />· 高效的客户追踪和智能数据处理系统</div>
+        <div class="bannar_text_item">· 节约企业营销成本<br />· 降低客户流失率<br />· ChatBI+DeepSeek智能数据处理系统</div>
       </div>
       
       <div class="bannar_text_btn">
@@ -61,7 +61,7 @@
         <div class="integrationImg">
           <img src="./image/customerNew/integrationImg.png" alt="">
         </div>
-        <div class="integrationText">· 客户管家,独创AI一体化智能管理</div>
+        <div class="integrationText">· 客户管家,独创AI一体化智能管理+DeepSeek</div>
       </div>
     </div>