From ccee429d379e0108b7445f72ade8d97c110a6fb3 Mon Sep 17 00:00:00 2001
From: ZZJ <zzjdsg2300@163.com>
Date: 星期二, 09 十一月 2021 18:01:59 +0800
Subject: [PATCH] 问题修复

---
 src/components/subComponents/CardItem.vue |  226 ++++++++++++++++++++++++++++++++------------------------
 1 files changed, 128 insertions(+), 98 deletions(-)

diff --git a/src/components/subComponents/CardItem.vue b/src/components/subComponents/CardItem.vue
index e6abb97..077aea4 100644
--- a/src/components/subComponents/CardItem.vue
+++ b/src/components/subComponents/CardItem.vue
@@ -7,7 +7,7 @@
         <div class="card-img-box-compear">
           <div class="card-img-box-compear-left" ref="firstImg">
             <img
-              :src="'/httpImage/'+data.targetInfo[0].picSmUrl+'?width=160'"
+              :src="data.targetInfo[0].picSmUrl | httpImage"
               :id="'/compear/'+data.targetInfo[0].picSmUrl"
               class="cursor-pointer"
               @click="detailsClick($event)"
@@ -22,7 +22,7 @@
           >
             <el-carousel-item v-for="(item, index) in data.baseInfo" :key="index">
               <img
-                :src="'/httpImage/'+item.targetPicUrl+'?width=160'"
+                :src="item.targetPicUrl | httpImage"
                 class="cursor-pointer"
                 @click="detailsClick($event)"
               />
@@ -31,13 +31,12 @@
         </div>
         <div
           class="s-card-left-isCompare-div compareScore111"
-          style
           :style="{
-            bottom: getBottom(),
+            bottom: '0',
             background: getUrl(data.baseInfo[initialIndex].bwType)
           }"
         >
-          <b>{{ `${data.baseInfo[initialIndex].compareScore}%` }}</b>
+          <b>{{ data.baseInfo[initialIndex].compareScore | percentage }}</b>
         </div>
       </div>
     </div>
@@ -54,30 +53,28 @@
           @change="changeCarousel"
         >
           <el-carousel-item v-for="(item, index) in data.picMaxUrl" :key="index + 'img'">
-            <img
-              :src="'/httpImage/'+item+'?width=160'"
-              class="cursor-pointer"
-              @click="detailsClick($event)"
-            />
+            <img :src="item | httpImage" class="cursor-pointer" @click="detailsClick($event)" />
           </el-carousel-item>
         </el-carousel>
+        <!-- 鏆傛椂璁や负鍙湁浜鸿劯鎶撴媿鐨勬姤璀�, 棣栭〉鏄剧ず灏忓浘, 鍏朵粬鏃堕棿鍧囨樉绀哄ぇ鍥� -->
         <img
-          v-else-if="data.targetInfo == null || data.targetInfo[0].picSmUrl == ''"
-          :src="'/httpImage/'+data.picMaxUrl[0]+'?width=160'"
+          v-else-if="data.targetInfo == null || data.targetInfo[0].targetType !== 'FaceDetect'"
+          :src="data.picMaxUrl[0] | httpImage"
           class="cursor-pointer"
           @click="detailsClick($event)"
         />
         <img
           v-else
-          :src="'/httpImage/'+data.targetInfo[0].picSmUrl+'?width=160'"
+          :src="data.targetInfo[0].picSmUrl | httpImage"
           class="cursor-pointer"
           @click="detailsClick($event)"
         />
       </div>
       <div class="s-card-left-box" v-else>
-        <img :src="'/httpImage/'+data.baseInfo[0].targetPicUrl+'?width=160'" class="cursor-pointer" />
+        <img :src="data.baseInfo[0].targetPicUrl | httpImage" class="cursor-pointer" />
       </div>
     </div>
+
     <!-- 鍙充晶鏂囧瓧鍖哄煙 -->
     <!-- 澶氬紶搴曞浘鍒囨崲 -->
     <div class="s-card-right-isCompare" v-if="showType == 'compare'">
@@ -87,12 +84,8 @@
         @mouseenter="cardMouseenter($event)"
         @mouseleave="cardMouseleave($event)"
       >
-        <!-- <p :title="data.baseInfo[0].compareScore" class="score">
-          <span v-if="data.id">{{ data.compareScore }}%</span>
-          <span v-else>{{ data.baseInfo[0].compareScore }}%</span>
-        </p>-->
         <p>
-          <span class="fontStyle color222">{{ data.picDate }}</span>
+          <span class="fontStyle color222">{{ data.picDate | formatTime}}</span>
         </p>
         <p style="margin-bottom: 8px;">
           <span class="fontStyle color222">{{ data.cameraAddr }}</span>
@@ -137,7 +130,7 @@
               <span
                 class="fontStyle"
                 v-if="data.baseInfo[initialIndex].labels"
-              >/&nbsp;{{ data.baseInfo[initialIndex].labels.split("/")[1] }}</span>&nbsp;
+              >/&nbsp;{{ data.baseInfo[initialIndex].labels | idCard}}</span>&nbsp;
               <span
                 class="fontStyle"
                 v-if="data.baseInfo[initialIndex].monitorLevel"
@@ -163,7 +156,7 @@
               <span
                 class="fontStyle"
                 v-if="data.baseInfo[initialIndex].labels"
-              >/&nbsp;{{ data.baseInfo[initialIndex].labels.split("/")[1] }}</span>&nbsp;
+              >/&nbsp;{{ data.baseInfo[initialIndex].labels | idCard}}</span>&nbsp;
               <span
                 class="fontStyle"
                 v-if="data.baseInfo[initialIndex].monitorLevel"
@@ -200,7 +193,7 @@
           class="score"
           style="font-family: PingFangSC-Medium;font-size: 20px;color: #3D68E1;letter-spacing: 0.4px;"
         >
-          <span>{{ data.baseInfo[0].compareScore }}%</span>
+          <span>{{ data.baseInfo[0].compareScore | percentage}}</span>
         </p>
         <p
           :style="data.baseInfo[0].bwType == '0' ? 'font-size:12px;line-height:20px' : 'color:red;font-size:12px;line-height:20px'"
@@ -209,7 +202,7 @@
           <span>{{ data.baseInfo[0].targetName }}</span>&nbsp;&nbsp;
           <span
             v-if="data.baseInfo[0].labels"
-          >/&nbsp;{{ data.baseInfo[0].labels.split("/")[1] }}</span>
+          >/&nbsp;{{ data.baseInfo[0].labels | idCard}}</span>
         </p>
       </div>
       <div class="card-icon-box">
@@ -230,7 +223,7 @@
         @mouseleave="cardMouseleave($event)"
       >
         <p :title="data.picDate">
-          <span class="fontStyle color222">{{ data.picDate }}</span>
+          <span class="fontStyle color222">{{ data.picDate | formatTime }}</span>
         </p>
         <p :title="data.cameraAddr" style="margin-bottom: 8px;">
           <span class="fontStyle color222">{{ data.cameraAddr }}</span>
@@ -302,7 +295,7 @@
 
     <!-- 娌℃湁搴曞簱锛岄潪姣斿锛屾櫘閫氭ā寮� 涓�瀹氭湁targetInfo锛屽苟涓攖argetInfo涓暟涓�1-->
     <div
-      v-else-if="data.targetInfo !== null && data.targetInfo[0].picSmUrl !== '' && data.targetInfo.length == 1"
+      v-else-if="data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''"
       class="s-card-right-signal"
     >
       <div
@@ -316,11 +309,11 @@
           v-if="VideoPhotoData.uploadType"
           style="font-family: PingFangSC-Medium;font-size: 20px;color: #3D68E1;letter-spacing: 0.4px;"
         >
-          <span v-if="data.id">{{ data.compareScore }}%</span>
-          <span v-else>{{ data.baseInfo[0].compareScore }}%</span>
+          <span v-if="data.id">{{ data.compareScore | percentage}}</span>
+          <span v-else>{{ data.baseInfo[0].compareScore | percentage}}</span>
         </p>
         <p :title="data.picDate">
-          <span class="fontStyle color222">{{ data.picDate }}</span>
+          <span class="fontStyle color222">{{ data.picDate | formatTime }}</span>
         </p>
         <p :title="data.cameraAddr" style="margin-bottom: 8px;">
           <span class="fontStyle color222">{{ data.cameraAddr }}</span>
@@ -362,15 +355,12 @@
           <div slot="content">
             <p v-for="(item,index) in data.baseInfo" :key="index+'base1'">
               <span class="fontStyle">{{item.tableName}}</span>&nbsp;
-              <span class="fontStyle" v-if="item.targetName !== ''">/&nbsp;{{item.targetName}}</span>&nbsp;
+              <span class="fontStyle" v-if="item.targetName.length">/&nbsp;{{item.targetName}}</span>&nbsp;
               <span
                 class="fontStyle"
-                v-if="item.labels !== '' && item.labels.split('/')[1] !== ''"
-              >/&nbsp;{{item.labels.split("/")[1]}}</span>&nbsp;
-              <span
-                class="fontStyle"
-                v-if="item.labels !== '' && item.labels.split('/')[0] !== ''"
-              >/&nbsp;{{item.labels.split("/")[0]}}</span>
+                v-if="item.labels.length"
+              >/&nbsp;{{item.labels | idCard}}</span>&nbsp;
+              <span class="fontStyle" v-if="item.labels.length">/&nbsp;{{item.labels | sex}}</span>
             </p>
           </div>
           <el-button
@@ -382,15 +372,12 @@
               :style="item.bwType == '1' ? 'color:red;font-size:12px;line-height:20px':'font-size:12px;line-height:20px'"
             >
               <span class="fontStyle">{{item.tableName}}</span>&nbsp;
-              <span class="fontStyle" v-if="item.targetName !== ''">/&nbsp;{{item.targetName}}</span>&nbsp;
+              <span class="fontStyle" v-if="item.targetName.length">/&nbsp;{{item.targetName}}</span>&nbsp;
               <span
                 class="fontStyle"
-                v-if="item.labels !== '' && item.labels.split('/')[1] !== ''"
-              >/&nbsp;{{item.labels.split("/")[1]}}</span>&nbsp;
-              <span
-                class="fontStyle"
-                v-if="item.labels !== '' && item.labels.split('/')[0] !== ''"
-              >/&nbsp;{{item.labels.split("/")[0]}}</span>
+                v-if="item.labels.length"
+              >/&nbsp;{{item.labels | idCard}}</span>&nbsp;
+              <span class="fontStyle" v-if="item.labels.length">/&nbsp;{{item.labels |sex }}</span>
             </span>
           </el-button>
         </el-tooltip>
@@ -469,7 +456,7 @@
         >
           <div>
             <p :title="data.picDate">
-              <span class="fontStyle color222">{{ data.picDate }}</span>
+              <span class="fontStyle color222">{{ data.picDate | formatTime }}</span>
             </p>
             <p :title="data.cameraAddr" style="margin-bottom: 8px;">
               <span class="fontStyle color222">{{ data.cameraAddr }}</span>
@@ -488,15 +475,26 @@
 </template>
 
 <script>
-import cardType from "../../mockData/cardType.ts";
-import bus from "@/main";
+Date.prototype.Format = function (fmt) {
+  var o = {
+    "M+": this.getMonth() + 1, //鏈堜唤 
+    "d+": this.getDate(), //鏃� 
+    "H+": this.getHours(), //灏忔椂 
+    "m+": this.getMinutes(), //鍒� 
+    "s+": this.getSeconds(), //绉� 
+    "q+": Math.floor((this.getMonth() + 3) / 3), //瀛e害 
+    "S": this.getMilliseconds() //姣 
+  };
+  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
+  for (var k in o)
+    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
+  return fmt;
+}
 
 export default {
   mounted() {
-    bus.$on('refreshCompareImg', () => {
-      // this.tempShowType = false
-    })
-    window.addEventListener("resize", this.watchWindow);
+    //window.addEventListener("resize", this.watchWindow);
+    window.addEventListener("resize", this.getBottom)
   },
   props: {
     data: {
@@ -506,57 +504,81 @@
     showType: {
       type: String,
       default: "search"
-    }
-  },
-  watch: {
-    data: {
-      handler(val, oldVal) {
-        console.log('鏁版嵁鍙戠敓鍙樺寲')
-        this.$forceUpdate()
-      },
-      deep: true
-    }
+    },
+    fromCluster: {
+      type: Boolean,
+      default: false
+    },
+    searchT: {}
   },
   computed: {
     isId() {
       return this.data.id
     }
   },
+  filters: {
+    formatTime(t) {
+      return new Date(t).Format("yyyy-MM-dd HH:mm:ss")
+    },
+    percentage(score) {
+      return score.toFixed(2) + "%"
+    },
+    idCard(v) {
+      try {
+        let obj = JSON.parse(v)
+        return obj.idCard
+      } catch (error) {
+        return v.split("/")[1]
+      }
+    },
+    sex(v) {
+      try {
+        let obj = JSON.parse(v)
+        return obj.sex
+      } catch (error) {
+        return v.split("/")[0]
+      }
+    },
+    httpImage(url) {
+      if (!url.length) {
+        return ""
+      }
+      return '/httpImage/' + url + ((url.indexOf("?") >= 0) ? '&' : '?') + 'width=160'
+    }
+  },
   data() {
     return {
       tempShowType: true,
       initialIndex: 0,
-      cardType,
       carouselIndex: 0,
       dialogVisible: false,
       overflowState: true
     };
   },
+  watch: {
+    data: {
+      handler(val, oldVal) {
+        this.$forceUpdate()
+      },
+      deep: true
+    }
+  },
   methods: {
-    watchWindow() {
-      // console.log('height')
-      // this.$nextTick(() => {
-      //   document.querySelectorAll('.compareScore111').forEach(ele => {
-      //     ele.style.bottom = this.getBottom()
-      //     console.log("鍏冪礌鐨勬牱寮忓�硷細",ele.style.bottom)
-      //   }); 
-      //   this.$forceUpdate()
-      // })
-    },
     getBottom() {
-      // let imgDom = document.getElementById(str)
-      let imgDom = this.$refs.firstImg
-      if (imgDom) {
-        let num = (imgDom.offsetHeight - imgDom.offsetWidth) / 2
-        return `${num}px`;
-      }
-      return `4px`;
+      this.$nextTick(() => {
+        let imgDom = this.$refs.firstImg
+        if (imgDom) {
+          let num = (imgDom.offsetHeight - imgDom.offsetWidth) / 2
+          return `${num}px`;
+        }
+        return `4px`;
+      })
     },
     getUrl(bwtype) {
       if (bwtype == 1) {
-        return `url(${require("@/assets/bg/red.png")})`
+        return `url(${require("@/assets/img/red.png")})`
       } else {
-        return `url(${require("@/assets/bg/green.png")})`
+        return `url(${require("@/assets/img/green.png")})`
       }
     },
     changeInitialIndex(index) {
@@ -575,23 +597,25 @@
       this.$emit("detailsClick", ev);
     },
     toAdd(item) {
-      console.log("瑙﹀彂鍔犲叆搴曞簱")
       this.$emit("addToBase", item);
     },
     tosearch(item) {
-      var curWwwPath = window.document.location.href;
-      var pathname = window.document.location.pathname;
-      var pos = curWwwPath.indexOf(pathname);
-      var localhostPath = curWwwPath.substring(0, pos); //ip+port
-      var href = localhostPath + "/Layout/Searching"
+      this.searchT
       let captureId = item.id == "" ? item.baseInfo[0].targetId : item.id
-      var url = item.targetInfo ? item.targetInfo[0].picSmUrl : item.baseInfo[0].targetPicUrl
-      console.log("璺宠浆鍦板潃", href, "url", url)
-      var compType = 1 //  鏁版嵁鏉ヨ嚜浜巈s
+      let imgUrl = item.targetInfo ? item.targetInfo[0].picSmUrl : item.baseInfo[0].targetPicUrl
+      let compType = 1 //  鏁版嵁鏉ヨ嚜浜巈s
       if (!item.id || item.id == "") {
         compType = 0 // 鏁版嵁鏉ヨ嚜浜庡簳搴�
       }
-      window.open(href + '?showType=findByPic&targetId=' + captureId + '&picSmUrl=' + url + '&compType=' + compType)
+      let message
+      if (this.fromCluster) {
+        message = 'toCluster?showType=findByPic&targetId=' + captureId + '&picSmUrl=' + imgUrl + '&compType=' + compType + '&timestamp=' + new Date().getTime() + '&start=' + this.searchT[0] + '&end=' + this.searchT[1];
+      } else {
+        message = 'toSearch?showType=findByPic&targetId=' + captureId + '&picSmUrl=' + imgUrl + '&compType=' + compType + '&timestamp=' + new Date().getTime() + '&start=' + this.searchT[0] + '&end=' + this.searchT[1];
+      }
+      window.parent.postMessage({
+        msg: message
+      }, "*")
     }
   }
 };
@@ -601,15 +625,15 @@
   font-family: PingFangSC-Medium;
 }
 .color222 {
-  font-size: 0.75rem;
+  font-size: 12px;
   font-weight: 600;
-  line-height: 1rem;
+  line-height: 14px;
   color: #222222;
 }
 .color666 {
   color: #666666;
-  font-size: 0.75rem;
-  line-height: 1.25rem;
+  font-size: 12px;
+  line-height: 16px;
 }
 .box-card {
   cursor: default;
@@ -631,11 +655,11 @@
     .card-img-box {
       box-sizing: border-box;
       width: 100%;
-      height: 100%;
       position: relative;
       overflow: hidden;
+      top: 50%;
+      transform: translateY(-50%);
       .card-img-box-compear {
-        height: 100%;
         width: 100%;
         display: flex;
         .card-img-box-compear-left {
@@ -644,8 +668,13 @@
           justify-content: center;
           align-items: Center;
           overflow: hidden;
-          width: 100%;
+          flex: 1;
           height: 100%;
+        }
+        .el-carousel {
+          flex: 1;
+          width: auto;
+          height: auto !important;
         }
         .el-carousel__item {
           display: flex;
@@ -683,9 +712,10 @@
       }
     }
     img {
+      display: block;
       width: 100%;
-      height: 100%;
-      object-fit: contain;
+      //height: 100%;
+      //object-fit: contain;
     }
     .s-card-left-isCompare-div {
       width: 60px;

--
Gitblit v1.8.0