Parcourir la source

feature_20251015_主管任务门店扫码签到

zhujindu il y a 1 mois
Parent
commit
7536039326

+ 9 - 0
src/api/index.js

@@ -1073,3 +1073,12 @@ export function getSummaryQrCheckList(query) {
     params: query,
   });
 }
+
+// 打开扫码签到二维码
+export function getSummaryQrCodeUUID(query) {
+  return request({
+    url: '/mobile/summaryMobile/getSummaryQrCodeUUID',
+    method: 'get',
+    params: query,
+  });
+}

+ 51 - 12
src/views/week/ActivityQRCode.vue

@@ -1,6 +1,9 @@
 <template>
   <div class="ActivityQRCode">
-    <van-form ref="tabstoreVal" class="QRCodeActivity" @submit="openQRCode">
+    <van-form
+      ref="tabstoreVal"
+      class="QRCodeActivity"
+      :readonly="approvalStatus == '1' || approvalStatus == '2'">
       <div class="activityItem">
         <span class="van-f-red">*</span>
         <van-field
@@ -19,7 +22,7 @@
           :value="activityForm.summaryEventDate"
           label="活动日期"
           placeholder="请选择活动日期"
-          @click="activityShowCalendar = true"
+          @click="activityShowCalendarFun"
           :rules="[{ required: true, message: '请选择活动日期' }]" />
       </div>
       <div class="activityItem">
@@ -48,7 +51,7 @@
       </div>
       <div class="activityItem">
         <div class="van-cell QRCodeBtnBox">
-          <van-button class="QRCodeBtn" color="#0057ba" native-type="openQRCode">
+          <van-button class="QRCodeBtn" color="#0057ba" @click="openQRCode">
             打开签到二维码
           </van-button>
           <div class="tips">必须门店老板现场,使用企业微信扫码</div>
@@ -102,7 +105,7 @@
       <div class="centerBox">
         <div class="title">{{ activityForm.summaryEventName }}</div>
         <div class="activityDate">{{ activityForm.summaryEventDate }}</div>
-        <img class="QRCodeUrl" :src="require('@/assets/QRcode.png')" />
+        <img class="QRCodeUrl" :src="this.QRCodeUrl" />
         <div class="validTimeBox">
           <div class="text">二维码有效期</div>
           <div class="validTime">
@@ -117,7 +120,7 @@
   </div>
 </template>
 <script>
-import { getSummaryQrCheckList } from '@/api/index';
+import { getSummaryQrCheckList, getSummaryQrCodeUUID } from '@/api/index';
 export default {
   props: {
     ActivityQRCodeData: {
@@ -126,6 +129,12 @@ export default {
     qrUuid: {
       type: String,
     },
+    approvalStatus: {
+      type: String,
+    },
+    userSummaryId: {
+      type: [String, Number],
+    },
   },
   data() {
     return {
@@ -148,11 +157,13 @@ export default {
       },
       validDate: new Date(),
       QRChainList: [],
+      qrUuids: null,
     };
   },
   created() {
-    this.activityForm = this.ActivityQRCodeData;
+    if (this.ActivityQRCodeData) this.activityForm = this.ActivityQRCodeData;
     if (this.qrUuid) {
+      this.qrUuids = this.qrUuid;
       this.getQRChainList();
     }
   },
@@ -162,12 +173,40 @@ export default {
       this.activityShowCalendar = false;
     },
     // 打开二维码
-    openQRCode(values) {
-      this.$emit('onSubmit', () => {
-        this.QRCodeBox = true;
-      });
+    openQRCode(value) {
+      // approvalStatus//1-待审批 2-审批通过 不支持修改,直接查看二维码
+      if (this.approvalStatus == '1' || this.approvalStatus == '2' || this.approvalStatus == '3') {
+        getSummaryQrCodeUUID({ qrUuid: this.qrUuid, userSummaryId: this.userSummaryId }).then(
+          (res) => {
+            this.QRCodeUrl = res.data.base64Png;
+            this.QRCodeBox = true;
+          }
+        );
+      } else {
+        this.$refs.tabstoreVal
+          .validate()
+          .then(() => {
+            // 验证通过
+            this.toastLoading(0, '加载中...', true);
+            this.$emit('onSubmit', (res) => {
+              this.toastLoading().clear();
+              this.QRCodeBox = true;
+              this.QRCodeUrl = res.data.base64Png;
+              this.qrUuids = res.data.qrUuid;
+            });
+          })
+          .catch((errors) => {
+            //验证失败
+            window.scrollTo(0, 0);
+          });
+      }
+    },
+    activityShowCalendarFun() {
+      if (this.approvalStatus == '1' || this.approvalStatus == '2') return;
+      this.activityShowCalendar = true;
     },
     clickValidDateShow(type) {
+      if (this.approvalStatus == '1' || this.approvalStatus == '2') return;
       if (type == 'start') {
         this.activate = {
           type: type,
@@ -218,10 +257,10 @@ export default {
       return `${date.getFullYear()}-${Month}-${Day}`;
     },
     getQRChainList() {
-      if (!this.qrUuid) return;
+      if (!this.qrUuids) return;
       this.QRChainList = [];
       this.toastLoading(0, '加载中...', true);
-      getSummaryQrCheckList({ qrUuid: this.qrUuid }).then((res) => {
+      getSummaryQrCheckList({ qrUuid: this.qrUuids }).then((res) => {
         this.toastLoading().clear();
         if (res.code == 200) {
           this.QRChainList = res.data;

+ 28 - 6
src/views/week/SUPTaskApproval/SUPTaskApprovalDetail.vue

@@ -40,13 +40,19 @@
       </div>
     </div>
     <div class="lineGrey"></div>
-    <div
-      class="container linep"
-      style="background-color: #fff; width: 94%; margin: 0px auto; border-radius: 6px">
+    <div class="container linep" style="width: 94%; margin: 0px auto; border-radius: 6px">
       <detailItem
         :collectionItemLists="collectionItemLists"
         :approvalStatus="info.approvalStatus"
-        ref="detailItem"></detailItem>
+        ref="detailItem">
+        <!-- 活动扫码 -->
+        <ActivityQRCode
+          v-if="info.qrCodeCheck == '1'"
+          ref="ActivityQRCode"
+          :ActivityQRCodeData="ActivityQRCodeData"
+          :approvalStatus="info.approvalStatus"
+          :qrUuid="qrUuid"></ActivityQRCode>
+      </detailItem>
     </div>
     <div
       class="newCarList"
@@ -94,9 +100,10 @@ import deleteUploadImg from '@/components/deleteUploadImg';
 import detailItem from './detailItem';
 import { writeAgainCustomAnswer } from '@/api/week';
 import { changeApproval, getApprovalDetail } from '@/api/SUPTaskApproval.js';
+import ActivityQRCode from '../ActivityQRCode';
 export default {
   name: 'SUPTaskApprovalDetail',
-  components: { deleteUploadImg, detailItem },
+  components: { deleteUploadImg, detailItem, ActivityQRCode },
   data() {
     return {
       info: null,
@@ -125,6 +132,8 @@ export default {
       writeAgain: false,
       approvalMessage: '',
       tabVal: '1',
+      ActivityQRCodeData: {},
+      qrUuid: null,
       //
     };
   },
@@ -168,6 +177,13 @@ export default {
         summaryApprovalId: this.$route.query.summaryApprovalId,
       }).then((res) => {
         loading1.clear();
+        this.ActivityQRCodeData = {
+          summaryEventName: res.data.summaryEventName || '',
+          summaryEventDate: res.data.summaryEventDate || '',
+          qrStartTime: res.data.qrStartTime || '',
+          qrEndTime: res.data.qrEndTime || '',
+        };
+        this.qrUuid = res.data.qrUuid;
         this.reportTargetAll = res.data.reportTargetAll;
         this.info = res.data;
         this.type = res.data.userType;
@@ -294,7 +310,7 @@ export default {
 </script>
 <style scoped lang="scss">
 .container {
-  background-color: white;
+  // background-color: white;
 }
 
 .van-f-red {
@@ -493,5 +509,11 @@ export default {
     float: right;
     color: #0057ba;
   }
+
+  .linep .van-cell__title {
+    color: #646566;
+    font-weight: 500;
+    font-size: 14px;
+  }
 }
 </style>

+ 4 - 0
src/views/week/SUPTaskApproval/detailItem.vue

@@ -1,5 +1,6 @@
 <template>
   <div class="componVisitSummary detailItem">
+    <slot></slot>
     <van-form ref="tabstoreVal">
       <div v-for="(item, index) in collectionItemList" :key="index">
         <div v-if="item.answerType == 'sz'" class="formLabel z-cell">
@@ -788,6 +789,9 @@ export default {
   .z-cell .van-cell__title {
     font-size: 16px;
   }
+  .van-form {
+    background-color: white;
+  }
 }
 </style>
 <style lang="scss">

+ 33 - 3
src/views/week/VisitSummaryAdd.vue

@@ -3,7 +3,6 @@
     <div class="navBarTOP">
       <van-nav-bar class="navBar" left-arrow :title="title" @click-left="onClickLeft" />
     </div>
-    <!--        主体内容-->
     <div class="lineGrey"></div>
     <div class="lineGrey"></div>
     <div class="lineGrey"></div>
@@ -504,7 +503,8 @@ export default {
           .then((res) => {
             if (res.code == 200) {
               if (callback) {
-                callback();
+                // 回传二维码
+                callback(res);
               } else {
                 this.$router.go(-1);
               }
@@ -517,7 +517,29 @@ export default {
           });
       });
     },
-    onSubmit(callback) {
+    onSubmit() {
+      if (this.$route.query.qrCodeCheck == '1') {
+        // 执行 ActivityQRCode from表单验证触发
+        this.$refs.ActivityQRCode.$refs.tabstoreVal
+          .validate()
+          .then(() => {
+            // 验证通过
+            let ActivityQRCodeData = this.$refs.ActivityQRCode.activityForm || {};
+            // 先保存生成二维码uuid
+            this.onStorage((res) => {
+              this.onSubmitFun(ActivityQRCodeData, res.data.qrUuid);
+            });
+          })
+          .catch((errors) => {
+            //验证失败
+            window.scrollTo(0, 0);
+            return;
+          });
+      } else {
+        this.onSubmitFun();
+      }
+    },
+    onSubmitFun(ActivityQRCodeData = {}, qrUuid = null) {
       this.setParams(() => {
         if (this.flagclick) {
           this.flagclick = false;
@@ -529,6 +551,8 @@ export default {
             userSummaryId: '', //	Long	用户总结id,如果为新增则不填,编辑则必填
             summaryId: this.$route.query.summaryId, //Long	主管任务id
             customItemList: this.collectionItemList, //List<Object>	答案列表
+            ...ActivityQRCodeData,
+            qrUuid: qrUuid,
           })
             .then((res) => {
               if (res.code == 200) {
@@ -1185,5 +1209,11 @@ export default {
       }
     }
   }
+
+  .linep .van-cell__title {
+    color: #646566;
+    font-weight: 500;
+    font-size: 14px;
+  }
 }
 </style>

+ 60 - 7
src/views/week/VisitSummaryDetail.vue

@@ -40,22 +40,38 @@
       </div>
     </div>
     <div class="lineGrey"></div>
-    <div
-      class="container linep"
-      style="background-color: #fff; width: 94%; margin: 0px auto; border-radius: 6px">
+    <div class="container linep" style="width: 94%; margin: 0px auto; border-radius: 6px">
       <!-- 退回待提交 summaryUpdate:Boolean类型,true-允许编辑,false-不允许编辑 -->
       <template v-if="info.approvalStatus == '3' && info.summaryUpdate">
         <componVisitSummary
           :collectionItemLists="collectionItemLists"
           :approvalStatus="info.approvalStatus"
-          ref="componVisitSummary"></componVisitSummary>
+          ref="componVisitSummary">
+          <!-- 活动扫码 -->
+          <ActivityQRCode
+            v-if="info.qrCodeCheck == '1'"
+            ref="ActivityQRCode"
+            :ActivityQRCodeData="ActivityQRCodeData"
+            :approvalStatus="info.approvalStatus"
+            :userSummaryId="$route.query.userSummaryId"
+            :qrUuid="qrUuid"></ActivityQRCode>
+        </componVisitSummary>
       </template>
       <!-- 补填、详情 -->
       <template v-else>
         <allowWriteAgainSummary
           :collectionItemLists="collectionItemLists"
           :approvalStatus="info.approvalStatus"
-          ref="allowWriteAgainSummary"></allowWriteAgainSummary>
+          ref="allowWriteAgainSummary">
+          <!-- 活动扫码 -->
+          <ActivityQRCode
+            v-if="info.qrCodeCheck == '1'"
+            ref="ActivityQRCode"
+            :ActivityQRCodeData="ActivityQRCodeData"
+            :approvalStatus="info.approvalStatus"
+            :userSummaryId="$route.query.userSummaryId"
+            :qrUuid="qrUuid"></ActivityQRCode>
+        </allowWriteAgainSummary>
       </template>
     </div>
     <div
@@ -104,9 +120,10 @@ import componVisitSummary from '@/views/week/componVisitSummary';
 import allowWriteAgainSummary from '@/views/week/allowWriteAgainSummary';
 import { writeAgainCustomAnswer } from '@/api/week';
 import { changeApproval } from '@/api/SUPTaskApproval.js';
+import ActivityQRCode from './ActivityQRCode';
 export default {
   name: 'daily',
-  components: { deleteUploadImg, componVisitSummary, allowWriteAgainSummary },
+  components: { deleteUploadImg, componVisitSummary, allowWriteAgainSummary, ActivityQRCode },
   data() {
     return {
       info: null,
@@ -135,6 +152,8 @@ export default {
       writeAgain: false,
       approvalMessage: '',
       source: '',
+      ActivityQRCodeData: {},
+      qrUuid: null,
       //
     };
   },
@@ -175,6 +194,13 @@ export default {
       });
       getSummaryMobilo({ userSummaryId: this.$route.query.userSummaryId }).then((res) => {
         loading1.clear();
+        this.ActivityQRCodeData = {
+          summaryEventName: res.data.summaryEventName || '',
+          summaryEventDate: res.data.summaryEventDate || '',
+          qrStartTime: res.data.qrStartTime || '',
+          qrEndTime: res.data.qrEndTime || '',
+        };
+        this.qrUuid = res.data.qrUuid;
         this.reportTargetAll = res.data.reportTargetAll;
         this.info = res.data;
         this.type = res.data.userType;
@@ -265,6 +291,25 @@ export default {
         });
     },
     submitApproval() {
+      if (this.info.qrCodeCheck == '1') {
+        // 执行 ActivityQRCode from表单验证触发
+        this.$refs.ActivityQRCode.$refs.tabstoreVal
+          .validate()
+          .then(() => {
+            // 验证通过
+            let ActivityQRCodeData = this.$refs.ActivityQRCode.activityForm || {};
+            this.submitApproval(ActivityQRCodeData);
+          })
+          .catch((errors) => {
+            //验证失败
+            window.scrollTo(0, 0);
+            return;
+          });
+      } else {
+        this.submitApproval();
+      }
+    },
+    submitApproval(ActivityQRCodeData = {}) {
       let collectionAnswerlisd = this.$refs.componVisitSummary.collectionAnswerlisd;
       let collectionItemList = this.$refs.componVisitSummary.collectionItemList;
       for (var c = 0; c < collectionAnswerlisd.length; c++) {
@@ -287,6 +332,8 @@ export default {
         userSummaryId: this.info.userSummaryId, //	Long	用户总结id,如果为新增则不填,编辑则必填
         summaryId: this.info.summaryId, //Long	主管任务id
         customItemList: collectionItemList,
+        ...ActivityQRCodeData,
+        qrUuid: this.qrUuid,
       })
         .then((res) => {
           if (res.code == 200) {
@@ -307,7 +354,7 @@ export default {
 </script>
 <style scoped lang="scss">
 .container {
-  background-color: white;
+  // background-color: white;
 }
 
 .van-f-red {
@@ -505,5 +552,11 @@ export default {
     float: right;
     color: #0057ba;
   }
+
+  .linep .van-cell__title {
+    color: #646566;
+    font-weight: 500;
+    font-size: 14px;
+  }
 }
 </style>

+ 29 - 1
src/views/week/VisitSummaryStorageDetail.vue

@@ -229,7 +229,8 @@ export default {
             if (res.code == 200) {
               this.$toast('操作成功!');
               if (callback) {
-                callback();
+                // 回传二维码
+                callback(res);
               } else {
                 this.$router.replace({
                   path: this.source,
@@ -245,11 +246,32 @@ export default {
       });
     },
     onSubmit() {
+      if (this.info.qrCodeCheck == '1') {
+        // 执行 ActivityQRCode from表单验证触发
+        this.$refs.ActivityQRCode.$refs.tabstoreVal
+          .validate()
+          .then(() => {
+            // 验证通过
+            let ActivityQRCodeData = this.$refs.ActivityQRCode.activityForm || {};
+            this.onSubmitFun(ActivityQRCodeData);
+          })
+          .catch((errors) => {
+            //验证失败
+            window.scrollTo(0, 0);
+            return;
+          });
+      } else {
+        this.onSubmitFun();
+      }
+    },
+    onSubmitFun(ActivityQRCodeData = {}) {
       this.setParams((collectionItemList) => {
         insertCustomAnswer({
           userSummaryId: this.info.userSummaryId, //	Long	用户总结id,如果为新增则不填,编辑则必填
           summaryId: this.info.summaryId, //Long	主管任务id
           customItemList: collectionItemList,
+          ...ActivityQRCodeData,
+          qrUuid: this.qrUuid,
         })
           .then((res) => {
             if (res.code == 200) {
@@ -478,5 +500,11 @@ export default {
       border-radius: 20px;
     }
   }
+
+  .linep .van-cell__title {
+    color: #646566;
+    font-weight: 500;
+    font-size: 14px;
+  }
 }
 </style>

+ 4 - 0
src/views/week/allowWriteAgainSummary.vue

@@ -1,5 +1,6 @@
 <template>
   <div class="componVisitSummary">
+    <slot></slot>
     <van-form ref="tabstoreVal">
       <div v-for="(item, index) in collectionItemList" :key="index">
         <div v-if="item.answerType == 'sz'" class="formLabel z-cell">
@@ -891,6 +892,9 @@ export default {
   .z-cell .van-cell__title {
     font-size: 16px;
   }
+  .van-form {
+    background-color: white;
+  }
 }
 </style>
 <style lang="scss">