Commit 4a5cdb4d authored by 郭铭瑶's avatar 郭铭瑶 🤘

12/20 修改 完善 暂存

parent bd773424
......@@ -47,8 +47,6 @@ export default {
GET_PUBLICSAFE_RIGHT_GATE:
'/service-special-nandong/public/ironGate/statistical', // 公共安全-右侧-门岗分布
GET_PUBLICSAFE_RIGHT_SAFEMAP: '/service-special-nandong/public/peaceMaps', // 公共安全-右侧-平安地图
GET_PUBLICSAFE_TRUE_PEOPLE:
'/service-special-nand2ong/public/personnel/statistical', // 公共安全-右侧-实有人口
GET_PUBLICSAFE_HOUSE: '/service-basicdatasync-ddd/public/resource/count', // 公共安全-右侧-居住房屋
GET_PUBLICSAFE_NONRESIDENT:
'/service-basicdatasync-ddd/public/nonResident/statistical', // 公共安全-右侧-非居房屋
......@@ -140,6 +138,7 @@ export default {
GET_DISCOVER_STATISTICS:
'/service-special-nandong/public/discover/category/count', // 发现数据
GET_DISCOVER_COUNT: '/service-special-nandong/public/discover/count', // 今日及历史发现数
GET_DISCOVER_LIST: '/service-special-nandong/public/discoverys', // 快处闭环
/** 来福士 */
GET_RAFFLES: '/service-special-nandong/public/lfss', // 来福士列表
......
......@@ -61,7 +61,6 @@ export default {
dispatch('GET_PUBLICSAFE_RIGHT_GATE')
dispatch('GET_PUBLICSAFE_RIGHT_SAFEMAP')
dispatch('GET_PUBLICSAFE_NEWFIND')
dispatch('GET_PUBLICSAFE_TRUE_PEOPLE')
dispatch('getEcologyList')
dispatch('getEcologyPoints')
dispatch('getEcologyConvenient')
......@@ -182,14 +181,6 @@ export default {
commit('SET_PUBLICSAFE_SAFEMAP', content)
},
// 公共服务 - 实有人口
async GET_PUBLICSAFE_TRUE_PEOPLE({ commit }: Method): Promise<void> {
const { content } = (
await ajax.get({ url: api.GET_PUBLICSAFE_TRUE_PEOPLE })
).data
commit('SET_PUBLICSAFE_TRUE_PEOPLE', content)
},
// 公共服务 - 实有房屋
async GET_PUBLICSAFE_HOUSE({ commit }: Method): Promise<void> {
const { content } = (await ajax.get({ url: api.GET_PUBLICSAFE_HOUSE })).data
......
......@@ -20,6 +20,7 @@ export interface CommunityInfoProp {
totHous: number //总户数
communityList: { sectName: string; sectId: string }[] // 小区列表
icMember: unknown[] // 业委会列表
[key: string]: any
}
export interface IssueProp {
date: string //日期
......
......@@ -81,13 +81,6 @@ export default {
): void {
state.pubulicSafeMap = data
},
SET_PUBLICSAFE_TRUE_PEOPLE(
// 公共安全-实有人口
state: GlobalStateProps,
data: { [key: string]: number }
): void {
state.pubulicSafeTruePeople = data
},
SET_PUBLICSAFE_HOUSE(
// 公共安全-居住房屋
state: GlobalStateProps,
......
......@@ -25,6 +25,8 @@ export default {
{ name: '第一工作站', type: 'work1', id: '01001' },
{ name: '第二工作站', type: 'work2', id: '01002' },
{ name: '第三工作站', type: 'work3', id: '01003' },
// {name: "振兴小区", type: url: "/community?id=527635870583459840"}
// {name: "威海路62弄", type: url: "/community?id=527635870583459841"}
],
showCommunityPoints: false, // 显示地图自带小区门牌幢、勾边点位
communityOptions: [
......
<template>
<div id="site-selector" class="site-selector">
<div
id="site-selector"
class="site-selector"
:style="`left:${
isNaN(+curViewType) ? 'calc(20vw + .1rem)' : 'calc(16vw + .1rem)'
}`"
>
<a-select
:value="curViewType"
dropdown-class-name="site-selector-drop-down"
......@@ -69,7 +75,6 @@ $height = .26rem
#site-selector.site-selector
position fixed
top .45rem
left calc(16vw + .1rem)
z-index 99
.ant-select
background $bg
......
......@@ -10,6 +10,7 @@
:stroke-width="strokeWidth"
:gap-degree="gapDegree"
trail-color="rgba(255,255,255,0.1)"
:format="(val) => `${val}%`"
/>
<slot>
<p>{{ name }}</p>
......
......@@ -42,7 +42,7 @@
area="right"
/>
</m-animate>
<ViewSelector />
<SiteSelector />
<MapBtns
@change="selectArea"
@full="fullScreen = $event"
......@@ -63,7 +63,7 @@ import PublicWork from './right/public-work.vue'
import PublicManage from './right/public-manage.vue'
import PublicService from './right/public-service.vue'
import PublicSafety from './right/public-safety.vue'
import ViewSelector from './components/view-selector.vue'
import SiteSelector from './community/site-selector.vue'
import MapBtns from './components/map-btns.vue'
import CaseDrawer from './drawers/case-drawer.vue'
import PopulationDrawer from './drawers/population-drawer.vue'
......@@ -79,7 +79,7 @@ export default defineComponent({
PublicManage,
PublicService,
PublicSafety,
ViewSelector,
SiteSelector,
MapBtns,
CaseDrawer,
PopulationDrawer,
......
......@@ -146,6 +146,7 @@ export default defineComponent({
await ajax.get({
url: api.GET_COMMUNITY_FACILITY,
params: { sectId: id, pageSize: 1000 },
showLoading: false,
})
).data.content.filter((item: any) => item.classification != '微更新')
memberList.value =
......
......@@ -99,6 +99,7 @@ export default defineComponent({
name: `${item.buildingAddr}通道${item.channelNo}`,
...item,
}))
videoList.value = list.value
addresses.value.push(
...list.value.map((item: any) => ({
name: item.name,
......
......@@ -15,8 +15,8 @@
{{ item.name }}
</p>
<p>
<span><m-count :value="item.value" /></span>
<span><m-count :value="item.area" /></span>
<span><m-count :value="item.unit" /></span>
<span><m-count :value="item.value" /></span>
</p>
</div>
</div>
......@@ -53,47 +53,134 @@
</m-card>
</m-card>
<div class="btns">
<span>紫华大厦</span>
<span>文海大楼</span>
<span>振兴片区</span>
<span v-for="item in buildingList" :key="item.sectId">
{{ item.sectName.replace('黄浦区', '').replace('南京街道', '') }}
</span>
</div>
</div>
<m-modal
v-model="archiveModal"
width="33%"
offset="-50%"
title="小区档案"
:mask-closable="false"
>
<template v-if="!showRooms">
<div class="subtitle">小区信息</div>
<m-form
label-width="1.3rem"
:template="[
'name:小区名称|address:小区地址',
'c:物业管理单位|d:区',
'e:房办|f:街道',
'g:建筑面积|h:占地面积',
'i:小区性质',
]"
:data="{}"
/>
<div class="subtitle">
门牌详细信息
<span @click="showRooms = true">查看分户</span>
</div>
<m-form
label-width="1.3rem"
:template="[
'i:单元号|j:门牌地址',
'k:门牌属性|l:使用类型',
'm:总层数|n:竣工日期',
]"
:data="{}"
/>
<div class="subtitle">电梯信息</div>
<m-form
label-width="1.3rem"
:template="[
'o:电梯数量|p:电梯注册代码',
'q:使用证号|r:注册登记机构',
's:注册登记人员|t:安装单位名称',
'u:安装单位代码|v:安装地址',
'w:安装竣工日期|x:安装负责人',
'y:安装负责人联系电话|z:电梯编号',
'a2:设备种类|b2:设计使用年限',
'c2:设备型号|d2:管理单元(小区楼宇)',
]"
:data="{}"
/>
</template>
<template v-else>
<div class="subtitle">
分户信息
<span @click="showRooms = false">&lt;&lt; 返回</span>
</div>
<m-table
:template="[
'序号|分户地址*3|分户面积(㎡)*2|房屋性质*2|房屋类型*2|电梯标志*2',
'a|b|c|d|e|f',
]"
:data="[]"
/>
</template>
</m-modal>
</template>
<script lang="ts" setup>
import icon1 from '@/assets/images/icon31.png'
import icon2 from '@/assets/images/icon37.png'
import icon3 from '@/assets/images/icon38.png'
import { ref } from 'vue'
import { computed, ref } from 'vue'
import store from '@/store'
import Brief from '../components/brief.vue'
const situation = [
{
name: '门牌数',
value: 39,
icon: icon1,
},
{
name: '管理面积(㎡)',
value: 1579.15,
icon: icon2,
},
{
name: '物业企业',
value: 3,
icon: icon3,
},
]
const pieData1 = ref({
dimensions: [
{ name: 'name', displayName: '类型' },
{ name: 'value', displayName: '幢' },
],
source: [
{ name: '商品房', value: 261, area: 1876 },
{ name: '售后房', value: 237, area: 1532 },
{ name: '公房', value: 218, area: 957 },
],
const buildingList = computed(() => store.state.communityInfo.communityList)
const communityInfo = computed(() => store.state.communityInfo)
const situation = computed(() => {
const { totCmp = 0, totArea = 0, totUnits = 0 } = communityInfo.value
return [
{
name: '门牌数',
value: totUnits,
icon: icon1,
},
{
name: '管理面积(㎡)',
value: totArea,
icon: icon2,
},
{
name: '物业企业',
value: totCmp,
icon: icon3,
},
]
})
const pieData1 = computed(() => {
const { stKindList = [] } = communityInfo.value
const data1 = stKindList.find((e: any) => e.stKindName?.includes('商品房'))
const data2 = stKindList.find((e: any) => e.stKindName?.includes('售后房'))
const data3 = stKindList.find((e: any) => e.stKindName?.includes('直管公房'))
return {
dimensions: [
{ name: 'name', displayName: '类型' },
{ name: 'value', displayName: '面积' },
],
source: [
{
name: '商品房',
unit: data1?.totUnits || 0,
value: +data1?.stCnstArea.toFixed(2) || 0,
},
{
name: '售后房',
unit: data2?.totUnits || 0,
value: +data2?.stCnstArea.toFixed(2) || 0,
},
{
name: '直管公房',
unit: data3?.totUnits || 0,
value: +data3?.stCnstArea.toFixed(2) || 0,
},
],
}
})
const option1 = {
color: [
......@@ -104,6 +191,11 @@ const option1 = {
legend: {
show: false,
},
tooltip: {
formatter: (params: any) => {
return `${params.marker}${params.name}${params.value?.value || 0}`
},
},
series: [
{
type: 'pie',
......@@ -115,16 +207,19 @@ const option1 = {
},
],
}
const pieData2 = ref({
dimensions: [
{ name: 'name', displayName: '名称' },
{ name: 'value', displayName: '面积' },
],
source: [
{ name: '物业1', value: 1876 },
{ name: '物业2', value: 1532 },
{ name: '物业3', value: 957 },
],
const pieData2 = computed(() => {
const { cspList = [{ cspName: '-', stCnstArea: 0 }] } = communityInfo.value
const data = cspList.map((e: any) => ({
name: e?.cspName || '无',
value: +(e?.stCnstArea?.toFixed(2) || 0),
}))
return {
dimensions: [
{ name: 'name', displayName: '名称' },
{ name: 'value', displayName: '面积' },
],
source: data,
}
})
const option2 = {
color: [
......@@ -135,6 +230,13 @@ const option2 = {
legend: {
show: false,
},
tooltip: {
formatter: (params: any) => {
return `${params.marker}${params.name}<br/><span style="float:right;">${
params.value?.value || 0
}</span>`
},
},
series: [
{
type: 'pie',
......@@ -185,6 +287,8 @@ const option3 = {
max: 100,
},
}
const archiveModal = ref(false)
const showRooms = ref(false)
</script>
<style lang="stylus" scoped>
......@@ -253,4 +357,26 @@ const option3 = {
.score-chart
width 100%
height 1.2rem
.subtitle
font-weight bold
font-size .12rem
line-height .12rem
margin .06rem 0
>span
color $primary-color
cursor pointer
font-size .09rem
font-weight normal
float right
margin-right .05rem
&:hover
color #fff
text-decoration underline
&:before
content ''
display inline-block
width .04rem
height .1rem
background gold
margin-right .06rem
</style>
......@@ -30,28 +30,43 @@
<m-scroll :length="events.length" :limit="5" mode="2" :step="0.8">
<div v-for="(item, i) in events" :key="i" class="event-item">
<div class="left">
<p>{{ item.name }}</p>
<p>发现时间:{{ item.time }}</p>
<p>{{ transName(item.category) }}</p>
<p>发现时间:{{ item.acceptTime }}</p>
<p>
处置部门:<span class="department">{{ item.department }}</span>
处置部门:<span class="department">
{{ item.disposalOrg || '暂无' }}
</span>
</p>
</div>
<div class="middle">
<div :style="`background-image: url(${item.discover})`">
<div
v-show="item.alarmPic"
:style="`background-image: url(data:image/png;base64,${item.alarmPic})`"
@click="viewImage(item.alarmPic)"
>
<span>发现</span>
</div>
<div :style="`background-image: url(${item.process})`">
<div
v-show="item.donePic"
:style="`background-image: url(data:image/png;base64,${item.donePic})`"
@click="viewImage(item.donePic)"
>
<span>处置</span>
</div>
</div>
<div class="right">
<div
v-for="(step, index) in steps"
:key="step"
:class="{ on: index == item.cur, unreach: +item.cur < index }"
:key="step.key"
:class="{
on: step.key == item.disposalStatus,
unreach:
steps.findIndex((e) => e.key == item.disposalStatus) <
index,
}"
>
<span class="step" />
<p>{{ step }}</p>
<p>{{ step.name }}</p>
</div>
</div>
</div>
......@@ -59,6 +74,17 @@
</div>
</div>
</m-card>
<m-modal
v-model="showImgageModal"
title="图片预览"
width="auto"
offset="-50%"
>
<img
style="max-height: 70vh; width: auto"
:src="`data:image/png;base64,${curImgSrc}`"
/>
</m-modal>
</template>
<script lang="ts" setup>
......@@ -154,47 +180,7 @@ ajax
{ name: '群租', value: groupRent },
]
})
const events = [
{
name: '占用消防通道',
time: '2020-03-13 13:23:08',
department: '小区物业',
discover: c1,
process: c2,
cur: 2,
},
{
name: '占用消防通道',
time: '2020-03-13 13:23:08',
department: '小区物业',
discover: c1,
process: c2,
cur: 2,
},
{
name: '占用消防通道',
time: '2020-03-13 13:23:08',
department: '小区物业',
discover: c1,
process: c2,
cur: 2,
},
{
name: '占用消防通道',
time: '2020-03-13 13:23:08',
department: '小区物业',
discover: c1,
process: c2,
cur: 2,
},
{
name: '占用消防通道',
time: '2020-03-13 13:23:08',
department: '小区物业',
discover: c1,
process: c2,
cur: 2,
},
const events = ref<any>([
{
name: '占用消防通道',
time: '2020-03-13 13:23:08',
......@@ -203,8 +189,40 @@ const events = [
process: c2,
cur: 2,
},
])
ajax
.get({
url: api.GET_DISCOVER_LIST,
params: { pageSize: 1000 },
})
.then((res) => {
events.value = res?.data?.content || []
})
const steps = [
{ key: 'pending', name: '待处置' },
{ key: 'over', name: '已完结' },
]
const steps = ['发现', '接收', '处置', '完成']
const transName = (type: string) => {
switch (type) {
case 'fire':
return '消防通道占用'
case 'batteryCar':
return '电瓶车入梯'
case 'overflowingGarbage':
return '垃圾满溢'
case 'groupRent':
return '违规租赁'
default:
return '无'
}
}
const curImgSrc = ref('')
const showImgageModal = ref(false)
const viewImage = (src: string) => {
curImgSrc.value = src
showImgageModal.value = true
}
</script>
<style lang="stylus" scoped>
......@@ -293,6 +311,7 @@ i.dot
background-repeat no-repeat
border .02rem solid
position relative
cursor pointer
&+div
margin-left .05rem
&:first-child
......@@ -336,7 +355,7 @@ i.dot
margin-right .05rem
z-index 2
p
color #ccc
color #999
font-size .08rem
&.on
.step
......
<template>
<m-card title="业务入口" :mode="mode">
<div class="content">
<div v-for="entry in entrys" :key="entry.url" @click="routeTo(entry.url)">
<!-- <div v-for="entry in entrys" :key="entry.url" @click="routeTo(entry.url)">
{{ entry.inputName }}
</div>
</div> -->
<div @click="routeTo('http://10.101.69.203/shqxj/hp.html')">气象平台</div>
</div>
</m-card>
</template>
......
......@@ -57,17 +57,18 @@ export default defineComponent({
const rankList = computed(() => {
const data = store.state.analysisRank[curOption.value] || []
console.log('1111', curOption.value, data)
const total = data.reduce((acc, cur) => acc + cur.num, 0)
const result = data.map((item: any) => ({
name: item.managementType,
rate: +Math.ceil((item.num / total) * 100).toFixed(0),
value: item.num,
}))
if (result.length > 0) {
const [a, b, c] = result
return [c, a, b]
}
return []
// if (result.length > 0) {
// const [a, b, c] = result
// return [c, a, b]
// }
return result || []
})
const placeList = computed(() => {
......
......@@ -117,11 +117,11 @@ export default defineComponent({
unit: '件',
color: '#fff',
}))
if (result.length > 0) {
const [a, b, c] = result
return [b, a, c]
}
return []
// if (result.length > 0) {
// const [a, b, c] = result
// return [b, a, c]
// }
return result || []
})
const placeList = computed(() => {
const data = store.state.dutyPlaces[curOption.value] || []
......@@ -190,11 +190,12 @@ export default defineComponent({
const rankType = computed(() => {
const data = store.state.dutyRank[curOption.value] || []
console.log('111', data)
if (data.length === 0) return []
const total = data.reduce((acc, cur) => acc + cur.num, 0)
return data.map((item: any) => {
return {
name: item.businsessType,
name: item.managementType || '无',
value: +Math.ceil((item.num / total) * 100).toFixed(0),
}
})
......
......@@ -181,7 +181,6 @@ export default defineComponent({
const showChart = computed(() => store.state.curTheme === 'service')
ajax.get({ url: api.GET_WISDOM_OLD }).then((res) => {
const data = res?.data?.content || {}
console.log('养老占比', data)
oldData.value = data
oldSum.value = [
{
......
......@@ -20,23 +20,17 @@ import { computed, defineComponent, ref } from 'vue'
import Brief from '../components/brief.vue'
import inImg from '@/assets/images/in.png'
import out from '@/assets/images/out.png'
import store from '@/store'
import china from '@/assets/images/china.png'
export default defineComponent({
name: 'Population',
components: { Brief },
setup() {
const truePeople = computed(() => store.state.pubulicSafeTruePeople)
const summary = computed(() => {
return [
{ name: '本市户籍', value: 95718, icon: inImg },
{ name: '境外流入', value: 2833, icon: out },
{ name: '境内流入', value: 29052, icon: china },
// { name: '本市户籍', value: truePeople.value.thisCity, icon: inImg },
// { name: '境外流入', value: truePeople.value.outCountry, icon: out },
// { name: '境内流入', value: truePeople.value.inCountry, icon: china },
]
})
......@@ -48,7 +42,6 @@ export default defineComponent({
return {
summary,
population,
truePeople,
}
},
})
......
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