haoxuan
2023-08-31 401524fb5661d57ffb2229d683fe4de85b65fd1c
src/components/subComponents/ModelCard.vue
@@ -1,104 +1,180 @@
<template>
  <div class="model-card-box" :style="`height:${height};width:${width};`">
    <el-tabs style="height: 100%;" @before-leave="changeTabs" v-model="activeName">
    <el-tabs
      style="height: 100%;"
      @before-leave="changeTabs"
      v-model="activeName"
    >
      <el-tab-pane label="大图" name="pic">
        <div
          class="model-card-box-left"
          :style="data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''
          ? 'width: 65%;padding: 5px;box-sizing: border-box'
          : 'width: 100%;padding: 5px;box-sizing: border-box'"
          :style="
            data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''
              ? 'width: 65%;padding: 5px;box-sizing: border-box'
              : 'width: 100%;padding: 5px;box-sizing: border-box'
          "
        >
          <div class="img-box">
            <p class="img-box-title">
              <b>全景图</b>
            </p>
            <img-down
              v-if="data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''"
              :url="data.picMaxUrl[0]"
            ></img-down>
            <!-- 人脸类型 -->
            <img-down
              v-else-if="(data.targetInfo == null || data.targetInfo[0].picSmUrl == '') && data.picMaxUrl.length == 1"
              v-if="
                data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''
              "
              :url="data.picMaxUrl[0]"
            ></img-down>
            <!-- 普通yolo类 -->
            <img-down
              v-else-if="
                (data.targetInfo == null ||
                  data.targetInfo[0].picSmUrl == '') &&
                  data.picMaxUrl.length == 1
              "
              :url="data.picMaxUrl[0]"
            ></img-down>
            <!-- 持续时间yolo类 -->
            <el-carousel
              v-else-if="(data.targetInfo == null || data.targetInfo[0].picSmUrl == '') && data.picMaxUrl.length > 1"
              v-else-if="
                (data.targetInfo == null ||
                  data.targetInfo[0].picSmUrl == '') &&
                  data.picMaxUrl.length > 1
              "
              trigger="click"
              height="100%"
              :autoplay="false"
            >
              <el-carousel-item v-for="(item, index) in data.picMaxUrl" :key="index">
              <el-carousel-item
                v-for="(item, index) in data.picMaxUrl"
                :key="index"
              >
                <img-down :url="item"></img-down>
              </el-carousel-item>
            </el-carousel>
            <!-- 持续时间yolo类 -->
            <!-- yolo类大图 -->
            <div
              class="describe"
              v-if="data.targetInfo == null || data.targetInfo[0].picSmUrl == ''"
              v-if="
                data.targetInfo == null || data.targetInfo[0].picSmUrl == ''
              "
            >
              <p>
                <span class="fontStyleForModel" style="font-weight:normal">{{ data.picDate | formatTime }}</span>
                <span class="fontStyleForModel" style="font-weight:normal">{{
                  data.picDate | formatTime
                }}</span>
              </p>
              <p>
                <span class="fontStyleForModel">{{ data.cameraAddr }}</span> <span class="fontStyleForModel analyServer" style="margin-left:20px;">{{ data.analyServerName }}</span>
                <span class="fontStyleForModel">{{ data.cameraAddr }}</span>
                <span
                  class="fontStyleForModel analyServer"
                  style="margin-left:20px;"
                  >{{ data.analyServerName }}</span
                >
              </p>
              <p>
              </p>
              <p></p>
              <p style="width:100%">
                <span v-for="(item,index) in data.alarmRules" :key="index+'rule'">
                  <span class="fontStyleForModel">{{data.taskName}}</span>&nbsp;&nbsp;
                <span
                  v-for="(item, index) in data.alarmRules"
                  :key="index + 'rule'"
                >
                  <span class="fontStyleForModel">{{ data.taskName }}</span
                  >&nbsp;&nbsp;
                  <span
                    v-if="item.alarmLevel !== '撤防'"
                    class="fontStyleForModel"
                  >{{item.alarmLevel}}</span>&nbsp;
                  <span v-if="item.isLink" class="fontStyleForModel">联动任务</span>
                  <span v-if="index < data.alarmRules.length-1">/&nbsp;</span>
                    >{{ item.alarmLevel }}</span
                  >&nbsp;
                  <span v-if="item.isLink" class="fontStyleForModel"
                    >联动任务</span
                  >
                  <span v-if="index < data.alarmRules.length - 1">/&nbsp;</span>
                </span>
              </p>
            </div>
            <!-- yolo类大图 -->
            <!-- 人脸类大图  -->
            <div class="describeBigImage" v-else>
              <p>
                <span class="fontStyleForModel">{{ data.picDate | formatTime}}</span>
                <span class="fontStyleForModel">{{
                  data.picDate | formatTime
                }}</span>
              </p>
              <p>
                <span class="fontStyleForModel">{{ data.cameraAddr }}</span> <span class="fontStyleForModel analyServer" style="margin-left:20px;">{{ data.analyServerName }}</span>
              <p class="align-right">
                <span
                  class="fontStyleForModel text-overflow"
                  :title="data.cameraAddr"
                  >{{ data.cameraAddr }}</span
                >
                <span
                  class="fontStyleForModel text-overflow"
                  :title="data.cameraAddr"
                  style="margin-left:20px;"
                  >{{ data.analyServerName }}</span
                >
              </p>
              <p style="width:100%">
                <span v-for="(item,index) in data.alarmRules" :key="index+'rule'">
                  <span class="fontStyleForModel">{{data.taskName}}</span>&nbsp;&nbsp;
                <span
                  v-for="(item, index) in data.alarmRules"
                  :key="index + 'rule'"
                >
                  <span class="fontStyleForModel">{{ data.taskName }}</span
                  >&nbsp;&nbsp;
                  <span
                    v-if="item.alarmLevel !== '撤防'"
                    class="fontStyleForModel"
                  >{{item.alarmLevel}}</span>&nbsp;
                  <span v-if="item.isLink" class="fontStyleForModel">联动任务</span>
                  <span v-if="index < data.alarmRules.length-1">/&nbsp;</span>
                    >{{ item.alarmLevel }}</span
                  >&nbsp;
                  <span v-if="item.isLink" class="fontStyleForModel"
                    >联动任务</span
                  >
                  <span v-if="index < data.alarmRules.length - 1">/&nbsp;</span>
                </span>
              </p>
              <p style="width:100%">
                <span class="fontStyleForModel">{{data.showLabels}}</span>
                <span
                  style="white-space: nowrap;font-weight: 600;font-size: 13px;"
                  >{{ data.showLabels }}</span
                >
              </p>
            </div>
            <!-- 人脸类大图  -->
          </div>
        </div>
        <!-- 弹框右侧 -->
        <div
          v-if="data.targetInfo && data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''"
          v-if="
            data.targetInfo &&
              data.targetInfo !== null &&
              data.targetInfo[0].picSmUrl !== ''
          "
          class="model-card-box-right"
          :style="data.targetInfo && data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''
          ? 'width: 35%;box-sizing: border-box;'
          : ''"
          :style="
            data.targetInfo &&
            data.targetInfo !== null &&
            data.targetInfo[0].picSmUrl !== ''
              ? 'width: 35%;box-sizing: border-box;'
              : ''
          "
        >
          <p class="img-box-title">
            <b>抓拍图</b>
          </p>
          <!-- 左右两张的人脸对比模式 -->
          <div class="img-box" v-if="data.baseInfo && data.baseInfo.length >= 1" ref="picSmBox">
          <div
            class="img-box"
            v-if="data.baseInfo && data.baseInfo.length >= 1"
            ref="picSmBox"
          >
            <div class="card-img-box-compear-left">
              <!-- <img :src="'/httpImage/'+data.targetInfo[0].picSmUrl" ref="picSm" /> -->
              <img-down :url="data.targetInfo[0].picSmUrl" :isPreview="false"></img-down>
              <img-down
                :url="data.targetInfo[0].picSmUrl"
                :isPreview="false"
              ></img-down>
            </div>
            <el-carousel
              @change="changeInitialIndex"
@@ -109,9 +185,15 @@
              v-if="data.baseInfo[0].targetPicUrl != ''"
              class="card-img-box-compear-right"
            >
              <el-carousel-item v-for="(item, index) in data.baseInfo" :key="index">
              <el-carousel-item
                v-for="(item, index) in data.baseInfo"
                :key="index"
              >
                <!-- <img :src="'/httpImage/'+item.targetPicUrl" /> -->
                <img-down :url="item.targetPicUrl" :isPreview="false"></img-down>
                <img-down
                  :url="item.targetPicUrl"
                  :isPreview="false"
                ></img-down>
              </el-carousel-item>
            </el-carousel>
            <div
@@ -127,85 +209,119 @@
            </div>
          </div>
          <!-- 没有比对的人脸识别模式 -->
          <div class="img-box" v-if="!data.baseInfo && data.targetInfo[0].picSmUrl !== '' ">
            <div class="card-img-box-compear-left" style="width:60%;margin-top:5px">
          <div
            class="img-box"
            v-if="!data.baseInfo && data.targetInfo[0].picSmUrl !== ''"
          >
            <div
              class="card-img-box-compear-left"
              style="width:60%;margin-top:5px"
            >
              <!-- <img :src="'/httpImage/'+data.targetInfo[0].picSmUrl" /> -->
              <img-down :url="data.targetInfo[0].picSmUrl" :isPreview="false"></img-down>
              <img-down
                :url="data.targetInfo[0].picSmUrl"
                :isPreview="false"
              ></img-down>
            </div>
          </div>
          <div class="baseInfo" v-if="data.baseInfo && data.baseInfo[0].targetPicUrl != ''">
          <div
            class="baseInfo"
            v-if="data.baseInfo && data.baseInfo[0].targetPicUrl != ''"
          >
            <div class="baseInfo_list">
              <p>
                <span class="labelInfo">底库</span>
                <span
                  class="val"
                  :title="data.baseInfo[initialIndex].tableName"
                >{{data.baseInfo[initialIndex].tableName}}</span>
                  >{{ data.baseInfo[initialIndex].tableName }}</span
                >
              </p>
              <p>
                <span class="labelInfo">姓名</span>
                <span
                  class="val"
                  :title="data.baseInfo[initialIndex].targetName"
                >{{data.baseInfo[initialIndex].targetName}}</span>
                  >{{ data.baseInfo[initialIndex].targetName }}</span
                >
              </p>
              <p>
                <span class="labelInfo">性别</span>
                <span class="val">{{data.baseInfo[initialIndex].labels | sex}}</span>
                <span class="val">{{
                  data.baseInfo[initialIndex].labels | sex
                }}</span>
              </p>
              <p>
                <span class="labelInfo">身份证号</span>
                <span class="val">{{data.baseInfo[initialIndex].labels | idCard}}</span>
                <span class="val">{{
                  data.baseInfo[initialIndex].labels | idCard
                }}</span>
              </p>
              <p>
                <span class="labelInfo">手机号</span>
                <span class="val">{{data.baseInfo[initialIndex].labels | phoneNum}}</span>
                <span class="val">{{
                  data.baseInfo[initialIndex].labels | phoneNum
                }}</span>
              </p>
              <p>
                <span class="labelInfo">人员等级</span>
                <span
                  class="val"
                  :title="data.baseInfo[initialIndex].monitorLevel"
                >{{data.baseInfo[initialIndex].monitorLevel}}</span>
                  >{{ data.baseInfo[initialIndex].monitorLevel }}</span
                >
              </p>
            </div>
          </div>
        </div>
      </el-tab-pane>
      <el-tab-pane label="视频" name="video" class="video-tabs">
        <div
          class="model-card-box-left"
          :style="data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''
          ? 'width: 65%;padding: 5px;box-sizing: border-box'
          : 'width: 70%;padding: 5px;box-sizing: border-box;margin-left:15%'"
          :style="
            data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''
              ? 'width: 65%;padding: 5px;box-sizing: border-box'
              : 'width: 70%;padding: 5px;box-sizing: border-box;margin-left:15%'
          "
        >
          <div class="img-box">
            <video
            <!-- <video
              :src="'/httpImage/' + data.videoUrl"
              controls
              style="margin-top: 12px;"
            >您的浏览器不支持 video 标签。</video>
            >
              您的浏览器不支持 video 标签。
            </video> -->
            <wasm-player
              :videoUrl="data.videoUrl"
              :isStream="false"
            ></wasm-player>
          </div>
          <!-- <div class="merge">
            <el-button type="primary" @click="mergeVideo">合并视频</el-button>
            <a name="download" @click="downloadfile">下载</a>
            <a href="/httpImage/192.168.20.112:6081/31,02c86c199cd9b1" download="panlei.mp4">下载2</a>
          </div>-->
        </div>
        <div
          v-if="data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''"
          class="model-card-box-right"
          :style="data.targetInfo !== null &&  data.targetInfo[0].picSmUrl !== ''
          ? 'width: 35%;box-sizing: border-box;'
          : ''"
          :style="
            data.targetInfo !== null && data.targetInfo[0].picSmUrl !== ''
              ? 'width: 35%;box-sizing: border-box;'
              : ''
          "
        >
          <p class="img-box-title">
            <b>抓拍图</b>
          </p>
          <!-- 左右两张的人脸对比模式 -->
          <div class="img-box" v-if="data.baseInfo && data.baseInfo.length >= 1" ref="picSmBox">
          <div
            class="img-box"
            v-if="data.baseInfo && data.baseInfo.length >= 1"
            ref="picSmBox"
          >
            <div class="card-img-box-compear-left">
              <img-down :url="data.targetInfo[0].picSmUrl" :isPreview="false"></img-down>
              <img-down
                :url="data.targetInfo[0].picSmUrl"
                :isPreview="false"
              ></img-down>
            </div>
            <el-carousel
              @change="changeInitialIndex"
@@ -216,9 +332,15 @@
              class="card-img-box-compear-right"
              :arrow="data.baseInfo.length > 1 ? 'always' : 'never'"
            >
              <el-carousel-item v-for="(item, index) in data.baseInfo" :key="index">
              <el-carousel-item
                v-for="(item, index) in data.baseInfo"
                :key="index"
              >
                <!-- <img :src="'/httpImage/'+item.targetPicUrl" /> -->
                <img-down :url="item.targetPicUrl" :isPreview="false"></img-down>
                <img-down
                  :url="item.targetPicUrl"
                  :isPreview="false"
                ></img-down>
              </el-carousel-item>
            </el-carousel>
            <div
@@ -234,46 +356,64 @@
            </div>
          </div>
          <!-- 没有比对的人脸识别模式 -->
          <div class="img-box" v-if="!data.baseInfo && data.picMaxUrl ">
            <div class="card-img-box-compear-left" style="width:60%;margin-top:5px">
          <div class="img-box" v-if="!data.baseInfo && data.picMaxUrl">
            <div
              class="card-img-box-compear-left"
              style="width:60%;margin-top:5px"
            >
              <!-- <img :src="'/httpImage/'+data.targetInfo[0].picSmUrl" /> -->
              <img-down :url="data.targetInfo[0].picSmUrl" :isPreview="false"></img-down>
              <img-down
                :url="data.targetInfo[0].picSmUrl"
                :isPreview="false"
              ></img-down>
            </div>
          </div>
          <div class="baseInfo" v-if="data.baseInfo && data.baseInfo[0].targetPicUrl != ''">
          <div
            class="baseInfo"
            v-if="data.baseInfo && data.baseInfo[0].targetPicUrl != ''"
          >
            <div class="baseInfo_list">
              <p>
                <span class="labelInfo">底库</span>
                <span
                  class="val"
                  :title="data.baseInfo[initialIndex].tableName"
                >{{data.baseInfo[initialIndex].tableName}}</span>
                  >{{ data.baseInfo[initialIndex].tableName }}</span
                >
              </p>
              <p>
                <span class="labelInfo">姓名</span>
                <span
                  class="val"
                  :title="data.baseInfo[initialIndex].targetName"
                >{{data.baseInfo[initialIndex].targetName}}</span>
                  >{{ data.baseInfo[initialIndex].targetName }}</span
                >
              </p>
              <p>
                <span class="labelInfo">性别</span>
                <span class="val">{{data.baseInfo[initialIndex].labels | sex}}</span>
                <span class="val">{{
                  data.baseInfo[initialIndex].labels | sex
                }}</span>
              </p>
              <p>
                <span class="labelInfo">身份证号</span>
                <span class="val">{{data.baseInfo[initialIndex].labels | idCard}}</span>
                <span class="val">{{
                  data.baseInfo[initialIndex].labels | idCard
                }}</span>
              </p>
              <p>
                <span class="labelInfo">手机号</span>
                <span class="val">{{data.baseInfo[initialIndex].labels | phoneNum}}</span>
                <span class="val">{{
                  data.baseInfo[initialIndex].labels | phoneNum
                }}</span>
              </p>
              <p>
                <span class="labelInfo">人员等级</span>
                <span
                  class="val"
                  :title="data.baseInfo[initialIndex].monitorLevel"
                >{{data.baseInfo[initialIndex].monitorLevel}}</span>
                  >{{ data.baseInfo[initialIndex].monitorLevel }}</span
                >
              </p>
            </div>
          </div>
@@ -283,54 +423,67 @@
  </div>
</template>
<script>
Date.prototype.Format = function (fmt) {
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), //季度
    "S": this.getMilliseconds() //毫秒
  };
  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    'M+': this.getMonth() + 1, //月份
    'd+': this.getDate(), //日
    'H+': this.getHours(), //小时
    'm+': this.getMinutes(), //分
    's+': this.getSeconds(), //秒
    'q+': Math.floor((this.getMonth() + 3) / 3), //季度
    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;
    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
}
/* eslint-disable */
import CameraPlayer from "@/components/player";
import imgDown from "@/components/subComponents/imgDown"
import WasmPlayer from '@/components/wasmPlayer'
import imgDown from '@/components/subComponents/imgDown'
export default {
  components: {
    CameraPlayer,
    imgDown
    WasmPlayer,
    imgDown,
  },
  props: {
    height: {
      type: String,
      default: "100%"
      default: '100%',
    },
    width: {
      type: String,
      default: "100%"
      default: '100%',
    },
    data: ""
    data: {
      type: Object,
      require: false,
      default: function() {
        return {}
      },
    },
  },
  filters: {
    formatTime(t) {
      return new Date(t).Format("yyyy-MM-dd HH:mm:ss")
      return new Date(t).Format('yyyy-MM-dd HH:mm:ss')
    },
    percentage(score) {
      return score.toFixed(2) + "%"
      return score.toFixed(2) + '%'
    },
    sex(v) {
      try {
        let obj = JSON.parse(v)
        return obj.sex
      } catch (error) {
        return v.split("/")[0]
        return v.split('/')[0]
      }
    },
    idCard(v) {
@@ -338,7 +491,7 @@
        let obj = JSON.parse(v)
        return obj.idCard
      } catch (error) {
        return v.split("/")[1]
        return v.split('/')[1]
      }
    },
    phoneNum(v) {
@@ -346,40 +499,40 @@
        let obj = JSON.parse(v)
        return obj.phone
      } catch (error) {
        return v.split("/")[2]
        return v.split('/')[2]
      }
    }
    },
  },
  mounted() {
    console.log('ModelCard data',this.data);
    console.log('ModelCard data', this.data)
    console.log(this.data.baseInfo)
    console.log(this.initialIndex)
    //this.VideoPhotoData.activeName = "pic"
  },
  data() {
    return {
      activeName:'pic',
      activeName: 'pic',
      initialIndex: 0,
    };
    }
  },
  methods: {
    changeTabs(activeName, oldActiveName) {
      console.log(activeName, oldActiveName);
      console.log(activeName, oldActiveName)
    },
    changeInitialIndex(index) {
      this.initialIndex = index;
      this.initialIndex = index
    },
    downloadfile() {
      this.filecontent = "this is my file content";
      let a = document.createElement('a');
      this.filecontent = 'this is my file content'
      let a = document.createElement('a')
      a.href = "data:text/json;charset=utf-8," + this.filecontent;
      a.href = 'data:text/json;charset=utf-8,' + this.filecontent
      // a.url = "http://192.168.20.112:6154/93,02c5aea4fc614e";
      a.download = "video.mp4";
      a.click();
    }
      a.download = 'video.mp4'
      a.click()
    },
  },
};
}
</script>
<style lang="scss">
.fontStyleForModel {
@@ -494,7 +647,6 @@
            }
            text-align: left;
            margin: 4px 0;
          }
        }
        .describeBigImage {
@@ -503,6 +655,17 @@
          float: left;
          margin-top: 5px;
          p {
            &.align-right {
              text-align: right;
              .text-overflow {
                display: inline-block;
                vertical-align: top;
                width: 90px;
                overflow: hidden;
                text-overflow: ellipsis;
                white-space: nowrap;
              }
            }
            b {
              //color: #e43933;
            }