Commit f3d3fdad authored by 程卓's avatar 程卓
parents e6ca2db5 38bd947c
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -3,17 +3,23 @@ ...@@ -3,17 +3,23 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="icon" href="./favicon.ico" /> <link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>南京东路街道</title> <title>南京东路街道</title>
<script type="module" crossorigin src="./assets/index.a7e6b4b7.js"></script> <script src="./SMap.min.js"></script>
<link rel="modulepreload" href="./assets/vendor.51f58a60.js"> <script src="./Plugins.min.js"></script>
<link rel="stylesheet" href="./assets/index.6cf63887.css"> <script src="./hls.js"></script>
<script type="module" crossorigin src="./assets/index.66409abe.js"></script>
<link rel="modulepreload" href="./assets/vendor.fb6b006a.js">
<link rel="stylesheet" href="./assets/index.097e7037.css">
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
<!-- <script src="/SMap.min.js"></script>
<script src="/Plugins.min.js"></script>
<script src="/hls.js"></script> -->
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
<div id="app"></div> <div id="app"></div>
<script src="/SMap.min.js"></script> <script src="/SMap.min.js"></script>
<script src="/Plugins.min.js"></script> <script src="/Plugins.min.js"></script>
<script src="/hls.js"></script>
<script type="module" src="/src/main.ts"></script> <script type="module" src="/src/main.ts"></script>
</body> </body>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<template> <template>
<router-view /> <router-view :key="$route.fullPath" />
<m-loader v-if="showLoading" /> <m-loader v-if="showLoading" />
</template> </template>
......
...@@ -34,6 +34,7 @@ export default { ...@@ -34,6 +34,7 @@ export default {
GET_PUBLICSAFE_PARTY: '/service-special-nandong/party', // 党建 GET_PUBLICSAFE_PARTY: '/service-special-nandong/party', // 党建
GET_PUBLICSAFE_ECONOMIC: '/service-special-nandong/economic', // 经济 GET_PUBLICSAFE_ECONOMIC: '/service-special-nandong/economic', // 经济
/** 小区屏 */ /** 小区屏 */
GET_COMMUNITY_IDS: '/service-special-nandong/getSectIdList', // 获取小区id列表
GET_COMMUNITY_INFO: '/service-special-nandong/bigscreenCommunity/statistical', // 小区档案 GET_COMMUNITY_INFO: '/service-special-nandong/bigscreenCommunity/statistical', // 小区档案
GET_COMMUNITY_FACILITY: '/service-special-nandong/communityRelations', // 小区设施 GET_COMMUNITY_FACILITY: '/service-special-nandong/communityRelations', // 小区设施
GET_ISSUE_LIST: '/service-special-nandong/management/factors', // 管理要素列表 GET_ISSUE_LIST: '/service-special-nandong/management/factors', // 管理要素列表
......
src/assets/images/point1.png

36.8 KB | W: | H:

src/assets/images/point1.png

26.1 KB | W: | H:

src/assets/images/point1.png
src/assets/images/point1.png
src/assets/images/point1.png
src/assets/images/point1.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/images/point2.png

22.2 KB | W: | H:

src/assets/images/point2.png

16.2 KB | W: | H:

src/assets/images/point2.png
src/assets/images/point2.png
src/assets/images/point2.png
src/assets/images/point2.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/images/point3.png

22.2 KB | W: | H:

src/assets/images/point3.png

16.8 KB | W: | H:

src/assets/images/point3.png
src/assets/images/point3.png
src/assets/images/point3.png
src/assets/images/point3.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/images/point4.png

22.5 KB | W: | H:

src/assets/images/point4.png

17.2 KB | W: | H:

src/assets/images/point4.png
src/assets/images/point4.png
src/assets/images/point4.png
src/assets/images/point4.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/images/point5.png

22.9 KB | W: | H:

src/assets/images/point5.png

15.8 KB | W: | H:

src/assets/images/point5.png
src/assets/images/point5.png
src/assets/images/point5.png
src/assets/images/point5.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/images/point6.png

22.4 KB | W: | H:

src/assets/images/point6.png

16.1 KB | W: | H:

src/assets/images/point6.png
src/assets/images/point6.png
src/assets/images/point6.png
src/assets/images/point6.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/images/point7.png

23.2 KB | W: | H:

src/assets/images/point7.png

16.9 KB | W: | H:

src/assets/images/point7.png
src/assets/images/point7.png
src/assets/images/point7.png
src/assets/images/point7.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -43,17 +43,19 @@ export default defineComponent({ ...@@ -43,17 +43,19 @@ export default defineComponent({
showBuildingBlock: true, showBuildingBlock: true,
...props.config, ...props.config,
}).on(SMap.MapEvent.maploaded, () => { }).on(SMap.MapEvent.maploaded, () => {
// map.enableMouseEvent(false)
setBuildingBlock()
ctx.emit('complete', map) ctx.emit('complete', map)
// hideCommunity()
addListener() addListener()
// map.getLayer('model_white_zw').visible = true // hideCommunity()
// map.getLayer('model_white_WEIHAI33').visible = true
// map.getLayer('model_white_zhenxing2').visible = true
// map.getLayer('model_white_zw').opacity = 0.8
// map.getLayer('model_white_WEIHAI33').opacity = 0.8
// map.getLayer('model_white_zhenxing2').opacity = 0.8
}) })
} }
function setBuildingBlock(val = false) {
map.getLayer('model_white_zw').visible = val // 整个街道图层名
map.getLayer('model_white_zhenxing2').visible = val // 振兴小区名
map.getLayer('model_white_WEIHAI33').visible = val // 威海小区名
map.getLayer('model_white_dyjd').visible = val // 第一街道名
}
function hideCommunity() { function hideCommunity() {
map.hideXQ_Poly() map.hideXQ_Poly()
map.hideMPZ() map.hideMPZ()
...@@ -64,11 +66,20 @@ export default defineComponent({ ...@@ -64,11 +66,20 @@ export default defineComponent({
map.showMPZ() map.showMPZ()
map.showXQ_Point() map.showXQ_Point()
} }
function setFilter(arr: unknown[], key = 'sect_id') {
if (arr.length === 0) return
const valid = arr.map((val) => {
return `${key} like '${val}'`
})
map.setFilter('wg_gis_xq_point', valid.join(' or '))
map.setFilter('wg_gis_mpz', valid.join(' or '))
map.setFilter('wg_gis_xq_poly', valid.join(' or '))
}
function addListener() { function addListener() {
map.enableMouseEvent(false)
// 触发地图点击事件 // 触发地图点击事件
map.on(SMap.MapEvent.click, (view: any, eventParamter: any) => { map.on(SMap.MapEvent.click, (view: any, eventParamter: any) => {
const { x, y } = eventParamter.mapPoint const { x, y } = eventParamter.mapPoint
console.log(map.getZoom())
console.log([x, y]) console.log([x, y])
view.hitTest(eventParamter).then((res: any) => { view.hitTest(eventParamter).then((res: any) => {
if (res.results && res.results.length > 0) { if (res.results && res.results.length > 0) {
...@@ -170,8 +181,6 @@ export default defineComponent({ ...@@ -170,8 +181,6 @@ export default defineComponent({
}: PointProp) { }: PointProp) {
if (!map) return if (!map) return
const points = getMapPoints({ data, key, labelKey, icon, size, color }) const points = getMapPoints({ data, key, labelKey, icon, size, color })
console.log(points)
map.add(points) map.add(points)
return points return points
} }
...@@ -184,12 +193,14 @@ export default defineComponent({ ...@@ -184,12 +193,14 @@ export default defineComponent({
return { return {
focus, focus,
setBuildingBlock,
hideCommunity, hideCommunity,
showCommunity, showCommunity,
addBoundary, addBoundary,
rotate, rotate,
addPoint, addPoint,
remove, remove,
setFilter,
} }
}, },
}) })
......
...@@ -6,7 +6,7 @@ import actions from './actions' ...@@ -6,7 +6,7 @@ import actions from './actions'
export type ThemeType = 'manage' | 'service' | 'safety' export type ThemeType = 'manage' | 'service' | 'safety'
export interface ViewType { export interface ViewType {
name: string name: string
type: 'street' | 'work1' | 'work2' | 'work3' | 'community' type: string
id?: string id?: string
} }
...@@ -56,6 +56,7 @@ export interface GlobalStateProps { ...@@ -56,6 +56,7 @@ export interface GlobalStateProps {
showLoading: boolean showLoading: boolean
curView: ViewType curView: ViewType
readonly viewOptions: ViewType[] readonly viewOptions: ViewType[]
readonly communityOptions: ViewType[]
curTheme: ThemeType curTheme: ThemeType
propertySummary: { [key: string]: number } propertySummary: { [key: string]: number }
caseList: unknown[] caseList: unknown[]
......
...@@ -9,6 +9,10 @@ export default { ...@@ -9,6 +9,10 @@ export default {
{ name: '第二工作站', type: 'work2', id: '01002' }, { name: '第二工作站', type: 'work2', id: '01002' },
{ name: '第三工作站', type: 'work3', id: '01003' }, { name: '第三工作站', type: 'work3', id: '01003' },
], ],
communityOptions: [
{ name: '振兴小区', type: '527635870583459840' },
{ name: '威海路62弄', type: '527635870583459841' },
],
curTheme: 'manage', curTheme: 'manage',
propertySummary: {}, propertySummary: {},
caseList: [], caseList: [],
......
...@@ -31,6 +31,21 @@ ...@@ -31,6 +31,21 @@
<p>{{ btn.name }}</p> <p>{{ btn.name }}</p>
</div> </div>
</div> </div>
<SiteSelector />
<m-drawer v-model="showDrawer">
<div class="community-device">
<p>类型:{{ drawerInfo.key }}</p>
<p>地点:{{ drawerInfo.relationName }}</p>
<div v-if="drawerInfo.beforPhoto">
<p>改造前</p>
<img :src="drawerInfo.beforPhoto" />
</div>
<div v-if="drawerInfo.afterPhoto">
<p>改造后</p>
<img :src="drawerInfo.afterPhoto" />
</div>
</div>
</m-drawer>
</m-grid> </m-grid>
</template> </template>
...@@ -38,6 +53,7 @@ ...@@ -38,6 +53,7 @@
import { computed, defineComponent, onMounted, ref } from 'vue' import { computed, defineComponent, onMounted, ref } from 'vue'
import LeftSection from '@/view/community/left-section.vue' import LeftSection from '@/view/community/left-section.vue'
import RightSection from '@/view/community/right-section.vue' import RightSection from '@/view/community/right-section.vue'
import SiteSelector from '@/view/community/site-selector.vue'
import store from '@/store' import store from '@/store'
import point from '@/assets/images/point.png' import point from '@/assets/images/point.png'
import point1 from '@/assets/images/point1.png' import point1 from '@/assets/images/point1.png'
...@@ -52,20 +68,26 @@ import { ajax, api } from '@/ajax' ...@@ -52,20 +68,26 @@ import { ajax, api } from '@/ajax'
export default defineComponent({ export default defineComponent({
name: 'Main', name: 'Main',
components: { LeftSection, RightSection }, components: { LeftSection, RightSection, SiteSelector },
setup() { setup() {
const loading = ref(true) const loading = ref(true)
const title = computed( const title = computed(
() => store.state.communityInfo.bigscreenCommunityName () => store.state.communityInfo.bigscreenCommunityName
) )
const communityOptions = computed(() => store.state.communityOptions)
const route = useRoute() const route = useRoute()
const curId = ref<unknown>(null)
const initData = (id: unknown) => { const initData = (id: unknown) => {
store.dispatch('initCommunityData', id || '527635870583459840') store.dispatch('initCommunityData', id)
} }
onMounted(() => { onMounted(() => {
initData(route.query.id) curId.value = route.query.id || communityOptions.value[0].type
initData(curId.value)
store.commit(
'SET_CURRENT_VIEW',
communityOptions.value.find((item) => item.type == curId.value)
) // 使标题不显示公共的3个按钮
}) })
store.commit('SET_CURRENT_VIEW', { name: '', type: 'community' }) // 使标题不显示公共的3个按钮
const map = ref<any>(null) const map = ref<any>(null)
const points = ref<any>(null) const points = ref<any>(null)
const initMapPoints = (key: string, data: any[]) => { const initMapPoints = (key: string, data: any[]) => {
...@@ -83,39 +105,32 @@ export default defineComponent({ ...@@ -83,39 +105,32 @@ export default defineComponent({
name: item.id, name: item.id,
x: position && +position[0], x: position && +position[0],
y: position && +position[1], y: position && +position[1],
// icon: getIcon(item.relationName), icon: getIcon(item.relationName),
}) })
}) })
console.log(pointData) console.log(pointData)
points.value = map.value.addPoint({ points.value = map.value.addPoint({
key: key, key: key,
size: [100, 500], size: [100, 500],
data: [ data: pointData,
{
name: '测试',
x: -275.5563452697323,
y: -718.3061904627932,
icon: point4,
},
{
name: '测试',
x: -75.5563452697323,
y: -518.3061904627932,
icon: point,
},
],
}) })
} }
const showDrawer = ref(false)
const drawerInfo = ref<any>({})
const handleMapClick = (e: any) => { const handleMapClick = (e: any) => {
console.log('point-data: ', e) console.log('point-data: ', e)
drawerInfo.value = e
showDrawer.value = true
} }
const handleComplete = (instance: any) => { const handleComplete = (instance: any) => {
let center = [-75.5563452697323, -718.3061904627932] let center = [-135.98002789627407, -722.1597065437004]
if (route.query.id === '527635870583459841') { // let center = [-75.5563452697323, -718.3061904627932]
let zoom = 9.7608
if (curId.value === '527635870583459841') {
instance.getLayer('model_white_WEIHAI33').visible = true instance.getLayer('model_white_WEIHAI33').visible = true
instance.getLayer('model_white_WEIHAI33').opacity = 0.8 instance.getLayer('model_white_WEIHAI33').opacity = 1
center = [-75.5563452697323, -518.3061904627932] center = [-38.73075358777865, -569.7527629458657]
zoom = 10
} else { } else {
instance.getLayer('model_white_zhenxing2').visible = true instance.getLayer('model_white_zhenxing2').visible = true
instance.getLayer('model_white_zhenxing2').opacity = 0.8 instance.getLayer('model_white_zhenxing2').opacity = 0.8
...@@ -129,7 +144,7 @@ export default defineComponent({ ...@@ -129,7 +144,7 @@ export default defineComponent({
i += 2 i += 2
if (i > 0) { if (i > 0) {
setTimeout(() => { setTimeout(() => {
map.value.focus(...center, 9) map.value.focus(...center, zoom)
}, 500) }, 500)
clearInterval(timer) clearInterval(timer)
} }
...@@ -143,7 +158,7 @@ export default defineComponent({ ...@@ -143,7 +158,7 @@ export default defineComponent({
{ name: '周边设施', key: '小区设施' }, { name: '周边设施', key: '小区设施' },
{ name: '监控设施', key: '监控' }, { name: '监控设施', key: '监控' },
]) ])
if (route.query.id === '527635870583459841') { if (curId.value === '527635870583459841') {
btns.value = [ btns.value = [
{ name: '美丽家园', key: '微更新' }, { name: '美丽家园', key: '微更新' },
{ name: '加装电梯', key: '电梯加装' }, { name: '加装电梯', key: '电梯加装' },
...@@ -163,7 +178,7 @@ export default defineComponent({ ...@@ -163,7 +178,7 @@ export default defineComponent({
await ajax.get({ await ajax.get({
url: api.GET_COMMUNITY_FACILITY, url: api.GET_COMMUNITY_FACILITY,
params: { params: {
bigscreenCommunityId: route.query.id, bigscreenCommunityId: curId.value,
classification: key, classification: key,
pageSize: 1000, pageSize: 1000,
}, },
...@@ -171,6 +186,8 @@ export default defineComponent({ ...@@ -171,6 +186,8 @@ export default defineComponent({
).data ).data
initMapPoints(key, content) initMapPoints(key, content)
map.value.hideCommunity() map.value.hideCommunity()
// map.value.setFilter(['1408241008852645'])
// map.value.showCommunity()
curBtn.value = key curBtn.value = key
} }
return { return {
...@@ -178,6 +195,8 @@ export default defineComponent({ ...@@ -178,6 +195,8 @@ export default defineComponent({
title, title,
map, map,
handleComplete, handleComplete,
showDrawer,
drawerInfo,
handleMapClick, handleMapClick,
btns, btns,
curBtn, curBtn,
...@@ -189,6 +208,10 @@ export default defineComponent({ ...@@ -189,6 +208,10 @@ export default defineComponent({
<style lang="stylus" scoped> <style lang="stylus" scoped>
@import '../components/MyComponent/main.styl' @import '../components/MyComponent/main.styl'
.community-device
$full()
img
width 50%
.btns .btns
position fixed position fixed
z-index 9999 z-index 9999
......
...@@ -46,71 +46,13 @@ export default defineComponent({ ...@@ -46,71 +46,13 @@ export default defineComponent({
name: 'Combine', name: 'Combine',
components: { Step }, components: { Step },
setup() { setup() {
const curTab = ref('securityList') const curTab = ref('cleanList')
const tabs = ref([ const tabs = ref([
{ key: 'securityList', name: '安全' },
{ key: 'cleanList', name: '干净' }, { key: 'cleanList', name: '干净' },
{ key: 'orderlyList', name: '有序' }, { key: 'orderlyList', name: '有序' },
{ key: 'securityList', name: '安全' },
]) ])
const list = computed(() => store.state.combineData[curTab.value] || []) const list = computed(() => store.state.combineData[curTab.value] || [])
// const list = ref([
// {
// name: '振兴小区',
// type: '电梯困人',
// address: '上海市黄浦区延安东路1292弄6~40号',
// date: '2020-03-13 13:23:08',
// cur: 2,
// },
// {
// name: '振兴小区',
// type: '电梯困人',
// address: '上海市黄浦区延安东路1292弄6~40号',
// date: '2020-03-13 13:23:08',
// cur: 3,
// },
// {
// name: '振兴小区',
// type: '电梯困人',
// address: '上海市黄浦区延安东路1292弄6~40号',
// date: '2020-03-13 13:23:08',
// cur: 4,
// },
// {
// name: '振兴小区',
// type: '电梯困人',
// address: '上海市黄浦区延安东路1292弄6~40号',
// date: '2020-03-13 13:23:08',
// cur: 5,
// },
// {
// name: '振兴小区',
// type: '电梯困人',
// address: '上海市黄浦区延安东路1292弄6~40号',
// date: '2020-03-13 13:23:08',
// cur: 2,
// },
// {
// name: '振兴小区',
// type: '电梯困人',
// address: '上海市黄浦区延安东路1292弄6~40号',
// date: '2020-03-13 13:23:08',
// cur: 3,
// },
// {
// name: '振兴小区',
// type: '电梯困人',
// address: '上海市黄浦区延安东路1292弄6~40号',
// date: '2020-03-13 13:23:08',
// cur: 4,
// },
// {
// name: '振兴小区',
// type: '电梯困人',
// address: '上海市黄浦区延安东路1292弄6~40号',
// date: '2020-03-13 13:23:08',
// cur: 5,
// },
// ])
return { return {
steps: ['发现', '立案', '派遣', '处置', '核查', '结案'], steps: ['发现', '立案', '派遣', '处置', '核查', '结案'],
tabs, tabs,
......
...@@ -4,27 +4,67 @@ ...@@ -4,27 +4,67 @@
v-for="item in list" v-for="item in list"
:key="item.name" :key="item.name"
:style="`background:url(${item.photo}) 100% / 100% 100% no-repeat`" :style="`background:url(${item.photo}) 100% / 100% 100% no-repeat`"
@click="handleClick(item.id)"
> >
<p>{{ item.name }}</p> <p>{{ item.name }}</p>
<div class="mask">
<img src="@/assets/images/play.png" />
</div>
</div> </div>
<m-modal v-model="showModal" title="视频" width="50%">
<VideoComponent v-if="showModal" :video-src="src" />
</m-modal>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue' import { defineComponent, ref } from 'vue'
import photo1 from '@/assets/images/community1.png' import photo1 from '@/assets/images/community1.png'
import photo2 from '@/assets/images/community2.png' import photo2 from '@/assets/images/community2.png'
import photo3 from '@/assets/images/community3.png' import photo3 from '@/assets/images/community3.png'
import { ajax } from '@/ajax'
import VideoComponent from '../components/video-component.vue'
export default defineComponent({ export default defineComponent({
name: 'CommunityPhoto', name: 'CommunityPhoto',
components: { VideoComponent },
setup() { setup() {
const showModal = ref(false)
const src = ref<string | null>(null)
const handleClick = async (id: string) => {
if (!id) return
const [{ remark2 }] = (
await ajax.get({
url: `http://10.39.25.33:81/njdl/imp/pc/njdl/equipment/getEquipmentVideoById?id=${id}`,
})
).data
src.value = remark2
showModal.value = true
}
return { return {
list: [ list: [
{ name: '重庆北路205号入口', photo: photo1 }, { name: '重庆北路205号入口', photo: photo1 },
{ name: '重庆北路205号道路', photo: photo2 }, { name: '重庆北路205号道路', photo: photo2 },
{ name: '重庆北路205号电梯', photo: photo3 }, { name: '重庆北路205号电梯', photo: photo3 },
// {
// name: '威海路163',
// photo: photo1,
// id: '05e1a5f24a224d66955ba2d22d6f64d3',
// },
// {
// name: '威海路167',
// photo: photo2,
// id: 'fc82739cb3354262850c715aa9098c83',
// },
// {
// name: '成都北路140',
// photo: photo3,
// id: '3c23b0ecd6bb4d73842617010a84cbcf',
// },
], ],
handleClick,
showModal,
src,
} }
}, },
}) })
...@@ -42,6 +82,22 @@ export default defineComponent({ ...@@ -42,6 +82,22 @@ export default defineComponent({
>div >div
height 32% height 32%
position relative position relative
cursor pointer
.mask
$center()
display flex
position absolute
width 100%
height 100%
background-color rgba(0,0,0,0.5)
opacity 0
transition opacity .3s ease-in-out
>img
width .4rem
height @width
&:hover
.mask
opacity 1
>p >p
position absolute position absolute
right 0 right 0
......
...@@ -10,24 +10,24 @@ ...@@ -10,24 +10,24 @@
<img src="@/assets/images/p11.png" /> <img src="@/assets/images/p11.png" />
<div> <div>
<p>健康</p> <p>健康</p>
<m-count class="count" :value="92" /> <m-count class="count" :value="healthVal" />
</div> </div>
</div> </div>
<div> <!-- <div>
<img src="@/assets/images/p12.png" /> <img src="@/assets/images/p12.png" />
<div> <div>
<p>疫苗接种率</p> <p>疫苗接种率</p>
<m-count class="count" :value="57" />% <m-count class="count" :value="57" />%
</div> </div>
</div> </div> -->
</div> </div>
</div> </div>
</div> </div>
<di v> <div>
<Brief :list="summary.slice(0, 3)" size="0.32rem" /> <Brief :list="summary.slice(0, 3)" size="0.32rem" />
<h1></h1> <h1></h1>
<Brief :list="summary.slice(3)" size="0.32rem" /> <Brief :list="summary.slice(3)" size="0.32rem" />
</di> </div>
<div class="buildings"> <div class="buildings">
<div <div
v-for="item in buildingList" v-for="item in buildingList"
...@@ -101,6 +101,17 @@ export default defineComponent({ ...@@ -101,6 +101,17 @@ export default defineComponent({
const memberList = ref<unknown[]>([]) const memberList = ref<unknown[]>([])
const addrList = ref([]) const addrList = ref([])
const communityName = ref('') const communityName = ref('')
const healthVal = ref(0)
watch(
() => store.state.issueData,
(issueData) => {
if (!issueData || issueData.length === 0) return
const [{ totalScore = 0 }] = issueData
healthVal.value = totalScore
},
{ deep: true, immediate: true }
)
watch( watch(
() => store.state.communityInfo, () => store.state.communityInfo,
...@@ -127,6 +138,8 @@ export default defineComponent({ ...@@ -127,6 +138,8 @@ export default defineComponent({
buildingList.value = communityList buildingList.value = communityList
curBuilding.value = curBuilding.value =
(communityList[0] && communityList[0].sectId) || null (communityList[0] && communityList[0].sectId) || null
addrList.value = []
memberList.value = []
selectBuilding(curBuilding.value) selectBuilding(curBuilding.value)
}, },
{ deep: true, immediate: true } { deep: true, immediate: true }
...@@ -183,6 +196,7 @@ export default defineComponent({ ...@@ -183,6 +196,7 @@ export default defineComponent({
).icMember || [] ).icMember || []
} }
return { return {
healthVal,
communityName, communityName,
summary, summary,
buildingList, buildingList,
...@@ -282,8 +296,8 @@ export default defineComponent({ ...@@ -282,8 +296,8 @@ export default defineComponent({
display flex display flex
flex-direction column flex-direction column
justify-content space-around justify-content space-around
width 48% width 48.2%
padding .03rem .07rem padding .03rem .05rem
box-sizing border-box box-sizing border-box
position relative position relative
margin-bottom .06rem margin-bottom .06rem
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
:value="item.value" :value="item.value"
type="dashboard" type="dashboard"
:show-info="false" :show-info="false"
:color="[getColor(item.value), '#FF0C0C']" :color="[getColor(item.value), '#F76B1C']"
:rate="1.2" :rate="1.2"
:stroke-width="8" :stroke-width="8"
:gap-degree="100" :gap-degree="100"
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { computed, defineComponent, ref, watch } from 'vue' import { defineComponent, ref, watch } from 'vue'
import { ChartTypes } from '@/components/MyComponent' import { ChartTypes } from '@/components/MyComponent'
import Circle from '../components/circle.vue' import Circle from '../components/circle.vue'
import store from '@/store' import store from '@/store'
...@@ -121,11 +121,11 @@ export default defineComponent({ ...@@ -121,11 +121,11 @@ export default defineComponent({
}, },
}) })
const issues = ref([ const issues = ref([
{ name: '绿化面积㎡', value: 658 }, { name: '充电桩', value: 3 },
{ name: '监控点位', value: 28 }, { name: '监控点位', value: 30 },
{ name: '垃圾箱房', value: 15 }, { name: '垃圾箱房', value: 5 },
{ name: '非机动车位', value: 150 }, { name: '停车棚', value: 3 },
{ name: '物业服务人员', value: 168 }, { name: '物业公司', value: 4 },
]) ])
return { return {
counts, counts,
......
<template>
<div id="site-selector" class="site-selector">
<a-select
:value="curViewType"
dropdown-class-name="site-selector-drop-down"
@select="handleChange"
>
<a-select-option
v-for="option in options"
:key="option.type"
:value="option.type"
>
{{ option.name }}
</a-select-option>
</a-select>
</div>
</template>
<script lang="ts">
import { computed, defineComponent } from 'vue'
import store from '@/store'
import { useRouter } from 'vue-router'
export default defineComponent({
name: 'SiteSelector',
setup() {
const curViewType = computed(() => store.state.curView.type)
const options = computed(() => [
...store.state.viewOptions,
...store.state.communityOptions,
])
const router = useRouter()
const handleChange = (type: string) => {
store.commit(
'SET_CURRENT_VIEW',
options.value.find((option) => type === option.type)
)
if (store.state.curView.id) {
store.dispatch('initStationData', store.state.curView.id)
}
if (isNaN(Number(type))) {
// 小区以外的屏
router.push({
name: 'main',
})
} else {
router.push({
name: 'community',
query: { id: type },
})
}
}
return {
curViewType,
options,
handleChange,
}
},
})
</script>
<style lang="stylus">
@import '../../components/MyComponent/main.styl'
$bg = rgba(13, 39, 76, .7)
$size = .1rem
$height = .26rem
#site-selector.site-selector
position fixed
top .45rem
left calc(16vw + .1rem)
z-index 99
.ant-select
background $bg
min-width .9rem
.ant-select-selector
min-width .9rem
border-top none
border-left none
border-right none
height $height
.ant-select-selection-item
font-size $size
line-height $height
text-align center
color #fff
font-weight bold
.ant-select-arrow
font-size $size * 0.8
.site-selector-drop-down
&.ant-select-dropdown
background $bg
font-size $size
.ant-select-item
font-size $size
line-height $height / 2
.ant-select-item-option-selected:not(.ant-select-item-option-disabled)
background $bg
font-size $size
</style>
declare const SMap: any // declare const SMap: any
declare const Plugins: any // declare const Plugins: any
export interface ConfigProp { // export interface ConfigProp {
el: string // el: string
options: MapOptionsProp // options: MapOptionsProp
sources: string[] // sources: string[]
} // }
export interface MapOptionsProp { // export interface MapOptionsProp {
viewMode?: string // viewMode?: string
center?: number[] // center?: number[]
zooms?: number[] // zooms?: number[]
zoom?: number // zoom?: number
pitch?: number // pitch?: number
mapStyle?: string // mapStyle?: string
showBuildingBlock?: boolean // showBuildingBlock?: boolean
} // }
class Map { // class Map {
map: any // map: any
config: ConfigProp // config: ConfigProp
constructor(config: ConfigProp) { // constructor(config: ConfigProp) {
this.config = config // this.config = config
} // }
injectSource(): Promise<unknown[]> { // injectSource(): Promise<unknown[]> {
const promises = this.config.sources.map( // const promises = this.config.sources.map(
(source: string, index: number) => { // (source: string, index: number) => {
return new Promise((resolve) => { // return new Promise((resolve) => {
if (document.getElementById(`_source${index}`)) { // if (document.getElementById(`_source${index}`)) {
resolve(true) // resolve(true)
return // return
} // }
const sourceJs = document.createElement('script') // const sourceJs = document.createElement('script')
sourceJs.type = 'text/javascript' // sourceJs.type = 'text/javascript'
sourceJs.src = source // sourceJs.src = source
sourceJs.setAttribute('id', `_source${index}`) // sourceJs.setAttribute('id', `_source${index}`)
document.head.appendChild(sourceJs) // document.head.appendChild(sourceJs)
window.onload = () => resolve(true) // window.onload = () => resolve(true)
}) // })
} // }
) // )
return Promise.all(promises) // return Promise.all(promises)
} // }
} // }
export class S_Map extends Map { // export class S_Map extends Map {
constructor(config: ConfigProp) { // constructor(config: ConfigProp) {
super(config) // super(config)
this.injectSource().then(this.initMap) // this.injectSource().then(this.initMap)
} // }
initMap(): void { // initMap(): void {
this.map = new SMap.Map(this.config.el, this.config.options) // this.map = new SMap.Map(this.config.el, this.config.options)
} // }
onLoaded(cb: (arg: unknown) => void): void { // onLoaded(cb: (arg: unknown) => void): void {
this.map.on(SMap.MapEvent.maploaded, cb) // this.map.on(SMap.MapEvent.maploaded, cb)
} // }
onZoomChange(cb: (arg: unknown) => void): void { // onZoomChange(cb: (arg: unknown) => void): void {
this.map.on(SMap.MapEvent.zoomchanged, cb) // this.map.on(SMap.MapEvent.zoomchanged, cb)
} // }
onCenterChange(cb: (arg: unknown) => void): void { // onCenterChange(cb: (arg: unknown) => void): void {
this.map.on(SMap.MapEvent.centerchanged, cb) // this.map.on(SMap.MapEvent.centerchanged, cb)
} // }
onBlur(cb: (arg: unknown) => void): void { // onBlur(cb: (arg: unknown) => void): void {
this.map.on(SMap.MapEvent.blur, cb) // this.map.on(SMap.MapEvent.blur, cb)
} // }
onFocus(cb: (arg: unknown) => void): void { // onFocus(cb: (arg: unknown) => void): void {
this.map.on(SMap.MapEvent.focus, cb) // this.map.on(SMap.MapEvent.focus, cb)
} // }
onDrag(cb: (arg: unknown) => void): void { // onDrag(cb: (arg: unknown) => void): void {
this.map.on(SMap.MapEvent.drag, cb) // this.map.on(SMap.MapEvent.drag, cb)
} // }
onClick(cb: (arg: unknown, point: unknown) => void): void { // onClick(cb: (arg: unknown, point: unknown) => void): void {
this.map.on(SMap.MapEvent.click, (view: any, eventParamter: any) => { // this.map.on(SMap.MapEvent.click, (view: any, eventParamter: any) => {
view.hitTest(eventParamter).then((res: any) => { // view.hitTest(eventParamter).then((res: any) => {
if (res.results && res.results.length > 0) { // if (res.results && res.results.length > 0) {
cb( // cb(
res.results[0] && res.results[0].graphic.attributes, // res.results[0] && res.results[0].graphic.attributes,
eventParamter.mapPoint // eventParamter.mapPoint
) // )
} // }
}) // })
}) // })
} // }
} // }
<template>
<div class="video-component">
<video
v-if="isVideo"
ref="videoRef"
class="video"
autoplay="autoplay"
controls
>
您的浏览器不支持播放此视频。
</video>
<iframe v-else class="video" :src="videoSrc" frameborder="0" />
</div>
</template>
<script lang="ts">
import {
computed,
defineComponent,
onMounted,
PropType,
ref,
nextTick,
} from 'vue'
declare const Hls: any
export default defineComponent({
name: 'VideoComponent',
props: {
videoSrc: {
type: String as PropType<string>,
required: true,
},
},
setup(props) {
const videoRef = ref<any | null>(null)
const isVideo = computed(
() => props.videoSrc && props.videoSrc.indexOf('m3u8') >= 0
)
const init = () => {
if (!videoRef.value) return
if (Hls.isSupported()) {
const hls = new Hls()
hls.loadSource(props.videoSrc)
hls.attachMedia(videoRef.value)
hls.on(Hls.Events.MANIFEST_PARSED, () => {
videoRef.value.play()
})
} else if (videoRef.value.canPlayType('application/vnd.apple.mpegurl')) {
videoRef.value.src = props.videoSrc
videoRef.value.addEventListener('canplay', () => {
videoRef.value.play()
})
}
}
onMounted(async () => {
await nextTick()
init()
})
return {
videoRef,
isVideo,
}
},
})
</script>
<style lang="stylus" scoped>
.video-component
.video
width 100%
height 100%
</style>
...@@ -30,7 +30,9 @@ export default defineComponent({ ...@@ -30,7 +30,9 @@ export default defineComponent({
'SET_CURRENT_VIEW', 'SET_CURRENT_VIEW',
options.value.find((option) => type === option.type) options.value.find((option) => type === option.type)
) )
store.dispatch('initStationData', store.state.curView.id) if (store.state.curView.id) {
store.dispatch('initStationData', store.state.curView.id)
}
} }
return { return {
curViewType, curViewType,
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { computed, defineComponent, ref } from 'vue' import { computed, defineComponent, ref, watch } from 'vue'
import ManageBasic from './left/manage-basic.vue' import ManageBasic from './left/manage-basic.vue'
import Command from './left/command.vue' import Command from './left/command.vue'
import PublicWork from './right/public-work.vue' import PublicWork from './right/public-work.vue'
...@@ -59,7 +59,6 @@ import MapBtns from './components/map-btns.vue' ...@@ -59,7 +59,6 @@ import MapBtns from './components/map-btns.vue'
import CaseDrawer from './drawers/case-drawer.vue' import CaseDrawer from './drawers/case-drawer.vue'
import PopulationDrawer from './drawers/population-drawer.vue' import PopulationDrawer from './drawers/population-drawer.vue'
import store from '@/store' import store from '@/store'
import { ajax, api } from '@/ajax'
export default defineComponent({ export default defineComponent({
name: 'Main', name: 'Main',
...@@ -76,7 +75,7 @@ export default defineComponent({ ...@@ -76,7 +75,7 @@ export default defineComponent({
PopulationDrawer, PopulationDrawer,
}, },
setup() { setup() {
store.commit('SET_CURRENT_VIEW', { name: '南京东路街道', type: 'street' }) // store.commit('SET_CURRENT_VIEW', { name: '南京东路街道', type: 'street' })
store.dispatch('initData') store.dispatch('initData')
const curViewType = computed(() => store.state.curView.type) const curViewType = computed(() => store.state.curView.type)
const curTheme = computed(() => store.state.curTheme) const curTheme = computed(() => store.state.curTheme)
...@@ -97,22 +96,35 @@ export default defineComponent({ ...@@ -97,22 +96,35 @@ export default defineComponent({
const fullScreen = ref(false) const fullScreen = ref(false)
const showDrawer = ref(false) const showDrawer = ref(false)
const map = ref<any>(null) const map = ref<any>(null)
const mapInstance = ref<any>(null)
ajax // watch(
.get({ // () => curViewType.value,
url: api.GET_CASE, // (val) => {
}) // if (!val || !mapInstance.value) return
.then((res) => { // if (val === 'work1') {
console.log(res) // mapInstance.value.getLayer('model_white_dyjd').visible = true // 第一街道名
}) // mapInstance.value.getLayer('model_white_dyjd').opacity = 0.8
// mapInstance.value.getLayer('model_white_zw').visible = false
// } else {
// mapInstance.value.getLayer('model_white_zw').visible = true
// mapInstance.value.getLayer('model_white_zw').opacity = 0.8
// }
// },
// { immediate: true }
// )
const handleMapComplete = (instance: any) => { const handleMapComplete = (instance: any) => {
instance.getLayer('model_white_zw').visible = true instance.getLayer('model_white_dyjd').visible = true
instance.getLayer('model_white_zw').opacity = 0.8 instance.getLayer('model_white_dyjd').opacity = 0.8
// instance.getLayer('model_white_zw').visible = true
// instance.getLayer('model_white_zw').opacity = 0.8
map.value.addBoundary({ name: '南京东路街道', color: 'rgba(0,0,0,0)' }) map.value.addBoundary({ name: '南京东路街道', color: 'rgba(0,0,0,0)' })
mapInstance.value = instance
} }
return { return {
map, map,
mapInstance,
curViewType, curViewType,
curTheme, curTheme,
streetComponentList, streetComponentList,
......
<template> <template>
<m-card title="业务入口"> <!-- <m-card title="业务入口"> -->
<m-card title="重点工作">
<div class="content"> <div class="content">
<div @click="routeTo('527635870583459840')">振兴小区</div> <div
<div @click="routeTo('527635870583459841')">威海路62弄小区</div> v-for="entry in entrys"
:key="entry.type"
@click="routeTo(entry.type)"
>
{{ entry.name }}
</div>
</div> </div>
</m-card> </m-card>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue' import { defineComponent, computed } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import store from '@/store'
export default defineComponent({ export default defineComponent({
name: 'BussinessEntry', name: 'BussinessEntry',
setup() { setup() {
const entrys = computed(() => store.state.communityOptions)
const router = useRouter() const router = useRouter()
const routeTo = (id: string) => { const routeTo = (id: string) => {
router.push({ router.push({
...@@ -23,6 +31,7 @@ export default defineComponent({ ...@@ -23,6 +31,7 @@ export default defineComponent({
}) })
} }
return { return {
entrys,
routeTo, routeTo,
} }
}, },
......
...@@ -36,9 +36,9 @@ ...@@ -36,9 +36,9 @@
</div> </div>
</div> </div>
</div> </div>
<div> <div class="bar-chart">
<SubTitle>居委事件数量</SubTitle> <SubTitle>居委事件数量</SubTitle>
<div v-if="showChart && barOption.series.length > 0" class="chart bar"> <div v-if="showChart && barOption.series.length > 0" class="chart">
<m-bar :dataset="barData" :option="barOption" /> <m-bar :dataset="barData" :option="barOption" />
</div> </div>
<m-empty v-else /> <m-empty v-else />
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
<div class="rank"> <div class="rank">
<SubTitle>分类排行</SubTitle> <SubTitle>分类排行</SubTitle>
<div v-if="rankList.length > 0" class="content"> <div v-if="rankList.length > 0" class="content">
<m-scroll :length="rankList.length" :limit="3"> <m-scroll :length="rankList.length" :limit="4">
<m-progress <m-progress
v-for="rank in rankList" v-for="rank in rankList"
:key="rank.name" :key="rank.name"
...@@ -94,25 +94,29 @@ export default defineComponent({ ...@@ -94,25 +94,29 @@ export default defineComponent({
{ name: '月', key: 'month' }, { name: '月', key: 'month' },
]) ])
const curOption = ref('month') const curOption = ref('month')
watch([() => curTab.value, () => store.state.curView.id], ([type, id]) => { watch(
if (!id) return [() => curTab.value, () => store.state.curView.id],
store.dispatch('getDutyRank', { ([type, id]) => {
gridId: id, if (!id) return
managementType: type, store.dispatch('getDutyRank', {
}) gridId: id,
store.dispatch('getDutyEvents', { managementType: type,
gridId: id, })
managementType: type, store.dispatch('getDutyEvents', {
}) gridId: id,
store.dispatch('getDutyPlaces', { managementType: type,
gridId: id, })
managementType: type, store.dispatch('getDutyPlaces', {
}) gridId: id,
store.dispatch('getDutyRanking', { managementType: type,
gridId: id, })
managementType: type, store.dispatch('getDutyRanking', {
}) gridId: id,
}) managementType: type,
})
},
{ immediate: true }
)
const rankList = computed(() => { const rankList = computed(() => {
const data = store.state.dutyRanking[curOption.value] || [] const data = store.state.dutyRanking[curOption.value] || []
...@@ -174,7 +178,7 @@ export default defineComponent({ ...@@ -174,7 +178,7 @@ export default defineComponent({
legend: { legend: {
right: '2%', right: '2%',
left: '10%', left: '10%',
top: '-4%', top: '-2%',
itemWidth: fontSize.value * 0.6, itemWidth: fontSize.value * 0.6,
itemHeight: fontSize.value * 0.6, itemHeight: fontSize.value * 0.6,
}, },
...@@ -213,7 +217,7 @@ export default defineComponent({ ...@@ -213,7 +217,7 @@ export default defineComponent({
series: [ series: [
{ {
type: 'pie', type: 'pie',
radius: [0, '90%'], radius: [0, '80%'],
center: ['40%', '50%'], center: ['40%', '50%'],
label: { label: {
show: false, show: false,
...@@ -265,8 +269,9 @@ export default defineComponent({ ...@@ -265,8 +269,9 @@ export default defineComponent({
border-color @color border-color @color
background rgba(50,197,255,.2) background rgba(50,197,255,.2)
.rank .rank
>div min-height 1rem
max-height .6rem .content
height 1rem
overflow hidden overflow hidden
.place .place
.content .content
...@@ -275,12 +280,14 @@ export default defineComponent({ ...@@ -275,12 +280,14 @@ export default defineComponent({
>div >div
width 32% width 32%
height .6rem height .6rem
.chart .bar-chart
width 100% height 1.6rem
height 1.2rem .chart
width 100%
height 90%
.duty-type .duty-type
width 100% width 100%
height .6rem height .8rem
display flex display flex
.chart .chart
width 25% width 25%
......
...@@ -57,17 +57,17 @@ export default defineComponent({ ...@@ -57,17 +57,17 @@ export default defineComponent({
return [ return [
{ {
name: '综合管理', name: '综合管理',
value: [comprehensiveNum, comprehensiveEndNum], value: [comprehensiveEndNum, comprehensiveNum],
icon: icon6, icon: icon6,
}, },
{ {
name: '街面管理', name: '街面管理',
value: [streetNum, streetEndNum], value: [streetEndNum, streetNum],
icon: icon7, icon: icon7,
}, },
{ {
name: '小区管理', name: '小区管理',
value: [communityNum, communityEndNum], value: [communityEndNum, communityNum],
icon: icon8, icon: icon8,
}, },
] ]
......
...@@ -6,11 +6,11 @@ ...@@ -6,11 +6,11 @@
</m-card> </m-card>
<m-card mode="border"> <m-card mode="border">
<div class="duty"><Duty /></div> <div class="duty"><Duty /></div>
<div class="neighbor"><NeighborEntry /></div> <div class="neighbor"><BussinessEntry /></div>
</m-card> </m-card>
<m-card mode="border"> <m-card mode="border">
<div class="analysis"><DutyAnalysis /></div> <div class="analysis"><DutyAnalysis /></div>
<div class="task"><KeyTask /></div> <!-- <div class="task"><KeyTask /></div> -->
</m-card> </m-card>
</div> </div>
</template> </template>
...@@ -20,21 +20,22 @@ import { defineComponent } from 'vue' ...@@ -20,21 +20,22 @@ import { defineComponent } from 'vue'
import Convenient from './convenient.vue' import Convenient from './convenient.vue'
import BeautyHome from './beauty-home.vue' import BeautyHome from './beauty-home.vue'
import Duty from './duty.vue' import Duty from './duty.vue'
import NeighborEntry from './neighbor-entry.vue' // import NeighborEntry from './neighbor-entry.vue'
import BussinessEntry from './business-entry.vue'
import DutyAnalysis from './duty-analysis.vue' import DutyAnalysis from './duty-analysis.vue'
import KeyTask from './key-task.vue' // import KeyTask from './key-task.vue'
export default defineComponent({ export default defineComponent({
name: 'PublicWork', name: 'PublicWork',
components: { components: {
Convenient, Convenient,
BeautyHome, BeautyHome,
NeighborEntry, // NeighborEntry,
BussinessEntry,
Duty, Duty,
DutyAnalysis, DutyAnalysis,
KeyTask, // KeyTask,
}, },
setup() {},
}) })
</script> </script>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment