Browse Source

Merge branch 'feature_20250419_图片识别异常部主管反馈内容修改' into uat(dev)

zhujindu 7 tháng trước cách đây
mục cha
commit
e079e1699a

+ 13 - 0
src/router/index.js

@@ -700,8 +700,21 @@ const router = new VueRouter({
         {
           path: '/AIImageDetail',
           name: 'AIImageDetail',
+          meta: { title: '新的识别反馈-店招' },
           component: () => import('@/views/AIImage/AIImageDetail.vue'),
         },
+        {
+          path: '/historyAIImageDetail',
+          name: 'historyAIImageDetail',
+          meta: { title: '旧的识别反馈' },
+          component: () => import('@/views/AIImage/historyAIImageDetail.vue'),
+        },
+        {
+          path: '/AIImageDetailTSJ',
+          name: 'AIImageDetailTSJ',
+          meta: { title: '新的识别反馈-调色机' },
+          component: () => import('@/views/AIImage/AIImageDetailTSJ.vue'),
+        },
       ],
     },
   ],

+ 34 - 29
src/views/AIImage/AIImageDetail.vue

@@ -55,17 +55,29 @@
       <div class="result">
         <div class="title">
           <span style="color: red">*</span>
-          <span>AI识别结果</span>
+          <span>请核查并确认店招异常原因:</span>
         </div>
-        <van-radio-group v-model="AIResult" :disabled="approveState == '1'">
-          <van-radio name="1">正确</van-radio>
-          <van-radio name="0">不正确</van-radio>
+        <van-radio-group v-model="abnormalReason" :disabled="approveState == '1'">
+          <van-radio :name="item.dictValue" v-for="item in AIResultOption">{{
+            item.dictLabel
+          }}</van-radio>
         </van-radio-group>
       </div>
-      <div class="cause">
+      <div class="cause" v-if="data.abnormalStoreSolutionImg">
         <div class="title">
           <span style="color: red">*</span>
-          <span>{{ causeTitle }}</span>
+          <span>请知悉异常店招对应解决方案,并尽快整改</span>
+        </div>
+        <div class="tipsImg">
+          <img
+            :src="data.abnormalStoreSolutionImg"
+            width="100%"
+            @click="previewImgs(data.abnormalStoreSolutionImg)" />
+        </div>
+      </div>
+      <div class="cause">
+        <div class="title">
+          <span>反馈:</span>
         </div>
         <van-field
           v-model="causeMessage"
@@ -73,7 +85,7 @@
           rows="1"
           autosize
           type="textarea"
-          :placeholder="'请输入' + causeTitle" />
+          placeholder="如ai识别错误、门店异常原因等,均可在此反馈,本部相关负责人会查看" />
       </div>
     </div>
     <div class="confirmBtn" v-if="approveState == '0'">
@@ -84,30 +96,20 @@
 <script>
 import { ImagePreview } from 'vant';
 import { getPhotoApproveDetail, savePhotoApprove } from '@/api/AIImage';
+import { getDictOption } from '@/api/index';
 export default {
   name: 'AIImageDetail',
   data() {
     return {
       data: null,
       photoApproveId: null,
-      AIResult: '1',
+      abnormalReason: '1',
       causeTitle: '',
       causeMessage: '',
       approveState: '0',
+      AIResultOption: [],
     };
   },
-  watch: {
-    AIResult: {
-      handler(val) {
-        if (val == 1) {
-          this.causeTitle = '拜访照异常原因及解决方案';
-        } else {
-          this.causeTitle = '反馈AI识别结果有误';
-        }
-      },
-      immediate: true,
-    },
-  },
   filters: {
     filterType(val) {
       if (val == 1) {
@@ -124,6 +126,10 @@ export default {
   activated() {
     this.photoApproveId = this.$route.query.photoApproveId;
     this.getDeytail();
+    // 获取店招异常原因字典
+    getDictOption({}, 'feedback_error_msg').then((res) => {
+      this.AIResultOption = res.data;
+    });
   },
   mounted() {},
   methods: {
@@ -135,9 +141,10 @@ export default {
           this.data = res.data;
           this.approveState = res.data.approveState; //反馈状态:0 未审批 1已审批
           if (this.approveState == '0') {
+            // latestPhotoApprove 上次反馈内容 反显
             let latestPhotoApprove = res.data.latestPhotoApprove;
             if (latestPhotoApprove) {
-              this.AIResult = latestPhotoApprove.resultCorrect || '1';
+              this.abnormalReason = latestPhotoApprove.resultCorrect || '1';
               this.causeMessage =
                 latestPhotoApprove.reasonsSolutions || latestPhotoApprove.feedbackError;
               this.$dialog
@@ -152,7 +159,7 @@ export default {
                 .then(() => {});
             }
           } else {
-            this.AIResult = res.data.resultCorrect || '1';
+            this.abnormalReason = res.data.resultCorrect || '1';
             this.causeMessage = res.data.reasonsSolutions || res.data.feedbackError;
           }
         }
@@ -162,16 +169,14 @@ export default {
       ImagePreview([val]);
     },
     confirm() {
-      if (!this.causeMessage) {
-        this.$toast('请输入' + this.causeTitle);
-        return;
-      }
+      this.toastLoading(0, '加载中...', true);
       savePhotoApprove({
         photoApproveId: this.photoApproveId, //	long	主键
-        resultCorrect: this.AIResult, //	string	AI识别是否正确: 1 正确 0不正确
-        reasonsSolutions: this.AIResult == '1' ? this.causeMessage : '', //	string	原因及解决方案
-        feedbackError: this.AIResult == '0' ? this.causeMessage : '', //	string	反馈AI识别不正确
+        resultCorrect: this.abnormalReason, //	string	AI识别是否正确: 1 正确 0不正确
+        reasonsSolutions: '',
+        feedbackError: this.causeMessage, //	string	反馈AI识别不正确
       }).then((res) => {
+        this.toastLoading().clear();
         if (res.code == 200) {
           this.$toast.loading({
             duration: 1000,

+ 248 - 0
src/views/AIImage/AIImageDetailTSJ.vue

@@ -0,0 +1,248 @@
+<template>
+  <div class="AIImageDetail" v-if="data">
+    <van-nav-bar class="navBar" title="异常反馈" left-arrow @click-left="onClickLeft">
+    </van-nav-bar>
+    <div class="message">
+      <div class="storeTitle">
+        <div class="storeName">{{ data.storeName }}</div>
+        <div class="storeCode" style="margin-left: 5px; margin-top: 2px">
+          (<span style="color: #0057ba; vertical-align: -1px">{{ data.storeCode }}</span
+          >)
+        </div>
+      </div>
+      <div class="item">
+        <div class="label">门店类型:</div>
+        <div class="value">{{ data.storeCategoryName }}</div>
+      </div>
+      <div class="item">
+        <div class="label">地址:</div>
+        <div class="value">{{ data.addressLine }}</div>
+      </div>
+      <div class="item">
+        <div class="label">拜访人:</div>
+        <div class="value">{{ data.visitUserNickName }}</div>
+      </div>
+      <div class="item">
+        <div class="label">拜访时间:</div>
+        <div class="value">{{ data.createTime }}</div>
+      </div>
+      <div class="item">
+        <div class="label">拍摄类型:</div>
+        <div class="value">{{ data.identifyType | filterType }}</div>
+      </div>
+      <div class="item" style="color: red">
+        <div class="label">识别结果:</div>
+        <div class="value">{{ data.unqualifiedReason }}</div>
+      </div>
+      <div class="item">
+        <div class="label">业务员反馈AI识别不正确:{{ data.feedbackMessage || '未反馈' }}</div>
+      </div>
+      <div class="item" style="display: flex; justify-content: center">
+        <van-image
+          v-if="data.fileUrl"
+          height="400px"
+          :src="data.fileUrl"
+          @click="previewImgs(data.fileUrl)"
+          fit="contain">
+          <template v-slot:loading>
+            <van-loading type="spinner" size="40" />
+          </template>
+        </van-image>
+      </div>
+    </div>
+    <p class="titleText">请主管了解情况后回复原因及解决方案</p>
+    <div class="feedbackReason">
+      <!-- <div class="result">
+        <div class="title">
+          <span style="color: red">*</span>
+          <span>AI识别结果</span>
+        </div>
+        <van-radio-group v-model="AIResult" :disabled="approveState == '1'">
+          <van-radio name="1">正确</van-radio>
+          <van-radio name="0">不正确</van-radio>
+        </van-radio-group>
+      </div> -->
+      <div class="cause">
+        <div class="title">
+          <span style="color: red">*</span>
+          <span>反馈原因及解决方案</span>
+        </div>
+        <van-field
+          v-model="causeMessage"
+          :disabled="approveState == '1'"
+          rows="1"
+          autosize
+          type="textarea"
+          placeholder="请反馈原因及解决方案" />
+      </div>
+    </div>
+    <div class="confirmBtn" v-if="approveState == '0'">
+      <van-button type="info" @click="confirm">提交</van-button>
+    </div>
+  </div>
+</template>
+<script>
+import { ImagePreview } from 'vant';
+import { getPhotoApproveDetail, savePhotoApprove } from '@/api/AIImage';
+export default {
+  name: 'AIImageDetail',
+  data() {
+    return {
+      data: null,
+      photoApproveId: null,
+      AIResult: '1',
+      causeTitle: '',
+      causeMessage: '',
+      approveState: '0',
+    };
+  },
+  watch: {
+    AIResult: {
+      handler(val) {
+        if (val == 1) {
+          this.causeTitle = '拜访照异常原因及解决方案';
+        } else {
+          this.causeTitle = '反馈AI识别结果有误';
+        }
+      },
+      immediate: true,
+    },
+  },
+  filters: {
+    filterType(val) {
+      if (val == 1) {
+        return '店招内容识别';
+      } else if (val == 2) {
+        return '门店代码识别';
+      } else if (val == 3) {
+        return '调色机识别';
+      } else if (val == 4) {
+        return '更换店招';
+      }
+    },
+  },
+  activated() {
+    this.photoApproveId = this.$route.query.photoApproveId;
+    this.getDeytail();
+  },
+  mounted() {},
+  methods: {
+    getDeytail() {
+      this.toastLoading(0, '加载中...', true);
+      getPhotoApproveDetail({ photoApproveId: this.photoApproveId }).then((res) => {
+        this.toastLoading().clear();
+        if (res.code == 200) {
+          this.data = res.data;
+          this.approveState = res.data.approveState; //反馈状态:0 未审批 1已审批
+          if (this.approveState == '0') {
+            let latestPhotoApprove = res.data.latestPhotoApprove;
+            if (latestPhotoApprove) {
+              this.AIResult = latestPhotoApprove.resultCorrect || '1';
+              this.causeMessage =
+                latestPhotoApprove.reasonsSolutions || latestPhotoApprove.feedbackError;
+              this.$dialog
+                .confirm({
+                  title: '系统提示',
+                  message:
+                    latestPhotoApprove.approveTime +
+                    '已反馈该店拜访照异常原因及解决方案,此次拜访照仍异常,请及时跟进',
+                  confirmButtonText: '确定',
+                  showCancelButton: false,
+                })
+                .then(() => {});
+            }
+          } else {
+            this.AIResult = res.data.resultCorrect || '1';
+            this.causeMessage = res.data.reasonsSolutions || res.data.feedbackError;
+          }
+        }
+      });
+    },
+    previewImgs(val) {
+      ImagePreview([val]);
+    },
+    confirm() {
+      if (!this.causeMessage) {
+        this.$toast('请输入' + this.causeTitle);
+        return;
+      }
+      savePhotoApprove({
+        photoApproveId: this.photoApproveId, //	long	主键
+        resultCorrect: '', //	string	AI识别是否正确: 1 正确 0不正确
+        reasonsSolutions: this.causeMessage, //	string	原因及解决方案
+        feedbackError: '', //	string	反馈AI识别不正确
+      }).then((res) => {
+        if (res.code == 200) {
+          this.$toast.loading({
+            duration: 1000,
+            message: '已反馈给本部',
+            forbidClick: true,
+            onClose: () => {
+              this.onClickLeft();
+            },
+          });
+        } else {
+          this.$toast('提交失败');
+        }
+      });
+    },
+    onClickLeft() {
+      this.$router.replace({
+        path: '/AIImage',
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.AIImageDetail {
+  .message {
+    padding: 10px;
+    background: #fff;
+    .storeTitle {
+      display: flex;
+      font-size: 16px;
+      font-weight: bold;
+      padding: 5px 0;
+    }
+    .item {
+      display: flex;
+      font-size: 13px;
+      padding: 3px 0;
+      .label {
+        /* width: 80px; */
+        text-align: left;
+      }
+      .value {
+        flex: 1;
+      }
+    }
+  }
+  .titleText {
+    padding: 10px;
+    font-size: 16px;
+    font-weight: 600;
+    margin: 0;
+  }
+  .feedbackReason {
+    padding: 10px;
+    background: #fff;
+    font-size: 16px;
+    .title {
+      padding: 8px 0;
+    }
+    .van-radio {
+      padding: 5px 0 5px 10px;
+    }
+  }
+  .confirmBtn {
+    position: sticky;
+    bottom: 0;
+    padding-top: 20px;
+    button {
+      width: 100%;
+      background-color: #1a77cc;
+    }
+  }
+}
+</style>

+ 248 - 0
src/views/AIImage/historyAIImageDetail.vue

@@ -0,0 +1,248 @@
+<template>
+  <div class="AIImageDetail" v-if="data">
+    <van-nav-bar class="navBar" title="异常反馈" left-arrow @click-left="onClickLeft">
+    </van-nav-bar>
+    <div class="message">
+      <div class="storeTitle">
+        <div class="storeName">{{ data.storeName }}</div>
+        <div class="storeCode" style="margin-left: 5px; margin-top: 2px">
+          (<span style="color: #0057ba; vertical-align: -1px">{{ data.storeCode }}</span
+          >)
+        </div>
+      </div>
+      <div class="item">
+        <div class="label">门店类型:</div>
+        <div class="value">{{ data.storeCategoryName }}</div>
+      </div>
+      <div class="item">
+        <div class="label">地址:</div>
+        <div class="value">{{ data.addressLine }}</div>
+      </div>
+      <div class="item">
+        <div class="label">拜访人:</div>
+        <div class="value">{{ data.visitUserNickName }}</div>
+      </div>
+      <div class="item">
+        <div class="label">拜访时间:</div>
+        <div class="value">{{ data.createTime }}</div>
+      </div>
+      <div class="item">
+        <div class="label">拍摄类型:</div>
+        <div class="value">{{ data.identifyType | filterType }}</div>
+      </div>
+      <div class="item" style="color: red">
+        <div class="label">识别结果:</div>
+        <div class="value">{{ data.unqualifiedReason }}</div>
+      </div>
+      <div class="item">
+        <div class="label">业务员反馈AI识别不正确:{{ data.feedbackMessage || '未反馈' }}</div>
+      </div>
+      <div class="item" style="display: flex; justify-content: center">
+        <van-image
+          v-if="data.fileUrl"
+          height="400px"
+          :src="data.fileUrl"
+          @click="previewImgs(data.fileUrl)"
+          fit="contain">
+          <template v-slot:loading>
+            <van-loading type="spinner" size="40" />
+          </template>
+        </van-image>
+      </div>
+    </div>
+    <p class="titleText">请主管了解情况后回复原因及解决方案</p>
+    <div class="feedbackReason">
+      <div class="result">
+        <div class="title">
+          <span style="color: red">*</span>
+          <span>AI识别结果</span>
+        </div>
+        <van-radio-group v-model="AIResult" :disabled="approveState == '1'">
+          <van-radio name="1">正确</van-radio>
+          <van-radio name="0">不正确</van-radio>
+        </van-radio-group>
+      </div>
+      <div class="cause">
+        <div class="title">
+          <span style="color: red">*</span>
+          <span>{{ causeTitle }}</span>
+        </div>
+        <van-field
+          v-model="causeMessage"
+          :disabled="approveState == '1'"
+          rows="1"
+          autosize
+          type="textarea"
+          :placeholder="'请输入' + causeTitle" />
+      </div>
+    </div>
+    <div class="confirmBtn" v-if="approveState == '0'">
+      <van-button type="info" @click="confirm">提交</van-button>
+    </div>
+  </div>
+</template>
+<script>
+import { ImagePreview } from 'vant';
+import { getPhotoApproveDetail, savePhotoApprove } from '@/api/AIImage';
+export default {
+  name: 'AIImageDetail',
+  data() {
+    return {
+      data: null,
+      photoApproveId: null,
+      AIResult: '1',
+      causeTitle: '',
+      causeMessage: '',
+      approveState: '0',
+    };
+  },
+  watch: {
+    AIResult: {
+      handler(val) {
+        if (val == 1) {
+          this.causeTitle = '拜访照异常原因及解决方案';
+        } else {
+          this.causeTitle = '反馈AI识别结果有误';
+        }
+      },
+      immediate: true,
+    },
+  },
+  filters: {
+    filterType(val) {
+      if (val == 1) {
+        return '店招内容识别';
+      } else if (val == 2) {
+        return '门店代码识别';
+      } else if (val == 3) {
+        return '调色机识别';
+      } else if (val == 4) {
+        return '更换店招';
+      }
+    },
+  },
+  activated() {
+    this.photoApproveId = this.$route.query.photoApproveId;
+    this.getDeytail();
+  },
+  mounted() {},
+  methods: {
+    getDeytail() {
+      this.toastLoading(0, '加载中...', true);
+      getPhotoApproveDetail({ photoApproveId: this.photoApproveId }).then((res) => {
+        this.toastLoading().clear();
+        if (res.code == 200) {
+          this.data = res.data;
+          this.approveState = res.data.approveState; //反馈状态:0 未审批 1已审批
+          if (this.approveState == '0') {
+            let latestPhotoApprove = res.data.latestPhotoApprove;
+            if (latestPhotoApprove) {
+              this.AIResult = latestPhotoApprove.resultCorrect || '1';
+              this.causeMessage =
+                latestPhotoApprove.reasonsSolutions || latestPhotoApprove.feedbackError;
+              this.$dialog
+                .confirm({
+                  title: '系统提示',
+                  message:
+                    latestPhotoApprove.approveTime +
+                    '已反馈该店拜访照异常原因及解决方案,此次拜访照仍异常,请及时跟进',
+                  confirmButtonText: '确定',
+                  showCancelButton: false,
+                })
+                .then(() => {});
+            }
+          } else {
+            this.AIResult = res.data.resultCorrect || '1';
+            this.causeMessage = res.data.reasonsSolutions || res.data.feedbackError;
+          }
+        }
+      });
+    },
+    previewImgs(val) {
+      ImagePreview([val]);
+    },
+    confirm() {
+      if (!this.causeMessage) {
+        this.$toast('请输入' + this.causeTitle);
+        return;
+      }
+      savePhotoApprove({
+        photoApproveId: this.photoApproveId, //	long	主键
+        resultCorrect: this.AIResult, //	string	AI识别是否正确: 1 正确 0不正确
+        reasonsSolutions: this.AIResult == '1' ? this.causeMessage : '', //	string	原因及解决方案
+        feedbackError: this.AIResult == '0' ? this.causeMessage : '', //	string	反馈AI识别不正确
+      }).then((res) => {
+        if (res.code == 200) {
+          this.$toast.loading({
+            duration: 1000,
+            message: '已反馈给本部',
+            forbidClick: true,
+            onClose: () => {
+              this.onClickLeft();
+            },
+          });
+        } else {
+          this.$toast('提交失败');
+        }
+      });
+    },
+    onClickLeft() {
+      this.$router.replace({
+        path: '/AIImage',
+      });
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.AIImageDetail {
+  .message {
+    padding: 10px;
+    background: #fff;
+    .storeTitle {
+      display: flex;
+      font-size: 16px;
+      font-weight: bold;
+      padding: 5px 0;
+    }
+    .item {
+      display: flex;
+      font-size: 13px;
+      padding: 3px 0;
+      .label {
+        /* width: 80px; */
+        text-align: left;
+      }
+      .value {
+        flex: 1;
+      }
+    }
+  }
+  .titleText {
+    padding: 10px;
+    font-size: 16px;
+    font-weight: 600;
+    margin: 0;
+  }
+  .feedbackReason {
+    padding: 10px;
+    background: #fff;
+    font-size: 16px;
+    .title {
+      padding: 8px 0;
+    }
+    .van-radio {
+      padding: 5px 0 5px 10px;
+    }
+  }
+  .confirmBtn {
+    position: sticky;
+    bottom: 0;
+    padding-top: 20px;
+    button {
+      width: 100%;
+      background-color: #1a77cc;
+    }
+  }
+}
+</style>

+ 26 - 6
src/views/AIImage/list.vue

@@ -107,12 +107,32 @@ export default {
     },
     // 详情
     toDetail(item) {
-      this.$router.push({
-        path: '/AIImageDetail',
-        query: {
-          photoApproveId: item.photoApproveId,
-        },
-      });
+      // historyFeedback == 0 旧的识别反馈 =1 新的识别反馈
+      if (item.historyFeedback == '0') {
+        this.$router.push({
+          path: '/historyAIImageDetail',
+          query: {
+            photoApproveId: item.photoApproveId,
+          },
+        });
+      } else if (item.historyFeedback == '1') {
+        // 调色机
+        if (item.identifyType == 3) {
+          this.$router.push({
+            path: '/AIImageDetailTSJ',
+            query: {
+              photoApproveId: item.photoApproveId,
+            },
+          });
+        } else {
+          this.$router.push({
+            path: '/AIImageDetail',
+            query: {
+              photoApproveId: item.photoApproveId,
+            },
+          });
+        }
+      }
     },
     onClickLeft() {
       this.$router.replace({

+ 7 - 1
src/views/deviceOutside/suishenbangOutstoreVisit.vue

@@ -925,7 +925,7 @@ export default {
   position: relative;
 }
 .el-dialog__wrapper {
-  z-index: 3333 !important;
+  z-index: 9999 !important;
   display: flex;
   justify-content: center;
   align-items: center;
@@ -935,8 +935,14 @@ export default {
     display: flex;
     flex-direction: column;
     max-height: 70%;
+    margin-top: 0 !important;
     .el-dialog__header {
       height: 40px;
+      display: flex;
+      justify-content: right;
+      .el-dialog__headerbtn {
+        position: static !important;
+      }
     }
     .el-dialog__body {
       padding: 30px 20px !important;

+ 83 - 4
src/views/deviceWithin/storeVisit.vue

@@ -43,6 +43,15 @@
           @click="overbookingFn(urlParameter)"
           >去下单</van-button
         >
+        <van-button
+          type="info"
+          style="background: rgb(0, 87, 186); color: #fff; margin: 10px; border-radius: 5px"
+          size="small"
+          plain
+          class="centerBtn"
+          @click="wuliaoLog(urlParameter)"
+          >物料历史</van-button
+        >
         <van-button
           v-if="insert"
           type="info"
@@ -124,6 +133,21 @@
       </div>
     </van-dialog>
     <div id="allmap"></div>
+    <!-- 物料历史列表 -->
+    <el-dialog
+      :visible.sync="wuliaoTable"
+      width="90%"
+      :append-to-body="true"
+      :close-on-click-modal="false"
+      @close="wuliaoTableClose"
+      custom-class="wuliaoTable">
+      <el-table :data="wuliaoList" border style="width: 100%">
+        <el-table-column label="物料名称" prop="materialDataName" align="center" />
+        <el-table-column label="发放时间" prop="issuerTime" align="center" />
+        <el-table-column label="数量" prop="inventoryNum" width="60" align="center" />
+        <el-table-column label="签收状态" prop="receiptState" width="60" align="center" />
+      </el-table>
+    </el-dialog>
   </div>
 </template>
 
@@ -136,6 +160,7 @@ import {
   stopVisit,
   restartProcess,
   buryingPoint,
+  getMaterialHistory,
 } from '@/api/index';
 import axios from 'axios';
 import sp from './../../assets/sp.png';
@@ -185,6 +210,8 @@ export default {
       uType: '-1',
       showOrderButton: null,
       restartProcessButtion: false,
+      wuliaoTable: false,
+      wuliaoList: [],
     };
   },
   created() {
@@ -381,6 +408,10 @@ export default {
           console.log('province=' + province);
           console.log('city=' + city);
           console.log('district=' + district);
+          let recommend = '';
+          if (addresses) {
+            recommend = addresses.recommend;
+          }
           if (that.$route.query.type == 'edit') {
             var params = {
               storeId: that.storeId,
@@ -394,7 +425,7 @@ export default {
               visitSource: '1',
               insert: insert,
               locationCity: '',
-              locationRemark: '',
+              locationRemark: recommend,
               locationAccuracy: that.urlParameter.PointSum,
               province: address_component.province,
               city: address_component.city,
@@ -441,7 +472,7 @@ export default {
               visitSource: '1',
               insert: insert,
               locationCity: '',
-              locationRemark: addresses.recommend,
+              locationRemark: recommend,
               locationAccuracy: that.urlParameter.PointSum,
               province: address_component.province,
               city: address_component.city,
@@ -449,7 +480,7 @@ export default {
             };
             that.locationAccuracy = that.urlParameter.PointSum;
             that.city = '';
-            that.address = addresses.recommend;
+            that.address = recommend;
             localStorage.setItem('address', '');
             if (that.visitId != null) {
               params.id = that.visitId;
@@ -706,6 +737,24 @@ export default {
         this.$router.go(-1);
       }
     },
+    // 物料历史
+    wuliaoLog() {
+      this.toastLoading(0, '加载中...', true);
+      getMaterialHistory({ storeId: this.storeId })
+        .then((res) => {
+          this.toastLoading().clear();
+          if (res.code == 200 && res.data) {
+            this.wuliaoList = res.data;
+            this.wuliaoTable = true;
+          }
+        })
+        .catch(() => {
+          this.toastLoading().clear();
+        });
+    },
+    wuliaoTableClose() {
+      this.wuliaoTable = false;
+    },
     endVisitsFn(val) {
       let loading1 = this.$toast.loading({
         duration: 0,
@@ -877,7 +926,7 @@ export default {
   color: #0057ba;
 }
 </style>
-<style>
+<style lang="scss">
 .van-dialog__confirm,
 .van-dialog__confirm:active {
   color: #0057ba;
@@ -888,4 +937,34 @@ export default {
   left: -1000px;
   position: relative;
 }
+.el-dialog__wrapper {
+  z-index: 9999 !important;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background: rgba(0, 0, 0, 0.5) !important;
+  .wuliaoTable {
+    overflow: hidden;
+    display: flex;
+    flex-direction: column;
+    max-height: 70%;
+    margin-top: 0 !important;
+    .el-dialog__header {
+      height: 40px;
+      display: flex;
+      justify-content: right;
+      .el-dialog__headerbtn {
+        position: static !important;
+      }
+    }
+    .el-dialog__body {
+      padding: 30px 20px !important;
+      overflow-y: auto;
+      flex: 1;
+    }
+    .cell {
+      font-size: 12px;
+    }
+  }
+}
 </style>

+ 26 - 7
src/views/historicalVisit/historicalDetails.vue

@@ -150,12 +150,22 @@
             <div style="padding: 10px 16px; font-size: 16px; font-weight: bold">
               {{ filterTitle(item.identifyType) }}
             </div>
-            <van-cell-group>
-              <van-cell> AI识别结果: {{ item.resultCorrect == 1 ? '正确' : '不正确' }} </van-cell>
-              <van-cell>
-                拜访照异常原因及解决方案: {{ item.feedbackError || item.reasonsSolutions }}
-              </van-cell>
-            </van-cell-group>
+            <template v-if="item.historyFeedback == '0'">
+              <van-cell-group>
+                <van-cell> AI识别结果: {{ item.resultCorrect == 1 ? '正确' : '不正确' }} </van-cell>
+                <van-cell>
+                  拜访照异常原因及解决方案: {{ item.feedbackError || item.reasonsSolutions }}
+                </van-cell>
+              </van-cell-group>
+            </template>
+            <template v-if="item.historyFeedback == '1'">
+              <van-cell-group>
+                <van-cell v-if="item.identifyType == 1">
+                  店招异常原因: {{ resultCorrect(item.resultCorrect) }}
+                </van-cell>
+                <van-cell> 反馈: {{ item.feedbackError || item.reasonsSolutions }} </van-cell>
+              </van-cell-group>
+            </template>
           </template>
         </div>
       </template>
@@ -194,7 +204,7 @@ import {
   getListHistoryList,
   getCollectionShowHistory,
 } from '@/api/index';
-
+import { getDictOption } from '@/api/index';
 export default {
   components: { deleteUploadImg },
   data() {
@@ -218,6 +228,7 @@ export default {
       remarkShow: false,
       ListHistoryList: [],
       list: null,
+      AIResultOption: [],
     };
   },
   created() {
@@ -236,8 +247,16 @@ export default {
   // },
   activated() {
     this.getVisitsDetailFn();
+    // 获取店招异常原因字典
+    getDictOption({}, 'feedback_error_msg').then((res) => {
+      this.AIResultOption = res.data;
+    });
   },
   methods: {
+    resultCorrect(resultCorrect) {
+      let data = this.AIResultOption.find((item) => item.dictValue == resultCorrect);
+      return data ? data.dictLabel : '';
+    },
     filterTitle(item) {
       switch (item) {
         case 1: