From 8a0e6f282569868275cf90ee33b0bf5fc4b30b2b Mon Sep 17 00:00:00 2001
From: hanbaoshan <hanbaoshan@aiotlink.com>
Date: 星期二, 01 九月 2020 20:45:23 +0800
Subject: [PATCH] 国标配置条件修改,项目添加manifest,热力图更新,区域管理样式调整
---
src/pages/desktop/index/store/modules/desktop.js | 1
src/pages/gb28181/index/App.vue | 2
vue.config.js | 3
src/pages/heatCamera/index/App.vue | 263 ++++++++++++++++++++++++++++---------------
public/manifest.json | 15 ++
src/pages/desktop/index/App.vue | 6
src/pages/areaManage/index/App.vue | 14 +-
7 files changed, 197 insertions(+), 107 deletions(-)
diff --git a/public/manifest.json b/public/manifest.json
new file mode 100644
index 0000000..dd8873d
--- /dev/null
+++ b/public/manifest.json
@@ -0,0 +1,15 @@
+{
+ "name": "system-2.0",
+ "short_name": "system-2.0",
+ "icons": [
+ {
+ "src": "favicon.ico",
+ "sizes": "64x64 32x32 24x24",
+ "type": "image/x-icon"
+ }
+ ],
+ "start_url": "./index.html",
+ "display": "standalone",
+ "background_color": "#000000",
+ "theme_color": "#4DBA87"
+}
diff --git a/src/pages/areaManage/index/App.vue b/src/pages/areaManage/index/App.vue
index c7e1025..f4312db 100644
--- a/src/pages/areaManage/index/App.vue
+++ b/src/pages/areaManage/index/App.vue
@@ -33,7 +33,7 @@
</el-form-item>
</div>
<div class="checklist">
- <el-form-item>
+ <el-form-item style="margin-right:0">
<!-- <el-transfer v-model="checkedData" :props="{key:'model',label:'label'}" :titles="['鍏ㄩ儴鍖哄煙', '閫変腑鍖哄煙']" :button-texts="['宸︾Щ','鍙崇Щ']" filterable @change="handleChange" :data="areaData"></el-transfer> -->
<el-transfer
v-model="checkedData"
@@ -106,7 +106,6 @@
renderTable () {
getAllAreas().then(res => {
if (res.code == 200) {
- debugger
this.groups = res.data
}
})
@@ -137,7 +136,6 @@
let _this = this;
row.camPolygons.forEach(camPolygon => {
camPolygon.pgns.forEach(polygon => {
- debugger
let symbol = camPolygon.cameraId + '&' + polygon.polygonId
// let checkedItem = {};
// checkedItem.cameraId = camPolygon.cameraId;
@@ -152,6 +150,7 @@
createArea () {
this.isEdit = false;
this.dialogFormVisible = true;
+ this.areaForm = {};
this.areaForm.name = '';
this.areaForm.id = '';
this.areaForm.desc = '';
@@ -208,7 +207,6 @@
let tempArr = [];
let tempIdArr = [];
this.areaForm.camPolygons = [];
- debugger
this.checkedData.forEach(item => {
let tempCameraItem = { pgns: [] };
let cameraId = item.split('&')[0];
@@ -289,7 +287,6 @@
}
.el-form-item {
display: flex;
- margin-right: 40px;
}
.el-form-item label {
font-weight: bold;
@@ -324,10 +321,10 @@
border-color: #9eb4f0 !important;
}
/deep/.el-dialog {
- min-width: 764px;
+ min-width: 940px;
}
/deep/.el-textarea__inner {
- width: 566px;
+ width: 763px;
height: 60px;
}
/deep/.el-transfer-panel__item.el-checkbox .el-checkbox__label {
@@ -346,4 +343,7 @@
.el-checkbox__label {
font-size: 14px !important;
}
+/deep/.el-transfer-panel{
+ width:300px;
+}
</style>
\ No newline at end of file
diff --git a/src/pages/desktop/index/App.vue b/src/pages/desktop/index/App.vue
index 37a8aa5..a89ad1d 100644
--- a/src/pages/desktop/index/App.vue
+++ b/src/pages/desktop/index/App.vue
@@ -58,9 +58,9 @@
methods: {
addMessage: function (message, ding) {
this.$store.dispatch('desktop/addMessage', message);
- if (ding) {
- new Audio('sounds/ping.mp3').play();
- }
+ // if (ding) {
+ // new Audio('sounds/ping.mp3').play();
+ // }
this.$refs.notice_tip_model.showTip(message);
},
addWeather: function (weather) {
diff --git a/src/pages/desktop/index/store/modules/desktop.js b/src/pages/desktop/index/store/modules/desktop.js
index 98327d8..75911bc 100644
--- a/src/pages/desktop/index/store/modules/desktop.js
+++ b/src/pages/desktop/index/store/modules/desktop.js
@@ -116,7 +116,6 @@
state.framesOrder = order;
state.framesOffset = offset;
- debugger
state.frames.push(dframe);
return true;
diff --git a/src/pages/gb28181/index/App.vue b/src/pages/gb28181/index/App.vue
index 61845c4..2bf92c4 100644
--- a/src/pages/gb28181/index/App.vue
+++ b/src/pages/gb28181/index/App.vue
@@ -40,6 +40,7 @@
@change="changeProvince"
size="small"
placeholder="璇烽�夋嫨鐪佷唤"
+ :disabled="gb28181.idType === 0"
>
<el-option
v-for="item in locationCity.provinceOptions"
@@ -95,6 +96,7 @@
v-model="gb28181.PublicId"
placeholder="璇疯緭鍏�"
size="small"
+ :disabled="gb28181.idType === 1"
></el-input>
</el-form-item>
diff --git a/src/pages/heatCamera/index/App.vue b/src/pages/heatCamera/index/App.vue
index 3b2465c..7155282 100644
--- a/src/pages/heatCamera/index/App.vue
+++ b/src/pages/heatCamera/index/App.vue
@@ -2,134 +2,207 @@
<div class="heatCamera">
<div class="camera">
<nav class="header-nav">
-
- <div class="toolbar">
- <el-date-picker @change="timeChange" v-model="timeRange" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�"
- end-placeholder="缁撴潫鏃ユ湡" size="small"></el-date-picker>
- <el-button type="primary" size="small">鏌ヨ</el-button>
- </div>
+ <div class="toolbar">
+ <el-radio-group v-model="dimension">
+ <el-radio-button :label="1">鐑姏鍥�</el-radio-button>
+ <el-radio-button :label="2">杞ㄨ抗鍥�</el-radio-button>
+ </el-radio-group>
+ <el-date-picker
+ @change="timeChange"
+ v-model="timeRange"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ type="datetimerange"
+ range-separator="鑷�"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ ></el-date-picker>
+ <el-button type="primary" @click="postCameraData">鏌ヨ</el-button>
+ </div>
</nav>
-
+
<div class="img-area" ref="heatMap">
- <!-- <el-image src="/timg.jpg" fit="contain" ref="img"></el-image> -->
+ <span class="dot" v-for="(item,index) in dots" :style="{top:item.y+'px',left: item.x+'px'}" :key="'d'+index"></span>
<el-image :src="`${publicPath}images/login-net.png`" fit="contain" ref="img"></el-image>
</div>
</div>
</div>
</template>
<script>
+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;
+}
import Heatmap from 'heatmap.js';
-import {getHeatCameraData} from '@/api/heatCamera'
+import { getHeatCameraData } from '@/api/heatCamera'
export default {
- data(){
+ data () {
return {
publicPath: process.env.BASE_URL,
- timeRange: [new Date(2020, 8, 20, 8), new Date(2020, 9, 20, 8)],
+ dots: [],
+ dimension: 1,
+ timeRange: [new Date(2020, 7, 23, 8), new Date()],
params: {
- cameraIds: ["c6fd8f31-248f-49fc-93e0-dedac889197b","c41a2f34-bd2e-41af-9bc0-51e6dcd03523"],
- startTime: '',
- endTime: '',
- }
+ cameraIds: ["ba8c1624-55a7-4f20-9c54-01e56448aeb5"],
+ startDate: new Date(2020, 7, 23, 8).Format("yyyy-MM-dd HH:mm:ss"),
+ endDate: new Date().Format("yyyy-MM-dd HH:mm:ss"),
+ //thresholdTime: 100,
+ },
+ heatmapInstance: null,
}
},
- mounted(){
+ mounted () {
console.log(Heatmap.create)
- setTimeout(()=>{
- this.mockAsync()
- },2000);
+
},
- methods:{
- timeChange(val){
- console.log(val);
- this.params.startTime = val[0];
- this.params.endTime = val[1];
- this.renderHeatMap(this.params)
+ methods: {
+ timeChange(val) {
+ this.params.startDate = val[0];
+ this.params.endDate = val[1];
},
- mockAsync(){
- var config = {
+ setHeatmapData(sources) {
+ if (sources === null || sources.length < 1) {
+ return
+ }
+ var heatmapConfig = {
container: document.querySelector('.img-area'),
- radius: 10,
- maxOpacity: .75,
+ radius: 20,
+ maxOpacity: .55,
minOpacity: 0,
- blur: .75,
+ blur: .55,
gradient: {
- '.5': 'blue',
- '.8': 'red',
- '0.95': 'white',
- '0.6': 'yellow',
- '0.5': 'green'
+ '.8': 'yellow',
+ '0.95': 'rgba(251, 40, 40, 0.3)',
+ '0.6': 'rgba(42, 251, 199, 0.3)',
+ '0.5': 'rgba(2, 119, 251, 0.3)'
}
-
};
- var data = {
- max: 700,
+ var points = {
+ max: 300,
min: 0,
data: []
}
- for (var i = 10; i < 700; i++) {
- var dataPoint = {
- x: Math.floor(Math.random() * i),
- y: Math.floor(Math.random() * i),
- value: Math.floor(Math.random() * i)
- };
- var dataCenter = {
- x: i,
- y: i,
- value: 30 + i
- }
- data.data.push(dataPoint, dataCenter)
+ if (this.heatmapInstance === null) {
+ this.heatmapInstance = Heatmap.create(heatmapConfig);
+ } else {
+ this.heatmapInstance.setData(points);
}
- //var heatmapInstance = h337.create(config);
- var heatmapInstance = Heatmap.create(config);
- heatmapInstance.setData(data);
+ sources.forEach(ele => {
+ points.data.push(this.formatPoint(ele))
+ if(this.dimension == 2){
+ this.dots.push(this.formatPoint(ele))
+ }
+ });
+
+ //鐑姏鍥�
+ if(this.dimension == 1){
+ this.heatmapInstance.setData(points);
+ }
},
- renderHeatMap(params){
- getHeatCameraData(params).then(res=>{
- debugger
- })
+ postCameraData() {
+ this.dots = [];
+ var xhr = new XMLHttpRequest();
+ xhr.open('post', '/data/api-v/es/getPersonData');
+ xhr.setRequestHeader('Content-Type', 'application/json');
+ xhr.setRequestHeader('Authorization', 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQ3NDUwMjU5MjMsInVzZXIiOiJ7XCJpZFwiOlwiZTZjY2QzNmQtNGYxNi00NmZjLTg4ZDUtMDczNjU4NjZkMjA1XCIsXCJwZXJtaXNzaW9uc1wiOltcInByb2R1Y3RNYW5nZTpwdWJsaXNoXCIsXCJjb2RlTWFuZ2U6dmlld1wiLFwiZGV2aWNlTWFuYWdlOmFkZFwiLFwiYWRtaW5NYW5hZ2VcIixcIm9yZGVyTWFuZ2VcIixcImRldmljZU1hbmFnZTp2aWV3XCIsXCJwcm9kdWN0TWFuZ2U6YWRkXCIsXCJhZG1pbk1hbmFnZTp2aWV3XCIsXCJjb2RlTWFuZ2U6YWRkXCIsXCJwcm9kdWN0TWFuZ2U6b2ZmU2FsZVwiLFwib3JkZXJNYW5nZTpjYW5jZWxcIixcInByb2R1Y3RDZW50ZXI6ZG93bmxvYWRcIixcInByb2R1Y3RDZW50ZXI6YnV5XCIsXCJwcm9kdWN0TWFuZ2U6dmlld1wiLFwiYXBpXCIsXCJob21lXCIsXCJvcmRlck1hbmdlOnBheVwiLFwiYWRtaW5NYW5hZ2U6YWRkXCIsXCJvcmRlck1hbmdlOmRvd25sb2FkXCIsXCJwcm9kdWN0Q2VudGVyXCIsXCJkZXZpY2VNYW5hZ2U6dW5iaW5kXCIsXCJvcmRlck1hbmdlOnZpZXdcIixcImFkbWluTWFuYWdlOmVkaXRcIixcImRldmljZU1hbmFnZVwiLFwidmlwTWFuYWdlOmFkZFwiLFwidmlwTWFuYWdlOnZpZXdcIixcInByb2R1Y3RDZW50ZXI6dmlld1wiLFwidmlwTWFuYWdlOmVkaXRcIixcInZpcE1hbmFnZVwiLFwicHJvZHVjdE1hbmdlOmVkaXRcIixcImNvZGVNYW5nZVwiLFwicHJvZHVjdE1hbmdlXCJdLFwidXNlcm5hbWVcIjpcImJhc2ljXCJ9In0.vwjAFkWuEyadRLvIOGK8LFE3MjpY3SQ7j6AlTXnQDG8');
+ xhr.send(JSON.stringify(this.params));
+ xhr.onload = function () {
+ if (xhr.readyState == 4) {
+ var response = JSON.parse(xhr.responseText)
+ if (response && response.success) {
+ console.log(response.data.result)
+ debugger
+ this.setHeatmapData(response.data.result)
+ }
+ }
+ this.mockAsync
+ }.bind(this)
},
+ formatPoint(data) {
+ var converters = {
+ "ba8c1624-55a7-4f20-9c54-01e56448aeb5": {
+ "scale": 1,
+ "offsetX": 0,
+ "offsetY": 0
+ }
+ }
+
+ var cv = converters[data.cameraId]
+
+ var topLeft = data.personRect.topLeft
+ var bottomRight = data.personRect.bottomRight
+
+ // 涓績鐐�
+ var dataPoint = {
+ x: ((topLeft.x + bottomRight.x) * cv.scale + cv.offsetX * 2) / 2,
+ y: ((topLeft.y + bottomRight.y) * cv.scale + cv.offsetX * 2) / 2,
+ // value: data.stayTime
+ value: 0
+ };
+
+ return dataPoint
+ }
}
}
</script>
<style lang="scss">
- .heatCamera{
- width: 100%;
- height: 100%;
- background: #e9ebf2;
- .header-nav{
- height: 60px;
- min-width: 1200px;
- background-image: linear-gradient(-180deg, #ffffff 13%, #e9ebf2 100%);
- }
- .toolbar{
- width: 500px;
- height: 60px;
- //background: rgba(0,0,0,.3);
- position: absolute;
- right: 60px;
- top: 20px;
- text-align: center;
- line-height: 60px;
- z-index: 10;
- .el-date-editor{
- vertical-align: middle;
- border-radius: 4px 0 0 4px;
- }
- .el-button{
- vertical-align: middle;
- margin-left: 4px;
- }
- }
- .img-area{
- margin: 30px auto;
- width: 1200px;
- //position: relative;
- font-size: 0;
- }
- img{
- display: block;
- }
-
+.heatCamera {
+ width: 100%;
+ height: 100%;
+ background: #e9ebf2;
+ .header-nav {
+ height: 60px;
+ min-width: 1200px;
+ background-image: linear-gradient(-180deg, #ffffff 13%, #e9ebf2 100%);
}
+ .toolbar {
+ width: 680px;
+ height: 60px;
+ //background: rgba(0,0,0,.3);
+ position: absolute;
+ right: 60px;
+ top: 20px;
+ text-align: center;
+ line-height: 60px;
+ z-index: 10;
+ .el-date-editor {
+ vertical-align: middle;
+ border-radius: 4px 0 0 4px;
+ margin: 0 8px;
+ }
+ .el-button {
+ vertical-align: middle;
+ margin-left: 4px;
+ }
+ }
+ .img-area {
+ margin: 30px auto;
+ width: 1280px;
+ position: relative;
+ font-size: 0;
+ .dot{
+ width: 10px;
+ height: 10px;
+ background-image: radial-gradient(circle,#04f3ff,#adf7f7,#31e4d3);
+ opacity: .5;
+ border-radius: 50%;
+ position: absolute;
+ z-index: 1000;
+ }
+ }
+ img {
+ display: block;
+ }
+}
</style>
diff --git a/vue.config.js b/vue.config.js
index a763d16..8450c82 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -49,7 +49,8 @@
changeOrigin: true,
},
"/api-v": {
- target: 'http://192.168.20.145:8000',
+ //target: 'http://192.168.20.145:8000',
+ target: 'http://192.168.5.22:30102',
//target: 'http://192.168.20.10:8000',
changeOrigin: true
},
--
Gitblit v1.8.0