城阳pc工作端前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

461 lines
11 KiB

<template>
<div>
<cpt-bread
v-if="breadList.length > 1"
:bread-list="breadList"
@tap="clickBreadItem"
/>
<div class="g-row">
<div class="g-left">
<div class="bgImg">
<Title text="宣传介绍"/>
<div style="padding:16px;box-sizing: border-box;"> <img src="@/assets/images/shuju/home/linshi.png" style="width: 100%;height: 100%;" alt=""></div>
</div>
<div class="bgImg">
<Title text="党建引领"/>
<djyl/>
</div>
<div class="bgImg">
<Title text="人房总览"/>
<rfzl/>
</div>
</div>
<div class="g-center">
<div class="m-map">
<grid-map
ref="map"
:srcGridData="orgData"
@clickAgency="clickAgencyItem"
@clickDotBtn="handleClickDotBtn"
/>
</div>
<div class=" m-box m-cate map-bottom" style="display:none;">
<div
class="item"
v-for="(item, index) in typeList"
:key="item.type + index"
@click="handelClickNavigator(item.navigator)"
>
<div class="imgBox">
<img :src="require(`@/assets/images/shuju/home/map/${item.label}.png`)" alt="" />
</div>
<div class="label">{{item.label}}</div>
<div class="bubbles">
<span
class="bubble"
v-for="(item, index) in bubbleList"
:key="index"
:style="{
'--w': item.w,
'--c': item.c,
'--x': item.x,
'--d':
parseInt(bubbleList.length / 2) +
1 -
Math.abs(index - parseInt(bubbleList.length / 2)),
}"
></span>
</div>
</div>
</div>
</div>
<div class="g-right">
<div class="bgImg">
<Title text="物联感知"></Title>
<wlgz/>
</div>
<div class="bgImg">
<Title text="基层治理"></Title>
<jczl/>
</div>
<div class="bgImg">
<Title text="社区服务"></Title>
<sqfw/>
</div>
</div>
</div>
<more-dialog :showDialog="showDialog" @handelClickNavigator="handelClickNavigator" @close="close"></more-dialog>
</div>
</template>
<script>
import gridMap from "@/views/dataBoard/cpts/map/index";
import cptBread from "@/views/dataBoard/renfang/cpts/bread";
import cptLoading from "@/views/dataBoard/cpts/loading";
import {requestPost} from "@/js/dai/request";
import getQueryPara from "dai-js/modules/getQueryPara";
import {requestGet} from "@/js/dai/request";
import resiCategoryMap from "@/views/business/resi-category-map.js";
import Title from "@/views/dataBoard/satisfactionEval/components/Title/index.vue";
import djyl from "@/views/dataBoard/home/cpts/djyl";
import rfzl from "@/views/dataBoard/home/cpts/rfzl"
import jczl from "@/views/dataBoard/home/cpts/jczl"
import sqfw from "@/views/dataBoard/home/cpts/sqfw"
import wlgz from "@/views/dataBoard/home/cpts/wlgz"
import moreDialog from "@/views/dataBoard/home/cpts/moreDialog"
export default {//
name: "renfang",
components: {
Title,
gridMap,
cptLoading,
cptBread,
djyl,
rfzl,
jczl,
sqfw,
wlgz,
moreDialog
},
data() {
return {
loading: false,
orgData: {
children: [],
}, //当前组织对象
orgId: "",
orgLevel: "",
breadList: [],
displayedResiId: "",
displayedHouseId: "",
pandectData: {},
popupShow: false,
bubbleList: [
{
w: 8,
x: 10
},
{
w: 9,
x: 50
},
{
w: 4,
x: 30
},
{
w: 5,
x: 80
},
{
w: 4,
x: 30
},
{
w: 4,
x: 70
},
{
w: 6,
x: 20
},
{
w: 8,
x: 50
},
{
w: 4,
x: 60
},
{
w: 6,
x: 65
}
],
typeList:[
{
label:'居民信息',
navigator:'base-resi'
},{
label:'居民选举',
navigator:''
},{
label:'派件管理',
navigator:'shequzhili-Delivery-index'
},{
label:'社区宣传',
navigator:'communityParty-comPromotion-index'
},{
label:'社区活动',
navigator:'volunteer-activityArchive-index'
},{
label:'更多',
navigator:'more'
}
],
showDialog:false
};
},
created(){
this.bubbleList.forEach((i, index) => {
this.$set(
i,
'c',
this.forArrayValue(
[
'rgba(255,255,255,0.2)',
'rgba(255,255,255,0.4)',
'rgba(255,255,255,0.6)'
],
index
)
)
})
},
mounted() {
const queryOrgId = getQueryPara("orgId");
const queryOrgLevel = getQueryPara("orgLevel");
this.init(queryOrgId, queryOrgLevel);
},
watch: {
},
methods: {
close(){
this.showDialog = false
},
handelClickNavigator(navigator){
if(navigator && navigator!='more'){
let routeData = this.$router.resolve({
name: navigator
});
window.open(routeData.href, '_blank');
}else if(navigator == 'more'){
this.showDialog = true;
}
},
forArrayValue (array, sort) {
return array[sort % array.length]
},
async init(queryOrgId, queryOrgLevel) {
if (queryOrgId) {
this.orgId = queryOrgId;
this.orgLevel = queryOrgLevel || "agency";
} else {
this.orgId = this.$store.state.user.agencyId;
this.orgLevel = "agency";
}
//加载组织数据
this.loading = false;
await this.getMapData();
this.loading = true;
},
//加载组织数据
handleClickDotBtn(type, info) {
if (type == "watch-resi") {
this.$router.push({
path: "/dataBoard/renfang/resident",
query: {
user_id:info.search_id,
},
});
// this.displayedResiId = info.user_id;
// this.popupShow = true
} else if (type == "watch-house") {
this.displayedHouseId = info.house_id;
}
},
clickBreadItem({item}) {
this.toBread(item);
},
clickAgencyItem(item) {
if (item.level === 'neighborHood') {
this.$router.push('/homeDetails/index?id=' + item.id + '&breadList='+JSON.stringify(this.breadList))
} else {
this.toBread({
orgId: item.id,
orgLevel: item.level,
meta: {title: item.name},
});
}
},
toBread(item) {
const {orgId} = item;
const {breadList} = this;
let index = breadList.findIndex((val) => val.orgId === orgId);
if (index >= 0) {
this.breadList = breadList.slice(0, index + 1);
} else {
breadList.push(item);
this.breadList = breadList;
}
this.init(item.orgId, item.orgLevel);
},
//获取地图上显示的组织数据
async getMapData() {
const url = "/gov/org/agency/maporg";
let params = {
orgId: this.orgId,
level: this.orgLevel,
};
const {data, code, msg} = await requestPost(url, params);
if (code === 0) {
this.orgData = data;
this.orgId = this.orgId;
// this.orgLevel = this.orgData.level;
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/dataBoard/renfang/index.scss";
.bgImg {
margin-bottom: 7px;
background: url('@/assets/images/shuju/overview/box-bg.png') no-repeat;
background-size: 100% 100%;
}
.map-bottom {
margin: 0 17px;
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-400px);
width: 800px;
display: flex;
justify-content: space-between;
.item {
display: flex;
flex-direction: column;
align-items: center;
position: relative;
.imgBox {
cursor: pointer;
width: 90px;
height: 73px;
background: url("@/assets/images/shuju/home/map/1.png") no-repeat !important;
background-size: 100% !important;
display: flex;
align-items: center;
justify-content: center;
img {
width: 36px;
height: 36px;
animation: moveUpDown 3s infinite linear;
}
}
.label {
font-family: PingFang SC;
font-weight: 500;
font-size: 14px;
color: #B3E7FF;
line-height: 60px;
}
.bubbles {
position: absolute;
width: 100%;
height: 45%;
top: -15px;
left: 0;
z-index: -1;
overflow: hidden;
}
.bubble {
position: absolute;
width: calc(1px * var(--w));
height: calc(1px * var(--w));
background: var(--c);
border-radius: 50%;
left: calc(50% - calc(1px * calc(var(--w) / 2)));
opacity: 0;
bottom: 10%;
animation: rise 3s infinite linear;
animation-delay: calc(600ms * var(--d));
}
@keyframes rise {
0% {
left: calc(50% - calc(1px * calc(var(--w) / 2)));
opacity: 0;
bottom: 10%;
}
50% {
opacity: 0.8;
}
100% {
left: calc(1% * var(--x));
bottom: 90%;
opacity: 0;
}
}
@keyframes moveUpDown {
0% {
transform: translateY(0);
}
50% {
transform: translateY(-15px);
}
100% {
transform: translateY(0);
}
}
}
}
.m-map {
height: 970px;
}
@keyframes autobiography {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.g-row{
position: relative;
.g-left{
position: absolute;
left: 10px;
top: 20px;
z-index: 2;
}
.g-center{
width: 100%;
z-index: 1;
}
.g-right{
position: absolute;
right: 10px;
top: 20px;
z-index: 2;
}
}
</style>