Files
dvcp_v2_wxcp_app/library/apps/AppGuardianship/warningDetail.vue
2024-10-31 14:34:57 +08:00

184 lines
3.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<section class="warningDetail">
<div flex class="header">
<b v-text="detail.name"/>
<div>
{{ $dict.getLabel('intelligentGuardianshipItem2', detail.item) }}
{{ detail.itemValue }}
</div>
</div>
<AiMap class="fill" :map.sync="amap" :lib.sync="mapLib"/>
<div class="navigation">
<div class="content spb" flex>
<div flex class="spb wrap">
<div class="fill" v-text="detail.gpsDesc"/>
<span>最后更新{{ detail.createTime }}</span>
</div>
<open-map :data="detail"/>
</div>
</div>
<make-calls :list="phoneList">
<div class="bottomBtn">拨打电话</div>
</make-calls>
<AiBack/>
</section>
</template>
<script>
import OpenMap from "./component/openMap";
import MakeCalls from "./component/makeCalls";
export default {
name: "warningDetail",
components: {MakeCalls, OpenMap},
computed: {
phoneList() {
let {name: guardianName, phone: guardianPhone} = this.detail
return [{guardianName, guardianPhone}, ...this.detail.guardians]
}
},
data() {
return {
detail: {guardians: []},
mapLib: null,
amap: null,
}
},
methods: {
getDetail(id) {
return this.$http.post("/app/appintelligentguardianshipalarm/queryDetailById", null, {
params: {id},
withoutToken: true
}).then(res => {
if (res?.data) {
this.detail = res.data
}
})
},
initMap() {
if (this.mapLib) {
let pos = new this.mapLib.LngLat(this.detail.lng, this.detail.lat)
this.amap.add(new this.mapLib.Marker({
position: pos,
anchor: 'bottom-center',
content: `<div class="marker">${this.detail.name}</div>`,
}))
this.amap.setFitView()
}
}
},
watch: {
mapLib(v) {
this.detail.id && v && this.initMap()
}
},
created() {
this.$dict.load("intelligentGuardianshipItem", 'intelligentGuardianshipItem2', 'sex')
},
mounted() {
this.getDetail(this.$route.query.id).then(() => this.initMap())
}
}
</script>
<style lang="scss" scoped>
.warningDetail {
padding: 48px 48px 112px;
width: 100%;
height: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
position: absolute;
.header {
font-size: 40px;
font-weight: bold;
color: #333333;
justify-content: center;
margin-bottom: 48px;
& > div {
color: #EC4461;
}
}
.navigation {
.content {
padding: 10px 0 32px;
font-size: 28px;
color: #555;
& > .spb {
margin-right: 40px;
}
.fill {
min-width: 100%;
flex-shrink: 0;
margin-bottom: 10px;
}
span {
margin-left: 0;
color: #999;
font-size: 22px;
}
}
}
.bottomBtn {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
text-align: center;
color: #fff;
background: #1365DD;
line-height: 112px;
}
.AiMap {
margin-bottom: 72px;
}
::v-deep .marker {
border-radius: 52px;
background: #F46159;
color: #fff;
font-size: 22px;
padding: 4px 16px;
white-space: nowrap;
position: relative;
&:before {
position: absolute;
left: calc(50% - 30px);
bottom: -34px;
z-index: -1;
width: 60px;
height: 60px;
border-radius: 50%;
background-color: #F46159;
animation: mapWarn 1s ease-out 0s infinite;
content: " ";
}
&:after {
position: absolute;
display: block;
content: " ";
bottom: -8px;
left: 50%;
transform: translateX(-50%);
border: 8px solid transparent;
border-bottom: none;
border-top-color: #F46159;
height: 0;
width: 0;
}
}
}
</style>