Przeglądaj źródła

Merge branch 'master' of http://10.1.235.20:3000/asiainfo/ebc

wangchao 4 lat temu
rodzic
commit
a742a87b21

+ 5 - 4
security-protection-platform/.aid/aid.js

61
    {
61
    {
62
      url: '/sp',
62
      url: '/sp',
63
      options: {
63
      options: {
64
        target: 'http://10.19.90.34:8018',
64
        target: 'http://10.1.252.196:8018',
65
        // target: 'http://10.1.74.27:8018',
65
        changeOrigin: true,
66
        changeOrigin: true,
66
        pathRewrite: {
67
          '^/sp': '/'
68
        }
67
        // pathRewrite: {
68
        //   '^/sp': '/'
69
        // }
69
      }
70
      }
70
    },
71
    },
71
  ]
72
  ]

+ 1 - 1
security-protection-platform/src/conf/axios.config.js

44
        baseURL: '/sp'
44
        baseURL: '/sp'
45
    },
45
    },
46
    picurl: {
46
    picurl: {
47
      baseURL: 'http://10.19.90.34:19000/tool-image/'
47
      baseURL: 'http://10.1.194.18:9000/tool-image/'
48
    }
48
    }
49
49
50
  }
50
  }

+ 2 - 2
security-protection-platform/src/layout/index.vue

46
  },
46
  },
47
  mounted() {
47
  mounted() {
48
    // 镜屏调用
48
    // 镜屏调用
49
    // this.connect()
49
    this.connect()
50
  },
50
  },
51
  methods: {
51
  methods: {
52
    connect() {
52
    connect() {
53
      if (this.stompClient == null || !this.stompClient.connected()) {
53
      if (this.stompClient == null || !this.stompClient.connected()) {
54
        this.stompClient = new StompClient('ws://10.19.90.34:7200/stomp')
54
        this.stompClient = new StompClient('ws://10.1.252.196:7200/stomp')
55
        this.stompClient.connect('zhangsan', '123456', () => { this.connectCallback() }, () => { this.errorCallback() })
55
        this.stompClient.connect('zhangsan', '123456', () => { this.connectCallback() }, () => { this.errorCallback() })
56
      } else {
56
      } else {
57
        console.log('当前处于连接状态')
57
        console.log('当前处于连接状态')

+ 14 - 7
security-protection-platform/src/modules/access/component/instrumentRecord/index.vue

19
        <t-button color="primary" @click="btnsearch">查询</t-button>
19
        <t-button color="primary" @click="btnsearch">查询</t-button>
20
        <t-button @click="reset">重置</t-button>
20
        <t-button @click="reset">重置</t-button>
21
      </div>
21
      </div>
22
       <t-button  icon="upload" style="width:128px;height:32px" class="upload">导出至Excel</t-button>
22
      <t-button color="primary" icon="upload" style="width:128px;height:32px" class="upload">导出至Excel</t-button>
23
23
24
    </div> -->
24
    </div> -->
25
    <div class="track-container">
25
    <div class="track-container">
36
            </div>
36
            </div>
37
          </div>
37
          </div>
38
          <div class="btns">
38
          <div class="btns">
39
            <t-button icon="upload" style="width:128px;height:32px" class="upload">导出至Excel</t-button>
39
            <t-button color="primary" icon="upload" style="width:128px;height:32px" class="upload">导出至Excel</t-button>
40
            <t-dropdown :visibled="customVisibled" trigger-mode="custom">
40
            <t-dropdown :visibled="customVisibled" trigger-mode="custom">
41
              <t-button slot="trigger" color="secondary" icon="tile-four-outline" class="trigger-button" @click="onTriggerClick"></t-button>
41
              <t-button slot="trigger" color="secondary" icon="tile-four-outline" @click="onTriggerClick"></t-button>
42
              <div slot="popper">
42
              <div slot="popper">
43
                <div style="border-radius: 5px;padding: 20px 20px 20px 20px;background-color: white;">
43
                <div style="border-radius: 5px;padding: 20px 20px 20px 20px;background-color: white;">
44
                  <t-checkbox-group v-model="social" vertical @change="checkAllGroupChange">
44
                  <t-checkbox-group v-model="social" vertical @change="checkAllGroupChange">
54
                </div>
54
                </div>
55
              </div>
55
              </div>
56
            </t-dropdown>
56
            </t-dropdown>
57
            <t-button color="secondary" icon="loading" class="reset-btn" @click="reset"></t-button>
57
          </div>
58
          </div>
58
        </div>
59
        </div>
59
        <div class="animate-demo-wrapper">
60
        <div class="animate-demo-wrapper">
61
            <div v-show="slideVisible" class="transition-box allCondition">
62
            <div v-show="slideVisible" class="transition-box allCondition">
62
              <div class="input-rule">
63
              <div class="input-rule">
63
                <span>开始时间:</span>
64
                <span>开始时间:</span>
64
                <t-date-picker :confirm="false" v-model="searchdata.beginDay" placeholder="请选择开始时间" style="width:320px;height:32px"></t-date-picker>
65
                <t-date-picker :confirm="false" v-model="searchdata.beginDay" placeholder="请选择开始时间" style="width:200px;height:32px"></t-date-picker>
65
              </div>
66
              </div>
66
              <div class="input-rule">
67
              <div class="input-rule">
67
                <span>结束时间:</span>
68
                <span>结束时间:</span>
68
                <t-date-picker :confirm="false" v-model="searchdata.endDay" placeholder="请选择结束时间" style="width:320px;height:32px"></t-date-picker>
69
                <t-date-picker :confirm="false" v-model="searchdata.endDay" placeholder="请选择结束时间" style="width:320px;height:32px"></t-date-picker>
69
              </div>
70
              </div>
70
              <a style="float:right;color:#0089d4;" @click="reset" href="javascript:;">重置</a>
71
            </div>
71
            </div>
72
          </transition>
72
          </transition>
73
        </div>
73
        </div>
462
            onImgLoaded()
462
            onImgLoaded()
463
          }, 3)
463
          }, 3)
464
        } else {
464
        } else {
465
          debugger
466
          e.box[0] = imgObject.width * e.box[0]
467
          e.box[1] = imgObject.height * e.box[1]
468
          e.box[2] = imgObject.width * e.box[2]
469
          e.box[3] = imgObject.height * e.box[3]
465
          that.newimage = getImagePortion(imgObject, e.box[2] - e.box[0], e.box[3] - e.box[1], e.box[0], e.box[1])
470
          that.newimage = getImagePortion(imgObject, e.box[2] - e.box[0], e.box[3] - e.box[1], e.box[0], e.box[1])
466
        }
471
        }
467
      }
472
      }
590
      justify-content: space-between;
595
      justify-content: space-between;
591
      border: 1px solid rgba(0, 0, 0, 0.09);
596
      border: 1px solid rgba(0, 0, 0, 0.09);
592
      background-color: #f8f9fa;
597
      background-color: #f8f9fa;
593
      flex-wrap: nowrap;
598
      flex-wrap: wrap;
594
      padding: 20px;
599
      padding: 20px;
595
      margin: 5px auto;
600
      margin: 5px auto;
596
      align-items: center;
597
      .input-rule {
601
      .input-rule {
598
        flex: 1;
602
        flex: 1;
603
        width: 50%;
604
        min-width: 50%;
605
        max-width: 50%;
599
        padding: 10px 0 10px 20px;
606
        padding: 10px 0 10px 20px;
600
      }
607
      }
601
    }
608
    }

+ 13 - 13
security-protection-platform/src/modules/access/component/io-record/index.vue

20
        <t-button @click="reset">重置</t-button>
20
        <t-button @click="reset">重置</t-button>
21
      </div>
21
      </div>
22
22
23
       <t-button  icon="upload" style="width:128px;height:32px" class="upload">导出至Excel</t-button>
23
      <t-button color="primary" icon="upload" style="width:128px;height:32px" class="upload">导出至Excel</t-button>
24
24
25
    </div> -->
25
    </div> -->
26
    <div class="track-container">
26
    <div class="track-container">
37
            </div>
37
            </div>
38
          </div>
38
          </div>
39
          <div class="btns">
39
          <div class="btns">
40
            <t-button icon="upload" style="width:128px;height:32px" class="upload">导出至Excel</t-button>
40
            <t-button color="primary" icon="upload" style="width:128px;height:32px" class="upload">导出至Excel</t-button>
41
            <t-dropdown :visibled="customVisibled" trigger-mode="custom">
41
            <t-dropdown :visibled="customVisibled" trigger-mode="custom">
42
              <t-button slot="trigger" color="secondary" icon="tile-four-outline" class="trigger-button" @click="onTriggerClick"></t-button>
42
              <t-button slot="trigger" color="secondary" icon="tile-four-outline" @click="onTriggerClick"></t-button>
43
              <div slot="popper">
43
              <div slot="popper">
44
                <div style="border-radius: 5px;padding: 20px 20px 20px 20px;background-color: white;">
44
                <div style="border-radius: 5px;padding: 20px 20px 20px 20px;background-color: white;">
45
                  <t-checkbox-group v-model="social" vertical @change="checkAllGroupChange">
45
                  <t-checkbox-group v-model="social" vertical @change="checkAllGroupChange">
55
                </div>
55
                </div>
56
              </div>
56
              </div>
57
            </t-dropdown>
57
            </t-dropdown>
58
            <t-button color="secondary" icon="loading" class="reset-btn" @click="reset"></t-button>
58
          </div>
59
          </div>
59
        </div>
60
        </div>
60
        <div class="animate-demo-wrapper">
61
        <div class="animate-demo-wrapper">
62
            <div v-show="slideVisible" class="transition-box allCondition">
63
            <div v-show="slideVisible" class="transition-box allCondition">
63
              <div class="input-rule">
64
              <div class="input-rule">
64
                <span>开始时间:</span>
65
                <span>开始时间:</span>
65
                <t-date-picker :confirm="false" v-model="searchdata.beginDay" placeholder="请选择开始时间" style="width:320px;height:32px"></t-date-picker>
66
                <t-date-picker :confirm="false" v-model="searchdata.beginDay" placeholder="请选择开始时间" style="width:200px;height:32px"></t-date-picker>
66
              </div>
67
              </div>
67
              <div class="input-rule">
68
              <div class="input-rule">
68
                <span>结束时间:</span>
69
                <span>结束时间:</span>
69
                <t-date-picker :confirm="false" v-model="searchdata.endDay" placeholder="请选择结束时间" style="width:320px;height:32px"></t-date-picker>
70
                <t-date-picker :confirm="false" v-model="searchdata.endDay" placeholder="请选择结束时间" style="width:320px;height:32px"></t-date-picker>
70
              </div>
71
              </div>
71
              <a style="float:right;color:#0089d4;" @click="reset" href="javascript:;">重置</a>
72
            </div>
72
            </div>
73
          </transition>
73
          </transition>
74
        </div>
74
        </div>
87
      <t-table-column v-if="columns[4].show" :formatter="date_formatter" label="职务" prop="employeePositionZh" width="80px">
87
      <t-table-column v-if="columns[4].show" :formatter="date_formatter" label="职务" prop="employeePositionZh" width="80px">
88
      </t-table-column>
88
      </t-table-column>
89
      <t-table-column v-if="columns[5].show" :formatter="date_formatter" prop="simi" label="相似度" width="75px">
89
      <t-table-column v-if="columns[5].show" :formatter="date_formatter" prop="simi" label="相似度" width="75px">
90
        <template v-slot="{row}">
91
          {{ getSimi(row) }}
92
        </template>
93
      </t-table-column>
90
      </t-table-column>
94
      <t-table-column v-if="columns[6].show" :formatter="date_formatter" label="进出时间" prop="taskExecuteTime" width="160px">
91
      <t-table-column v-if="columns[6].show" :formatter="date_formatter" label="进出时间" prop="taskExecuteTime" width="160px">
95
      </t-table-column>
92
      </t-table-column>
504
            onImgLoaded()
501
            onImgLoaded()
505
          }, 3)
502
          }, 3)
506
        } else {
503
        } else {
504
          e.box[0] = imgObject.width * e.box[0]
505
          e.box[1] = imgObject.height * e.box[1]
506
          e.box[2] = imgObject.width * e.box[2]
507
          e.box[3] = imgObject.height * e.box[3]
507
          that.newimage = getImagePortion(imgObject, e.box[2] - e.box[0], e.box[3] - e.box[1], e.box[0], e.box[1])
508
          that.newimage = getImagePortion(imgObject, e.box[2] - e.box[0], e.box[3] - e.box[1], e.box[0], e.box[1])
508
        }
509
        }
509
      }
510
      }
571
      } else {
572
      } else {
572
        return cellValue
573
        return cellValue
573
      }
574
      }
574
    },
575
    getSimi (row) {
576
      return (row.simi.split('%')[0] - 0).toFixed(2) + '%'
577
    }
575
    }
578
    // //将分数转换为小数
576
    // //将分数转换为小数
579
    // toPoint (percent) {
577
    // toPoint (percent) {
635
      justify-content: space-between;
633
      justify-content: space-between;
636
      border: 1px solid rgba(0, 0, 0, 0.09);
634
      border: 1px solid rgba(0, 0, 0, 0.09);
637
      background-color: #f8f9fa;
635
      background-color: #f8f9fa;
638
      flex-wrap: nowrap;
639
      align-items: center;
636
      flex-wrap: wrap;
640
      padding: 20px;
637
      padding: 20px;
641
      margin: 5px auto;
638
      margin: 5px auto;
642
      .input-rule {
639
      .input-rule {
643
        flex: 1;
640
        flex: 1;
641
        width: 50%;
642
        min-width: 50%;
643
        max-width: 50%;
644
        padding: 10px 0 10px 20px;
644
        padding: 10px 0 10px 20px;
645
      }
645
      }
646
    }
646
    }

+ 65 - 65
security-protection-platform/src/modules/dashboard/index.vue

1
<template>
1
<template>
2
  <div class="index" style="overflow:hidden;">
2
  <div class="index" style="overflow:hidden;">
3
    <div :style="`background-image: url(${imgBg})`" class="top">
3
    <div :style="`background-image: url(${imgBg})`" class="top" >
4
      <img src="@/assets/images/AsiainfoLogo.png" class="top-logo">
4
      <img src="@/assets/images/AsiainfoLogo.png" class="top-logo">
5
      <div style="position: absolute;top:50%;left:54%;transform: translate(-50%,-50%);vertical-align: middle; color: white; font-size: 14px">
5
      <div style="position: absolute;top:50%;left:54%;transform: translate(-50%,-50%);vertical-align: middle; color: white; font-size: 14px">
6
        <b> | AISI安防一体化平台</b>
6
        <b> | AISI安防一体化平台</b>
21
          <div id="doughnut" style="height: 100%;width: 100%"></div>
21
          <div id="doughnut" style="height: 100%;width: 100%"></div>
22
        </div>
22
        </div>
23
        <div :style="`height:34%;margin-top: 3%;`" class="body-left-item">
23
        <div :style="`height:34%;margin-top: 3%;`" class="body-left-item">
24
          <div id="div1" :style="`background-image: url(${titleImgBg})`" class="title">
24
          <div :style="`background-image: url(${titleImgBg})`" class="title" id="div1">
25
            <span class="title-span">告警分析</span>
25
            <span class="title-span">告警分析</span>
26
          </div>
26
          </div>
27
          <div id="bar" style="height: 100%;width: 100%"></div>
27
          <div id="bar" style="height: 100%;width: 100%"></div>
46
          <span class="title-span">重点区域监控</span>
46
          <span class="title-span">重点区域监控</span>
47
        </div>
47
        </div>
48
        <!--        <video-player ref="videoPlayer" :options="videoOptions" :playsinline="true" class="vjs-custom-skin videoPlayer"></video-player>-->
48
        <!--        <video-player ref="videoPlayer" :options="videoOptions" :playsinline="true" class="vjs-custom-skin videoPlayer"></video-player>-->
49
        <div id="div11">
50
          <video-player v-if="videoOptions !== {}" id="div111" ref="videoPlayer" :options="videoOptions" :playsinline="true" class="vjs-custom-skin videoPlayer">
49
        <div id="div11" style="padding-right: 7%;padding-left: 7%">
50
          <video-player v-if="videoOptions !== {}" ref="videoPlayer" :options="videoOptions" :playsinline="true"  id="div111" class="vjs-custom-skin videoPlayer">
51
51
52
          </video-player>
52
          </video-player>
53
        </div>
53
        </div>
102
import 'vue-video-player/src/custom-theme.css'
102
import 'vue-video-player/src/custom-theme.css'
103
import 'videojs-flash'
103
import 'videojs-flash'
104
import videojs from 'video.js'
104
import videojs from 'video.js'
105
import EventBus from '../../bus'
105
import EventBus from "../../bus";
106
window.videojs = videojs
106
window.videojs = videojs
107
107
108
require('video.js/dist/lang/zh-CN.js')
108
require('video.js/dist/lang/zh-CN.js')
116
      month >= 10 ? month : '0' + month
116
      month >= 10 ? month : '0' + month
117
      var day = value.getDate() >= 10 ? value.getDate() : '0' + value.getDate()
117
      var day = value.getDate() >= 10 ? value.getDate() : '0' + value.getDate()
118
      var hours =
118
      var hours =
119
        value.getHours() >= 10 ? value.getHours() : '0' + value.getHours()
119
          value.getHours() >= 10 ? value.getHours() : '0' + value.getHours()
120
      var minutes =
120
      var minutes =
121
        value.getMinutes() >= 10
122
          ? value.getMinutes()
123
          : '0' + value.getMinutes()
121
          value.getMinutes() >= 10
122
              ? value.getMinutes()
123
              : '0' + value.getMinutes()
124
      var seconds =
124
      var seconds =
125
        value.getSeconds() >= 10
126
          ? value.getSeconds()
127
          : '0' + value.getSeconds()
125
          value.getSeconds() >= 10
126
              ? value.getSeconds()
127
              : '0' + value.getSeconds()
128
      return (
128
      return (
129
        year +
130
        '年' +
131
        month +
132
        '月' +
133
        day +
134
        '日 ' +
135
        hours +
136
        ':' +
137
        minutes +
138
        ':' +
139
        seconds
129
          year +
130
          '年' +
131
          month +
132
          '月' +
133
          day +
134
          '日 ' +
135
          hours +
136
          ':' +
137
          minutes +
138
          ':' +
139
          seconds
140
      )
140
      )
141
    }
141
    }
142
  },
142
  },
180
    setInterval(() => { // 识别记录
180
    setInterval(() => { // 识别记录
181
      this.initRecognition()
181
      this.initRecognition()
182
    }, 5000)
182
    }, 5000)
183
    // console.log(textDom.nextSibling)
184
    // textDom.nextSibling.nodeValue = ''
185
    // EventBus.$on('sendAiData', (msg) => { // 获取镜屏推送消息
183
    // EventBus.$on('sendAiData', (msg) => { // 获取镜屏推送消息
186
    //   console.log('已接收镜屏消息...')
184
    //   console.log('已接收镜屏消息...')
187
    //   var oDiv = document.getElementById("div111");
185
    //   var oDiv = document.getElementById("div111");
199
    // })
197
    // })
200
  },
198
  },
201
  methods: {
199
  methods: {
202
    testHKK (box, alarmMemo) {
200
    testHKK(box, alarmMemo) {
203
      var width = box[2] - box[0]
201
      var width = box[2] - box[0]
204
      var height = box[3] - box[1]
202
      var height = box[3] - box[1]
205
      var oDiv = document.getElementById('div111')
203
      var oDiv = document.getElementById("div111");
206
      // var aBox = this.getByClass(oDiv,"vjs-tech");
204
      // var aBox = this.getByClass(oDiv,"vjs-tech");
207
      // alert(aBox.length);
205
      // alert(aBox.length);
208
      var e = oDiv
209
      var div = document.createElement('div')
206
      var e = oDiv;
207
      var div = document.createElement("div");
210
      // div.className = "form-group";
208
      // div.className = "form-group";
211
      var del = document.createElement('p')
209
      var del = document.createElement('p')
212
      var x = 10 + this.hkk
210
      var x = 10 + this.hkk
213
      this.hkk++
214
      del.innerHTML = '<div class="hkk" style="color: white;border: 2px solid #00d8f3;position: absolute;top: ' + box[1] + 'px;left: ' + box[0] + 'px;width: ' + width + 'px;height: ' + height + 'px;"> ' + alarmMemo + ' </div>'
215
      div.appendChild(del)
216
      e.appendChild(div)
217
      setTimeout(function () {
218
        del.remove()
211
      this.hkk ++
212
      del.innerHTML = '<div class="hkk" style="color: white;border: 2px solid #00d8f3;position: absolute;top: ' + box[1] + 'px;left: ' + box[0] + 'px;width: ' + width + 'px;height: ' + height + 'px;"> ' + alarmMemo + ' </div>';
213
      div.appendChild(del);
214
      e.appendChild(div);
215
      setTimeout(function() {
216
        del.remove();
219
      }, 3000)
217
      }, 3000)
220
    },
218
    },
221
219
222
    findInArr (arr, n) {
223
      for (var i = 0; i < arr.length; i++) {
224
        if (arr[i] == n) {
225
          return true
220
221
    findInArr(arr,n){
222
      for(var i=0;i<arr.length;i++){
223
        if(arr[i] == n){
224
          return true;
226
        }
225
        }
227
      }
226
      }
228
      return false
227
      return false;
229
    },
228
    },
230
    getByClass (oParent, sClass) {
231
      var ret = []
232
      var aEle = oParent.getElementsByTagName('*')
233
      for (var i = 0; i < aEle.length; i++) {
234
        var _aTmp = aEle[i].className.split(' ')
235
        if (this.findInArr(_aTmp, sClass)) {
236
          ret.push(aEle[i])
229
    getByClass(oParent,sClass){
230
      var ret = [];
231
      var aEle = oParent.getElementsByTagName("*");
232
      for(var i = 0; i < aEle.length; i++){
233
        var _aTmp = aEle[i].className.split(" ");
234
        if(this.findInArr(_aTmp,sClass)){
235
          ret.push(aEle[i]);
237
        }
236
        }
238
      }
237
      }
239
      return ret
238
      return ret;
240
    },
239
    },
241
    async createMyButton () {
240
    async createMyButton () {
242
      this.$nextTick(() => {
241
      this.$nextTick(() => {
245
        let start = document.getElementsByClassName('vjs-play-control vjs-control vjs-button')
244
        let start = document.getElementsByClassName('vjs-play-control vjs-control vjs-button')
246
        let volume = document.getElementsByClassName('vjs-volume-panel vjs-control vjs-volume-panel-horizontal')
245
        let volume = document.getElementsByClassName('vjs-volume-panel vjs-control vjs-volume-panel-horizontal')
247
        let text = document.getElementsByClassName('vjs-live-control vjs-control')
246
        let text = document.getElementsByClassName('vjs-live-control vjs-control')
248
        // 删除直播文本节点
249
        let textDoms = document.querySelectorAll('.vjs-live-control .vjs-live-display .vjs-control-text')
250
        textDoms.forEach(item => {
251
          // 这样设置没用 不知道为啥 明明在nextTick中 真正的“直播”文本节点还是没选到
252
          item.nextSibling.nodeValue = ''
253
          // item.nextSibling.data = ''
254
        })
255
        bars.forEach((item, index) => {
247
        bars.forEach((item, index) => {
256
          time.forEach(item => {
248
          time.forEach(item => {
257
            item.remove()
249
            item.remove()
281
          loop: false, // 导致视频一结束就重新开始。
273
          loop: false, // 导致视频一结束就重新开始。
282
          preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
274
          preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
283
          language: 'zh-CN',
275
          language: 'zh-CN',
284
          aspectRatio: '16:10', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
276
          aspectRatio: '4:3', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
285
          // fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
277
          // fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
286
          // 是否流体自适应容器宽高
278
          // 是否流体自适应容器宽高
287
          fluid: true,
279
          fluid: true,
394
          data = data.slice(0, 4)
386
          data = data.slice(0, 4)
395
        }
387
        }
396
        data.forEach(e => {
388
        data.forEach(e => {
397
          if (e.employeeName == null || e.employeeName == '') {
389
          if (e.employeeName == null || e.employeeName == ''){
398
            e.employeeCode = '未识别成功'
390
            e.employeeCode = '未识别成功'
399
          }
391
          }
400
          e.simi = e.simi.split('.')[0] + '%'
392
          if (e.simi){
393
            e.simi = e.simi.split('.')[0] + '%'
394
          }else {
395
            e.simi = '0%'
396
          }
401
          e.newImg = e.idenPictureUrl
397
          e.newImg = e.idenPictureUrl
402
          var loadTimer
398
          var loadTimer
403
          var imgObject = new Image()
399
          var imgObject = new Image()
404
          imgObject.setAttribute('crossOrigin', 'anonymous')
400
          imgObject.setAttribute('crossOrigin', 'anonymous')
405
          imgObject.src = e.idenPictureUrl
401
          imgObject.src = e.idenPictureUrl
406
          imgObject.onLoad = onImgLoaded()
402
          imgObject.onload = onImgLoaded()
407
          function onImgLoaded () {
403
          function onImgLoaded () {
408
            if (loadTimer != null) clearTimeout(loadTimer)
404
            if (loadTimer != null) clearTimeout(loadTimer)
409
            if (!imgObject.complete) {
405
            if (!imgObject.complete) {
411
                onImgLoaded()
407
                onImgLoaded()
412
              }, 3)
408
              }, 3)
413
            } else {
409
            } else {
410
              e.box[0] = imgObject.width * e.box[0]
411
              e.box[1] = imgObject.height * e.box[1]
412
              e.box[2] = imgObject.width * e.box[2]
413
              e.box[3] = imgObject.height * e.box[3]
414
              e.newImg = getImagePortion(imgObject, e.box[2] - e.box[0], e.box[3] - e.box[1], e.box[0], e.box[1])
414
              e.newImg = getImagePortion(imgObject, e.box[2] - e.box[0], e.box[3] - e.box[1], e.box[0], e.box[1])
415
            }
415
            }
416
          }
416
          }
575
            itemStyle: {
575
            itemStyle: {
576
              normal: {
576
              normal: {
577
                color: new echarts.graphic.LinearGradient(
577
                color: new echarts.graphic.LinearGradient(
578
                  0, 0, 0, 1,
579
                  [
580
                    { offset: 0, color: '#00FEFF' },
581
                    { offset: 1, color: '#0C7EFC' }
582
                  ]
578
                    0, 0, 0, 1,
579
                    [
580
                      { offset: 0, color: '#00FEFF' },
581
                      { offset: 1, color: '#0C7EFC' }
582
                    ]
583
                ),
583
                ),
584
                label: {
584
                label: {
585
                  show: true, // 是否展示
585
                  show: true, // 是否展示
865
.vjs-tech {
865
.vjs-tech {
866
  pointer-events: none;
866
  pointer-events: none;
867
}
867
}
868
.checkedIndex {
868
.checkedIndex{
869
  border: 1px solid #009bf3;
869
  border: 1px solid #009bf3;
870
}
870
}
871
</style>
871
</style>

+ 1 - 1
security-protection-platform/src/modules/system/devicemana/components/modal/addDeviceModal.vue

92
      },
92
      },
93
      // 提交表单是否显示loading
93
      // 提交表单是否显示loading
94
      loadingSubmit: false,
94
      loadingSubmit: false,
95
      action: 'http://10.19.90.34:8018/sp/resourceTool/uploadResourceToolPicture',
95
      action: 'http://10.1.252.196:8018/sp/resourceTool/uploadResourceToolPicture',
96
      uploadList: () => []
96
      uploadList: () => []
97
    }
97
    }
98
  },
98
  },

+ 2 - 2
security-protection-platform/src/modules/usermana/components/modal/addUser.vue

40
            multiple
40
            multiple
41
            style="width:120px;height:160px;background-color:#FFFFFF;"
41
            style="width:120px;height:160px;background-color:#FFFFFF;"
42
            type="drag"
42
            type="drag"
43
            action="http://10.19.90.34:8018/sp/employeeManagement/uploadEmployeePicture"
43
            action="http://10.1.252.196:8018/sp/employeeManagement/uploadEmployeePicture"
44
            class="demo-upload-list"
44
            class="demo-upload-list"
45
            @success = "$_onUploadSuccess"
45
            @success = "$_onUploadSuccess"
46
          >
46
          >
61
            :before-upload="$_onUploadBeforeUpload"
61
            :before-upload="$_onUploadBeforeUpload"
62
            multiple
62
            multiple
63
            type="drag"
63
            type="drag"
64
            action="http://10.19.90.34:8018/sp/employeeManagement/uploadEmployeePicture"
64
            action="http://10.1.252.196:8018/sp/employeeManagement/uploadEmployeePicture"
65
            class="upload-edit"
65
            class="upload-edit"
66
            @success = "$_onUploadSuccess"
66
            @success = "$_onUploadSuccess"
67
          >
67
          >

+ 20 - 20
security-protection-platform/src/modules/videoSurveillance/components/ReplayDialog/index.vue

223
    /*
223
    /*
224
   * 获取真实视频地址
224
   * 获取真实视频地址
225
   */
225
   */
226
    // async getOriVideoUrl (fileId) {
227
    //   const res = await sysapi.getFileUrl(fileId)
228
    //   // fake
229
    //   return new Promise((resolve, reject) => {
230
    //     setTimeout(() => {
231
    //       const url = res.data.data.fileUrl
232
    //       resolve({
233
    //         url
234
    //       })
235
    //     }, 1000)
236
    //   })
237
    // },
226
    async getOriVideoUrl (fileId) {
227
      const res = await sysapi.getFileUrl(fileId)
228
      // fake
229
      return new Promise((resolve, reject) => {
230
        setTimeout(() => {
231
          const url = res.data.data.fileUrl
232
          resolve({
233
            url
234
          })
235
        }, 1000)
236
      })
237
    },
238
    getData () {
238
    getData () {
239
      this.$emit('get-list', { beginDay: this.beginDay, endDay: this.endDay })
239
      this.$emit('get-list', { beginDay: this.beginDay, endDay: this.endDay })
240
    },
240
    },
241
    resetData () {
241
    resetData () {
242
      this.beginDay = formatDateTime(new Date(+new Date() - 10 * 60 * 1000), 'yyyy-MM-dd hh:mm:ss')
242
      this.beginDay = formatDateTime(new Date(+new Date() - 10 * 60 * 1000), 'yyyy-MM-dd hh:mm:ss')
243
      this.endDay = formatDateTime(new Date(), 'yyyy-MM-dd hh:mm:ss')
243
      this.endDay = formatDateTime(new Date(), 'yyyy-MM-dd hh:mm:ss')
244
      // this.getData()
245
    }
244
      this.getData()
245
    },
246
    // 刷新组件
246
    // 刷新组件
247
    // reload () {
248
    //   this.isShow = false
249
    //   this.$nextTick(() => {
250
    //     this.isShow = true
251
    //   })
252
    // }
247
    reload () {
248
      this.isShow = false
249
      this.$nextTick(() => {
250
        this.isShow = true
251
      })
252
    }
253
  }
253
  }
254
}
254
}
255
</script>
255
</script>

+ 7 - 7
security-protection-platform/src/modules/videoSurveillance/distinguishRecord/index.vue

47
        <t-carousel dots="none" :speed="10000000000" arrow="always" style="width: 100%">
47
        <t-carousel dots="none" :speed="10000000000" arrow="always" style="width: 100%">
48
          <t-carousel-item v-for="(item1,index1) in dataImgList" :key="index1" style="width: 100%;padding-left: 10%">
48
          <t-carousel-item v-for="(item1,index1) in dataImgList" :key="index1" style="width: 100%;padding-left: 10%">
49
            <div v-for="(item, index) in item1" :key="index" :src="item.idenPictureUrl" class="image-carousel">
49
            <div v-for="(item, index) in item1" :key="index" :src="item.idenPictureUrl" class="image-carousel">
50
              <img :src="'http://10.19.90.34:19000/ai-image/'+item.idenPictureUrl" class="img-viewer-size" @click="getParticularsData(item.aiIdenLogId,index)">
50
              <img :src="'http://10.1.194.18:9000/ai-image/'+item.idenPictureUrl" class="img-viewer-size" @click="getParticularsData(item.aiIdenLogId,index)">
51
              <span :class="{'fileName' : index === fileNameIndex}" style="width: 132px;margin-right: 14px;text-align:center">{{ item.fileName }}</span>
51
              <span :class="{'fileName' : index === fileNameIndex}" style="width: 132px;margin-right: 14px;text-align:center">{{ item.fileName }}</span>
52
            </div>
52
            </div>
53
          </t-carousel-item>
53
          </t-carousel-item>
81
        aspectRatio: '13:10', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
81
        aspectRatio: '13:10', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
82
        // fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
82
        // fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
83
        // 是否流体自适应容器宽高
83
        // 是否流体自适应容器宽高
84
        fluid: false,
84
        fluid: true,
85
        // // 设置视频播放器的显示宽度(以像素为单位)
85
        // // 设置视频播放器的显示宽度(以像素为单位)
86
        // width: '500px',
86
        // width: '100px',
87
        // // 设置视频播放器的显示高度(以像素为单位)
87
        // // 设置视频播放器的显示高度(以像素为单位)
88
        height: 380,
88
        // height: '300px',
89
        sources: [{
89
        sources: [{
90
          type: 'video/mp4', // 这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目
90
          type: 'application/x-mpegURL', // 这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目
91
          src: '' // url地址
91
          src: '' // url地址
92
        }],
92
        }],
93
93
94
        notSupportedMessage: '暂无视频可播放,请稍后再试', // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
94
        notSupportedMessage: '此视频暂无法播放,请稍后再试', // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
95
        controlBar: {
95
        controlBar: {
96
          timeDivider: true,
96
          timeDivider: true,
97
          // durationDisplay: true,
97
          // durationDisplay: true,
174
        this.defineResult = res.data.data.alarmInfo.alarmMemo
174
        this.defineResult = res.data.data.alarmInfo.alarmMemo
175
        this.captureTIme = res.data.data.pictureInfo.fileDateTimeStr
175
        this.captureTIme = res.data.data.pictureInfo.fileDateTimeStr
176
        this.distinguishUrl = res.data.data.pictureInfo.fileUrl
176
        this.distinguishUrl = res.data.data.pictureInfo.fileUrl
177
        this.playerOptions.sources[0].src = res.data.data.videoInfo.videoFileUrl
177
        this.playerOptions.sources[0].src = res.data.data.videoInfo
178
      })
178
      })
179
    },
179
    },
180
    // 重置数据
180
    // 重置数据

+ 14 - 14
security-protection-platform/src/router.js

39
     * 单客户端判断。
39
     * 单客户端判断。
40
     * 参见src/frame.vue和src/store.js文件中的逻辑。
40
     * 参见src/frame.vue和src/store.js文件中的逻辑。
41
     */
41
     */
42
    let isLogged = router.app.$options.store.getters.getLogged || sessionStorage.getItem('isLogged')
43
    console.log(isLogged)
44
    if (to.meta.ignoreAuth === true) {
45
      if (isLogged === true && to.path === '/login') {
46
        router.replace({ name: 'dashboard' })
47
      } else {
42
    // let isLogged = router.app.$options.store.getters.getLogged || sessionStorage.getItem('isLogged')
43
    // console.log(isLogged)
44
    // if (to.meta.ignoreAuth === true) {
45
    //   if (isLogged === true && to.path === '/login') {
46
    //     router.replace({ name: 'dashboard' })
47
    //   } else {
48
    //     next()
49
    //   }
50
    // } else {
51
    //   if (isLogged === false) {
52
    //     router.replace({ name: 'login' })
53
    //   } else {
48
        next()
54
        next()
49
      }
50
    } else {
51
      if (isLogged === false) {
52
        router.replace({ name: 'login' })
53
      } else {
54
        next()
55
      }
56
    }
55
    //   }
56
    // }
57
  })
57
  })
58
58
59
  router.afterEach(() => {
59
  router.afterEach(() => {