Compare commits

...

3 Commits

Author SHA1 Message Date
独树的风 1b2a8b4530 feat:重新提交确保最新代码
10 months ago
独树的风 0c6c9b0c01 update: 更新提交
10 months ago
独树的风 bf1be358e4 update: 更新
1 year ago

65
package-lock.json generated

@ -15,6 +15,8 @@
"echarts": "^5.4.3",
"element-ui": "^2.15.14",
"js-cookie": "^3.0.5",
"json-loader": "^0.5.7",
"postcss": "^8.4.38",
"vue": "^2.6.14",
"vue-router": "^3.5.1",
"vuex": "^3.6.2"
@ -3310,8 +3312,6 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"dev": true,
"optional": true,
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@ -3323,9 +3323,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true,
"optional": true,
"peer": true
"dev": true
},
"node_modules/ajv-keywords": {
"version": "3.5.2",
@ -7423,6 +7421,11 @@
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true
},
"node_modules/json-loader": {
"version": "0.5.7",
"resolved": "https://registry.npmmirror.com/json-loader/-/json-loader-0.5.7.tgz",
"integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w=="
},
"node_modules/json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@ -8866,13 +8869,13 @@
}
},
"node_modules/postcss": {
"version": "8.4.31",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz",
"integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
"version": "8.4.38",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.38.tgz",
"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
"dependencies": {
"nanoid": "^3.3.6",
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
"source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
@ -10315,9 +10318,9 @@
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"engines": {
"node": ">=0.10.0"
}
@ -13755,6 +13758,7 @@
"integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==",
"dev": true,
"requires": {
"@babel/core": "^7.12.16",
"@babel/helper-compilation-targets": "^7.12.16",
"@babel/helper-module-imports": "^7.12.13",
"@babel/plugin-proposal-class-properties": "^7.12.13",
@ -13767,6 +13771,7 @@
"@vue/babel-plugin-jsx": "^1.0.3",
"@vue/babel-preset-jsx": "^1.1.2",
"babel-plugin-dynamic-import-node": "^2.3.3",
"core-js": "^3.8.3",
"core-js-compat": "^3.8.3",
"semver": "^7.3.4"
},
@ -14441,14 +14446,15 @@
"resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dev": true,
"requires": {},
"requires": {
"ajv": "^8.0.0"
},
"dependencies": {
"ajv": {
"version": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz",
"version": "8.12.0",
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"dev": true,
"optional": true,
"peer": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@ -14460,9 +14466,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true,
"optional": true,
"peer": true
"dev": true
}
}
},
@ -17782,6 +17786,11 @@
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true
},
"json-loader": {
"version": "0.5.7",
"resolved": "https://registry.npmmirror.com/json-loader/-/json-loader-0.5.7.tgz",
"integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w=="
},
"json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@ -18972,13 +18981,13 @@
}
},
"postcss": {
"version": "8.4.31",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz",
"integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
"version": "8.4.38",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.38.tgz",
"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
"requires": {
"nanoid": "^3.3.6",
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
"source-map-js": "^1.2.0"
}
},
"postcss-calc": {
@ -20055,9 +20064,9 @@
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg=="
},
"source-map-support": {
"version": "0.5.21",

@ -15,6 +15,8 @@
"echarts": "^5.4.3",
"element-ui": "^2.15.14",
"js-cookie": "^3.0.5",
"json-loader": "^0.5.7",
"postcss": "^8.4.38",
"vue": "^2.6.14",
"vue-router": "^3.5.1",
"vuex": "^3.6.2"

@ -9,7 +9,7 @@
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
<script type="text/javascript" src="<%= BASE_URL %>js/liveplayer-lib.min.js"></script>
<!-- <script type="text/javascript" src="<%= BASE_URL %>js/liveplayer-lib.min.js"></script> -->
<!-- 引入MineMap API插件 -->
<link rel="stylesheet" href="http://50.144.11.244:21009/support/static/api/demo/js-api/zh/css/demo.css">
<link rel="stylesheet" href="http://50.144.11.244:21009/minemapapi/v2.1.0/minemap.css">

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -8,8 +8,8 @@
<script>
export default {
name: "App",
};
name: 'App'
}
</script>
<style lang="scss">

@ -9,11 +9,38 @@ export function get_person_num(params) {
})
}
//
export function getData(params){
// * 资源概况
export function getResourceAPI(data) {
return request({
url:'/base/metaHandleAlarmInfo',
method:'get',
params
url: '/base/bigscreen/overviewResources',
method: 'post',
data
})
}
// * 重点人员
export const keyPersonnelAPI = (data) => {
return request({
url: '/base/bigscreen/keyPersonnel',
method: 'post',
data
})
}
// * 警力分布
export const PoliceForceDistributionAPI = (data) => {
return request({
url: '/base/bigscreen/policeForceDistribution',
method: 'post',
data
})
}
// * 涉海要素
export const seaRelatedElementsAPI = (data) => {
return request({
url: '/base/bigscreen/seaRelatedElements',
method: 'post',
data
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1001 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 KiB

@ -43,13 +43,13 @@ const routes = [
}
]
const router = new VueRouter({
mode: 'hash',
routes
mode: 'hash',
routes
})
// 防止重复点击路由报错
const VueRouterPush = VueRouter.prototype.push
VueRouter.prototype.push = function push (to) {
VueRouter.prototype.push = function push(to) {
return VueRouterPush.call(this, to).catch(err => err)
}

@ -16,9 +16,8 @@ export const dateFormat = (date) => {
}
// * 创建时间集合
let timeArr = {}
let timeText = `${check(year)}${check(month)}${check(day)}${check(
hours
)}:${check(min)}:${check(seconds)}`
let timeText = `${check(year)}.${check(month)}.${check(day)} `
let timeTime = `${check(hours)}:${check(min)}:${check(seconds)}`
let nowDate = date.getDay()
let weeks = new Array(
'星期日',
@ -86,6 +85,7 @@ export const dateFormat = (date) => {
timePeriod.setStrategy(getStrategy(hours))
const state = timePeriod.getState()
timeArr.timeText = timeText
timeArr.timeTime = timeTime
timeArr.week = week
timeArr.state = state
return timeArr

@ -9,6 +9,7 @@
{{ timeArr.week }}
<el-avatar class="avatar" size="large"></el-avatar>
<span class="user"> {{ userName }} </span>
<span class="user"> {{ userName }} </span>
</span>
</header>
<div class="layout-main">

@ -0,0 +1,51 @@
<template>
<div class="build_body">
<!-- 头部 -->
<div class="build_title">
<div class="header_icon"></div>
<div class="title_text">楼栋信息</div>
</div>
<!-- 模块内容 -->
<div class="build_box">
<div class="build_box_left"></div>
</div>
</div>
</template>
<script>
export default {}
</script>
<style lang="scss">
.build_body {
width: 20vw;
height: 15vh;
background-color: #fff;
.build_title {
width: 20vw;
height: 3.5vh;
display: flex;
.header_icon {
width: 1vw;
height: 2vh;
background-color: pink;
}
.title_text {
width: 20vw;
height: 3.5vh;
color: antiquewhite;
margin-left: 2vw;
font-size: 16px;
font-weight: 700;
line-height: 3.5vh;
text-shadow: 0px 0px 10px #0b4672;
letter-spacing: 2px;
}
}
.build_box {
width: 20vw;
height: 11.5vh;
background-color: orange;
}
}
</style>

@ -0,0 +1,553 @@
<template>
<div class="add" v-if="show">
<!-- 户室信息 -->
<div class="X2" @click="deleteinfo"></div>
<div class="build_title">
<div class="header_icon"></div>
<div class="title_text">户室信息</div>
</div>
<!-- 室内图片 -->
<div class="build_picture">
<div class="picture_left"></div>
<div class="picture_right">
<div class="build_box_for">
<div class="left">
<div class="build_box_left">地址</div>
<div class="build_box_left">所在网格</div>
<div class="build_box_left">房屋类型</div>
<div class="build_box_left">是否出租</div>
<div class="build_box_left">所在警务区</div>
</div>
<div class="right">
<div
class="build_box_right"
:style="{ color: back_change() }"
:title="roll_list.homeInfo.address"
>
{{ roll_list.homeInfo.address }}
</div>
<div class="build_box_right" :style="{ color: back_change() }">
{{ houseValue.policeStationCode || '320924760101' }}
</div>
<div class="build_box_right" :style="{ color: back_change('1') }">
{{ roll_list.homeInfo.type }}
</div>
<div class="build_box_right" :style="{ color: back_change('2') }">
{{ roll_list.homeInfo.isRent }}
</div>
<div class="build_box_right" :style="{ color: back_change() }">
{{ houseValue.policeDistrictCode || '320924760101' }}
</div>
</div>
</div>
</div>
</div>
<!-- 房主信息 -->
<div class="build_title">
<div class="header_icon"></div>
<div class="title_text">房主信息</div>
</div>
<!-- 照片信息 -->
<div class="housepeople_info">
<img
v-if="roll_list.actualUserInfo?.userPic"
class="housepeople_info_left"
:src="baseUrl + roll_list.actualUserInfo.userPic"
/>
<img v-else class="housepeople_info_left" :src="img" />
<div class="housepeople_info_right">
<div class="info_right_for">
<div class="for_left">姓名</div>
<div class="for_right">
{{ roll_list.actualUserInfo?.userName || '' }}
</div>
</div>
<div class="info_right_for">
<div class="for_left">联系电话</div>
<div class="for_right">
{{ roll_list.actualUserInfo?.phone || '' }}
</div>
</div>
<div class="info_right_for">
<div class="for_left">证件号码</div>
<div
class="for_right"
@click="jumpRecord(roll_list.actualUserInfo?.idCard)"
>
{{ roll_list.actualUserInfo?.idCard || '' }}
</div>
</div>
<div class="info_right_for">
<div class="for_left">户籍地址</div>
<div class="for_right">
{{ roll_list.actualUserInfo?.houseHoldAddress || '' }}
</div>
</div>
</div>
</div>
<!-- 实有人口 重点人员 户在人不在 -->
<div class="people_bottom">
<div class="people1">
<div class="dit"></div>
<div class="people1_text">实有人口</div>
<div class="people1_number">
{{ roll_list.userInfos === null ? 0 : roll_list.userInfos.length }}
</div>
</div>
<div class="people1">
<div class="dit"></div>
<div class="people1_text">重点人员</div>
<div class="people1_number">
{{
roll_list.impUserInfos === null ? 0 : roll_list.impUserInfos.length
}}
</div>
</div>
<div class="people1">
<div class="dit"></div>
<div class="people1_text">户在人不在</div>
<div class="people1_number">
{{
roll_list.householdInUserInfos === null
? 0
: roll_list.householdInUserInfos.length
}}
</div>
</div>
</div>
<!-- 滚动 -->
<div class="roll_body" v-if="roll_list.userInfos !== null">
<ul class="marquee-list" :class="{ 'animate-up': animateUp }">
<li
v-for="item in roll_list.userInfos"
:key="item.id"
@mouseenter="stop()"
@mouseleave="start()"
>
<div class="roll_item_left">
<div class="roll_item_pic">
<img
class="peopleImg"
:src="item.userPic ? `${baseUrl + item.userPic}` : img"
alt=""
/>
</div>
</div>
<div class="roll_item_right">
<div class="person_type one_type" v-if="item.actualUserTypeCn">
{{ item.actualUserTypeCn }}
</div>
<!-- 信息展示 -->
<div class="right_text">
<div class="right_text_item">人员姓名:</div>
<div class="right_text_item">联系电话:</div>
<div class="right_text_item">证件号码:</div>
<div class="right_text_item">户籍地址:</div>
</div>
<div class="right_value">
<div class="right_value_item">{{ item.userName }}</div>
<div class="right_value_item">{{ item.phone }}</div>
<div class="right_value_item" @click="jumpRecord(item.idCard)">
{{ item.idCard }}
</div>
<div class="right_value_item">
{{ item.houseHoldAddress }}
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="roll_body" v-else>
<ul class="marquee-list">
<li>
<div class="roll_item_left">
<div class="roll_item_pic">
<img class="peopleImg" :src="img" />
</div>
</div>
<div class="roll_item_right">
<div class="right_text">
<div class="right_text_item">人员姓名:</div>
<div class="right_text_item">联系电话:</div>
<div class="right_text_item">证件号码:</div>
<div class="right_text_item">户籍地址:</div>
</div>
<div class="right_value">
<div class="right_value_item"></div>
<div class="right_value_item"></div>
<div class="right_value_item"></div>
<div class="right_value_item"></div>
</div>
</div>
</li>
</ul>
</div>
</div>
</template>
<script>
import { jumpSyetem } from '@/utils/jumpSystem'
export default {
name: 'FloorInform',
props: {
houseValue: {
type: Object
}
},
data() {
return {
show: false,
animateUp: false,
baseUrl: 'http://50.146.63.224:8118',
roll_list: {},
img: require('@/assets/picture/icon_householder.png'),
timer: null,
unit: null
}
},
created() {},
mounted() {},
methods: {
open(val, roomInfo) {
console.log(val, roomInfo, '户室组件接收的数据')
this.unit = val
this.roll_list = roomInfo
this.show = true
if (roomInfo.userInfos && roomInfo.userInfos.length > 2) {
this.clearTimer()
this.scrollAnimate()
}
},
back_change(type) {
switch (type) {
case '1':
return `#37FDC7`
case '2':
return `#00F5FF`
}
},
scrollAnimate() {
console.log(
this.roll_list.userInfos !== null && this.roll_list.userInfos.length > 2
)
if (
this.roll_list.userInfos !== null &&
this.roll_list.userInfos.length > 2
) {
this.timer = setInterval(() => {
this.animateUp = true
setTimeout(() => {
this.roll_list.userInfos.push(this.roll_list.userInfos[0])
this.roll_list.userInfos.shift()
this.animateUp = false
}, 500)
}, 4000)
} else {
this.timer = null
}
},
clearTimer() {
if (this.timer) {
clearInterval(this.timer)
this.timer = null
}
},
deleteinfo() {
this.show = false
clearInterval(this.timer)
},
stop() {
clearInterval(this.timer)
},
start() {
if (this.roll_list.userInfos && this.roll_list.userInfos.length > 2) {
this.scrollAnimate()
}
},
jumpRecord(card) {
jumpSyetem(card)
}
},
beforeDestroy() {
this.clearTimer()
}
}
</script>
<style lang="scss" scoped>
.add {
position: absolute;
top: 0vh;
left: 20vw;
width: 20vw;
height: 72vh;
background: $popupBack url('@/assets/house-hza/bg7.png') no-repeat;
background-size: 100% 100%;
padding-left: 1vw;
.X2 {
width: 0.8vw;
height: 1.8vh;
position: absolute;
top: 0.5vh;
right: 0.5vw;
background-image: url('@/assets/house-hza/bg9.png');
background-size: 100% 100%;
&:hover {
background-color: #07e2d0;
}
}
.build_title {
width: 18vw;
height: 3.5vh;
display: flex;
.header_icon {
width: 1vw;
height: 2vh;
margin-top: 1.7vh;
background-image: url('@/assets/house-hza/bg17.png');
background-size: 100% 100%;
}
.title_text {
width: 20vw;
height: 3.5vh;
color: antiquewhite;
margin-left: 1vw;
font-size: 16px;
font-weight: 700;
line-height: 3.5vh;
text-shadow: 0px 0px 10px #0b4672;
letter-spacing: 2px;
margin-top: 1vh;
}
}
.build_picture {
width: 18vw;
height: 18vh;
margin-top: 1vh;
display: flex;
margin-bottom: 1vh;
.picture_left {
width: 6vw;
height: 18vh;
background: url('@/assets/icon_house_slices/icon_house@2x.png') no-repeat;
background-size: 100% 100%;
text-align: center;
}
.picture_right {
width: 11.5vw;
height: 18vh;
margin-left: 0.5vw;
.build_box_for {
display: flex;
width: 11vw;
.left {
width: 4vw;
height: 18vh;
}
.build_box_left {
width: 4vw;
height: 3.2vh;
background-color: #04548a;
padding-left: 0.5vw;
color: antiquewhite;
padding-top: 0.5vh;
font-size: 12px;
}
.build_box_right {
width: 7.5vw;
height: 3.2vh;
font-size: 0.8rem;
background-image: url('@/assets/house-hza/bg10.png');
background-size: 100% 100%;
padding-top: 0.5vh;
padding-left: 0.5vw;
color: antiquewhite;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
}
}
}
}
.housepeople_info {
width: 18vw;
height: 13vh;
background-color: #05385d;
margin-top: 1vh;
padding-top: 1vh;
padding-left: 1vh;
display: flex;
.housepeople_info_left {
width: 4vw;
height: 11vh;
background-repeat: no-repeat;
background-size: 100% 100%;
object-fit: cover;
}
.housepeople_info_right {
width: 13vw;
height: 11vh;
padding-left: 0.5vw;
}
.info_right_for {
height: 2vh;
width: 12.5vw;
display: flex;
margin-bottom: 1vh;
.for_left {
width: 3.5vw;
height: 2vh;
color: #ecf4f9;
}
.for_right {
height: 2vh;
width: 8vw;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: #fff;
}
}
}
.people_bottom {
width: 18vw;
height: 4vh;
margin-left: 0;
display: flex;
justify-content: space-between;
margin-top: 1vh;
.people1 {
width: 5.5vw;
height: 4vh;
background-image: url('@/assets/house-hza/bg-6.png');
background-size: 100% 100%;
text-align: center;
display: flex;
.people1_text {
font-size: 0.6vw;
margin-top: 1vh;
margin-left: 0.2vw;
color: #fff;
}
.people1_number {
margin-left: 0.8vw;
margin-top: 0.5vh;
font-size: 1.3rem;
color: #fff;
}
.dit {
width: 0.3vw;
height: 0.6vh;
border-radius: 50%;
background-color: #00f5ff;
margin-top: 0.8vw;
margin-left: 0.5vw;
}
}
}
.roll_body {
width: 18vw;
height: 24vh;
overflow: hidden;
margin-top: 1vh;
.marquee-list {
padding: 0;
width: 18vw;
height: 24vh;
li {
width: 100%;
background: url('@/assets/house-hza/bg-6.png') no-repeat;
background-size: 100% 100%;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
list-style: none;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 0.5vh;
.roll_item_left {
width: 5vw;
height: 11vh;
margin-left: 0.5vw;
.roll_item_pic {
width: 4vw;
height: 9vh;
margin-top: 1vh;
.peopleImg {
width: 4vw;
height: 9vh;
}
}
}
.roll_item_right {
width: 14vw;
height: 9vh;
position: relative;
display: flex;
.person_type {
position: absolute;
width: 3.5vw;
height: 2vh;
top: 0px;
right: 0px;
color: #061122;
text-align: center;
line-height: 2vh;
font-size: 0.6vw;
}
.one_type {
background: #ffc426;
}
.two_type {
background: #00f5ff;
}
.three_type {
background: #a357ff;
}
.right_text {
width: 5vw;
height: 9vh;
.right_text_item {
width: 5vw;
height: 2.6vh;
color: #ecf4f9;
font-size: 10px;
}
}
.right_value {
width: 8vw;
height: 10vh;
.right_value_item {
width: 8vw;
height: 2.6vh;
color: #edf1f7;
font-size: 12px;
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
&:nth-child(3) {
color: #00f5ff;
}
}
}
}
}
}
.animate-up {
transition: all 0.8s ease-in-out;
transform: translateY(-20vh);
}
}
}
</style>

@ -5,637 +5,7 @@
<div class="live_card_header">重点人员信息</div>
<div class="card_close" @click="cardClose"></div>
<div class="live_card_body">
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->
<div class="image"></div>
<!-- 查看轨迹 -->
<div class="card_picture_look">
<span>查看轨迹</span>
</div>
</div>
<!-- 图片右边的个人介绍 -->
<div class="card_picture_right">
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p class="text">张三asdasdaasdadasdasdsda</p>
</div>
<div class="info">
<div class="info_icon"></div>
<p>张三</p>
</div>
<!-- 涉毒人员 -->
<div class="card_picture_right_cate">
<span>涉毒人员</span>
</div>
</div>
<!-- 户籍 -->
<div class="card_huji"><span>户籍</span></div>
<!-- 现住 -->
<div class="card_xianzhu"><span>现住</span></div>
</div>
<!-- -->
<div class="box">
<div class="box" v-for="item in 15" :key="item">
<!-- 图片 -->
<div class="card_picture">
<!-- 照片 -->

@ -72,7 +72,10 @@
<ul class="marquee-list" :class="{ 'animate-up': animateUp }">
<li v-for="(item, index) in roll_list" :key="index">
<div class="roll_item_left">
<div class="roll_item_pic"></div>
<div
class="roll_item_pic"
:style="{ backgroundImage: `url(${item.pic})` }"
></div>
<div class="roll_item_btn">查看详情</div>
</div>
<div class="roll_item_right">
@ -122,10 +125,8 @@
<script>
import * as echarts from 'echarts'
import EleResize from '@/utils/esresize'
// import PersonScroll from './keypersonScroll.vue'
export default {
name: 'KeyPerson',
// components: { PersonScroll },
data() {
return {
title_text: '重点人员',
@ -138,7 +139,8 @@ export default {
phone_num: '13455674532',
id_card: '321287197606038965',
old_address: '射阳县解放路74号',
new_address: '江苏省射阳县海河镇革新村二组113号'
new_address: '江苏省射阳县海河镇革新村二组112号',
pic: require('@/assets/people-picture/people-cacth/people-1.jpg')
},
{
text: '1243',
@ -148,7 +150,8 @@ export default {
phone_num: '13455674532',
id_card: '321287197606038965',
old_address: '射阳县解放路74号',
new_address: '江苏省射阳县海河镇革新村二组113号'
new_address: '江苏省射阳县合德镇解放路192号',
pic: require('@/assets/people-picture/people-cacth/people-2.jpg')
},
{
text: '12323',
@ -158,7 +161,8 @@ export default {
phone_num: '13455674532',
id_card: '321287197606038965',
old_address: '射阳县解放路74号',
new_address: '江苏省射阳县海河镇革新村二组113号'
new_address: '江苏省射阳县大兴镇合顺三组',
pic: require('@/assets/people-picture/people-cacth/people-3.jpg')
},
{
text: '1243',
@ -168,7 +172,8 @@ export default {
phone_num: '13455674532',
id_card: '321287197606038965',
old_address: '射阳县解放路74号',
new_address: '江苏省射阳县海河镇革新村二组113号'
new_address: '江苏省射阳县海通镇射阳渔业大队',
pic: require('@/assets/people-picture/people-cacth/people-1.jpg')
},
{
text: '1223',
@ -178,7 +183,8 @@ export default {
phone_num: '13455674532',
id_card: '321287197606038965',
old_address: '射阳县解放路74号',
new_address: '江苏省射阳县海河镇革新村二组113号'
new_address: '江苏省射阳县合德镇解放路192号',
pic: require('@/assets/people-picture/people-cacth/people-2.jpg')
},
{
text: '1223',
@ -188,7 +194,8 @@ export default {
phone_num: '13455674532',
id_card: '321287197606038965',
old_address: '射阳县解放路74号',
new_address: '江苏省射阳县海河镇革新村二组113号'
new_address: '江苏省射阳县海河镇革新村二组110号',
pic: require('@/assets/people-picture/people-cacth/people-3.jpg')
},
{
text: '1243',
@ -198,7 +205,8 @@ export default {
phone_num: '13455674532',
id_card: '321287197606038965',
old_address: '射阳县解放路74号',
new_address: '江苏省射阳县海河镇革新村二组113号'
new_address: '江苏省射阳县大兴镇合顺三组',
pic: require('@/assets/people-picture/people-cacth/people-1.jpg')
},
{
text: '1223',
@ -208,7 +216,8 @@ export default {
phone_num: '13455674532',
id_card: '321287197606038965',
old_address: '射阳县解放路74号',
new_address: '江苏省射阳县海河镇革新村二组113号'
new_address: '江苏省射阳县海河镇革新村二组120号',
pic: require('@/assets/people-picture/people-cacth/people-2.jpg')
},
{
text: '1223',
@ -218,7 +227,8 @@ export default {
phone_num: '13455674532',
id_card: '321287197606038965',
old_address: '射阳县解放路74号',
new_address: '江苏省射阳县海河镇革新村二组113号'
new_address: '江苏省射阳县海河镇革新村二组113号',
pic: require('@/assets/people-picture/people-cacth/people-3.jpg')
}
],
animateUp: false,
@ -289,7 +299,7 @@ export default {
this.roll_list.push(this.roll_list[0])
this.roll_list.shift()
this.animateUp = false
}, 500)
}, 2000)
}
}
}
@ -453,7 +463,9 @@ export default {
.roll_item_pic {
width: 5vw;
height: 10vh;
background: #0b4672;
// background: #0b4672;
background-repeat: no-repeat;
background-size: 100% auto;
}
.roll_item_btn {
width: 5vw;

@ -1,183 +0,0 @@
<template>
<div class="key_person">
<el-carousel
direction="vertical"
:autoplay="true"
:interval="4000"
indicator-position="none"
class="key_person_group"
>
<el-carousel-item
class="key_person_item"
v-for="(item, index) in groupItems"
:key="index"
>
<div class="key_person_box" v-for="(group, index) in item" :key="index">
<div class="key_person_box_left">
<div class="key_person_box_left_picture"></div>
<div class="key_person_box_left_text">人员追踪</div>
</div>
<div class="key_person_box_right">
<div class="key_person_box_right_label">
<div class="label_item">人员姓名 :</div>
<div class="label_item">证件号码 :</div>
<div class="label_item">抓拍时间 :</div>
<div class="label_item">滞留时间 :</div>
<div class="label_item">抓拍地点 :</div>
</div>
<div class="key_person_box_right_name">
<div class="name_item">张三</div>
<div class="name_item">321287197606038965</div>
<div class="name_item">2023-11-15 14:20:16</div>
<div class="name_item">4个小时</div>
<div class="name_item">江苏省射阳县海河镇革新村二组113号</div>
</div>
<!-- 人员状态 -->
<div
class="people_status"
:style="{ backgroundColor: group.color }"
>
{{ group.status }}
</div>
</div>
</div>
</el-carousel-item>
</el-carousel>
</div>
</template>
<script>
export default {
name: 'PersonScroll',
props: {
// * index
item: {
type: Object
}
},
data() {
return {
items: [
{ name: 'Box 1', status: '涉稳人员', color: '#ffc426' },
{ name: 'Box 1', status: '列管人员', color: '#00f5ff' },
{ name: 'Box 1', status: '涉恐人员', color: '#a357ff' },
{ name: 'Box 1', status: '涉稳人员', color: '#ffc426' },
{ name: 'Box 1', status: '列管人员', color: '#00f5ff' },
{ name: 'Box 1', status: '涉恐人员', color: '#a357ff' }
]
}
},
mounted() {},
methods: {},
computed: {
groupItems() {
// *
let groups = []
// * items +3
for (let i = 0; i < this.items.length; i += 3) {
groups.push(this.items.slice(i, i + 3))
}
console.log(groups)
return groups
}
}
}
</script>
<style lang="scss">
.key_person {
width: 20vw;
height: 38vh;
.key_person_group {
margin: 0;
height: 36vh;
.key_person_item {
.key_person_box {
margin-top: 1vh;
display: flex;
justify-content: space-around;
height: 11vh;
background-image: url('@/assets/picture/bg_people_nor.png');
&:hover {
background-image: url('@/assets/picture/bg_people_hover.png');
}
.key_person_box_left {
display: flex;
flex-direction: column;
justify-content: space-around;
width: 4vw;
.key_person_box_left_picture {
flex: 1;
height: 8vh;
// background-color: #fcbebe;
background-image: url('@/assets/picture/icon_householder.png');
background-repeat: no-repeat;
background-size: 100% auto;
}
.key_person_box_left_text {
color: #ecf4f9;
text-align: center;
font-size: 0.8rem;
font-weight: normal;
font-family: PingFangSC, PingFang SC;
background-color: #005ea1;
box-shadow: inset 0 0 9 0 #00a2ff;
border: 1px solid;
border-image: linear-gradient(
360deg,
rgba(62, 215, 255, 1),
rgba(0, 204, 255, 1)
)
1 1;
}
}
.key_person_box_right {
display: flex;
justify-content: space-between;
align-items: center;
width: 16vw;
font-size: 0.8rem;
position: relative;
.key_person_box_right_label {
width: 4vw;
color: rgba($color: #ecf4f9, $alpha: 0.6);
font-family: PingFangSC, PingFang SC;
font-size: 0.8rem;
}
.key_person_box_right_name {
width: 12vw;
color: #edf1f7;
font-family: PingFangSC, PingFang SC;
font-size: 0.8rem;
}
.people_status {
width: 3.5vw;
height: 2vh;
background-color: #ffc426;
border-radius: 2px 0 2px 2px;
color: #061122;
text-align: center;
font-family: PingFangSC, PingFang SC;
font-size: 0.8rem;
font-weight: 400;
line-height: 2vh;
position: absolute;
top: 0;
right: 0;
}
}
}
}
}
}
</style>

@ -2,6 +2,7 @@
<div id="map"></div>
</template>
<script>
import townLine from '../../../../public/townLine.geojson'
export default {
name: 'MapBody',
data() {
@ -48,6 +49,48 @@ export default {
}
console.log('obj', obj)
})
this.mapContainer.on('load', function () {
//
addSources()
addLayers()
})
let that = this
function addSources() {
var jsonData = {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'Polygon',
coordinates: townLine.features[0].geometry.geometry
}
}
]
}
that.mapContainer.addSource('fillSource', {
type: 'geojson',
data: jsonData
})
}
function addLayers() {
that.mapContainer.addLayer({
id: 'fillLayer',
type: 'fill',
source: 'fillSource',
layout: {
visibility: 'visible'
},
paint: {
'fill-color': '#00ff00',
'fill-opacity': 0.8,
'fill-outline-color': '#ff0000'
},
minzoom: 7,
maxzoom: 17.5
})
}
}
}
}
@ -64,4 +107,8 @@ export default {
}
}
}
// * logo
a.minemap-ctrl-logo {
display: none;
}
</style>

@ -20,16 +20,32 @@
</template>
<script>
import { PoliceForceDistributionAPI } from '@/api/coastalMap/resource'
export default {
name: 'PoliceSpread',
data() {
return {
// *
policeData: [
{ num: '321', text: '派出所' },
{ num: '123', text: '警务室' },
{ num: '645', text: '执法警员' }
]
{ num: '20', text: '派出所' },
{ num: '4', text: '警务室' },
{ num: '6244', text: '执法警员' }
],
// *
policeSpreadData: {}
}
},
created() {
this.onGetPoliceDistributionAPI()
},
methods: {
// *
async onGetPoliceDistributionAPI() {
const res = await PoliceForceDistributionAPI()
this.policeData[0].num = res.data.pcsCount
this.policeData[1].num = res.data.jwsCount
this.policeData[2].num = res.data.zfjyCount
// console.log(res, '')
}
}
}

@ -10,9 +10,15 @@
<div class="police_status_box">
<!-- 左边占比 -->
<div class="rank_left">
<div class="rank_left_item one">1</div>
<div class="rank_left_item two">2</div>
<div class="rank_left_item three">3</div>
<div class="rank_left_item">
<div class="one">1</div>
</div>
<div class="rank_left_item">
<div class="two">2</div>
</div>
<div class="rank_left_item">
<div class="three">3</div>
</div>
</div>
<div class="charts_right" id="charts_right"></div>
</div>
@ -34,7 +40,9 @@
<div class="roll_item_value">{{ item.type }}</div>
<div class="roll_item_value">{{ item.unit }}</div>
<div class="roll_item_value">{{ item.address }}</div>
<div class="roll_item_value" :title="item.now_address">{{ item.now_address }}</div>
<div class="roll_item_value" :title="item.now_address">
{{ item.now_address }}
</div>
</div>
</div>
</li>
@ -46,170 +54,179 @@
<script>
// import PoliceScroll from "./policeScroll.vue";
import * as echarts from "echarts";
import EleResize from "@/utils/esresize";
import * as echarts from 'echarts'
import EleResize from '@/utils/esresize'
export default {
name: "PoliceStatus",
name: 'PoliceStatus',
components: {
//PoliceScroll
},
data() {
return {
y_data: ["调解案件", "行政处罚案件", "当场处罚案件"], // y
chart_data: ["145", "29", "101"], // chart
y_data: ['调解案件', '行政处罚案件', '当场处罚案件'], // y
chart_data: ['145', '29', '101'], // chart
roll_list: [
{
id:'1',
type: "机动车",
unit:'射阳公安局',
address:'建湖县明星路与冠华路交界处北边',
police_time: "2023-11-24 13:21:17",
now_address:'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
id: '1',
type: '机动车',
unit: '射阳公安局',
address: '建湖县明星路与冠华路交界处北边',
police_time: '2023-11-24 13:21:17',
now_address:
'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
},
{
id:'2',
type: "机动车",
unit:'射阳公安局',
address:'建湖县明星路与冠华路交界处北边',
police_time: "2023-11-22 14:20:17",
now_address:'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
id: '2',
type: '机动车',
unit: '射阳公安局',
address: '建湖县明星路与冠华路交界处北边',
police_time: '2023-11-22 14:20:17',
now_address:
'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
},
{
id:'3',
type: "机动车",
unit:'射阳公安局',
address:'建湖县明星路与冠华路交界处北边',
police_time: "2023-11-21 09:20:17",
now_address:'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
id: '3',
type: '机动车',
unit: '射阳公安局',
address: '建湖县明星路与冠华路交界处北边',
police_time: '2023-11-21 09:20:17',
now_address:
'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
},
{
id:'4',
type: "机动车",
unit:'射阳公安局',
address:'建湖县明星路与冠华路交界处北边',
police_time: "2023-12-03 14:35:17",
now_address:'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
id: '4',
type: '机动车',
unit: '射阳公安局',
address: '建湖县明星路与冠华路交界处北边',
police_time: '2023-12-03 14:35:17',
now_address:
'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
},
{
id:'5',
type: "机动车",
unit:'射阳公安局',
address:'建湖县明星路与冠华路交界处北边',
police_time: "2023-12-02 13:21:16",
now_address:'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
id: '5',
type: '机动车',
unit: '射阳公安局',
address: '建湖县明星路与冠华路交界处北边',
police_time: '2023-12-02 13:21:16',
now_address:
'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
},
{
id:'6',
type: "机动车",
unit:'射阳公安局',
address:'建湖县明星路与冠华路交界处北边',
police_time: "2023-12-04 13:20:17",
now_address:'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
id: '6',
type: '机动车',
unit: '射阳公安局',
address: '建湖县明星路与冠华路交界处北边',
police_time: '2023-12-04 13:20:17',
now_address:
'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
},
{
id:'7',
type: "机动车",
unit:'射阳公安局',
address:'建湖县明星路与冠华路交界处北边',
police_time: "2023-11-15 13:23:17",
now_address:'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
id: '7',
type: '机动车',
unit: '射阳公安局',
address: '建湖县明星路与冠华路交界处北边',
police_time: '2023-11-15 13:23:17',
now_address:
'报警人萧婷在建湖县明星路与冠华路交界处北边轿车苏J8MZ63、苏J3KC06相撞。(建湖64号,内线(86158110)) '
}
],
animateUp: false,
timer: null,
};
timer: null
}
},
mounted() {
this.init_charts();
this.timer = setInterval(this.scrollAnimate, 1500);
this.init_charts()
this.timer = setInterval(this.scrollAnimate, 1500)
},
methods: {
init_charts() {
let charts = document.getElementById("charts_right");
let resize_div = document.getElementById("charts_right");
let myChart = echarts.init(charts);
let charts = document.getElementById('charts_right')
let resize_div = document.getElementById('charts_right')
let myChart = echarts.init(charts)
// echarts
EleResize.on(resize_div, () => {
myChart.resize();
});
myChart.resize()
})
let option = {
grid: {
top: "3%",
left: "3%",
right: "10%",
bottom: "3%",
containLabel: true, //
top: '3%',
left: '3%',
right: '10%',
bottom: '3%',
containLabel: true //
},
xAxis: {
show: false,
axisLine: {
show: false,
show: false
},
axisTick: {
show: false,
show: false
},
axisLabel: {
show: false,
},
show: false
}
},
yAxis: {
type: "category",
type: 'category',
data: this.y_data,
inverse: true, //
axisLabel: {
color: "#fff",
color: '#fff'
},
axisLine: {
show: false, // 线
show: false // 线
},
axisTick: {
show: false, // 线
},
show: false // 线
}
},
series: [
{
data: this.chart_data,
type: "bar",
barWidth: '20%',
type: 'bar',
showBackground: true,
itemStyle: {
color: {
colorStops: [
{
offset: 0,
color: "#1A416B", // 0%
barWidth: '30%',
color: '#1A416B' // 0%
},
{
offset: 1,
color: "#019FFA", // 100%
},
],
},
color: '#019FFA' // 100%
}
]
}
},
backgroundStyle: {
color: "rgba(180, 180, 180, 0.2)",
color: 'rgba(180, 180, 180, 0.2)'
},
label: {
show: true,
position: "right",
color: "white",
},
},
],
};
position: 'right',
color: 'white'
}
}
]
}
option && myChart.setOption(option);
option && myChart.setOption(option)
},
//
scrollAnimate() {
this.animateUp = true;
this.animateUp = true
setTimeout(() => {
this.roll_list.push(this.roll_list[0]);
this.roll_list.shift();
this.animateUp = false;
}, 500);
},
},
};
this.roll_list.push(this.roll_list[0])
this.roll_list.shift()
this.animateUp = false
}, 500)
}
}
}
</script>
<style lang="scss">
@ -221,7 +238,7 @@ export default {
.police_status_header {
width: 20vw;
height: 3.5vh;
background-image: url("@/assets/picture/bg_small_title.png");
background-image: url('@/assets/picture/bg_small_title.png');
background-repeat: no-repeat;
background-size: 100% 100%;
.police_status_text {
@ -239,7 +256,7 @@ export default {
.police_status_body {
width: 20vw;
height: 46.5vh;
background-image: url("@/assets/picture/bg_5.png");
background-image: url('@/assets/picture/bg_5.png');
background-repeat: no-repeat;
background-size: 100% 100%;
.police_status_body_charts {
@ -259,24 +276,54 @@ export default {
.rank_left_item {
width: 3vw;
height: 6vh;
color: #ecf4f9;
font-size: 18px;
font-weight: 600;
text-align: center;
line-height: 6vh;
}
.one {
background: url("~@/assets/coastalMap/policeStatus/rank_one.png")
no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: center;
align-items: center;
.one {
color: #ecf4f9;
font-size: 18px;
font-weight: 600;
text-align: center;
line-height: 4vh;
width: 2vw;
height: 4vh;
background: url('~@/assets/coastalMap/policeStatus/rank_one.png')
no-repeat;
background-size: 100% 100%;
}
.two {
color: #ecf4f9;
font-size: 18px;
font-weight: 600;
text-align: center;
line-height: 4vh;
width: 2vw;
height: 4vh;
background: url('~@/assets/coastalMap/policeStatus/rank_two.png')
no-repeat;
background-size: 100% 100%;
}
.three {
color: #ecf4f9;
font-size: 18px;
font-weight: 600;
text-align: center;
line-height: 4vh;
width: 2vw;
height: 4vh;
background: url('~@/assets/coastalMap/policeStatus/rank_three.png')
no-repeat;
background-size: 100% 100%;
}
}
.two {
background: url("~@/assets/coastalMap/policeStatus/rank_two.png")
background: url('~@/assets/coastalMap/policeStatus/rank_two.png')
no-repeat;
background-size: 100% 100%;
}
.three {
background: url("~@/assets/coastalMap/policeStatus/rank_three.png")
background: url('~@/assets/coastalMap/policeStatus/rank_three.png')
no-repeat;
background-size: 100% 100%;
}
@ -302,7 +349,7 @@ export default {
margin-right: 2%;
width: 96%;
height: 12.5vh;
background: url("~@/assets/coastalMap/keyPerson/key_li_back.png")
background: url('~@/assets/coastalMap/keyPerson/key_li_back.png')
no-repeat;
background-size: 100% 100%;
margin-top: 1vh;
@ -333,7 +380,7 @@ export default {
width: 5vw;
height: 12.5vh;
.roll_item_text {
color: #ECF4F9;
color: #ecf4f9;
height: 25%;
text-align: center;
line-height: 3vh;
@ -343,7 +390,7 @@ export default {
width: 10vw;
height: 12.5vh;
.roll_item_value {
color: #EDF1F7;
color: #edf1f7;
height: 25%;
text-align: left;
line-height: 3vh;

@ -11,25 +11,29 @@
<!-- 占位 -->
<div class="box_item_blank"></div>
<div class="box_item_text">实有人口</div>
<div class="box_item_value">654332</div>
<div class="box_item_value">
{{ resourceData.actualUserSyrkCount || 32677 }}
</div>
</div>
<div class="resource_box_item two">
<!-- 占位 -->
<div class="box_item_blank"></div>
<div class="box_item_text">流动人口</div>
<div class="box_item_value">421123</div>
<div class="box_item_value">
{{ resourceData.actualUserLdrkCount || 4611 }}
</div>
</div>
<div class="resource_box_item three">
<!-- 占位 -->
<div class="box_item_blank"></div>
<div class="box_item_text">实有房屋</div>
<div class="box_item_value">556432</div>
<div class="box_item_value">{{ resourceData.countSyfw || 20000 }}</div>
</div>
<div class="resource_box_item four">
<!-- 占位 -->
<div class="box_item_blank"></div>
<div class="box_item_text">实有单位</div>
<div class="box_item_value">221223</div>
<div class="box_item_value">{{ resourceData.countSydw || 10009 }}</div>
</div>
</div>
</div>
@ -38,7 +42,12 @@
import { get_person_num } from '@/api/coastalMap/resource'
// import { getToken } from '@/utils/auth'
export default {
// eslint-disable-next-line vue/multi-word-component-names
props: {
resourceData: {
required: true,
type: Object
}
},
name: 'Resource',
data() {
return {

@ -7,8 +7,8 @@
<div class="sea_body">
<div
class="sea_body_box"
v-for="item in back"
:key="item.num"
v-for="(item, index) in back"
:key="index"
:style="{ backgroundImage: `url(${item.backImg}) ` }"
>
<div class="sea_body_box_num">{{ item.num }}</div>
@ -19,6 +19,7 @@
</template>
<script>
import { seaRelatedElementsAPI } from '@/api/coastalMap/resource'
export default {
name: 'SeaElement',
data() {
@ -46,6 +47,19 @@ export default {
}
]
}
},
created() {
this.onGetSeaRelated()
},
methods: {
async onGetSeaRelated() {
const res = await seaRelatedElementsAPI()
this.back[0].num = res.data.gkCount
this.back[1].num = res.data.mtCount
this.back[2].num = res.data.czCount
this.back[3].num = res.data.cyCount
// console.log(res, '')
}
}
}
</script>

@ -0,0 +1,113 @@
<template>
<div class="detail">
<div class="contents">
<div class="fy-center row">
<div class="label fy-center">人员姓名</div>
<div class="content line-1">{{ data.impUserName }}</div>
</div>
<div class="fy-center row">
<div class="label fy-center">证件号码</div>
<div class="content line-1">{{ data.impUserIdCard }}</div>
</div>
<div class="fy-center row">
<div class="label fy-center">人员类型</div>
<div class="content line-1">{{ data.impUserSubTypeCn }}</div>
</div>
<div class="fy-center row">
<div class="label fy-center">定位时间</div>
<div class="content line-1">
{{ data.kv.定位时间 || data.warningTime }}
</div>
</div>
<!-- <div class="fy-center row">
<div class="label fy-center">经过位置</div>
<div class="content line-1">{{ data}}</div>
</div> -->
<div class="fy-center row">
<div class="label fy-center">活动信息</div>
<div class="content line-1">{{ data.activityMessage }}</div>
</div>
<div class="fy-center row">
<div class="label fy-center warning">异常信息</div>
<div class="content line-1 warning">{{ data.kv.异常信息 }}</div>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
data: Object
},
data() {
return {}
},
created() {},
methods: {}
}
</script>
<style lang="scss" scoped>
.detail {
position: relative;
color: white;
overflow: hidden;
display: flex;
.contents {
width: 100%;
.row {
margin-top: 0.4vh;
display: flex;
.grid {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 5px;
}
.label {
width: 6vw;
height: 44px;
background-color: #093979;
margin-right: 1px;
padding-left: 12px;
}
.content {
padding-left: 12px;
height: 44px;
line-height: 44px;
background-color: rgba(9, 57, 121, 0.3);
&.even {
background-color: rgba(9, 57, 121, 0.5);
}
}
&:first-child {
margin-top: 0;
}
&:last-child .warning {
height: auto;
}
&:last-child .line-1 {
overflow: auto;
text-overflow: clip;
white-space: normal;
flex: 1;
width: 1px;
}
}
}
// .h-144 {
// height: 14.4vh;
// }
// .w-530 {
// width: 530px;
// }
// .ml-12 {
// margin-left: 0.6vw;
// }
// .overflow-auto {
// // overflow: auto;
// }
}
</style>

@ -16,16 +16,31 @@
</div>
<div class="time_body">
<div class="box_all">
<div class="time_item"></div>
<div class="time_item">{{ timeArr.timeText }}</div>
<div class="time_item">{{ timeArr.week }}</div>
<div class="time">{{ timeArr.timeTime }}</div>
</div>
<div class="box_all_right">
<div class="box_all_right_pic"></div>
<div class="box_all_right_name">{{ userName }}</div>
</div>
</div>
</div>
<!-- 左边区域 -->
<div class="left_box">
<Resource ref="resource"></Resource>
<div class="left_box" v-if="isplay == '1'">
<Resource ref="resource" :resourceData="resourceData"></Resource>
<KeyPerson ref="keyPerson"></KeyPerson>
</div>
<!-- 显示实有房屋弹窗 -->
<div class="left_house_box" v-else-if="isplay == '2'">
<building-inform></building-inform>
</div>
<!-- 右边区域 -->
<!-- <div class="center_box">
<el-button @click="change"></el-button>
</div> -->
<div class="right_box">
<PoliceSpread ref="policeSpread"></PoliceSpread>
<SeaElement ref="sea"></SeaElement>
@ -54,16 +69,19 @@
</div>
</template>
<script>
import { getData } from '@/api/coastalMap/resource/index'
import {
getResourceAPI,
keyPersonnelAPI
} from '@/api/coastalMap/resource/index'
// import { login, getDeviceListAPI } from '@/api/facility'
// import { setToken } from '@/utils/token'
// import { setDeviceLatlng } from '@/utils/latlng'
import { dateFormat } from '@/utils/date'
import MapBody from './components/mapBody'
import Resource from './components/resource' // *
import KeyPerson from './components/keyPerson' // *
import PoliceSpread from './components/policeSpread.vue' // *
import SeaElement from './components/seaElement.vue' // *
import PoliceStatus from './components/policeStatus.vue' // *
import BuildingInform from './components/buildingInform.vue'
// import KeyInformantion from './components/keyInformantion.vue' //
export default {
name: 'CoastalMap',
@ -74,12 +92,14 @@ export default {
PoliceSpread,
SeaElement,
PoliceStatus,
BuildingInform
//KeyInformantion
},
data() {
return {
title_text: '射阳沿海治安防控综合平台',
play: true,
isplay: 1,
// *
back: [
{
@ -98,7 +118,14 @@ export default {
backImg: require('@/assets/picture/icon_point_red.png'),
text: '重点警情'
}
]
],
// *
resourceData: {},
// *
timeArr: {},
// *
userName: '李警官'
// // *
// params: {
// start: 0,
@ -108,41 +135,38 @@ export default {
}
},
created() {
// this.onLogin()
// this.onGetDeviceData()
// this.getActionsData()
this.onGetData()
this.onGetResource()
this.onGetKeyPersonnel()
this.timeArr = dateFormat(new Date())
this.timeStart()
},
methods: {
onCardClose() {
console.log('关闭弹窗')
this.play = !this.play
},
async onGetData(){
const res = await getData()
console.log(res);
change() {
//
this.isplay = 2
//
},
timeStart() {
this.timer = setInterval(() => {
this.timeArr = dateFormat(new Date())
// console.log(this.timeArr)
}, 1000)
},
// *
async onGetResource() {
const res = await getResourceAPI()
this.resourceData = res.data
// console.log(this.resourceData)
},
// *
async onGetKeyPersonnel() {
const res = await keyPersonnelAPI()
console.log(res, '重点人员数据待更新')
}
// * token
// async onLogin() {
// const res = await login()
// setToken(res.URLToken)
// },
// *
// async onGetDeviceData() {
// const res = await getDeviceListAPI(this.params)
// // TODO
// this.deviceData = res.ChannelList.filter((item) => {
// Object.seal(item)
// return item.Longitude !== 0
// })
// console.log(this.deviceData, '')
// // *
// setDeviceLatlng(this.deviceData)
// }
// // * vuex
// getActionsData() {
// this.$store.dispatch('device/getVideoData', this.params)
// }
}
}
</script>
@ -154,7 +178,7 @@ export default {
position: relative;
.system_title {
width: 100vw;
height: 14vh;
height: 18vh;
position: absolute;
top: 0;
background: url('~@/assets/homepage/title_back.png') no-repeat;
@ -173,7 +197,7 @@ export default {
display: flex;
.title_icon {
width: 3.5vw;
height: 7vh;
height: 9vh;
display: flex;
justify-content: center;
align-items: center;
@ -188,25 +212,68 @@ export default {
.title_text {
color: aliceblue;
text-align: center;
line-height: 7vh;
line-height: 9vh;
font-size: 2.25rem;
font-weight: 700;
}
}
.time_body {
width: 24vw;
display: flex;
justify-content: space-between;
width: 25vw;
height: 7vh;
.box_all {
width: 12vw;
display: flex;
justify-content: start;
width: 14vw;
height: 7vh;
// background: #ad337f;
.time_item {
.time_item,
.time {
margin-left: 2px;
width: 12vw;
height: 3.5vh;
line-height: 7vh;
text-align: center;
color: #37fdc7;
font-size: 1.5rem;
font-weight: 600;
color: #e5f5f9;
font-size: 1.2rem;
font-weight: 400;
font-family: PingFangSC PingFang SC;
}
.time {
color: #009cfe;
font-size: 1.2rem;
font-family: D-DIN;
font-weight: bold;
letter-spacing: 2px;
}
}
.box_all_right {
display: flex;
align-items: center;
justify-content: space-around;
width: 9vw;
height: 7vh;
.box_all_right_pic {
width: 2vw;
height: 4.5vh;
background-image: url('@/assets/people-picture/people-cacth/people-3.jpg');
background-repeat: no-repeat;
background-size: 100% 100%;
}
.box_all_right_name {
width: 5vw;
height: 7vh;
font-size: 1.2rem;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #ecf4f9;
line-height: 7vh;
}
}
}
@ -220,6 +287,23 @@ export default {
// background: #ad337f;
z-index: 3;
}
.left_house_box {
position: absolute;
top: 10vh;
left: 1vw;
width: 20vw;
height: 89vh;
background: #ad337f;
z-index: 3;
}
.center_box {
position: absolute;
width: 2vw;
height: 4vh;
z-index: 3;
top: 5vh;
left: 22vw;
}
.right_box {
position: absolute;
top: 10vh;
@ -233,7 +317,7 @@ export default {
top: 10vh;
right: 21vw;
width: 5vw;
height: 20vh;
height: 40vh;
display: flex;
flex-direction: column;
justify-content: space-between;

@ -10,7 +10,7 @@
<div class="item_check" @click="toHome"></div>
</div>
<div class="under_btn_item">
<div class="item_check_back" @click="toVideo"></div>
<div class="item_check_back" @click="toVideo"></div>
</div>
<div class="under_btn_item">
<div class="item_check_back" @click="toDevice"></div>
@ -77,20 +77,21 @@ export default {
// line-height: 6vh;
// }
// }
.div {
}
.under_btn {
position: absolute;
bottom: 1vh;
bottom: 5vh;
left: 35vw;
width: 30vw;
height: 7vh;
width: 35vw;
height: 12vh;
// background: #33a59f;
display: flex;
z-index: 2;
.under_btn_item {
width: 10vw;
height: 7vh;
width: 13vw;
height: 12vh;
// border: 1px solid#b1335d;
display: flex;
justify-content: center;
@ -98,32 +99,38 @@ export default {
// *
.item_check {
width: 3.5vw;
height: 6.5vh;
width: 6vw;
height: 12vh;
background-image: url('@/assets/picture/icon_home_nor.png');
background-repeat: no-repeat;
background-size: 100% auto;
background-size: 100% 100%;
cursor: pointer;
&:hover {
background-image: url('@/assets/picture/icon_home_sel.png');
background-repeat: no-repeat;
background-size: 100% auto;
background-size: 100% 100%;
}
}
.item_check_back {
width: 3.5vw;
height: 6.5vh;
width: 6vw;
height: 12vh;
background-image: url('@/assets/picture/under_button.png');
background-repeat: no-repeat;
background-size: 100% auto;
font-size: 0.8rem;
background-size: 100% 100%;
font-size: 1.3rem;
font-family: PingFangSC, PingFang SC;
font-weight: 500;
color: #ecf4f9;
line-height: 6.5vh;
line-height: 10.5vh;
text-shadow: 0px 0px 9px #00a2ff;
text-align: center;
cursor: pointer;
&:hover {
color: #00f5ff;
}
}
}
}

@ -2,6 +2,7 @@
<div id="map">
<MapCheck></MapCheck>
<div class="scroll">
<div class="scroll-item"></div>
<MapScroll v-for="item in 3" :key="item"></MapScroll>
</div>
</div>

@ -11,7 +11,10 @@
<ul class="marquee-list" :class="{ 'animate-up': animateUp }">
<li v-for="(item, index) in roll_list" :key="index">
<div class="roll_item_left">
<div class="roll_item_pic"></div>
<div
class="roll_item_pic"
:style="{ backgroundImage: `url(${item.pic})` }"
></div>
<div class="roll_item_btn">车辆追踪</div>
</div>
<div class="roll_item_right">
@ -78,101 +81,101 @@ export default {
{
text: '123',
per_type: '1',
// type_text: '',
person_name: '周大山',
id_card: '321287197606038965',
id_card: '321287196606038965',
car_code: '苏J40089',
catch_time: '2023-11-30 14:20:08',
state_time: '4个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号'
catch_time: '2023-11-03 01:20:08',
state_time: '8个小时',
catch_place: '江苏省射阳县海河镇革新村二组111号',
pic: require('@/assets/people-picture/picture-custom/car/car-1.jpg')
},
{
text: '1243',
per_type: '3',
// type_text: '',
person_name: '王富强',
id_card: '321287197606038965',
id_card: '321287198606036365',
car_code: '苏J40089',
catch_time: '2023-11-30 14:20:08',
catch_time: '2023-11-28 00:20:08',
state_time: '4个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号'
catch_place: '江苏省射阳县黄沙港镇',
pic: require('@/assets/people-picture/picture-custom/car/car-2.jpg')
},
{
text: '12323',
per_type: '2',
// type_text: '',
person_name: '赵磊',
id_card: '321287197606038965',
car_code: '苏J40089',
catch_time: '2023-11-30 14:20:08',
state_time: '4个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号'
catch_time: '2023-11-29 10:20:08',
state_time: '13个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号',
pic: require('@/assets/people-picture/picture-custom/car/car-3.jpg')
},
{
text: '1243',
per_type: '2',
// type_text: '',
person_name: '徐永',
id_card: '321287197606038965',
id_card: '321287199204037765',
car_code: '苏J40089',
catch_time: '2023-11-30 14:20:08',
state_time: '4个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号'
catch_time: '2023-12-01 16:20:08',
state_time: '24个小时',
catch_place: '江苏省射阳县合德镇解放路192号',
pic: require('@/assets/people-picture/picture-custom/car/car-4.jpg')
},
{
text: '1223',
per_type: '2',
// type_text: '',
person_name: '李文一',
id_card: '321287197606038965',
id_card: '321287198905032065',
car_code: '苏J40089',
catch_time: '2023-11-30 14:20:08',
state_time: '4个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号'
catch_time: '2023-11-30 06:20:08',
state_time: '48个小时',
catch_place: '江苏省射阳县黄沙港镇',
pic: require('@/assets/people-picture/picture-custom/car/car-1.jpg')
},
{
text: '1223',
per_type: '1',
// type_text: '',
person_name: '谭静',
id_card: '321287197606038965',
id_card: '321287199606038945',
car_code: '苏J40089',
catch_time: '2023-11-30 14:20:08',
catch_time: '2023-12-03 15:20:08',
state_time: '4个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号'
catch_place: '江苏省射阳县海河镇革新村二组130号',
pic: require('@/assets/people-picture/picture-custom/car/car-2.jpg')
},
{
text: '1243',
per_type: '3',
// type_text: '',
person_name: '孙洋洋',
id_card: '321287197606038965',
car_code: '苏J40089',
catch_time: '2023-11-30 14:20:08',
state_time: '4个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号'
catch_time: '2023-11-25 09:20:08',
state_time: '8个小时',
catch_place: '江苏省射阳县合德镇解放路',
pic: require('@/assets/people-picture/picture-custom/car/car-3.jpg')
},
{
text: '1223',
per_type: '1',
// type_text: '',
person_name: '董磊',
id_card: '321287197606038965',
car_code: '苏J40089',
catch_time: '2023-11-30 14:20:08',
state_time: '4个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号'
catch_time: '2023-12-01 13:20:08',
state_time: '12个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号',
pic: require('@/assets/people-picture/picture-custom/car/car-4.jpg')
},
{
text: '1223',
per_type: '2',
// type_text: '',
person_name: '郑廖',
id_card: '321287197606038965',
car_code: '苏J40089',
catch_time: '2023-11-30 14:20:08',
state_time: '4个小时',
catch_place: '江苏省射阳县海河镇革新村二组113号'
state_time: '9个小时',
catch_place: '江苏省射阳县大兴镇',
pic: require('@/assets/people-picture/picture-custom/car/car-1.jpg')
}
],
animateUp: false,
@ -190,7 +193,7 @@ export default {
this.roll_list.push(this.roll_list[0])
this.roll_list.shift()
this.animateUp = false
}, 500)
}, 2000)
}
}
}
@ -258,7 +261,9 @@ export default {
.roll_item_pic {
width: 5vw;
height: 14vh;
background: #0b4672;
// background: #0b4672;
background-repeat: no-repeat;
background-size: 100% 100%;
}
.roll_item_btn {
width: 5vw;

@ -25,7 +25,7 @@ export default {
init_charts() {
var chartDom = document.getElementById('carMain')
var myChart = echarts.init(chartDom)
let resize_div = document.getElementById('people_chart')
let resize_div = document.getElementById('carMain')
// *echarts
EleResize.on(resize_div, () => {
myChart.resize()
@ -84,6 +84,7 @@ export default {
.car_charts {
width: 20vw;
height: 30vh;
color: #4ca5dd;
}
}
}

@ -10,7 +10,7 @@
</div>
<div class="device_main_body">
<div class="live">
<LivePlayer aspect="fullscreen"></LivePlayer>
<!-- <LivePlayer aspect="fullscreen"></LivePlayer> -->
</div>
</div>
</div>
@ -18,10 +18,10 @@
</template>
<script>
import LivePlayer from '@liveqing/liveplayer'
// import LivePlayer from '@liveqing/liveplayer'
export default {
name: 'DeviceLive',
components: { LivePlayer },
// components: { LivePlayer },
data() {
return {
title: '射阳幸福大道明湖大桥西侧东向西2(标卡)'

@ -4,15 +4,224 @@
<div class="mancar_title">
<div class="mancar_title_text">人车统计</div>
</div>
<div class="mancar_main"></div>
<div class="mancar_main">
<div class="echart_box" id="man-charts"></div>
<div class="echart_box" id="car-charts"></div>
<!-- <div class="text_people">人流统计</div>
<div class="text_car">车流统计</div> -->
</div>
</div>
</template>
<script>
import * as echarts from 'echarts'
import EleResize from '@/utils/esresize'
export default {
name: 'ManCar',
data() {
return {}
},
mounted() {
this.init_charts()
this.init_car_charts()
},
methods: {
init_charts() {
var chartDom = document.getElementById('man-charts')
var myChart = echarts.init(chartDom)
let resize_div = document.getElementById('man-charts')
// echarts
EleResize.on(resize_div, () => {
myChart.resize()
})
const gaugeData = [
{
value: 80,
name: 'Perfect',
title: {
offsetCenter: ['0%', '-30%']
},
detail: {
valueAnimation: true,
offsetCenter: ['0%', '-20%']
}
}
// {
// value: 40,
// name: 'Good',
// title: {
// offsetCenter: ['0%', '0%']
// },
// detail: {
// valueAnimation: true,
// offsetCenter: ['0%', '10%']
// }
// },
// {
// value: 60,
// name: 'Commonly',
// title: {
// offsetCenter: ['0%', '30%']
// },
// detail: {
// valueAnimation: true,
// offsetCenter: ['0%', '40%']
// }
// }
]
let option = {
series: [
{
type: 'gauge',
startAngle: 90,
endAngle: -270,
pointer: {
show: false
},
progress: {
show: true,
overlap: false,
roundCap: true,
clip: false,
itemStyle: {
borderWidth: 1,
borderColor: '#464646'
}
},
axisLine: {
lineStyle: {
width: 10
}
},
splitLine: {
show: false,
distance: 0,
length: 10
},
axisTick: {
show: false
},
axisLabel: {
show: false,
distance: 50
},
data: gaugeData,
title: {
fontSize: 14
},
detail: {
// width: 50,
// height: 14,
fontSize: 12,
color: 'inherit',
borderColor: 'inherit',
borderRadius: 20,
borderWidth: 1,
formatter: '{value}%'
}
}
]
}
option && myChart.setOption(option)
},
init_car_charts() {
var chartDom = document.getElementById('car-charts')
var myChart = echarts.init(chartDom)
let resize_div = document.getElementById('car-charts')
// echarts
EleResize.on(resize_div, () => {
myChart.resize()
})
const gaugeData = [
{
value: 20,
name: 'Perfect',
title: {
offsetCenter: ['0%', '-30%']
},
detail: {
valueAnimation: true,
offsetCenter: ['0%', '-20%']
}
},
{
value: 40,
name: 'Good',
title: {
offsetCenter: ['0%', '0%']
},
detail: {
valueAnimation: true,
offsetCenter: ['0%', '10%']
}
},
{
value: 60,
name: 'Commonly',
title: {
offsetCenter: ['0%', '30%']
},
detail: {
valueAnimation: true,
offsetCenter: ['0%', '40%']
}
}
]
let option = {
series: [
{
type: 'gauge',
startAngle: 90,
endAngle: -270,
pointer: {
show: false
},
progress: {
show: true,
overlap: false,
roundCap: true,
clip: false,
itemStyle: {
borderWidth: 1,
borderColor: '#464646'
}
},
axisLine: {
lineStyle: {
width: 40
}
},
splitLine: {
show: false,
distance: 0,
length: 10
},
axisTick: {
show: false
},
axisLabel: {
show: false,
distance: 50
},
data: gaugeData,
title: {
fontSize: 14
},
detail: {
width: 50,
height: 14,
fontSize: 14,
color: 'inherit',
borderColor: 'inherit',
borderRadius: 20,
borderWidth: 1,
formatter: '{value}%'
}
}
]
}
option && myChart.setOption(option)
}
}
}
</script>
@ -38,11 +247,35 @@ export default {
}
}
.mancar_main {
display: flex;
justify-content: center;
position: relative;
width: 20vw;
height: 19vh;
background-image: url('@/assets/picture/bg_1.png');
background-size: 100% auto;
color: #edf1f7;
background-image: url('../../../assets/picture/bg_1.png');
background-repeat: no-repeat;
background-size: 100% auto;
// .text_people {
// // z-index: 3;
// position: absolute;
// top: 45%;
// left: 3.5vw;
// }
// .text_car {
// position: absolute;
// top: 45%;
// right: 3.5vw;
// }
}
// #man-charts {
// width: 10vw;
// height: 19vh;
// }
// #car-charts {
// width: 10vw;
// height: 19vh;
// }
}
</style>

@ -3,7 +3,7 @@
</template>
<script>
import { addDeviceLayers, addSources, addDeviceImages } from '../utils/layer'
// import { addDeviceLayers, addSources, addDeviceImages } from '../utils/layer'
export default {
name: 'MapDevice',
data() {
@ -51,15 +51,15 @@ export default {
})
// *
this.mapContainer.on('load', () => {
addSources(this.mapContainer)
addDeviceLayers(this.mapContainer)
addDeviceImages(this.mapContainer)
// addSources(this.mapContainer)
// addDeviceLayers(this.mapContainer)
// addDeviceImages(this.mapContainer)
})
},
// * vuex
getActionsData() {
this.$store.dispatch('device/getVideoData', this.params)
}
// * vuex
// getActionsData() {
// this.$store.dispatch('device/getVideoData', this.params)
// }
}
}
</script>

@ -0,0 +1,151 @@
<!-- 感知设备搜索及复选图层 -->
<template>
<div class="search_check">
<!-- 右侧区域搜索框 -->
<div class="search">
<input placeholder="请输入摄像头名称" class="search_input" />
<button class="search_button">
<i class="el-icon-search"></i>
</button>
</div>
<!-- 沿海视频切换框 -->
<div class="check">
<div class="check_coverage">
<div class="check_title">图层</div>
</div>
<div class="check_coveragebottom">
<el-checkbox class="checkbox" size="mini">全选</el-checkbox>
<el-checkbox size="mini" class="checkbox">
<div class="check_label">
<div class="check_label_text">沿海视频</div>
<div class="check_label_count">(446)</div>
</div>
</el-checkbox>
<el-checkbox size="mini" class="checkbox">
<div class="check_label">
<div class="check_label_text">非沿海视频</div>
<div class="check_label_count">(779)</div>
</div>
</el-checkbox>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'MapSearch',
data() {
return {}
}
}
</script>
<style lang="scss">
.search_check {
width: 16vw;
height: 27vh;
// position: absolute;
// right: 23vw;
position: relative;
// background: #02274e;
z-index: 2;
.search {
display: flex;
justify-content: start;
position: absolute;
right: 0;
top: 0;
background: #fff;
.search_input {
margin: 0;
padding: 0;
width: 14vw;
border: 1px solid #00f5ff;
background-color: #02274e;
color: #ecf4f9;
outline: none;
}
.search_input::placeholder {
position: relative;
left: 1vw;
font-size: 0.8rem;
font-family: '苹方-简';
color: #ecf4f9;
}
.search_button {
width: 2.5vw;
height: 4vh;
border: 0;
background-color: #03d6df;
outline: none;
cursor: pointer;
&:hover {
background-color: #02c7ce;
}
.el-icon-search {
color: #fff;
}
}
}
.check {
display: flex;
justify-content: space-between;
flex-direction: column;
width: 13vw;
height: 18vh;
position: absolute;
top: 7vh;
right: 0;
background-image: url('@/assets/picture/bg_info.png');
background-size: 100% auto;
background-repeat: no-repeat;
.check_coverage {
height: 3vh;
}
.check_title {
margin-left: 1vw;
color: #ecf4f9;
font-size: 0.8rem;
line-height: 3vh;
font-family: '苹方-简 中黑体';
}
.check_coveragebottom {
display: flex;
flex-direction: column;
justify-content: space-around;
height: 15vh;
.el-checkbox {
margin-left: 1vw;
color: #ecf4f9;
.el-checkbox__label {
font-size: 0.8rem;
font-family: '苹方-简 中黑体';
}
.check_label {
display: flex;
justify-content: space-between;
width: 10vw;
.check_label_count {
width: 3vw;
}
}
}
}
}
}
</style>

@ -11,7 +11,10 @@
<ul class="marquee-list" :class="{ 'animate-up': animateUp }">
<li v-for="(item, index) in roll_list" :key="index">
<div class="roll_item_left">
<div class="roll_item_pic"></div>
<div
class="roll_item_pic"
:style="{ backgroundImage: `url(${item.pic})` }"
></div>
<div class="roll_item_btn">人员追踪</div>
</div>
<div class="roll_item_right">
@ -75,61 +78,67 @@ export default {
text: '123',
per_type: '1',
type_text: '在逃人员',
person_name: '周大山',
catch_time: '2023-12-01 13:20:09',
person_name: '白玉莹',
catch_time: '2023-12-02 13:20:09',
id_card: '321287197606038965',
state_time: '4个小时',
catch_address: '江苏省射阳县海河镇革新村二组113号'
state_time: '8个小时',
catch_address: '江苏省射阳县黄沙港镇',
pic: require('@/assets/people-picture/people-cacth/people-1.jpg')
},
{
text: '1243',
per_type: '3',
type_text: '涉恐人员',
person_name: '王富强',
catch_time: '2023-12-01 13:20:09',
person_name: '周大山',
catch_time: '2023-12-03 14:20:09',
id_card: '321287197606038965',
state_time: '4个小时',
catch_address: '江苏省射阳县海河镇革新村二组113号'
state_time: '14个小时',
catch_address: '江苏省射阳县海河镇革新村二组113号',
pic: require('@/assets/people-picture/people-cacth/people-3.jpg')
},
{
text: '12323',
per_type: '2',
type_text: '精神病人',
person_name: '赵磊',
catch_time: '2023-12-01 13:20:09',
person_name: '王富强',
catch_time: '2023-12-01 16:20:09',
id_card: '321287197606038965',
state_time: '4个小时',
catch_address: '江苏省射阳县海河镇革新村二组113号'
state_time: '21个小时',
catch_address: '江苏省射阳县黄沙港镇',
pic: require('@/assets/people-picture/people-cacth/people-2.jpg')
},
{
text: '1243',
per_type: '2',
type_text: '精神病人',
type_text: '涉恐人员',
person_name: '徐永',
catch_time: '2023-12-01 13:20:09',
catch_time: '2023-12-01 11:20:09',
id_card: '321287197606038965',
state_time: '4个小时',
catch_address: '江苏省射阳县海河镇革新村二组113号'
state_time: '10个小时',
catch_address: '江苏省射阳县海河镇革新村二组110号',
pic: require('@/assets/people-picture/people-cacth/people-1.jpg')
},
{
text: '1223',
per_type: '2',
type_text: '精神病人',
person_name: '李文一',
type_text: '列管人员',
person_name: '赵磊',
catch_time: '2023-12-01 13:20:09',
id_card: '321287197606038965',
state_time: '4个小时',
catch_address: '江苏省射阳县海河镇革新村二组113号'
state_time: '2个小时',
catch_address: '江苏省射阳县合德镇革新村二组113号',
pic: require('@/assets/people-picture/people-cacth/people-2.jpg')
},
{
text: '1223',
per_type: '1',
type_text: '在逃人员',
person_name: '谭静',
catch_time: '2023-12-01 13:20:09',
catch_time: '2023-11-29 10:20:09',
id_card: '321287197606038965',
state_time: '4个小时',
catch_address: '江苏省射阳县海河镇革新村二组113号'
state_time: '24个小时',
catch_address: '江苏省射阳县海河镇革新村二组110号',
pic: require('@/assets/people-picture/people-cacth/people-3.jpg')
},
{
text: '1243',
@ -138,28 +147,31 @@ export default {
person_name: '孙洋洋',
catch_time: '2023-12-01 13:20:09',
id_card: '321287197606038965',
state_time: '4个小时',
catch_address: '江苏省射阳县海河镇革新村二组113号'
state_time: '18个小时',
catch_address: '江苏省射阳县合德镇解放路122号',
pic: require('@/assets/people-picture/people-cacth/people-1.jpg')
},
{
text: '1223',
per_type: '1',
type_text: '在逃人员',
person_name: '董磊',
catch_time: '2023-12-01 13:20:09',
catch_time: '2023-12-03 09:20:09',
id_card: '321287197606038965',
state_time: '4个小时',
catch_address: '江苏省射阳县海河镇革新村二组113号'
state_time: '10个小时',
catch_address: '江苏省射阳县大兴镇革新村二组113号',
pic: require('@/assets/people-picture/people-cacth/people-3.jpg')
},
{
text: '1223',
per_type: '2',
type_text: '精神病人',
person_name: '郑廖',
catch_time: '2023-12-01 13:20:09',
catch_time: '2023-11-29 00:20:09',
id_card: '321287197606038965',
state_time: '4个小时',
catch_address: '江苏省射阳县海河镇革新村二组113号'
state_time: '24个小时',
catch_address: '江苏省射阳县海通镇革新村二组113号',
pic: require('@/assets/people-picture/people-cacth/people-2.jpg')
}
],
animateUp: false,

@ -22,7 +22,13 @@
</div>
<div class="time_body">
<div class="box_all">
<div class="time_item"></div>
<div class="time_item">{{ timeArr.timeText }}</div>
<div class="time_item">{{ timeArr.week }}</div>
<div class="time">{{ timeArr.timeTime }}</div>
</div>
<div class="box_all_right">
<div class="box_all_right_pic"></div>
<div class="box_all_right_name">{{ userName }}</div>
</div>
</div>
</div>
@ -49,6 +55,7 @@
</template>
<script>
import { dateFormat } from '@/utils/date'
import MapDevice from './components/mapDevice.vue' // *
import MapSearch from './components/mapSearch.vue' // *
import ManCar from './components/mancarStatistics.vue' // *
@ -76,14 +83,29 @@ export default {
{ id: 2, title: '车辆抓拍' }
],
title_text: '射阳沿海治安防控综合平台',
play: false
play: false,
// *
timeArr: {},
// *
userName: '李警官'
}
},
created() {},
created() {
this.timeArr = dateFormat(new Date())
this.timeStart()
},
mounted() {},
methods: {
// *
onUpdateClose() {
this.play = !this.play
},
// *
timeStart() {
this.timer = setInterval(() => {
this.timeArr = dateFormat(new Date())
// console.log(this.timeArr)
}, 1000)
}
},
computed: {}
@ -111,25 +133,26 @@ export default {
.system_title {
width: 100vw;
height: 14vh;
height: 18vh;
position: absolute;
top: 0;
background: url('@/assets/homepage/title_back.png') no-repeat;
background: url('~@/assets/homepage/title_back.png') no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: space-between;
.blank {
width: 24vw;
height: 14vh;
// background: #33a59f;
}
.title_body {
// width: 28vw;
height: 7vh;
// background: #33a59f;
display: flex;
z-index: 2;
.title_icon {
width: 3.5vw;
height: 7vh;
height: 9vh;
display: flex;
justify-content: center;
align-items: center;
@ -137,34 +160,75 @@ export default {
.police_icon {
width: 2.7vw;
height: 5.4vh;
background: url('@/assets/homepage/police.png') no-repeat;
background: url('~@/assets/homepage/police.png') no-repeat;
background-size: 100% 100%;
}
}
.title_text {
color: aliceblue;
text-align: center;
line-height: 7vh;
font-size: 2vw;
line-height: 9vh;
font-size: 2.25rem;
font-weight: 700;
}
}
.time_body {
width: 24vw;
display: flex;
justify-content: space-between;
width: 25vw;
height: 7vh;
.box_all {
width: 12vw;
display: flex;
justify-content: start;
width: 14vw;
height: 7vh;
// background: #ad337f;
.time_item {
.time_item,
.time {
margin-left: 2px;
width: 12vw;
height: 3.5vh;
line-height: 7vh;
text-align: center;
color: #37fdc7;
font-size: 2.25rem;
font-weight: 700;
color: #e5f5f9;
font-size: 1.2rem;
font-weight: 400;
font-family: PingFangSC PingFang SC;
}
.time {
color: #009cfe;
font-size: 1.2rem;
font-family: D-DIN;
font-weight: bold;
letter-spacing: 2px;
}
}
.box_all_right {
display: flex;
align-items: center;
justify-content: space-around;
width: 9vw;
height: 7vh;
.box_all_right_pic {
width: 2vw;
height: 4.5vh;
background-image: url('@/assets/people-picture/people-cacth/people-3.jpg');
background-repeat: no-repeat;
background-size: 100% 100%;
}
.box_all_right_name {
width: 5vw;
height: 7vh;
font-size: 1.2rem;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #ecf4f9;
line-height: 7vh;
}
}
}

@ -1,63 +1,63 @@
// TODO 封装监控点聚合图层
import { getDeviceLatlng } from '@/utils/latlng'
const device = getDeviceLatlng()
const devices = device.map((item) => ({
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [item.Longitude, item.Latitude]
},
properties: {
channel: item.Channel,
title: item.Name,
deviceName: item.Name
}
}))
// * 监控点聚合图层数据源
const devicePointData = {
type: 'FeatureCollection',
features: devices
}
export const addDeviceLayers = (minemap) => {
// TODO 监控设备非聚合图层
minemap.addLayer({
id: 'device-points',
type: 'symbol',
// * 图层数据源 - 可以更改数据
source: 'devicePoint',
// * 图层过滤器
filter: ['!has', 'point_count'],
// * 图层布局样式
layout: {
'icon-image': 'device_image',
'icon-size': 0.5,
'text-field': ['get', 'title'],
'text-offset': [0, 0.6],
'text-anchor': 'top',
'text-size': 10,
'text-allow-overlap': true //图标覆盖文字允许压盖
}
})
}
// // TODO 封装监控点聚合图层
// import { getDeviceLatlng } from '@/utils/latlng'
// const device = getDeviceLatlng()
// const devices = device.map((item) => ({
// type: 'Feature',
// geometry: {
// type: 'Point',
// coordinates: [item.Longitude, item.Latitude]
// },
// properties: {
// channel: item.Channel,
// title: item.Name,
// deviceName: item.Name
// }
// }))
// // * 监控点聚合图层数据源
// const devicePointData = {
// type: 'FeatureCollection',
// features: devices
// }
// export const addDeviceLayers = (minemap) => {
// // TODO 监控设备非聚合图层
// minemap.addLayer({
// id: 'device-points',
// type: 'symbol',
// // * 图层数据源 - 可以更改数据
// source: 'devicePoint',
// // * 图层过滤器
// filter: ['!has', 'point_count'],
// // * 图层布局样式
// layout: {
// 'icon-image': 'device_image',
// 'icon-size': 0.5,
// 'text-field': ['get', 'title'],
// 'text-offset': [0, 0.6],
// 'text-anchor': 'top',
// 'text-size': 10,
// 'text-allow-overlap': true //图标覆盖文字允许压盖
// }
// })
// }
export const addDeviceImages = (minemap) => {
// TODO 自定义监控设备图片
minemap.loadImage(
require('@/assets/background-img/icon_company_blue.png'),
(error, image) => {
if (error) throw error
minemap.addImage('device_image', image)
}
)
}
// export const addDeviceImages = (minemap) => {
// // TODO 自定义监控设备图片
// minemap.loadImage(
// require('@/assets/background-img/icon_company_blue.png'),
// (error, image) => {
// if (error) throw error
// minemap.addImage('device_image', image)
// }
// )
// }
export const addSources = (minemap) => {
// * 监控数据源
minemap.addSource('devicePoint', {
type: 'geojson',
data: devicePointData,
cluster: true,
clusterMaxZoom: 15 /* 最大聚合层级 */,
clusterRadius: 50 /* 聚合半径 */
})
}
// export const addSources = (minemap) => {
// // * 监控数据源
// minemap.addSource('devicePoint', {
// type: 'geojson',
// data: devicePointData,
// cluster: true,
// clusterMaxZoom: 15 /* 最大聚合层级 */,
// clusterRadius: 50 /* 聚合半径 */
// })
// }

@ -92,7 +92,7 @@
</div>
<!-- 视频 -->
<div class="live_card_body_right">
<LivePlayer></LivePlayer>
<!-- <LivePlayer></LivePlayer> -->
<div class="video_button">
<div class="video_buton_style">
<div class="video_icon video_icon1"></div>
@ -111,10 +111,10 @@
</template>
<script>
import LivePlayer from '@liveqing/liveplayer'
// import LivePlayer from '@liveqing/liveplayer'
export default {
name: 'MapPlayer',
components: { LivePlayer },
// components: { LivePlayer },
props: {
videoUrl: {
type: String

@ -2,7 +2,7 @@
<div id="map"></div>
</template>
<script>
import { addSources, addImages, addLayers } from '../utils/deviceLayer'
// import { addSources, addImages, addLayers } from '../utils/deviceLayer'
export default {
name: 'MapBody',
data() {
@ -37,12 +37,12 @@ export default {
minZoom: 3,
projection: 'LATLON'
})
// *
this.mapContainer.on('load', () => {
addSources(this.mapContainer)
addImages(this.mapContainer)
addLayers(this.mapContainer)
})
// // *
// this.mapContainer.on('load', () => {
// addSources(this.mapContainer)
// addImages(this.mapContainer)
// addLayers(this.mapContainer)
// })
// *
this.mapContainer.on('moveend', () => {
let bounds = this.mapContainer.getBounds()

@ -0,0 +1,430 @@
<!-- 封装监控视频组件 -->
<template>
<div class="live">
<!-- 弹窗整体 -->
<div class="live_card">
<div class="live_card_header">
<div class="live_card_title">射阳县合德镇解放西路42号枪机</div>
<!-- 关闭弹窗 -->
<div class="delete" @click="handleClose"></div>
<!-- <div class="live_card_icon" @click="handleClose">
<i class="el-icon-close"></i>
</div> -->
</div>
<div class="live_card_body">
<div class="live_card_body_left">
<div class="live_card_body_left_top">
<h3>重点人员信息</h3>
</div>
<div class="live_card_body_left_bottom">
<!-- 设备名称信息 -->
<div class="live_card_body_left_bottom_div">
<div class="item">
设备名称
<div class="bottom_div_color">阿德飒飒打撒</div>
</div>
<div class="item">
设备Ip:
<div class="bottom_div_color2">阿德飒飒打撒</div>
</div>
<div class="item">
监控类型:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
<div class="item">
国际编码:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
<div class="item">
设备方位:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
<div class="item">
设备品牌:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
<div class="item">
设备经度:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
<div class="item">
设备维度:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
</div>
<!-- 视频按钮 -->
<div class="live_card_body_left_bottom_button">
<el-button class="button_left">
<span class="icon_left"></span>
<span class="add">视频回放</span>
</el-button>
<el-button class="button_right">
<div class="icon_left1"></div>
视频回放
</el-button>
</div>
<!-- 开始时间 -->
<div class="live_card_body_left_bottom_starttime">
<div class="time_icon"></div>
<span>开始时间:</span>
<span>
<el-date-picker
placeholder="请选择日期与时间"
prefix-icon="prefix-icon-class"
type="datetime"
></el-date-picker>
</span>
</div>
<!-- 结束时间 -->
<div class="live_card_body_left_bottom_endtime">
<div class="time_icon1"></div>
<span>结束时间:</span>
<span>
<el-date-picker
placeholder="请选择日期与时间"
prefix-icon="prefix-icon-class"
type="datetime"
>
</el-date-picker>
</span>
</div>
</div>
</div>
<!-- 视频 -->
<div class="live_card_body_right">
<!-- <LivePlayer></LivePlayer> -->
<div class="video_button">
<div class="video_buton_style">
<div class="video_icon video_icon1"></div>
<div class="video_icon video_icon2"></div>
<div class="video_icon video_icon3"></div>
<div class="video_icon video_icon4"></div>
<div class="video_icon video_icon5"></div>
<div class="video_icon video_icon6"></div>
<div class="video_icon video_icon7"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
// import LivePlayer from '@liveqing/liveplayer'
export default {
name: 'MapPlayer',
// components: { LivePlayer },
props: {
videoUrl: {
type: String
},
deviceName: {
type: String
}
},
data() {
return {
play: true
}
},
methods: {
handleClose() {
this.$emit('updateClose')
}
}
}
</script>
<style lang="scss">
* {
margin: 0;
padding: 0;
}
.live {
position: absolute;
top: 55%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 2;
background: url(../../../assets/icon-hza/bg_6.png);
background-size: 100% auto;
background-repeat: no-repeat;
.live_card {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 83vw;
height: 75vh;
.live_card_header {
display: flex;
justify-content: space-between;
align-items: center;
width: 83vw;
height: 6vh;
color: #bfe7f9;
.delete {
width: 2vw;
height: 3vh;
background-color: #fff;
opacity: 0;
}
.live_card_title,
.live_card_icon {
margin-left: 5px;
font-size: 1.5rem;
}
.live_card_icon {
margin-right: 5px;
color: #14b9d2;
margin-right: 1vw;
&:hover {
color: #006d7e;
}
}
.live_card_title {
margin-left: 3vw;
}
}
.live_card_body {
display: flex;
align-items: center;
width: 83vw;
height: 76vh;
.live_card_body_left {
overflow: hidden;
width: 22vw;
height: 65vh;
margin-left: 3vw;
background-image: url(../../../assets/icon-hza/bg_left.png);
background-size: 100% auto;
background-repeat: no-repeat;
.live_card_body_left_top {
width: 100%;
height: 4vh;
background-image: url(../../../assets/icon-hza/bg_title.png);
background-size: 100% auto;
background-repeat: no-repeat;
display: flex;
align-items: center;
padding-left: 1vw;
color: #bfe7f9;
}
.live_card_body_left_bottom {
width: 100%;
height: 61;
.live_card_body_left_bottom_div {
width: 18vw;
height: 30vh;
margin-left: 1vw;
margin-top: 1vh;
display: flex;
flex-direction: column;
justify-content: space-around;
.item {
display: flex;
font-size: 1rem;
color: #ecf4f9;
letter-spacing: 0.1rem;
}
.bottom_div_color {
color: #00f5ff;
margin-left: 0.7vh;
}
.bottom_div_color1 {
color: #edf1f7;
margin-left: 1.7vh;
}
.bottom_div_color2 {
color: #edf1f7;
margin-left: 3vh;
}
}
.live_card_body_left_bottom_button {
height: 4vh;
width: 18vw;
margin-left: 1vw;
margin-top: 2vh;
display: flex;
.button_left {
background-color: #063d6c;
width: 9vw;
height: 4vh;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
border-radius: 0%;
border-color: #063d6c;
&:hover {
background-color: #005ea1;
}
.icon_left {
width: 1vw;
height: 2vh;
background: url('../../../assets/icon-hza/24gf-playCircle.png');
background-size: 100% auto;
background-repeat: no-repeat;
display: inline-block;
margin-right: 0.5vw;
}
}
.button_right {
background-color: #063d6c;
width: 9vw;
height: 4vh;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
border-radius: 0%;
border-color: #063d6c;
&:hover {
background-color: #005ea1;
}
.icon_left1 {
width: 1vw;
height: 2vh;
background: url(../../../assets/icon-hza/bg_105.png);
display: inline-block;
margin-right: 0.5vw;
background-size: 100% auto;
background-repeat: no-repeat;
}
}
}
.live_card_body_left_bottom_starttime {
width: 18vw;
height: 4vh;
margin-top: 4vh;
margin-left: 1vw;
display: flex;
align-items: center;
justify-content: space-between;
color: #ecf4f9;
position: relative;
.el-input--suffix .el-input__inner {
background-color: transparent;
width: 15vw;
}
.el-input--prefix .el-input__inner {
border-color: #00539f;
border-radius: 0%;
}
.time_icon {
width: 1vw;
height: 2vh;
background-image: url(../../../assets/icon-hza/bg_50.png);
position: absolute;
background-size: 100% auto;
background-repeat: no-repeat;
right: 0.4vw;
}
}
.live_card_body_left_bottom_endtime {
display: flex;
align-items: center;
justify-content: space-between;
width: 18vw;
height: 4vh;
margin-left: 1vw;
margin-top: 4vh;
color: #fff;
position: relative;
.el-input--suffix .el-input__inner {
background-color: transparent;
width: 15vw;
}
.el-input--prefix .el-input__inner {
border-color: #00539f;
border-radius: 0%;
}
.prefix-icon-class {
display: none;
}
.time_icon1 {
width: 1vw;
height: 2vh;
background-image: url(../../../assets/icon-hza/bg_50.png);
position: absolute;
background-size: 100% auto;
background-repeat: no-repeat;
right: 0.4vw;
top: 0.4vh;
}
}
}
}
.live_card_body_right {
margin-left: 3vw;
width: 52vw;
height: 65vh;
background-image: url(../../../assets/picture/bg_right.png);
background-size: 100% auto;
background-repeat: no-repeat;
.video_button {
width: 52vw;
height: 5vh;
display: flex;
justify-content: center;
align-items: center;
.video_buton_style {
width: 13vw;
height: 3.5vh;
display: flex;
justify-content: space-around;
.video_icon {
width: 1vw;
height: 2vh;
margin-top: 1vh;
}
.video_icon1 {
background-image: url(../../../assets/picture/icon_butreset\(1\).png);
background-size: 100% auto;
background-repeat: no-repeat;
}
.video_icon2 {
background-image: url(../../../assets/icon-hza/bg_68.png);
background-size: 100% auto;
background-repeat: no-repeat;
}
.video_icon3 {
background-image: url(../../../assets/icon-hza/bg_70.png);
background-size: 100% auto;
background-repeat: no-repeat;
}
.video_icon4 {
background-image: url(../../../assets/icon-hza/bg_60.png);
background-size: 100% auto;
background-repeat: no-repeat;
width: 2vw;
height: 4vh;
margin-top: 0;
}
.video_icon5 {
background-image: url(../../../assets/icon-hza/bg_74.png);
background-size: 100% auto;
background-repeat: no-repeat;
}
.video_icon6 {
background-image: url(../../../assets/icon-hza/bg_71.png);
background-size: 100% auto;
background-repeat: no-repeat;
}
.video_icon7 {
background-image: url(../../../assets/picture/icon_butreset.png);
background-size: 100% auto;
background-repeat: no-repeat;
}
}
}
}
}
}
}
</style>

@ -0,0 +1,430 @@
<!-- 封装监控视频组件 -->
<template>
<div class="live">
<!-- 弹窗整体 -->
<div class="live_card">
<div class="live_card_header">
<div class="live_card_title">射阳县合德镇解放西路42号枪机</div>
<!-- 关闭弹窗 -->
<div class="delete" @click="handleClose"></div>
<!-- <div class="live_card_icon" @click="handleClose">
<i class="el-icon-close"></i>
</div> -->
</div>
<div class="live_card_body">
<div class="live_card_body_left">
<div class="live_card_body_left_top">
<h3>重点人员信息</h3>
</div>
<div class="live_card_body_left_bottom">
<!-- 设备名称信息 -->
<div class="live_card_body_left_bottom_div">
<div class="item">
设备名称
<div class="bottom_div_color">阿德飒飒打撒</div>
</div>
<div class="item">
设备Ip:
<div class="bottom_div_color2">阿德飒飒打撒</div>
</div>
<div class="item">
监控类型:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
<div class="item">
国际编码:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
<div class="item">
设备方位:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
<div class="item">
设备品牌:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
<div class="item">
设备经度:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
<div class="item">
设备维度:
<div class="bottom_div_color1">阿德飒飒打撒</div>
</div>
</div>
<!-- 视频按钮 -->
<div class="live_card_body_left_bottom_button">
<el-button class="button_left">
<span class="icon_left"></span>
<span class="add">视频回放</span>
</el-button>
<el-button class="button_right">
<div class="icon_left1"></div>
视频回放
</el-button>
</div>
<!-- 开始时间 -->
<div class="live_card_body_left_bottom_starttime">
<div class="time_icon"></div>
<span>开始时间:</span>
<span>
<el-date-picker
placeholder="请选择日期与时间"
prefix-icon="prefix-icon-class"
type="datetime"
></el-date-picker>
</span>
</div>
<!-- 结束时间 -->
<div class="live_card_body_left_bottom_endtime">
<div class="time_icon1"></div>
<span>结束时间:</span>
<span>
<el-date-picker
placeholder="请选择日期与时间"
prefix-icon="prefix-icon-class"
type="datetime"
>
</el-date-picker>
</span>
</div>
</div>
</div>
<!-- 视频 -->
<div class="live_card_body_right">
<!-- <LivePlayer></LivePlayer> -->
<div class="video_button">
<div class="video_buton_style">
<div class="video_icon video_icon1"></div>
<div class="video_icon video_icon2"></div>
<div class="video_icon video_icon3"></div>
<div class="video_icon video_icon4"></div>
<div class="video_icon video_icon5"></div>
<div class="video_icon video_icon6"></div>
<div class="video_icon video_icon7"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
// import LivePlayer from '@liveqing/liveplayer'
export default {
name: 'MapPlayer',
// components: { LivePlayer },
props: {
videoUrl: {
type: String
},
deviceName: {
type: String
}
},
data() {
return {
play: true
}
},
methods: {
handleClose() {
this.$emit('updateClose')
}
}
}
</script>
<style lang="scss">
* {
margin: 0;
padding: 0;
}
.live {
position: absolute;
top: 55%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 2;
background: url(../../../assets/icon-hza/bg_6.png);
background-size: 100% auto;
background-repeat: no-repeat;
.live_card {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 83vw;
height: 75vh;
.live_card_header {
display: flex;
justify-content: space-between;
align-items: center;
width: 83vw;
height: 6vh;
color: #bfe7f9;
.delete {
width: 2vw;
height: 3vh;
background-color: #fff;
opacity: 0;
}
.live_card_title,
.live_card_icon {
margin-left: 5px;
font-size: 1.5rem;
}
.live_card_icon {
margin-right: 5px;
color: #14b9d2;
margin-right: 1vw;
&:hover {
color: #006d7e;
}
}
.live_card_title {
margin-left: 3vw;
}
}
.live_card_body {
display: flex;
align-items: center;
width: 83vw;
height: 76vh;
.live_card_body_left {
overflow: hidden;
width: 22vw;
height: 65vh;
margin-left: 3vw;
background-image: url(../../../assets/icon-hza/bg_left.png);
background-size: 100% auto;
background-repeat: no-repeat;
.live_card_body_left_top {
width: 100%;
height: 4vh;
background-image: url(../../../assets/icon-hza/bg_title.png);
background-size: 100% auto;
background-repeat: no-repeat;
display: flex;
align-items: center;
padding-left: 1vw;
color: #bfe7f9;
}
.live_card_body_left_bottom {
width: 100%;
height: 61;
.live_card_body_left_bottom_div {
width: 18vw;
height: 30vh;
margin-left: 1vw;
margin-top: 1vh;
display: flex;
flex-direction: column;
justify-content: space-around;
.item {
display: flex;
font-size: 1rem;
color: #ecf4f9;
letter-spacing: 0.1rem;
}
.bottom_div_color {
color: #00f5ff;
margin-left: 0.7vh;
}
.bottom_div_color1 {
color: #edf1f7;
margin-left: 1.7vh;
}
.bottom_div_color2 {
color: #edf1f7;
margin-left: 3vh;
}
}
.live_card_body_left_bottom_button {
height: 4vh;
width: 18vw;
margin-left: 1vw;
margin-top: 2vh;
display: flex;
.button_left {
background-color: #063d6c;
width: 9vw;
height: 4vh;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
border-radius: 0%;
border-color: #063d6c;
&:hover {
background-color: #005ea1;
}
.icon_left {
width: 1vw;
height: 2vh;
background: url('../../../assets/icon-hza/24gf-playCircle.png');
background-size: 100% auto;
background-repeat: no-repeat;
display: inline-block;
margin-right: 0.5vw;
}
}
.button_right {
background-color: #063d6c;
width: 9vw;
height: 4vh;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
border-radius: 0%;
border-color: #063d6c;
&:hover {
background-color: #005ea1;
}
.icon_left1 {
width: 1vw;
height: 2vh;
background: url(../../../assets/icon-hza/bg_105.png);
display: inline-block;
margin-right: 0.5vw;
background-size: 100% auto;
background-repeat: no-repeat;
}
}
}
.live_card_body_left_bottom_starttime {
width: 18vw;
height: 4vh;
margin-top: 4vh;
margin-left: 1vw;
display: flex;
align-items: center;
justify-content: space-between;
color: #ecf4f9;
position: relative;
.el-input--suffix .el-input__inner {
background-color: transparent;
width: 15vw;
}
.el-input--prefix .el-input__inner {
border-color: #00539f;
border-radius: 0%;
}
.time_icon {
width: 1vw;
height: 2vh;
background-image: url(../../../assets/icon-hza/bg_50.png);
position: absolute;
background-size: 100% auto;
background-repeat: no-repeat;
right: 0.4vw;
}
}
.live_card_body_left_bottom_endtime {
display: flex;
align-items: center;
justify-content: space-between;
width: 18vw;
height: 4vh;
margin-left: 1vw;
margin-top: 4vh;
color: #fff;
position: relative;
.el-input--suffix .el-input__inner {
background-color: transparent;
width: 15vw;
}
.el-input--prefix .el-input__inner {
border-color: #00539f;
border-radius: 0%;
}
.prefix-icon-class {
display: none;
}
.time_icon1 {
width: 1vw;
height: 2vh;
background-image: url(../../../assets/icon-hza/bg_50.png);
position: absolute;
background-size: 100% auto;
background-repeat: no-repeat;
right: 0.4vw;
top: 0.4vh;
}
}
}
}
.live_card_body_right {
margin-left: 3vw;
width: 52vw;
height: 65vh;
background-image: url(../../../assets/picture/bg_right.png);
background-size: 100% auto;
background-repeat: no-repeat;
.video_button {
width: 52vw;
height: 5vh;
display: flex;
justify-content: center;
align-items: center;
.video_buton_style {
width: 13vw;
height: 3.5vh;
display: flex;
justify-content: space-around;
.video_icon {
width: 1vw;
height: 2vh;
margin-top: 1vh;
}
.video_icon1 {
background-image: url(../../../assets/picture/icon_butreset\(1\).png);
background-size: 100% auto;
background-repeat: no-repeat;
}
.video_icon2 {
background-image: url(../../../assets/icon-hza/bg_68.png);
background-size: 100% auto;
background-repeat: no-repeat;
}
.video_icon3 {
background-image: url(../../../assets/icon-hza/bg_70.png);
background-size: 100% auto;
background-repeat: no-repeat;
}
.video_icon4 {
background-image: url(../../../assets/icon-hza/bg_60.png);
background-size: 100% auto;
background-repeat: no-repeat;
width: 2vw;
height: 4vh;
margin-top: 0;
}
.video_icon5 {
background-image: url(../../../assets/icon-hza/bg_74.png);
background-size: 100% auto;
background-repeat: no-repeat;
}
.video_icon6 {
background-image: url(../../../assets/icon-hza/bg_71.png);
background-size: 100% auto;
background-repeat: no-repeat;
}
.video_icon7 {
background-image: url(../../../assets/picture/icon_butreset.png);
background-size: 100% auto;
background-repeat: no-repeat;
}
}
}
}
}
}
}
</style>

@ -15,7 +15,13 @@
</div>
<div class="time_body">
<div class="box_all">
<div class="time_item"></div>
<div class="time_item">{{ timeArr.timeText }}</div>
<div class="time_item">{{ timeArr.week }}</div>
<div class="time">{{ timeArr.timeTime }}</div>
</div>
<div class="box_all_right">
<div class="box_all_right_pic"></div>
<div class="box_all_right_name">{{ userName }}</div>
</div>
</div>
</div>
@ -60,10 +66,11 @@
</template>
<script>
import { dateFormat } from '@/utils/date'
import MapPlayer from './components/livePlayer.vue'
import MapVideo from './components/mapVideo.vue'
import { getDeviceListAPI } from '@/api/facility'
import { setDeviceLatlng } from '@/utils/latlng'
// import { getDeviceListAPI } from '@/api/facility'
// import { setDeviceLatlng } from '@/utils/latlng'
export default {
components: {
MapVideo,
@ -83,21 +90,35 @@ export default {
online: true
},
// *
channelList: []
channelList: [],
// *
timeArr: {},
// *
userName: '李警官'
}
},
created() {
this.onGetDeviceListAPI()
// this.onGetDeviceListAPI()
this.timeArr = dateFormat(new Date())
this.timeStart()
},
methods: {
// *
async onGetDeviceListAPI() {
const res = await getDeviceListAPI(this.params)
this.channelList = res.ChannelList.filter((item) => item.Longitude !== 0)
console.log(this.channelList, '监控设备数据')
// *
setDeviceLatlng(this.channelList)
// // *
// async onGetDeviceListAPI() {
// const res = await getDeviceListAPI(this.params)
// this.channelList = res.ChannelList.filter((item) => item.Longitude !== 0)
// console.log(this.channelList, '')
// // *
// setDeviceLatlng(this.channelList)
// },
// *
timeStart() {
this.timer = setInterval(() => {
this.timeArr = dateFormat(new Date())
// console.log(this.timeArr)
}, 1000)
},
// *
onUpdateClose() {
console.log('关闭弹窗')
this.play = !this.play
@ -112,28 +133,29 @@ export default {
position: relative;
// *
.system_title {
width: 100vw;
height: 14vh;
position: absolute;
top: 0;
background: url('@/assets/homepage/title_back.png') no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: space-between;
z-index: 2;
position: absolute;
top: 0;
width: 100vw;
height: 18vh;
background: url('~@/assets/homepage/title_back.png') no-repeat;
background-size: 100% 100%;
.blank {
width: 24vw;
height: 14vh;
// background: #33a59f;
}
.title_body {
// width: 28vw;
height: 7vh;
// background: #33a59f;
display: flex;
z-index: 2;
.title_icon {
width: 3.5vw;
height: 7vh;
height: 9vh;
display: flex;
justify-content: center;
align-items: center;
@ -141,34 +163,75 @@ export default {
.police_icon {
width: 2.7vw;
height: 5.4vh;
background: url('@/assets/homepage/police.png') no-repeat;
background: url('~@/assets/homepage/police.png') no-repeat;
background-size: 100% 100%;
}
}
.title_text {
color: aliceblue;
text-align: center;
line-height: 7vh;
font-size: 2vw;
line-height: 9vh;
font-size: 2.25rem;
font-weight: 700;
}
}
.time_body {
width: 24vw;
display: flex;
justify-content: space-between;
width: 25vw;
height: 7vh;
.box_all {
width: 12vw;
display: flex;
justify-content: start;
width: 14vw;
height: 7vh;
// background: #ad337f;
.time_item {
.time_item,
.time {
margin-left: 2px;
width: 12vw;
height: 3.5vh;
line-height: 7vh;
text-align: center;
color: #37fdc7;
font-size: 1.5rem;
font-weight: 600;
color: #e5f5f9;
font-size: 1.2rem;
font-weight: 400;
font-family: PingFangSC PingFang SC;
}
.time {
color: #009cfe;
font-size: 1.2rem;
font-family: D-DIN;
font-weight: bold;
letter-spacing: 2px;
}
}
.box_all_right {
display: flex;
align-items: center;
justify-content: space-around;
width: 9vw;
height: 7vh;
.box_all_right_pic {
width: 2vw;
height: 4.5vh;
background-image: url('@/assets/people-picture/people-cacth/people-3.jpg');
background-repeat: no-repeat;
background-size: 100% 100%;
}
.box_all_right_name {
width: 5vw;
height: 7vh;
font-size: 1.2rem;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
color: #ecf4f9;
line-height: 7vh;
}
}
}
@ -187,7 +250,7 @@ export default {
}
}
.children {
width: 18vw;
width: 20vw;
height: 89vh;
background-color: rgba(25, 64, 166, 0.5);
position: absolute;
@ -198,17 +261,18 @@ export default {
color: #fff;
.coverage {
height: 4vh;
align-self: center;
display: flex;
font-weight: 400;
font-size: 1.5rem;
font-size: 1.2rem;
border-bottom: 1px solid #fff;
background: url('../../assets/icon-hza/bg_104.png');
width: 20vw;
height: 4vh;
background-image: url('@/assets/picture/bg_small_title.png');
background-size: 100% auto;
background-repeat: no-repeat;
padding-left: 3vw;
padding-top: 2vh;
padding-top: 0.7vh;
.checkbox {
padding-top: 1.5vh;
padding-left: 3vh;

@ -1,69 +1,69 @@
import { getDeviceLatlng } from '@/utils/latlng'
// import { getDeviceLatlng } from '@/utils/latlng'
// * 获取本地存储中的监控经纬度信息
const deviceData = getDeviceLatlng()
// TODO 筛选监控经纬度
const device = deviceData.map((item) => ({
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [item.Longitude, item.Latitude]
},
properties: {
channel: item.Channel,
// title: item.Name.toString()
// title: item.Name,
deviceName: item.Name
}
}))
// TODO 监控点聚合图层数据源
const devicePointData = {
type: 'FeatureCollection',
features: device
}
// // * 获取本地存储中的监控经纬度信息
// const deviceData = getDeviceLatlng()
// // TODO 筛选监控经纬度
// const device = deviceData.map((item) => ({
// type: 'Feature',
// geometry: {
// type: 'Point',
// coordinates: [item.Longitude, item.Latitude]
// },
// properties: {
// channel: item.Channel,
// // title: item.Name.toString()
// // title: item.Name,
// deviceName: item.Name
// }
// }))
// // TODO 监控点聚合图层数据源
// const devicePointData = {
// type: 'FeatureCollection',
// features: device
// }
export const addImages = (minemap) => {
// TODO 自定义监控设备图片
minemap.loadImage(
require('@/assets/picture/point_sea_video.png'),
(error, image) => {
if (error) throw error
console.log(image, '图片')
minemap.addImage('device_image', image)
}
)
}
// export const addImages = (minemap) => {
// // TODO 自定义监控设备图片
// minemap.loadImage(
// require('@/assets/picture/point_sea_video.png'),
// (error, image) => {
// if (error) throw error
// console.log(image, '图片')
// minemap.addImage('device_image', image)
// }
// )
// }
export const addSources = (minemap) => {
// * 监控数据源
minemap.addSource('device-point', {
type: 'geojson',
data: devicePointData,
cluster: true,
clusterMaxZoom: 15 /* 最大聚合层级 */,
clusterRadius: 50 /* 聚合半径 */
})
}
// export const addSources = (minemap) => {
// // * 监控数据源
// minemap.addSource('device-point', {
// type: 'geojson',
// data: devicePointData,
// cluster: true,
// clusterMaxZoom: 15 /* 最大聚合层级 */,
// clusterRadius: 50 /* 聚合半径 */
// })
// }
export const addLayers = (minemap) => {
// TODO 监控设备非聚合图层
minemap.addLayer({
id: 'device-points',
type: 'symbol',
// * 图层数据源 - 可以更改数据
source: 'device-point',
// * 图层过滤器
filter: ['!has', 'point_count'],
// * 图层布局样式
layout: {
'icon-image': 'device_image',
'icon-size': 0.5,
'text-field': ['get', 'title'],
'text-offset': [0, 0.6],
'text-anchor': 'top',
'text-size': 10,
// 'icon-allow-overlap': true, //图标允许压盖
'text-allow-overlap': true //图标覆盖文字允许压盖
}
})
}
// export const addLayers = (minemap) => {
// // TODO 监控设备非聚合图层
// minemap.addLayer({
// id: 'device-points',
// type: 'symbol',
// // * 图层数据源 - 可以更改数据
// source: 'device-point',
// // * 图层过滤器
// filter: ['!has', 'point_count'],
// // * 图层布局样式
// layout: {
// 'icon-image': 'device_image',
// 'icon-size': 0.5,
// 'text-field': ['get', 'title'],
// 'text-offset': [0, 0.6],
// 'text-anchor': 'top',
// 'text-size': 10,
// // 'icon-allow-overlap': true, //图标允许压盖
// 'text-allow-overlap': true //图标覆盖文字允许压盖
// }
// })
// }

@ -22,3 +22,15 @@ module.exports = {
}
}
module.exports = {
configureWebpack: {
module: {
rules: [
{
test: /.geojson$/,
loader: 'json-loader'
}
]
}
}
}

Loading…
Cancel
Save