瀏覽代碼

feature_20260203_完美门店

zhujindu 1 周之前
父節點
當前提交
c2d5a53f66

+ 8 - 3
src/router/index.js

@@ -274,9 +274,14 @@ const router = new VueRouter({
           component: () => import('@/views/historicalVisit/historicalDetails.vue'),
         },
         {
-          path: '/PerfectStore',
-          name: 'PerfectStore',
-          component: () => import('@/views/historicalVisit/PerfectStore.vue'),
+          path: '/perfectStore',
+          name: 'perfectStore',
+          component: () => import('@/views/historicalVisit/perfectStore.vue'),
+        },
+        {
+          path: '/perfectStoreTask',
+          name: 'perfectStoreTask',
+          component: () => import('@/views/historicalVisit/perfectStoreTask.vue'),
         },
         {
           path: '/historiStoreVisit',

+ 1 - 1
src/views/deviceOutside/index.vue

@@ -2358,7 +2358,7 @@ export default {
     // 完美门店
     openPerfectStore(val) {
       this.$router.push({
-        path: '/PerfectStore',
+        path: '/perfectStore',
         query: {
           visitId: val.visitId,
           storeId: val.storeId,

+ 4 - 4
src/views/historicalVisit/PerfectStore.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="PerfectStore">
+  <div class="perfectStore">
     <!--        顶部条-->
     <van-nav-bar class="navBar" title="完美门店报告" left-arrow @click-left="onClickLeft">
       <template #right>
@@ -525,7 +525,7 @@ export default {
     historiStoreVisit(val, index) {
       if (val.taskType == '5') {
         this.$router.push({
-          path: '/taskPhotoTaking',
+          path: '/perfectStoreTask',
           query: {
             storeCode: this.$route.query.storeCode || this.list.storeCode,
             visitsId: this.visitsId,
@@ -565,7 +565,7 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
-.PerfectStore {
+.perfectStore {
   .specialTask {
     display: flex;
     flex-direction: row;
@@ -724,7 +724,7 @@ export default {
   border-radius: 6px;
   overflow: hidden;
 }
-.PerfectStore {
+.perfectStore {
   .card {
     .el-popover__reference-wrapper {
       display: flex;

+ 450 - 0
src/views/historicalVisit/perfectStoreTask.vue

@@ -0,0 +1,450 @@
+<template>
+  <div class="perfectStoreTask">
+    <van-nav-bar class="navBar" left-arrow title="生动化陈列" @click-left="onClickLeft">
+      <template #right>
+        <span
+          v-if="isEdit && insert == '1'"
+          @click="onSubmit"
+          style="
+            color: white;
+            background: rgb(0, 87, 186);
+            display: block;
+            padding: 6px 10px;
+            border-radius: 6px;
+          "
+          >保存</span
+        >
+      </template>
+    </van-nav-bar>
+    <div class="content" v-if="formData">
+      <div class="container">
+        <van-form ref="tabstoreVal">
+          <div v-for="(item, index) in formData.collectionItemList" :key="index">
+            <div v-if="item.answerType == 'zp'" class="formLabel z-cell">
+              <van-cell>
+                <template #title>
+                  <!-- <span v-if="item.isMust == 0" class="van-f-red">*</span> -->
+                  <div class="headline">
+                    <span class="headlineIcon"></span>
+                    <span class="headlineTitle">{{ item.taskName }}</span>
+                  </div>
+                  <!-- 操作说明图片和电话 -->
+                  <taskTips
+                    v-if="item.contactPhone || item.examplePhoto"
+                    :contactPhone="item.contactPhone"
+                    :examplePhoto="item.examplePhoto">
+                  </taskTips>
+                </template>
+              </van-cell>
+              <deleteUploadImg
+                :imgs="item.fileInfoList"
+                :storeGroupId="storeGroupId"
+                :taskIds="taskIds"
+                :visitsId="visitsId"
+                :collectionItemId="item.collectionId"
+                :putInCode="formData.putInCode"
+                :photoIdentifyType="formData.photoIdentifyType"
+                @upDataDetail="getDetaile"
+                :pictureSource="item.pictureSource"
+                :continuousShoot="item.continuousShoot"
+                :insert="insert"
+                :objectType="objectType"
+                v-if="item.fileInfoList.length"></deleteUploadImg>
+              <span v-else>暂未识别到产品照片</span>
+            </div>
+          </div>
+        </van-form>
+      </div>
+      <div class="skuDeatil">
+        <div class="headline" style="margin-top: 10px">
+          <span class="headlineIcon"></span>
+          <span class="headlineTitle">SKU图像识别结果:个</span>
+        </div>
+        <el-table
+          :data="taskPhotoRecognitionResult"
+          border
+          class="table-headermd1"
+          style="width: 100%">
+          <el-table-column label="" type="index" width="50px" align="center" />
+          <el-table-column label="产品" prop="skuProductName" align="center" />
+          <el-table-column label="要求" prop="conditionIdentifyNum" align="center" width="60px">
+          </el-table-column>
+          <el-table-column
+            label="排面数"
+            prop="identifyTheNumberOfCards"
+            width="70px"
+            align="center">
+            <template slot-scope="scope">
+              <span :style="{ color: scope.row.meetTheStandard == 1 ? '#07c160' : 'red' }">
+                {{ scope.row.identifyTheNumberOfCards }}
+              </span>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <div class="dataList" v-if="dataList">
+        <div class="headline" style="margin-top: 10px">
+          <span class="headlineIcon"></span>
+          <span class="headlineTitle">陈列任务要求</span>
+        </div>
+        <div class="dataItem" v-for="(item, index) in dataList">
+          <div class="itemTop">
+            <div class="itemIndex">
+              <p>{{ index + 1 }}、</p>
+            </div>
+            <div class="itemHtml" v-html="item.displayInstructions"></div>
+          </div>
+          <div class="itemBottom" v-if="insert == '0'">
+            <img
+              @click="openDialog(item)"
+              :src="
+                item.taskPhotoConditionPassed == 1
+                  ? require('@/assets/taskPhotoSu.png')
+                  : require('@/assets/taskPhotoErr.png')
+              " />
+          </div>
+        </div>
+      </div>
+    </div>
+    <el-dialog
+      title="识别结果"
+      :visible.sync="vanPopup"
+      width="80%"
+      :append-to-body="true"
+      :close-on-click-modal="false"
+      @close="vanPopup == false"
+      custom-class="identifyResultdialog">
+      <!-- 识别结果 -->
+      <div class="identifyResult" v-if="taskPhotoRecognitionResult" style="padding: 0 10px">
+        <div class="resultContent">
+          <el-table
+            :data="taskPhotoRecognitionResult"
+            border
+            class="table-headermd1"
+            style="width: 100%">
+            <el-table-column label="" type="index" width="50px" align="center" />
+            <el-table-column label="产品" prop="skuProductName" align="center" />
+            <el-table-column label="要求" prop="conditionIdentifyNum" align="center" width="60px">
+            </el-table-column>
+            <el-table-column
+              label="识别排面数"
+              prop="identifyTheNumberOfCards"
+              width="70px"
+              align="center">
+              <template slot-scope="scope">
+                <span :style="{ color: scope.row.meetTheStandard == 1 ? '#07c160' : 'red' }">
+                  {{ scope.row.identifyTheNumberOfCards }}
+                </span>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import { getCollectionInfosBatch, addCollectionAnswerBatch, getVisitsDetail } from '@/api/index';
+import taskTips from '@/views/deviceWithin/taskTips';
+import deleteUploadImg from '@/components/deleteUploadImgTaskPhoto';
+export default {
+  name: 'abnortaskPhotoTakingmalVisit',
+  components: { taskTips, deleteUploadImg },
+  data() {
+    return {
+      isEdit: true,
+      formData: null,
+      dataList: null,
+      taskIds: [],
+      visitsId: null,
+      storeGroupId: '',
+      objectType: '',
+      insert: '',
+      vanPopup: false,
+      taskPhotoRecognitionResult: null,
+    };
+  },
+  activated() {
+    this.taskIds = this.$route.query.taskIds || [];
+    this.visitsId = this.$route.query.visitsId || '';
+    this.storeGroupId = this.$route.query.storeGroupId || '';
+    this.objectType = this.$route.query.photoType || '';
+    this.insert = this.$route.query.insert;
+    if (this.$route.query.source == 'historicalDetails') {
+      this.getVisitsDetailFun();
+    } else {
+      this.getDetaile();
+    }
+  },
+  methods: {
+    getVisitsDetailFun() {
+      this.toastLoading(0, '加载中...', true);
+      getVisitsDetail({ visitsId: this.visitsId }).then((res) => {
+        this.toastLoading().clear();
+        if (res.data.sfaTaskList) {
+          this.dataList = res.data.sfaTaskList.filter((val) => val.taskType == '5');
+          this.formData = this.dataList[0];
+        } else {
+          this.formData = null;
+        }
+      });
+    },
+    getDetaile() {
+      console.log(this.$route.query);
+      getCollectionInfosBatch({
+        storeCode: this.$route.query.storeCode,
+        insert: this.insert == '1' ? true : false,
+        id: this.visitsId,
+        taskIds: this.taskIds.split(','),
+      }).then((res) => {
+        if (res.data && res.data.length) {
+          this.dataList = res.data;
+          this.formData = res.data[0];
+        } else {
+          this.formData = null;
+        }
+      });
+    },
+    openDialog(item) {
+      this.vanPopup = true;
+      this.taskPhotoRecognitionResult = item.taskPhotoRecognitionResult;
+    },
+    onSubmit() {
+      let formData = {
+        storeId: this.$route.query.storeId,
+        storeCode: this.$route.query.storeCode,
+        storeGroupId: this.$route.query.storeGroupId,
+        visitsId: this.visitsId,
+        taskList: this.taskIds.split(',').map((val) => Number(val)),
+        insert: true,
+        collectionAnswers: [],
+        checkUnManage: 'N',
+        deviceCode: '',
+        putInCode: '',
+        equipmentCode: '',
+      };
+      addCollectionAnswerBatch(formData).then((res) => {
+        if (res.code == 200) {
+          localStorage.setItem('getRequestFlage', 'true');
+          this.$router.go(-1);
+        }
+      });
+    },
+    onClickLeft() {
+      this.$router.go(-1);
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.perfectStoreTask {
+  display: flex;
+  flex-direction: column;
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+  .content {
+    padding: 10px;
+    flex: 1;
+    width: 100%;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    padding-bottom: 46px;
+    .container {
+      background: #fff;
+      width: 100%;
+      border-radius: 6px;
+      // padding: 10px;
+      padding: 0 10px 10px 0px;
+    }
+    .formLabel {
+      // margin-left: 20px;
+      // border-bottom: 1px solid #f1f1f1;
+    }
+    .formLabel .van-cell {
+      padding: 10px 0;
+    }
+    .formLabel .van-cell::after {
+      border: 0;
+    }
+    .formLabel .van-field {
+      border: 1px solid #f1f1f1;
+      padding: 6px;
+      width: 100%;
+      border-radius: 4px;
+      overflow: hidden;
+    }
+    .formLabel .van-field__control {
+      padding: 0 10px;
+    }
+    .formLabel .formLabeltitle {
+      position: absolute;
+      top: 8px;
+    }
+    .z-cell .van-cell__title {
+      font-size: 16px;
+    }
+    .van-f-red {
+      color: red;
+      width: 8px;
+      display: inline-block;
+      line-height: 26px;
+    }
+    .headline {
+      font-weight: 600;
+      font-size: 16px;
+      position: relative;
+      display: flex;
+      align-items: center;
+      .headlineIcon {
+        display: inline-block;
+        position: absolute;
+        width: 3px;
+        height: 60%;
+        background: #3875c6;
+        border-radius: 5px;
+      }
+      .headlineTitle {
+        display: inline-block;
+        padding: 0px 20px;
+        background: #eef5ff;
+        border-radius: 0 18px 18px 0;
+        height: 36px;
+        line-height: 36px;
+      }
+    }
+  }
+  .dataList {
+    width: 100%;
+    margin-top: 10px;
+    overflow-y: auto;
+    background: #fff;
+    .dataItem {
+      display: flex;
+      // border-radius: 6px;
+      flex-direction: row;
+      margin-bottom: 10px;
+      // padding: 10px;
+      font-size: 16px;
+      margin-left: 20px;
+      border-bottom: 1px solid #e2e1e1;
+      .itemIndex {
+      }
+      .itemTop {
+        flex: 1;
+        overflow: hidden;
+        padding-bottom: 10px;
+        .itemHtml {
+          overflow-x: auto;
+        }
+      }
+      .itemTop,
+      .itemBottom {
+        display: flex;
+        flex-direction: row;
+      }
+      .itemBottom {
+        align-items: center;
+        width: 35px;
+        margin-left: 5px;
+        img {
+          width: 100%;
+          height: 30px;
+        }
+      }
+    }
+  }
+  .tableTitle {
+    padding: 10px 0;
+    font-size: 16px;
+    font-weight: bold;
+    background: #f5f5f5;
+    margin: 15px 0;
+  }
+}
+</style>
+<style lang="scss">
+// .perfectStoreTask {
+//   .itenHtml {
+//     overflow: hidden;
+//     img {
+//       width: 100%;
+//     }
+//   }
+// }
+.identifyResultdialog {
+  width: vw(690) !important;
+  margin-top: 1vh !important;
+  border-radius: 8px !important;
+  font-size: vw(32) !important;
+  height: 70% !important;
+  display: flex;
+  flex-direction: column;
+  .el-dialog__headerbtn {
+    width: vw(44);
+    height: vw(44);
+    background-color: #e1e1e1;
+    border-radius: 50%;
+    margin-top: -3px;
+  }
+  .el-dialog__body {
+    flex: 1;
+    overflow-y: auto;
+  }
+}
+.table-headermd1 {
+  font-size: 14px;
+  text-align: center;
+  position: initial;
+  width: 98% !important;
+  margin: 0 auto;
+  border-right: 0;
+  border-radius: 8px;
+  th {
+    color: #000;
+    font-weight: bold;
+  }
+  td {
+    color: #000;
+  }
+  .el-table__cell {
+    padding: 6px 0 !important;
+    .cell {
+      padding: 0;
+    }
+  }
+}
+.skuDeatil {
+  width: 100%;
+  margin-top: 10px;
+  background: #fff;
+  border-radius: 6px;
+  .table-headermd1 {
+    font-size: 14px;
+    text-align: center;
+    position: initial;
+    width: 98% !important;
+    margin: 0 auto;
+    border-right: 0;
+    border-radius: 8px;
+    margin-top: 10px;
+    th {
+      color: #000;
+      font-weight: bold;
+    }
+    td {
+      color: #000;
+    }
+    .el-table__cell {
+      padding: 6px 0 !important;
+      .cell {
+        padding: 0;
+      }
+    }
+  }
+  .table-headermd1 th.el-table__cell {
+    background-color: #f5f5f5;
+  }
+}
+</style>