Browse Source

合并feature-dev

V1.0
SongZhen 3 years ago
parent
commit
b2b24020af
  1. BIN
      src/assets/images/overview/green.png
  2. BIN
      src/assets/images/overview/icon_fw.png
  3. BIN
      src/assets/images/overview/icon_jm.png
  4. BIN
      src/assets/images/overview/icon_ld.png
  5. BIN
      src/assets/images/overview/icon_wg.png
  6. BIN
      src/assets/images/overview/map-pop-img.png
  7. BIN
      src/assets/images/overview/red.png
  8. BIN
      src/assets/images/overview/select.png
  9. BIN
      src/assets/images/overview/yellow.png
  10. 3
      src/assets/scss/dataBoard/overview/index.scss
  11. 7
      src/components/GridTree/nodeWrap.vue
  12. 2
      src/main.js
  13. 10
      src/router/index.js
  14. 5
      src/utils/desensitization.js
  15. 378
      src/views/dataBoard/cpts/details/jmxq.vue
  16. 393
      src/views/dataBoard/cpts/details/smyd.vue
  17. 407
      src/views/dataBoard/cpts/details/xqwmz.vue
  18. 320
      src/views/dataBoard/cpts/details/yxwxfw.vue
  19. 2
      src/views/dataBoard/cpts/family/modules/MatterDetails.vue
  20. 16
      src/views/dataBoard/cpts/family/modules/businessTables/community.vue
  21. 6
      src/views/dataBoard/cpts/family/modules/businessTables/complaint.vue
  22. 15
      src/views/dataBoard/cpts/family/modules/businessTables/economize.vue
  23. 16
      src/views/dataBoard/cpts/family/modules/businessTables/give-service.vue
  24. 16
      src/views/dataBoard/cpts/family/modules/businessTables/reporting-events.vue
  25. 16
      src/views/dataBoard/cpts/family/modules/businessTables/resident.vue
  26. 183
      src/views/dataBoard/cpts/homeDetails/index.vue
  27. 749
      src/views/dataBoard/cpts/map/index.vue
  28. 16
      src/views/dataBoard/cpts/personnel/modules/businessTables/community.vue
  29. 2
      src/views/dataBoard/cpts/personnel/modules/businessTables/complaint.vue
  30. 16
      src/views/dataBoard/cpts/personnel/modules/businessTables/economize.vue
  31. 21
      src/views/dataBoard/cpts/personnel/modules/businessTables/give-service.vue
  32. 2
      src/views/dataBoard/cpts/personnel/modules/businessTables/reporting-events.vue
  33. 16
      src/views/dataBoard/cpts/personnel/modules/businessTables/resident.vue
  34. 38
      src/views/dataBoard/overview/components/jdwgy.vue
  35. 183
      src/views/dataBoard/overview/components/map-top.vue
  36. 63
      src/views/dataBoard/overview/familyPortrait/index.vue
  37. 194
      src/views/dataBoard/overview/index.vue
  38. 2
      src/views/dataBoard/renfang/index.vue
  39. 2
      src/views/dataBoard/satisfactionEval/index.vue
  40. 97
      src/views/dataBoard/satisfactionEval/modules/PersonnelPortrait/index.vue

BIN
src/assets/images/overview/green.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src/assets/images/overview/icon_fw.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 B

BIN
src/assets/images/overview/icon_jm.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 B

BIN
src/assets/images/overview/icon_ld.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 B

BIN
src/assets/images/overview/icon_wg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 890 B

BIN
src/assets/images/overview/map-pop-img.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
src/assets/images/overview/red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/assets/images/overview/select.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
src/assets/images/overview/yellow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

3
src/assets/scss/dataBoard/overview/index.scss

@ -389,10 +389,9 @@
display: flex; display: flex;
width: 140px; width: 140px;
height: 90px; height: 90px;
background: url(../../../../assets/images/shuju/overview/top-bg.png); background: url(../../../../assets/images/shuju/overview/top-bg.png) no-repeat;
background-size: 140px 70px; background-size: 140px 70px;
padding: 8px 16px; padding: 8px 16px;
background-repeat: no-repeat;
.item-info { .item-info {
height: 14px; height: 14px;

7
src/components/GridTree/nodeWrap.vue

@ -27,8 +27,9 @@
</div> </div>
</div> </div>
<div v-if="item.level === 'unit_chief'"> <div v-if="item.level === 'unit_chief'">
<div @click="gotoPersonnel(item)" class="dyzxh" :title="item.name"> <div @click="gotoPersonnel(item)" class="dyzxh" :title="item.organizationName">
{{ spliceNameFun(item.name, 3) }} <!-- {{ spliceNameFun(item.organizationName, 3) }} -->
{{ item.organizationName }}
</div> </div>
</div> </div>
</div> </div>
@ -97,7 +98,7 @@ export default {
}, },
gotoPersonnel(item) { gotoPersonnel(item) {
const grandPid = this.findParentParentId(this.nodeConfig, item.pid); const grandPid = this.findParentParentId(this.nodeConfig, item.pid);
const name = item.name ? item.name : "四号楼二单元302"; const name = item.organizationName ? item.organizationName : "四号楼二单元302";
this.$router.push(`/organizational/microgrid/${item.id}/${grandPid}/${name}`); this.$router.push(`/organizational/microgrid/${item.id}/${grandPid}/${name}`);
}, },
}, },

2
src/main.js

@ -24,6 +24,7 @@ import http from "@/utils/request";
import cloneDeep from "lodash/cloneDeep"; import cloneDeep from "lodash/cloneDeep";
// 引入工具类 // 引入工具类
import "./utils/jwTool"; import "./utils/jwTool";
import desensitization from "./utils/desensitization";
// axios封装 // axios封装
import ajax from "@/js/ajax"; import ajax from "@/js/ajax";
// service // service
@ -95,6 +96,7 @@ Vue.directive("fixed", {
// 挂载全局 // 挂载全局
Vue.prototype.$http = http; Vue.prototype.$http = http;
Vue.prototype.$sensitive = desensitization;
// el-uploader的header配置 // el-uploader的header配置
Vue.prototype.$getElUploadHeaders = () => ({ Vue.prototype.$getElUploadHeaders = () => ({

10
src/router/index.js

@ -258,6 +258,16 @@ export const dataBoardRoutes = {
title: "居民画像", title: "居民画像",
isTab: false, isTab: false,
}, },
},,
{
path: "overview/familyPortrait",
props: true,
component: () => import("@/views/dataBoard/overview/familyPortrait/index"),
name: "dataBoard-overview-familyPortrait",
meta: {
title: "家庭画像",
isTab: false,
},
}, },
{ {
path: "renfang/warn-building", path: "renfang/warn-building",

5
src/utils/desensitization.js

@ -0,0 +1,5 @@
export default function desensitizeSubstring(inputString, start, end) {
// 保留部分非敏感信息,将敏感信息部分截取掉
let desensitizedString = inputString.substring(0, start) + "*".repeat(end - start) + inputString.substring(end);
return desensitizedString;
}

378
src/views/dataBoard/cpts/details/jmxq.vue

@ -0,0 +1,378 @@
<template>
<el-dialog
width="1118px"
:modal="true"
:modal-append-to-body="false"
:destroy-on-close="true"
:visible="showDialog"
@close="handleClose"
>
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="24" style="padding-left: 40px">
<title-box text="居民需求详情" />
</el-col>
<el-col
:span="13"
style="padding-left: 40px"
v-loading="loading"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0"
>
<div class="leftEvent">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div class="eventItem">
<span>所属组织</span>
<span>{{ item.gridName }}</span>
</div>
<div class="eventItem">
<span>上报渠道</span>
<span>{{ item.reportTypeName }}</span>
</div>
<div class="eventItem">
<span>需求类型</span>
<span>{{ item.categoryName }}</span>
</div>
<div class="eventItem">
<span>上报时间</span>
<span>{{
item.reportTime
}}</span>
</div>
<div class="eventItem">
<div>需求描述</div>
<div style="margin-top: 20px">{{ item.locationDetail }}</div>
</div>
<div class="eventItem">
<span>需求人姓名</span>
<span>{{ item.demandUserName }}</span>
</div>
<div class="eventItem">
<span>需求人电话</span>
<span>{{ item.demandUserMobile }}</span>
</div>
<div class="eventItem">
<span>完成时限</span>
<span>{{ item.wantServiceTime }}</span>
</div>
<div class="eventItem">
<span>需求人住址</span>
<span>{{ item.serviceAddress }}</span>
</div>
<div class="eventItem">
<span>上报人</span>
<span>{{ item.reportUserName }}</span>
</div>
</div>
</el-col>
<el-col
:span="11"
v-loading="loading1"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0.3)"
>
<div class="rightEvent m-info">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div v-if="item.logList && item.logList.length > 0">
<!-- <el-card :class="{ 'box-card': source === 'visiual' }" style="min-height: calc(88vh - 50px); overflow: auto"> -->
<div class="m-process">
<div class="list">
<div
class="item"
:class="[index === 0 ? 'z-on' : '']"
:key="item.processId"
v-for="(item, index) in item.logList"
>
<div class="item-row">
<template>
<div class="name">
{{
item.actionCode === "create"
? "创建需求"
: item.actionCode === "update"
? "更新需求"
: item.actionCode === "cancel"
? "撤销需求"
: item.actionCode === "assign"
? "指派"
: item.actionCode === "take_order"
? "接单"
: item.actionCode === "finish"
? "完成"
: item.actionCode === "evaluate"
? "评价"
: ""
}}
</div>
</template>
<div class="date">
{{ item.oprateTime }}
</div>
</div>
<div>
<template v-if="item.actionCode === 'create'">
<div class="detail">
<div class="detail-field">上报人</div>
<div class="detail-value">
{{ item.reportUserName }} {{ item.roleName }}
</div>
</div>
</template>
<template v-if="item.actionCode === 'assign'">
<div class="detail">
<div class="detail-field">办理人</div>
<div class="detail-value">
{{ item.assignUser }}
</div>
</div>
<div class="detail">
<div class="detail-field">指派给服务方</div>
<div class="detail-value">
{{ item.serverName }} {{
item.serviceType === "volunteer"
? "志愿者"
: item.serviceType === "social_org"
? "社会组织"
: item.serviceType === "community_org"
? "社区自组织"
: item.serviceType === "party_unit"
? "区域党建单位"
: item.serviceType === "enterprise"
? "企业,商家"
: ""
}}
</div>
</div>
</template>
<template v-if="item.actionCode === 'finish'">
<div class="detail">
<div class="detail-field">服务方</div>
<div class="detail-value">
{{ item.serverName }} {{
item.serviceType === "volunteer"
? "志愿者"
: item.serviceType === "social_org"
? "社会组织"
: item.serviceType === "community_org"
? "社区自组织"
: item.serviceType === "party_unit"
? "区域党建单位"
: item.serviceType === "enterprise"
? "企业,商家"
: ""
}}
</div>
</div>
<!-- <div class="detail">
<div class="detail-field">完成时间</div>
<div class="detail-value">
{{ item.assignUser }}
</div>
</div>-->
</template>
</div>
</div>
</div>
</div>
<!-- </el-card> -->
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
import titleBox from "@/views/dataBoard/satisfactionEval/components/Title";
export default {
name: "ReportAnEvent",
components: {
titleBox,
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {
logList: [],
},
loading: false,
loading1: false,
activities: [],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
}
},
immediate: true,
},
},
mounted() {},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getDetailsData(id) {
this.loading = true;
let params = {
demandRecId: id,
};
this.$http
.post("/governance/userdemand/demandDetail", params)
.then((res) => {
this.loading = false;
const { code, data, msg } = res.data;
if (code === 0) {
this.item = data;
} else {
this.$message.error(msg);
}
});
},
},
};
</script>
<style lang="scss" src="@/assets/scss/dataBoard/popup-info.scss" scoped></style>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
/deep/ .el-dialog {
background: url(~@/assets/images/manyidu/dialog-bg.png);
background-size: 100% 100%;
width: 1118px;
height: 822px;
}
/deep/ .el-dialog__body {
padding: 0 20px 30px;
}
/deep/ .el-dialog__header {
border: 0 !important;
}
/deep/ .el-dialog__headerbtn {
top: 24px;
right: 32px;
.el-dialog__close {
color: #ffffff;
font-weight: 600;
}
}
@mixin fontStyle {
color: #fff !important;
font-size: 14px !important;
}
.eventWrap {
width: 1094px;
height: 798px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
color: #ffffff;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.name {
@include fontStyle;
}
.date {
@include fontStyle;
}
.detail {
@include fontStyle;
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
color: #fff;
.eventItem {
font-size: 14px;
margin-bottom: 24px;
span:first-child {
}
span:last-child {
}
}
}
.rightEvent {
color: #fff;
}
}
</style>

393
src/views/dataBoard/cpts/details/smyd.vue

@ -0,0 +1,393 @@
<template>
<el-dialog
width="1118px"
:modal="true"
:modal-append-to-body="false"
:destroy-on-close="true"
:visible="showDialog"
@close="handleClose"
>
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="24" style="padding-left: 40px">
<title-box text="省满意度调查不满意事项详情" />
</el-col>
<el-col
:span="13"
style="padding-left: 40px"
v-loading="loading"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0"
>
<div class="leftEvent">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div class="eventItem">
<span>所属组织</span>
<span>{{ item.agencyName }}</span>
</div>
<div class="eventItem">
<span>不满意事项来源</span>
<span>省满意度调查</span>
</div>
<div class="eventItem">
<span>不满意事项类型</span>
<span>{{ item.scopeId && getSxType(item.scopeId) }}</span>
</div>
<div class="eventItem">
<span>所属月份</span>
<span>{{
item.createdTime && getMonthData(item.createdTime)
}}</span>
</div>
<div class="eventItem">
<div>不满意事项描述</div>
<div style="margin-top: 20px">{{ item.problemDesc }}</div>
</div>
<div class="eventItem">
<span>提交人姓名</span>
<span>{{ item.name }}</span>
</div>
<div class="eventItem">
<span>提交人电话</span>
<span>{{ item.mobile }}</span>
</div>
<div class="eventItem">
<span>完成时限</span>
<span>{{ item.completeTime }}</span>
</div>
</div>
</el-col>
<el-col
:span="11"
v-loading="loading1"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0.3)"
>
<div class="rightEvent m-info">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div v-if="item.logList && item.logList.length > 0">
<!-- <el-card :class="{ 'box-card': source === 'visiual' }" style="min-height: calc(88vh - 50px); overflow: auto"> -->
<div class="m-process">
<div class="list">
<div
class="item"
:class="[index === 0 ? 'z-on' : '']"
:key="item.processId"
v-for="(item, index) in item.logList"
>
<div class="item-row">
<template>
<div class="name">
{{
item.actionCode === "create"
? "创建需求"
: item.actionCode === "update"
? "更新需求"
: item.actionCode === "cancel"
? "撤销需求"
: item.actionCode === "assign"
? "指派"
: item.actionCode === "take_order"
? "接单"
: item.actionCode === "finish"
? "完成"
: item.actionCode === "evaluate"
? "评价"
: ""
}}
</div>
</template>
<div class="date">
{{ item.oprateTime }}
</div>
</div>
<div>
<template v-if="item.actionCode === 'create'">
<div class="detail">
<div class="detail-field">上报人</div>
<div class="detail-value">
{{ item.reportUserName }} {{ item.roleName }}
</div>
</div>
</template>
<template v-if="item.actionCode === 'assign'">
<div class="detail">
<div class="detail-field">办理人</div>
<div class="detail-value">
{{ item.assignUser }}
</div>
</div>
<div class="detail">
<div class="detail-field">指派给服务方</div>
<div class="detail-value">
{{ item.serverName }} {{
item.serviceType === "volunteer"
? "志愿者"
: item.serviceType === "social_org"
? "社会组织"
: item.serviceType === "community_org"
? "社区自组织"
: item.serviceType === "party_unit"
? "区域党建单位"
: item.serviceType === "enterprise"
? "企业,商家"
: ""
}}
</div>
</div>
</template>
<template v-if="item.actionCode === 'finish'">
<div class="detail">
<div class="detail-field">服务方</div>
<div class="detail-value">
{{ item.serverName }} {{
item.serviceType === "volunteer"
? "志愿者"
: item.serviceType === "social_org"
? "社会组织"
: item.serviceType === "community_org"
? "社区自组织"
: item.serviceType === "party_unit"
? "区域党建单位"
: item.serviceType === "enterprise"
? "企业,商家"
: ""
}}
</div>
</div>
<!-- <div class="detail">
<div class="detail-field">完成时间</div>
<div class="detail-value">
{{ item.assignUser }}
</div>
</div>-->
</template>
</div>
</div>
</div>
</div>
<!-- </el-card> -->
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
import titleBox from "@/views/dataBoard/satisfactionEval/components/Title";
export default {
name: "ReportAnEvent",
components: {
titleBox,
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {
logList: [],
},
loading: false,
loading1: false,
activities: [],
//
satisfactionCategoryOptions: [],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
}
},
immediate: true,
},
},
mounted() {},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getSxType(value) {
if (this.satisfactionCategoryOptions.length > 0 && value) {
return this.satisfactionCategoryOptions.filter(
(item) => item.value == value
)[0].label;
}
return "";
},
getMonthData(time) {
if (time) {
return this.$moment(time).format("YYYY年MM月");
}
return "";
},
getDetailsData(id) {
this.loading = true;
this.$http
.post("/governance/provinceEvaluationRecord/" + id)
.then((res) => {
this.loading = false;
const { code, data, msg } = res.data;
if (code === 0) {
this.item = data;
} else {
this.$message.error(msg);
}
});
this.$http
.get(
"/governance/satisfactionDetailList/getUnsatisfiedCategory?satisfactionSource="
)
.then(({ data: { data } }) => {
this.satisfactionCategoryOptions = data.map((item) => {
return {
label: item.categoryName,
value: item.categoryCode,
};
});
});
},
},
};
</script>
<style lang="scss" src="@/assets/scss/dataBoard/popup-info.scss" scoped></style>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
/deep/ .el-dialog {
background: url(~@/assets/images/manyidu/dialog-bg.png);
background-size: 100% 100%;
width: 1118px;
max-height: 822px;
}
/deep/ .el-dialog__body {
padding: 0 20px 30px;
}
/deep/ .el-dialog__header {
border: 0 !important;
}
/deep/ .el-dialog__headerbtn {
top: 24px;
right: 32px;
.el-dialog__close {
color: #ffffff;
font-weight: 600;
}
}
@mixin fontStyle {
color: #fff !important;
font-size: 14px !important;
}
.eventWrap {
width: 1094px;
max-height: 798px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
color: #ffffff;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.name {
@include fontStyle;
}
.date {
@include fontStyle;
}
.detail {
@include fontStyle;
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
color: #fff;
.eventItem {
font-size: 14px;
margin-bottom: 24px;
span:first-child {
}
span:last-child {
}
}
}
.rightEvent {
color: #fff;
}
}
</style>

407
src/views/dataBoard/cpts/details/xqwmz.vue

@ -0,0 +1,407 @@
<template>
<el-dialog
width="1118px"
:modal="true"
:modal-append-to-body="false"
:destroy-on-close="true"
:visible="showDialog"
@close="handleClose"
>
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="24" style="padding-left: 40px">
<title-box text="社区满意度自查不满意事项详情" />
</el-col>
<el-col
:span="13"
style="padding-left: 40px"
v-loading="loading"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0"
>
<div class="leftEvent">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div class="eventItem">
<span>所属组织</span>
<span>{{ item.agencyName }}</span>
</div>
<div class="eventItem">
<span>不满意事项来源</span>
<span>社区意度自查</span>
</div>
<div class="eventItem">
<span>不满意事项类型</span>
<span>{{ item.scopeId && getSxType(item.scopeId) }}</span>
</div>
<div class="eventItem">
<span>所属月份</span>
<span>{{
item.createdTime && getMonthData(item.createdTime)
}}</span>
</div>
<div class="eventItem">
<div>不满意事项描述</div>
<div style="margin-top: 20px">{{ item.problemDesc }}</div>
</div>
<div class="eventItem">
<span>提交人姓名</span>
<span>{{ item.reporterName }}</span>
</div>
<div class="eventItem">
<span>提交人电话</span>
<span>{{ item.reporterMobile }}</span>
</div>
<div class="eventItem">
<span>完成时限</span>
<span>{{ item.completeTime }}</span>
</div>
</div>
</el-col>
<el-col
:span="11"
v-loading="loading1"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0.3)"
>
<div class="rightEvent m-info">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div v-if="item.logList && item.logList.length > 0">
<!-- <el-card :class="{ 'box-card': source === 'visiual' }" style="min-height: calc(88vh - 50px); overflow: auto"> -->
<div class="m-process">
<div class="list">
<div
class="item"
:class="[index === 0 ? 'z-on' : '']"
:key="item.processId"
v-for="(item, index) in item.logList"
>
<div class="item-row">
<template>
<div class="name">
{{
item.actionCode === "create"
? "创建需求"
: item.actionCode === "update"
? "更新需求"
: item.actionCode === "cancel"
? "撤销需求"
: item.actionCode === "assign"
? "指派"
: item.actionCode === "take_order"
? "接单"
: item.actionCode === "finish"
? "完成"
: item.actionCode === "evaluate"
? "评价"
: ""
}}
</div>
</template>
<div class="date">
{{ item.oprateTime }}
</div>
</div>
<div>
<template v-if="item.actionCode === 'create'">
<div class="detail">
<div class="detail-field">上报人</div>
<div class="detail-value">
{{ item.reportUserName }} {{ item.roleName }}
</div>
</div>
</template>
<template v-if="item.actionCode === 'assign'">
<div class="detail">
<div class="detail-field">办理人</div>
<div class="detail-value">
{{ item.assignUser }}
</div>
</div>
<div class="detail">
<div class="detail-field">指派给服务方</div>
<div class="detail-value">
{{ item.serverName }} {{
item.serviceType === "volunteer"
? "志愿者"
: item.serviceType === "social_org"
? "社会组织"
: item.serviceType === "community_org"
? "社区自组织"
: item.serviceType === "party_unit"
? "区域党建单位"
: item.serviceType === "enterprise"
? "企业,商家"
: ""
}}
</div>
</div>
</template>
<template v-if="item.actionCode === 'finish'">
<div class="detail">
<div class="detail-field">服务方</div>
<div class="detail-value">
{{ item.serverName }} {{
item.serviceType === "volunteer"
? "志愿者"
: item.serviceType === "social_org"
? "社会组织"
: item.serviceType === "community_org"
? "社区自组织"
: item.serviceType === "party_unit"
? "区域党建单位"
: item.serviceType === "enterprise"
? "企业,商家"
: ""
}}
</div>
</div>
<!-- <div class="detail">
<div class="detail-field">完成时间</div>
<div class="detail-value">
{{ item.assignUser }}
</div>
</div>-->
</template>
</div>
</div>
</div>
</div>
<!-- </el-card> -->
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
import titleBox from "@/views/dataBoard/satisfactionEval/components/Title";
export default {
name: "ReportAnEvent",
components: {
titleBox,
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {
logList: [],
},
loading: false,
loading1: false,
activities: [],
//
satisfactionCategoryOptions: [],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
}
},
immediate: true,
},
},
mounted() {},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getSxType(value) {
if (this.satisfactionCategoryOptions.length > 0 && value) {
return this.satisfactionCategoryOptions.filter(
(item) => item.value == value
)[0].label;
}
return "";
},
getMonthData(time) {
if (time) {
return this.$moment(time).format("YYYY年MM月");
}
return "";
},
getDetailsData(id) {
this.loading = true;
this.$http
.get(
"/governance/satisfaction/communitySelfInsp/inspResult/detail/" + id
)
.then((res) => {
this.loading = false;
const { code, data, msg } = res.data;
if (code === 0) {
this.item = {...data.reporter,...data.satisfaction};
} else {
this.$message.error(msg);
}
});
// this.$http
// .post("/governance/provinceEvaluationRecord/" + id)
// .then((res) => {
// this.loading = false;
// const { code, data, msg } = res.data;
// if (code === 0) {
// this.item = data;
// } else {
// this.$message.error(msg);
// }
// });
this.$http
.get(
"/governance/satisfactionDetailList/getUnsatisfiedCategory?satisfactionSource="
)
.then(({ data: { data } }) => {
this.satisfactionCategoryOptions = data.map((item) => {
return {
label: item.categoryName,
value: item.categoryCode,
};
});
});
},
},
};
</script>
<style lang="scss" src="@/assets/scss/dataBoard/popup-info.scss" scoped></style>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
/deep/ .el-dialog {
background: url(~@/assets/images/manyidu/dialog-bg.png);
background-size: 100% 100%;
width: 1118px;
max-height: 822px;
}
/deep/ .el-dialog__body {
padding: 0 20px 30px;
}
/deep/ .el-dialog__header {
border: 0 !important;
}
/deep/ .el-dialog__headerbtn {
top: 24px;
right: 32px;
.el-dialog__close {
color: #ffffff;
font-weight: 600;
}
}
@mixin fontStyle {
color: #fff !important;
font-size: 14px !important;
}
.eventWrap {
width: 1094px;
max-height: 798px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
color: #ffffff;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.name {
@include fontStyle;
}
.date {
@include fontStyle;
}
.detail {
@include fontStyle;
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
color: #fff;
.eventItem {
font-size: 14px;
margin-bottom: 24px;
span:first-child {
}
span:last-child {
}
}
}
.rightEvent {
color: #fff;
}
}
</style>

320
src/views/dataBoard/cpts/details/yxwxfw.vue

@ -0,0 +1,320 @@
<template>
<el-dialog
width="1118px"
:modal="true"
:modal-append-to-body="false"
:destroy-on-close="true"
:visible="showDialog"
@close="handleClose"
>
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="24" style="padding-left: 40px">
<title-box text="社区服务详情" />
</el-col>
<el-col
:span="13"
style="padding-left: 40px"
v-loading="loading"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0"
>
<div class="leftEvent">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div class="eventItem">
<span>所属组织</span>
<span>{{ formData.principalName }}</span>
</div>
<div class="eventItem">
<span>服务类型</span>
<span>{{
formData.customerId && getFwType(formData.customerId)
}}</span>
</div>
<div class="eventItem">
<span>服务事项</span>
<span>{{ formData.serviceName }}</span>
</div>
<div class="eventItem">
<span>服务时间</span>
<span
>{{ formData.serviceTimeStart }} ~
{{ formData.serviceTimeEnd }}</span
>
</div>
<div class="eventItem">
<div>服务内容</div>
<div style="margin-top: 20px">{{ formData.remark }}</div>
</div>
<div class="eventItem">
<span>经办人</span>
<span>{{ formData.principalName }}</span>
</div>
<div class="eventItem">
<span>联系电话</span>
<span>{{ formData.principalContact }}</span>
</div>
<div class="eventItem">
<span>服务方</span>
<span>{{ formData.principalName }}</span>
</div>
<div class="eventItem">
<span>政策依据</span>
<span>{{ formData.policyTitle }}</span>
</div>
</div>
</el-col>
<el-col
:span="11"
v-loading="loading1"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0.3)"
>
<div class="rightEvent m-info">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div v-if="formData.gridIdList.length > 0">
<div class="m-process">
<div class="list">
<div
class="item"
:class="[index === 0 ? 'z-on' : '']"
v-for="(item, index) in formData.gridIdList"
>
<div class="item-row">
<div class="name">{{ item.serviceStatus }}</div>
<div class="date">
{{ item.createdTime }}
</div>
</div>
<div>
<template v-if="item.serviceStatus === '创建服务'">
<div class="detail">
<div class="detail-field">创建人</div>
<div class="detail-value">
{{ item.createdBy }} {{ item.agencyName }}
</div>
</div>
</template>
<template v-else>
<div class="detail">
<div class="detail-field">服务方</div>
<div class="detail-value">
{{ item.objectName }}
</div>
</div>
</template>
</div>
</div>
</div>
</div>
<!-- </el-card> -->
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
import titleBox from "@/views/dataBoard/satisfactionEval/components/Title";
export default {
name: "ReportAnEvent",
components: {
titleBox,
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {},
loading: false,
loading1: false,
activities: [],
zuziTypes: {
community_org: "社区自组织",
ic_user_volunteer: "志愿者",
party_unit: "联建单位",
ommunity_org: "",
},
//
serviceStatusList: {
in_service: "服务中",
completed: "已完成",
},
//
serviceTypesLevel1: [],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
}
},
immediate: true,
},
},
mounted() {
this.$http
.get("/governance/commonServiceType/selectList/0")
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceTypesLevel1 = res.data;
console.log("this.serviceTypesLevel1::", this.serviceTypesLevel1);
}
})
.catch(() => {
return this.$message.error("网络错误");
});
},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getFwType(value) {
if (this.serviceTypesLevel1.length > 0 && value) {
return this.serviceTypesLevel1.filter(
(item) => item.customerId == value
)[0].name;
}
return "";
},
getDetailsData(id) {
this.loading = true;
this.$http
.post("/governance/icServiceRecordV2/detail", {
serviceRecordId: id,
})
.then((res) => {
const { code, data, msg } = res.data;
if (code === 0) {
this.formData = data;
this.loading = false;
} else {
this.loading = false;
this.$message.error(msg);
}
});
},
},
};
</script>
<style lang="scss" src="@/assets/scss/dataBoard/popup-info.scss" scoped></style>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
/deep/ .el-dialog {
background: url(~@/assets/images/manyidu/dialog-bg.png);
background-size: 100% 100%;
width: 1118px;
max-height: 822px;
}
/deep/ .el-dialog__body {
padding: 0 20px 30px;
}
/deep/ .el-dialog__header {
border: 0 !important;
}
/deep/ .el-dialog__headerbtn {
top: 24px;
right: 32px;
.el-dialog__close {
color: #ffffff;
font-weight: 600;
}
}
@mixin fontStyle {
color: #fff !important;
font-size: 14px !important;
}
.eventWrap {
width: 1094px;
max-height: 798px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
color: #ffffff;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.name {
@include fontStyle;
}
.date {
@include fontStyle;
}
.detail {
@include fontStyle;
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
color: #fff;
.eventItem {
font-size: 14px;
margin-bottom: 24px;
span:first-child {
}
span:last-child {
}
}
}
.rightEvent {
color: #fff;
}
}
</style>

2
src/views/dataBoard/cpts/family/modules/MatterDetails.vue

@ -15,7 +15,7 @@
{{ item.tagName }} {{ item.tagName }}
</div> </div>
</div> </div>
<div class="jtxxdz">四季景园1号楼1单元101</div> <!-- <div class="jtxxdz">四季景园1号楼1单元101</div>-->
</div> </div>
</template> </template>

16
src/views/dataBoard/cpts/family/modules/businessTables/community.vue

@ -8,16 +8,21 @@
<el-table-column label="是否回访" prop="isReturn" width="120" /> <el-table-column label="是否回访" prop="isReturn" width="120" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<xqwmz :showDialog="showDialog" :id="rowId" @close="close" />
</div> </div>
</template> </template>
<script> <script>
import xqwmz from "@/views/dataBoard/cpts/details/xqwmz.vue";
export default { export default {
name: "community", name: "community",
components: {
xqwmz,
},
props: { props: {
juminArr: { juminArr: {
type: Array, type: Array,
@ -31,6 +36,8 @@ export default {
}, },
list: [], list: [],
total: 0, total: 0,
rowId: null,
showDialog: false,
}; };
}, },
watch: { watch: {
@ -44,6 +51,13 @@ export default {
}, },
}, },
methods: { methods: {
handleView(item) {
this.rowId = item.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
getList() { getList() {
// (-2-1访0访/访1访) // (-2-1访0访/访1访)
const completeFlags = { const completeFlags = {

6
src/views/dataBoard/cpts/family/modules/businessTables/complaint.vue

@ -9,7 +9,7 @@
<el-table-column label="标记" prop="marktype" width="" /> <el-table-column label="标记" prop="marktype" width="" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -48,6 +48,8 @@ export default {
rowId: null, rowId: null,
list: [], list: [],
total: 0, total: 0,
rowId: null,
showDialog: false,
}; };
}, },
watch: { watch: {
@ -62,7 +64,7 @@ export default {
}, },
methods: { methods: {
handleView(row) { handleView(row) {
this.rowId = "1552950312263405569"; //row.id; this.rowId = row.id;
this.showDialog = true; this.showDialog = true;
}, },
close() { close() {

15
src/views/dataBoard/cpts/family/modules/businessTables/economize.vue

@ -8,7 +8,7 @@
<el-table-column label="是否回访" prop="isReturn" width="120" /> <el-table-column label="是否回访" prop="isReturn" width="120" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -16,8 +16,12 @@
</template> </template>
<script> <script>
import smyd from "@/views/dataBoard/cpts/details/smyd.vue";
export default { export default {
name: "economize", name: "economize",
components: {
smyd,
},
props: { props: {
juminArr: { juminArr: {
type: Array, type: Array,
@ -31,6 +35,8 @@ export default {
}, },
list: [], list: [],
total: 0, total: 0,
rowId: null,
showDialog: false,
}; };
}, },
watch: { watch: {
@ -44,6 +50,13 @@ export default {
}, },
}, },
methods: { methods: {
handleView(row) {
this.rowId = row.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
getList() { getList() {
// //
this.$http this.$http

16
src/views/dataBoard/cpts/family/modules/businessTables/give-service.vue

@ -8,16 +8,21 @@
<el-table-column label="创建时间" prop="serviceTimeStart" width="180" /> <el-table-column label="创建时间" prop="serviceTimeStart" width="180" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<yxwxfw :showDialog="showDialog" :id="rowId" @close="close" />
</div> </div>
</template> </template>
<script> <script>
import yxwxfw from "@/views/dataBoard/cpts/details/yxwxfw.vue";
export default { export default {
name: "give-service", name: "give-service",
components: {
yxwxfw,
},
props: { props: {
juminArr: { juminArr: {
type: Array, type: Array,
@ -31,6 +36,8 @@ export default {
}, },
list: [], list: [],
total: 0, total: 0,
rowId: null,
showDialog: false,
}; };
}, },
watch: { watch: {
@ -44,6 +51,13 @@ export default {
}, },
}, },
methods: { methods: {
handleView(item) {
this.rowId = item.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
getList() { getList() {
// //
this.$http this.$http

16
src/views/dataBoard/cpts/family/modules/businessTables/reporting-events.vue

@ -8,7 +8,7 @@
<el-table-column label="接收时间" prop="happentime" width="180" /> <el-table-column label="接收时间" prop="happentime" width="180" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -19,12 +19,17 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
<eventDetails :showDialog="showDialog" :id="this.rowId" @close="close" />
</div> </div>
</template> </template>
<script> <script>
import eventDetails from "../../../event-details.vue";
export default { export default {
name: "reporting-events", name: "reporting-events",
components: {
eventDetails,
},
props: { props: {
juminArr: { juminArr: {
type: Array, type: Array,
@ -40,6 +45,8 @@ export default {
}, },
list: [], list: [],
total: 0, total: 0,
rowId: null,
showDialog: false,
}; };
}, },
watch: { watch: {
@ -53,6 +60,13 @@ export default {
}, },
}, },
methods: { methods: {
handleView(row) {
this.rowId = row.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
getList() { getList() {
// //
const statusArr = { const statusArr = {

16
src/views/dataBoard/cpts/family/modules/businessTables/resident.vue

@ -8,16 +8,21 @@
<el-table-column label="上报时间" prop="reportTime" width="180" /> <el-table-column label="上报时间" prop="reportTime" width="180" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<jmxq :showDialog="showDialog" :id="rowId" @close="close" />
</div> </div>
</template> </template>
<script> <script>
import jmxq from "@/views/dataBoard/cpts/details/jmxq.vue";
export default { export default {
name: "complaint", name: "complaint",
components:{
jmxq,
},
props: { props: {
juminArr: { juminArr: {
type: Array, type: Array,
@ -31,6 +36,8 @@ export default {
}, },
list: [], list: [],
total: 0, total: 0,
rowId: null,
showDialog: false,
}; };
}, },
watch: { watch: {
@ -44,6 +51,13 @@ export default {
}, },
}, },
methods: { methods: {
handleView(row) {
this.rowId = row.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
getList() { getList() {
// //
this.$http this.$http

183
src/views/dataBoard/cpts/homeDetails/index.vue

@ -1,19 +1,27 @@
<template> <template>
<div class="homeWrap"> <div class="homeWrap">
<div class="bread"> <div class="bread">
<bread-crumb :list="list" /> <bread-crumb :list="[{
path: '/dataBoard/overview/index',
name: '概览'
},{
name: homeText?homeText:''
}]"/>
</div> </div>
<el-row :gutter="48"> <el-row :gutter="48">
<el-col :span="8"> <el-col :span="8">
<div class="bg"> <div class="bg">
<Title :text="homeText"> <Title :text="homeText?homeText:''">
<span :class="[homeMsg.type === 'red' ? 'miniGrid_red' : homeMsg.type === 'yellow' ? 'miniGrid_yellow' : 'miniGrid_green']">红色微网格</span> <span v-if="homeMsg && homeMsg.type" :class="[homeMsg.type === 'red' ? 'miniGrid_red' : homeMsg.type ===
'yellow' ? 'miniGrid_yellow' :
'miniGrid_green']">{{homeMsg.type === 'red' ? '红' : homeMsg.type === 'yellow' ? '黄' :
'绿'}}色微网格</span>
</Title> </Title>
</div> </div>
<div class="apartment"> <div class="apartment">
<div class="apar_comtent"> <div class="apar_comtent">
<div class="apar_top"> <div class="apar_top">
<img src="@/assets/images/home/homeTop.png" alt="/" /> <img src="@/assets/images/home/homeTop.png" alt="/"/>
</div> </div>
<div class="apar_center"> <div class="apar_center">
<div class="apar_center_flex"> <div class="apar_center_flex">
@ -27,19 +35,20 @@
</div> --> </div> -->
</div> </div>
<div class="apar_right"> <div class="apar_right">
<img src="@/assets/images/home/homeRight.png" alt="" /> <img src="@/assets/images/home/homeRight.png" alt=""/>
</div> </div>
</div> </div>
</el-col> </el-col>
<el-col :span="16"> <el-col :span="16">
<div class="table"> <div class="table">
<el-table :data="list" v-loading="loading" height="500" element-loading-text="加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 21, 64, 0.3)"> <el-table :data="list" v-loading="loading" height="500" element-loading-text="加载中"
<el-table-column label="序号" type="index" width="80" /> element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 21, 64, 0.3)">
<el-table-column prop="doorName" label="门牌号" /> <el-table-column label="序号" type="index" width="80"/>
<el-table-column prop="fullName" label="所属小区" /> <el-table-column prop="doorName" label="门牌号"/>
<el-table-column prop="buildingId" label="所属楼栋" /> <el-table-column prop="fullName" label="所属小区"/>
<el-table-column prop="houseName" label="所属单元" /> <el-table-column prop="buildingId" label="所属楼栋"/>
<el-table-column prop="houseCode" label="房屋编码" /> <el-table-column prop="houseName" label="所属单元"/>
<el-table-column prop="houseCode" label="房屋编码"/>
<el-table-column prop="rentFlag" label="房屋状态"> <el-table-column prop="rentFlag" label="房屋状态">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 1出租 0自住 2闲置 3未售出 --> <!-- 1出租 0自住 2闲置 3未售出 -->
@ -52,11 +61,11 @@
<span>{{ getHouseType(scope.row.houseType) }}</span> <span>{{ getHouseType(scope.row.houseType) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="ownerName" label="房主姓名" /> <el-table-column prop="ownerName" label="房主姓名"/>
<el-table-column prop="ownerPhone" label="房主电话" /> <el-table-column prop="ownerPhone" label="房主电话"/>
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="scope"> <template slot-scope="{row}">
<el-button type="text">查看</el-button> <el-button type="text" @click="$router.push('/dataBoard/overview/familyPortrait/?name='+row.doorName+'&user_id='+row.resiId+'&id='+$route.query.id+'&name2='+(homeText?homeText:''))">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -73,6 +82,7 @@
import Pagination from "@/views/dataBoard/satisfactionEval/components/Pagination"; import Pagination from "@/views/dataBoard/satisfactionEval/components/Pagination";
import Title from "./Title/index.vue"; import Title from "./Title/index.vue";
import BreadCrumb from "@/views/dataBoard/cpts/personnel/components/Breadcrumb/index.vue"; import BreadCrumb from "@/views/dataBoard/cpts/personnel/components/Breadcrumb/index.vue";
export default { export default {
name: "homeDetails", name: "homeDetails",
components: { components: {
@ -89,115 +99,14 @@ export default {
homeMsg: {}, homeMsg: {},
list: [], list: [],
homeText: "", homeText: "",
houseMountArr: [ houseMountArr: [],
// [
// { doorName: "101", id: 1 },
// { doorName: "102", id: 1 },
// { doorName: "103", id: 1 },
// { doorName: "104", id: 1 },
// { doorName: "105", id: 1 },
// ],
// [
// { doorName: "201", id: 1 },
// { doorName: "202", id: 1 },
// { doorName: "203", id: 1 },
// { doorName: "204", id: 1 },
// { doorName: "205", id: 1 },
// ],
// [
// { doorName: "301", id: 1 },
// { doorName: "302", id: 1 },
// { doorName: "303", id: 1 },
// { doorName: "304", id: 1 },
// { doorName: "305", id: 1 },
// ],
// [
// { doorName: "401", id: 1 },
// { doorName: "402", id: 1 },
// { doorName: "403", id: 1 },
// { doorName: "404", id: 1 },
// { doorName: "405", id: 1 },
// ],
// [
// { doorName: "501", id: 1 },
// { doorName: "502", id: 1 },
// { doorName: "503", id: 1 },
// { doorName: "504", id: 1 },
// { doorName: "505", id: 1 },
// ],
// [
// { doorName: "601", id: 1 },
// { doorName: "602", id: 1 },
// { doorName: "603", id: 1 },
// { doorName: "604", id: 1 },
// { doorName: "605", id: 1 },
// ],
// [
// { doorName: "701", id: 1 },
// { doorName: "702", id: 1 },
// { doorName: "703", id: 1 },
// { doorName: "704", id: 1 },
// { doorName: "705", id: 1 },
// ],
// [
// { doorName: "801", id: 1 },
// { doorName: "802", id: 1 },
// { doorName: "803", id: 1 },
// { doorName: "804", id: 1 },
// { doorName: "805", id: 1 },
// ],
// [
// { doorName: "901", id: 1 },
// { doorName: "902", id: 1 },
// { doorName: "903", id: 1 },
// { doorName: "904", id: 1 },
// { doorName: "905", id: 1 },
// ],
// [
// { doorName: "1001", id: 1 },
// { doorName: "1002", id: 1 },
// { doorName: "1003", id: 1 },
// { doorName: "1004", id: 1 },
// { doorName: "1005", id: 1 },
// ],
// [
// { doorName: "1101", id: 1 },
// { doorName: "1102", id: 1 },
// { doorName: "1103", id: 1 },
// { doorName: "1104", id: 1 },
// { doorName: "1105", id: 1 },
// ],
// [
// { doorName: "1201", id: 1 },
// { doorName: "1202", id: 1 },
// { doorName: "1203", id: 1 },
// { doorName: "1204", id: 1 },
// { doorName: "1205", id: 1 },
// ],
// [
// { doorName: "1301", id: 1 },
// { doorName: "1302", id: 1 },
// { doorName: "1303", id: 1 },
// { doorName: "1304", id: 1 },
// { doorName: "1305", id: 1 },
// ],
// [
// { doorName: "1401", id: 1 },
// { doorName: "1402", id: 1 },
// { doorName: "1403", id: 1 },
// { doorName: "1404", id: 1 },
// { doorName: "1405", id: 1 },
// ],
// [
// { doorName: "1501", id: 1 },
// { doorName: "1502", id: 1 },
// { doorName: "1503", id: 1 },
// { doorName: "1504", id: 1 },
// { doorName: "1505", id: 1 },
// ],
],
}; };
}, },
watch: {
"$route.query.id"() {
this.getList();
}
},
mounted() { mounted() {
this.getList(); this.getList();
}, },
@ -235,15 +144,19 @@ export default {
getList() { getList() {
this.loading = true; this.loading = true;
this.$http.get(`/actual/base/streetOverview/getUnitHouseList?unitId=1689829742860771329`).then((res) => { this.$http.get(`/actual/base/streetOverview/getUnitHouseList?unitId=` + this.$route.query.id).then((res) => {
const { const {
code, code,
data: { houseList, unitInfo }, data: {houseList, unitInfo},
} = res.data; } = res.data;
if (code === 0) { if (code === 0) {
let unitInfos = unitInfo || {}
this.list = houseList; this.list = houseList;
this.homeMsg = unitInfo; this.homeMsg = unitInfos;
this.homeText = unitInfo.quartersName + unitInfo.buildingName + unitInfo.unitNum + "单元"; this.homeText = (unitInfos.quartersName ? unitInfos.quartersName : '') +
(unitInfos.buildingName ? unitInfos.buildingName : '') +
(unitInfos.unitNum ? unitInfos.unitNum + "单元" : '');
console.log( this.homeText,' this.homeText')
this.houseMountArr = this.getDoorNameList(this.list); this.houseMountArr = this.getDoorNameList(this.list);
this.loading = false; this.loading = false;
} else { } else {
@ -276,6 +189,7 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/assets/scss/dataBoard/table.scss"; @import "@/assets/scss/dataBoard/table.scss";
@mixin radio { @mixin radio {
display: inline-block; display: inline-block;
width: 90px; width: 90px;
@ -289,25 +203,31 @@ export default {
font-family: PingFang SC; font-family: PingFang SC;
font-weight: 500; font-weight: 500;
} }
.homeWrap { .homeWrap {
.bread { .bread {
margin-bottom: 25px; margin-bottom: 25px;
} }
.apar_top { .apar_top {
width: 100%; width: 100%;
img { img {
width: 100%; width: 100%;
} }
} }
.apartment { .apartment {
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
justify-content: center; justify-content: center;
.apar_comtent { .apar_comtent {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
.apar_center { .apar_center {
min-width: 244px; min-width: 244px;
max-width: 488px; max-width: 488px;
@ -319,18 +239,21 @@ export default {
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
flex-direction: column-reverse; flex-direction: column-reverse;
.apar_center_flex { .apar_center_flex {
width: 100%; width: 100%;
display: flex; display: flex;
flex-wrap: wrap-reverse; flex-wrap: wrap-reverse;
justify-content: center; justify-content: center;
} }
.floor { .floor {
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin-bottom: 20px; margin-bottom: 20px;
.households { .households {
height: 58px; height: 58px;
background: url("@/assets/images/home/hasPeople.png") no-repeat; background: url("@/assets/images/home/hasPeople.png") no-repeat;
@ -347,14 +270,17 @@ export default {
} }
} }
} }
.apar_bottom { .apar_bottom {
width: 244px; width: 244px;
margin-top: -1px; margin-top: -1px;
img { img {
width: 100%; width: 100%;
} }
} }
} }
.apar_right { .apar_right {
margin-left: -3px; margin-left: -3px;
} }
@ -370,18 +296,21 @@ export default {
.bg { .bg {
margin-bottom: 0px; margin-bottom: 0px;
background: linear-gradient(144deg, rgba(46, 164, 255, 0.1) 0%, rgba(13, 143, 243, 0) 100%); background: linear-gradient(144deg, rgba(46, 164, 255, 0.1) 0%, rgba(13, 143, 243, 0) 100%);
.miniGrid_red { .miniGrid_red {
@include radio; @include radio;
background: rgba(249, 86, 25, 0.2); background: rgba(249, 86, 25, 0.2);
border: 1px solid #f95619; border: 1px solid #f95619;
color: #f95619; color: #f95619;
} }
.miniGrid_green { .miniGrid_green {
@include radio; @include radio;
background: rgba(249, 86, 25, 0.2); background: rgba(249, 86, 25, 0.2);
border: 1px solid green; border: 1px solid green;
color: green; color: green;
} }
.miniGrid_yellow { .miniGrid_yellow {
@include radio; @include radio;
background: rgba(249, 86, 25, 0.2); background: rgba(249, 86, 25, 0.2);

749
src/views/dataBoard/cpts/map/index.vue

@ -4,17 +4,17 @@
<div class="btn" v-if="mapStyleType == 'light'" v-show="false" @click="shiftMapStyle('dark')">切换深色模式</div> <div class="btn" v-if="mapStyleType == 'light'" v-show="false" @click="shiftMapStyle('dark')">切换深色模式</div>
<div class="btn" v-show="false" v-else @click="shiftMapStyle('light')">切换浅色模式</div> <div class="btn" v-show="false" v-else @click="shiftMapStyle('light')">切换浅色模式</div>
<!-- :style="{ transform: `scale(${zoom})` }" --> <!-- :style="{ transform: `scale(${zoom})` }" -->
<cpt-popup ref="popup" @clickListItem="handleClickDotListItem" @operate="handleClickDotBtn" /> <cpt-popup ref="popup" @clickListItem="handleClickDotListItem" @operate="handleClickDotBtn"/>
</div> </div>
</template> </template>
<script> <script>
import { requestPost } from "@/js/dai/request"; import {requestPost} from "@/js/dai/request";
import nextTick from "dai-js/tools/nextTick"; import nextTick from "dai-js/tools/nextTick";
import { Scene, PolygonLayer, LineLayer, RasterLayer, PointLayer, Marker, Popup } from "@antv/l7"; import {Scene, PolygonLayer, LineLayer, MarkerLayer, RasterLayer, PointLayer, Marker, Popup} from "@antv/l7";
import { GaodeMap, Map } from "@antv/l7-maps"; import {GaodeMap, Map} from "@antv/l7-maps";
import { spliceIntoChunks } from "@/utils/index"; import {spliceIntoChunks} from "@/utils/index";
import { mapType, searchNearby } from "@/utils/dai-map"; import {mapType, searchNearby} from "@/utils/dai-map";
import tdtWp from "@/utils/tdt-wp"; import tdtWp from "@/utils/tdt-wp";
import tdtWpZw from "@/utils/tdt-wp-zw"; import tdtWpZw from "@/utils/tdt-wp-zw";
import cptPopup from "./popup"; import cptPopup from "./popup";
@ -31,6 +31,8 @@ let dotBgLayer;
let dotLayer2; let dotLayer2;
let searchMarker; let searchMarker;
let searchBgLayer; let searchBgLayer;
let numMarker;
let pointMarker;
export default { export default {
name: "l7", name: "l7",
@ -128,6 +130,10 @@ export default {
type: Object, type: Object,
default: () => ({}), default: () => ({}),
}, },
level: {
type: String,
default: ''
}
}, },
components: { components: {
cptPopup, cptPopup,
@ -135,107 +141,107 @@ export default {
computed: { computed: {
polygonData() { polygonData() {
const { srcGridData } = this; const {srcGridData} = this;
if (!srcGridData || !srcGridData.children || !Array.isArray(srcGridData.children)) { if (!srcGridData || !srcGridData.children || !Array.isArray(srcGridData.children)) {
return { type: "FeatureCollection", features: [] }; return {type: "FeatureCollection", features: []};
} }
const polygon = [ const polygon = [
...srcGridData.children ...srcGridData.children
.filter((item) => item.coordinates.length > 0) .filter((item) => item.coordinates.length > 0)
.map((item) => ({ .map((item) => ({
type: "Feature", type: "Feature",
properties: { properties: {
// id: item.id, // id: item.id,
// name: item.name, // name: item.name,
// level: item.level, // level: item.level,
center: [item.longitude, item.latitude], center: [item.longitude, item.latitude],
...item, ...item,
}, },
geometry: { geometry: {
type: "Polygon", type: "Polygon",
coordinates: [ coordinates: [
spliceIntoChunks( spliceIntoChunks(
item.coordinates.split(",").map((item) => parseFloat(item)), item.coordinates.split(",").map((item) => parseFloat(item)),
2 2
).filter((item) => item.length == 2), ).filter((item) => item.length == 2),
], ],
}, },
})), })),
]; ];
return { type: "FeatureCollection", features: polygon }; return {type: "FeatureCollection", features: polygon};
}, },
polygonDotData() { polygonDotData() {
const { srcGridData } = this; const {srcGridData} = this;
if (!srcGridData || !srcGridData.children || !Array.isArray(srcGridData.children)) { if (!srcGridData || !srcGridData.children || !Array.isArray(srcGridData.children)) {
return { type: "FeatureCollection", features: [] }; return {type: "FeatureCollection", features: []};
} }
const polygon = [ const polygon = [
...srcGridData.children ...srcGridData.children
.filter((item) => item.coordinates.length > 0) .filter((item) => item.coordinates.length > 0)
.map((item) => ({
type: "Feature",
properties: {
// id: item.id,
// name: item.name,
// level: item.level,
center: [item.longitude, item.latitude],
...item,
},
geometry: {
type: "Polygon",
coordinates: [
item.latitude
? [[item.longitude, item.latitude]]
: spliceIntoChunks(
item.coordinates.split(",").map((item) => parseFloat(item)),
2
).filter((item) => item.length == 2),
],
},
})),
];
return { type: "FeatureCollection", features: polygon };
},
dotData() {
const { dotList } = this;
return {
type: "FeatureCollection",
features: [
...dotList
.filter((item) => item.latitude)
.map((item) => ({ .map((item) => ({
type: "Feature", type: "Feature",
properties: { properties: {
// id: item.id,
// name: item.name,
// level: item.level,
center: [item.longitude, item.latitude],
...item, ...item,
}, },
geometry: { geometry: {
type: "Point", type: "Polygon",
coordinates: [parseFloat(item.longitude), parseFloat(item.latitude)], coordinates: [
item.latitude
? [[item.longitude, item.latitude]]
: spliceIntoChunks(
item.coordinates.split(",").map((item) => parseFloat(item)),
2
).filter((item) => item.length == 2),
],
}, },
})), })),
];
return {type: "FeatureCollection", features: polygon};
},
dotData() {
const {dotList} = this;
return {
type: "FeatureCollection",
features: [
...dotList
.filter((item) => item.latitude)
.map((item) => ({
type: "Feature",
properties: {
...item,
},
geometry: {
type: "Point",
coordinates: [parseFloat(item.longitude), parseFloat(item.latitude)],
},
})),
], ],
}; };
}, },
dotData2() { dotData2() {
const { dotList2 } = this; const {dotList2} = this;
return { return {
type: "FeatureCollection", type: "FeatureCollection",
features: [ features: [
...dotList2 ...dotList2
.filter((item) => item.latitude) .filter((item) => item.latitude)
.map((item) => ({ .map((item) => ({
type: "Feature", type: "Feature",
properties: { properties: {
...item, ...item,
}, },
geometry: { geometry: {
type: "Point", type: "Point",
coordinates: [parseFloat(item.longitude), parseFloat(item.latitude)], coordinates: [parseFloat(item.longitude), parseFloat(item.latitude)],
}, },
})), })),
], ],
}; };
}, },
@ -281,7 +287,7 @@ export default {
}, },
iniMap() { iniMap() {
const { darkStyle, lightStyle, srcGridData } = this; const {darkStyle, lightStyle, srcGridData} = this;
if (!srcGridData) return false; if (!srcGridData) return false;
let styleConfig = darkStyle; let styleConfig = darkStyle;
@ -340,36 +346,36 @@ export default {
zIndex: 1, zIndex: 1,
}); });
baseLayer baseLayer
.source("http://t7.tianditu.com/DataServer?T=vec_w&tk=8a08c117ab9ee45d508686b01cc8d397&x={x}&y={y}&l={z}", { .source("http://t7.tianditu.com/DataServer?T=vec_w&tk=8a08c117ab9ee45d508686b01cc8d397&x={x}&y={y}&l={z}", {
parser: { parser: {
type: "rasterTile", type: "rasterTile",
tileSize: 256, tileSize: 256,
// minZoom: 6, // minZoom: 6,
// maxZoom: 15, // maxZoom: 15,
zoomOffset: 0, zoomOffset: 0,
}, },
}) })
.style({ .style({
opacity: 0.7, opacity: 0.7,
}); });
// //
const annotionLayer = new RasterLayer({ const annotionLayer = new RasterLayer({
zIndex: 2, zIndex: 2,
}); });
annotionLayer annotionLayer
.source("http://t7.tianditu.com/DataServer?T=cva_w&tk=8a08c117ab9ee45d508686b01cc8d397&x={x}&y={y}&l={z}", { .source("http://t7.tianditu.com/DataServer?T=cva_w&tk=8a08c117ab9ee45d508686b01cc8d397&x={x}&y={y}&l={z}", {
parser: { parser: {
type: "rasterTile", type: "rasterTile",
tileSize: 256, tileSize: 256,
// minZoom: 6, // minZoom: 6,
// maxZoom: 15, // maxZoom: 15,
zoomOffset: 0, zoomOffset: 0,
}, },
}) })
.style({ .style({
opacity: 0.5, opacity: 0.5,
}); });
scene.addLayer(baseLayer); scene.addLayer(baseLayer);
scene.addLayer(annotionLayer); scene.addLayer(annotionLayer);
@ -383,22 +389,22 @@ export default {
zIndex: 1, zIndex: 1,
}); });
baseLayer baseLayer
.source(tdtWpZw.vec, { .source(tdtWpZw.vec, {
parser: { parser: {
type: "rasterTile", type: "rasterTile",
tileSize: 256, tileSize: 256,
zoomOffset: 0, zoomOffset: 0,
}, },
}) })
.style({ .style({
opacity: 0.7, opacity: 0.7,
}); });
scene.addLayer(baseLayer); scene.addLayer(baseLayer);
}, },
iniMapGrid(scene) { iniMapGrid(scene) {
const { darkStyle, lightStyle, polygonData, polygonDotData } = this; const {darkStyle, lightStyle, polygonData, polygonDotData} = this;
let styleConfig = darkStyle; let styleConfig = darkStyle;
if (this.mapStyleType == "light") { if (this.mapStyleType == "light") {
@ -411,23 +417,23 @@ export default {
polygonLayer = new PolygonLayer({ polygonLayer = new PolygonLayer({
autoFit: true, autoFit: true,
}) })
// .size(0) // .size(0)
.source(polygonData) .source(polygonData)
.color("name", styleConfig.polygonColor) .color("name", styleConfig.polygonColor)
// .shape("extrude") // .shape("extrude")
.shape("fill") .shape("fill")
.style({ .style({
opacityLinear: { opacityLinear: {
enable: true, // true - false enable: true, // true - false
dir: "out", // in - out dir: "out", // in - out
}, },
opacity: 1, opacity: 1,
// heightfixed: true, // heightfixed: true,
// pickLight: true, // pickLight: true,
raisingHeight: 0, raisingHeight: 0,
// sourceColor: "#333", // sourceColor: "#333",
// targetColor: "rgba(255,255,255, 0.5)", // targetColor: "rgba(255,255,255, 0.5)",
}); });
scene.addLayer(polygonLayer); scene.addLayer(polygonLayer);
@ -436,144 +442,168 @@ export default {
zIndex: 2, zIndex: 2,
name: "line2", name: "line2",
}) })
.source(polygonData) .source(polygonData)
.shape("line") .shape("line")
.size(1) .size(1)
.color("name", styleConfig.lineColor) .color("name", styleConfig.lineColor)
.style({ .style({
opacity: 1, opacity: 1,
}) })
.animate({ .animate({
interval: 1, // interval: 1, //
duration: 2, // duration: 2, //
trailLength: 2, // 线 trailLength: 2, // 线
}); });
scene.addLayer(lineLayer); scene.addLayer(lineLayer);
// //
circleLayer = new PolygonLayer({ circleLayer = new PolygonLayer({
zIndex: 3, zIndex: 3,
}) })
.source(polygonDotData) .source(polygonDotData)
.color("name", styleConfig.circleColor) .color("name", styleConfig.circleColor)
.shape("circle") .shape("circle")
.active(true) .active(true)
.animate(true) .animate(true)
.size(50) .size(50)
.style({ .style({
offsets: [0, -10], // [, ] offsets: [0, -10], // [, ]
opacity: 1, opacity: 1,
}); });
// scene.addLayer(circleLayer); // scene.addLayer(circleLayer);
scene.addImage("pos-red", require("@/assets/img/shuju/grid/pos-red.png")); scene.addImage("pos-red", require("@/assets/img/shuju/grid/pos-red.png"));
scene.addImage("pos-green", require("@/assets/img/shuju/grid/pos-green.png")); scene.addImage("pos-green", require("@/assets/img/shuju/grid/pos-green.png"));
scene.addImage("pos-yellow", require("@/assets/img/shuju/grid/pos-yellow.png")); scene.addImage("pos-yellow", require("@/assets/img/shuju/grid/pos-yellow.png"));
posLayer = new PolygonLayer({
posLayer = new PointLayer({
zIndex: 4, zIndex: 4,
name: 'gridPoint',
visible: false
}) })
.source(polygonDotData) .source(polygonDotData)
.shape("name", [ .shape("name", [
// "pos-red", // "pos-red",
"pos-green", "pos-green",
// "pos-yellow" // "pos-yellow"
]) ])
.size(12) .size(12)
.style({ .style({
offsets: [0, 8], // [, ] options: this.level === 'grid' ? 1 : 0,
// rotation: 60, offsets: [0, 0],
// layerType: "fillImage",
});
// scene.addLayer(posLayer);
});
// scene.addLayer(posLayer);
console.log(this.level)
/* if (this.level === 'grid') {
posLayer.show()
} else {
posLayer.hide()
}*/
textLayer = new PolygonLayer({ textLayer = new PolygonLayer({
zIndex: 20, zIndex: 20,
}) })
.source(polygonDotData) .source(polygonData)
.color("name", styleConfig.textColor) .color("name", styleConfig.textColor)
.shape("name", "text") .shape("name", "text")
.size(16) .size(16)
.style({ .style({
textAnchor: "center", // center|left|right|top|bottom|top-left textAnchor: "center", // center|left|right|top|bottom|top-left
textOffset: [0, 40], // [, ] textOffset: [0, 40], // [, ]
spacing: 2, // spacing: 2, //
padding: [2, 2], // padding [] padding: [2, 2], // padding []
stroke: styleConfig.textStrokeColor, // stroke: styleConfig.textStrokeColor, //
strokeWidth: 0.1, // strokeWidth: 0.1, //
strokeOpacity: 0.8, strokeOpacity: 0.8,
textAllowOverlap: true, textAllowOverlap: true,
}) })
.active(true); .active(true);
scene.addLayer(textLayer); scene.addLayer(textLayer);
polygonLayer.on("mousemove", (e) => { polygonLayer.on("mousemove", (e) => {
// console.log("e", e); if (this.level === 'grid') {
// const { lng, lat } = e.lngLat; return
// const popup = new Popup({ }
// title: e.feature.properties.name,
// html: e.feature.properties.center_addre,
// lngLat: {
// lng,
// lat,
// },
// });
// scene.addPopup(popup);
const popup = new Popup({ const popup = new Popup({
offsets: [0, 0], offsets: [60, 60],
closeButton: false, closeButton: false,
maxWidth: 400, maxWidth: 400,
}) })
.setLnglat(e.lngLat) .setLnglat(e.lngLat)
.setHTML(`<span>街道: ${e.feature.properties.name}</span><br><span>网格: ${e.feature.properties.center_addre}</span>`); .setHTML(`
<div class="jw-popup-container">
<div class="jw-popup-bg"></div>
<div class="jw-popup-con">
<div class="jw-popup-title">
${e.feature.properties.name}
</div>
<div class="jw-popup-des">
${e.feature.properties.description ? e.feature.properties.description : ''}
</div>
</div>
</div>
`);
scene.addPopup(popup); scene.addPopup(popup);
}); });
// polygonLayer.on("mousemove", (e) => {
// polygonLayer.style({
// raisingHeight: 0,
// });
// });
polygonLayer.on("click", (e) => { polygonLayer.on("click", (e) => {
console.log(this.level)
if (this.level === 'grid') {
return
}
if (numMarker) {
scene.removeMarkerLayer(numMarker);
}
if (pointMarker) {
scene.removeMarkerLayer(pointMarker);
}
console.log("e", e); console.log("e", e);
this.$emit("clickAgency", e.feature.properties); this.$emit("clickAgency", e.feature.properties);
});
posLayer.on('click', (e) => {
console.log(e)
}); });
// polygonLayer.on("unmousemove", (e) => { },
// polygonLayer.style({ clearMarkert() {
// raisingHeight: 0, if (numMarker) {
// }); scene.removeMarkerLayer(numMarker);
// });
}
if (pointMarker) {
scene.removeMarkerLayer(pointMarker);
}
}, },
iniMapDot(scene) { iniMapDot(scene) {
const { darkStyle, lightStyle, dotIcoList, dotData } = this; const {darkStyle, lightStyle, dotIcoList, dotData} = this;
Object.keys(dotIcoList).forEach((k) => { Object.keys(dotIcoList).forEach((k) => {
scene.addImage(k, dotIcoList[k]); scene.addImage(k, dotIcoList[k]);
}); });
dotBgLayer = new PointLayer({ dotBgLayer = new PointLayer({
zIndex: 20, zIndex: 20,
}) })
.source(dotData) .source(dotData)
.shape("circle") .shape("circle")
.color("rgba(255,255,255,0.8)") .color("rgba(255,255,255,0.8)")
.size(20) .size(20)
.style({ .style({
strokeWidth: 3, strokeWidth: 3,
strokeOpacity: 0.1, strokeOpacity: 0.1,
stroke: "#000", stroke: "#000",
}); });
scene.addLayer(dotBgLayer); scene.addLayer(dotBgLayer);
dotLayer = new PointLayer({ dotLayer = new PointLayer({
zIndex: 21, zIndex: 21,
}) })
.source(dotData) .source(dotData)
.shape("categoryKey", (k) => k) .shape("categoryKey", (k) => k)
.size(10) .size(10)
.style({ .style({
offsets: [0, 0], offsets: [0, 0],
layerType: "fillImage", layerType: "fillImage",
}); });
scene.addLayer(dotLayer); scene.addLayer(dotLayer);
dotBgLayer.on("click", (e) => { dotBgLayer.on("click", (e) => {
@ -588,17 +618,18 @@ export default {
offsets: [0, -0], offsets: [0, -0],
closeButton: false, closeButton: false,
}) })
.setLnglat(e.feature.geometry.coordinates) .setLnglat(e.feature.geometry.coordinates)
.setHTML(`<span>${e.feature.properties.content}</span>`); .setHTML(`<span>${e.feature.properties.content}</span>`);
scene.addPopup(popup); scene.addPopup(popup);
} }
}); });
dotBgLayer.on("unmousemove", (e) => {}); dotBgLayer.on("unmousemove", (e) => {
});
}, },
iniMapDot2(scene) { iniMapDot2(scene) {
const { dotIcoList2: dotIcoList, dotData2: dotData } = this; const {dotIcoList2: dotIcoList, dotData2: dotData} = this;
Object.keys(dotIcoList).forEach((k) => { Object.keys(dotIcoList).forEach((k) => {
scene.addImage(k, dotIcoList[k]); scene.addImage(k, dotIcoList[k]);
}); });
@ -606,13 +637,13 @@ export default {
dotLayer2 = new PointLayer({ dotLayer2 = new PointLayer({
zIndex: 21, zIndex: 21,
}) })
.source(dotData) .source(dotData)
.shape("categoryKey", (k) => k) .shape("categoryKey", (k) => k)
.size(20) .size(20)
.style({ .style({
offsets: [0, 0], offsets: [0, 0],
layerType: "fillImage", layerType: "fillImage",
}); });
scene.addLayer(dotLayer2); scene.addLayer(dotLayer2);
dotLayer2.on("click", (e) => { dotLayer2.on("click", (e) => {
@ -627,13 +658,14 @@ export default {
offsets: [0, -0], offsets: [0, -0],
closeButton: false, closeButton: false,
}) })
.setLnglat(e.feature.geometry.coordinates) .setLnglat(e.feature.geometry.coordinates)
.setHTML(`<span>${e.feature.properties.content}</span>`); .setHTML(`<span>${e.feature.properties.content}</span>`);
scene.addPopup(popup); scene.addPopup(popup);
} }
}); });
dotLayer2.on("unmousemove", (e) => {}); dotLayer2.on("unmousemove", (e) => {
});
}, },
// //
@ -655,18 +687,24 @@ export default {
}, },
updateGrid() { updateGrid() {
const { polygonData, polygonDotData } = this; const {polygonData, polygonDotData} = this;
if (polygonLayer) { if (polygonLayer) {
polygonLayer.setData(polygonData); polygonLayer.setData(polygonData);
lineLayer.setData(polygonData); lineLayer.setData(polygonData);
textLayer.setData(polygonDotData); textLayer.setData(polygonDotData);
posLayer.setData(polygonDotData); /* posLayer.setData(polygonDotData);
// let gridPoint = scene.getLayerByName('gridPoint')
if (this.level === 'grid') {
posLayer.show()
} else {
posLayer.hide()
}*/
circleLayer.setData(polygonDotData); circleLayer.setData(polygonDotData);
} }
}, },
updateDot() { updateDot() {
const { dotData } = this; const {dotData} = this;
if (dotLayer) { if (dotLayer) {
console.log(dotData); console.log(dotData);
dotLayer.setData(dotData); dotLayer.setData(dotData);
@ -675,7 +713,7 @@ export default {
}, },
updateDot2() { updateDot2() {
const { dotData2: dotData } = this; const {dotData2: dotData} = this;
if (dotLayer2) { if (dotLayer2) {
console.log(dotData); console.log(dotData);
dotLayer2.setData(dotData); dotLayer2.setData(dotData);
@ -738,22 +776,101 @@ export default {
searchBgLayer = new PolygonLayer({ searchBgLayer = new PolygonLayer({
// autoFit: true, // autoFit: true,
}) })
.source(sourceData) .source(sourceData)
.color("#f0f") .color("#f0f")
.shape("fill") .shape("fill")
.style({ .style({
opacityLinear: { opacityLinear: {
enable: true, // true - false enable: true, // true - false
dir: "out", // in - out dir: "out", // in - out
}, },
opacity: 0.3, opacity: 0.3,
raisingHeight: 0, raisingHeight: 0,
}); });
scene.addLayer(searchBgLayer); scene.addLayer(searchBgLayer);
} }
}, },
setPoint(data) {
this.clearMarkert()
pointMarker = new MarkerLayer({
name: 'pointMarker'
})
for (let i in data) {
console.log(data[i].longitude * 1, data[i].latitude * 1)
var el = document.createElement('div');
el.className = 'label-point-class';
el.classList.add(data[i].type)
// el.textContent = data[i].peopleType+''+data[i].personnelNum;
const pointMarkerItem = new Marker({
offsets: [0, 0],
element: el,
}).setLnglat([data[i].longitude * 1, data[i].latitude * 1]);
let popup
pointMarkerItem.on("mouseover", () => {
popup = new Popup({
offsets: [60, 60],
closeButton: false,
maxWidth: 400,
})
.setLnglat([data[i].longitude * 1, data[i].latitude * 1])
.setHTML(`
<div class="jw-popup-container">
<div class="jw-popup-con">
<div class="jw-popup-title">
${data[i].name}
</div>
<div class="jw-popup-type">网格类型<span class="${data[i].type}">${
data[i].type === 'red' ? "红" :
data[i].type === 'yellow' ? "黄" :
data[i].type === 'green' ? "绿色" : ''}</span>
</div>
<div class="jw-popup-num-list">
<div>户数<span>${data[i].houseNum ? data[i].houseNum : 0}</span></div>
<div>需求<span>${data[i].demandNum ? data[i].demandNum : 0}</span></div>
<div>事件<span>${data[i].eventNum ? data[i].eventNum : 0}</span></div>
<div>重点人群<span>${data[i].importanceNum ? data[i].importanceNum : 0}</span></div>
<div>安全隐患<span>${data[i].safetyNum ? data[i].safetyNum : 0}</span></div>
</div>
</div>
</div>
`);
scene.addPopup(popup);
});
pointMarkerItem.on("mouseout", () => {
popup.remove()
})
pointMarkerItem.on("click", () => {
this.$router.push('/homeDetails/index?id='+data[i].id)
})
pointMarker.addMarker(pointMarkerItem)
}
scene.addMarkerLayer(pointMarker);
},
setNum(data) {
if (numMarker) {
scene.removeMarkerLayer(numMarker);
}
numMarker = new MarkerLayer({
name: 'numMarker'
})
for (let i in data) {
var el = document.createElement('label');
el.className = 'label-num-class';
el.textContent = data[i].peopleType + ':' + data[i].personnelNum;
const numMarkerItem = new Marker({
element: el,
offsets: [0, 40],
}).setLnglat([data[i].longitude * 1, data[i].latitude]);
numMarker.addMarker(numMarkerItem)
}
scene.addMarkerLayer(numMarker);
},
async setDotMarker(item, posArr) { async setDotMarker(item, posArr) {
this.removeDotMarker(); this.removeDotMarker();
this.drawSearchBg(...posArr); this.drawSearchBg(...posArr);
@ -768,8 +885,8 @@ export default {
closeOnClick: true, closeOnClick: true,
maxWidth: 400, maxWidth: 400,
}) })
.setLnglat(posArr) .setLnglat(posArr)
.setDOMContent(this.$refs.popup.$el); .setDOMContent(this.$refs.popup.$el);
marker.setPopup(popup); marker.setPopup(popup);
} }
@ -805,8 +922,8 @@ export default {
closeOnClick: true, closeOnClick: true,
maxWidth: 400, maxWidth: 400,
}) })
.setLnglat(posArr) .setLnglat(posArr)
.setDOMContent(this.$refs.popup.$el); .setDOMContent(this.$refs.popup.$el);
scene.addPopup(popup); scene.addPopup(popup);
} }
}, },
@ -851,6 +968,7 @@ export default {
background-color: rgba(43, 51, 73, 0.82); background-color: rgba(43, 51, 73, 0.82);
background-image: radial-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.3), #000); background-image: radial-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.3), #000);
} }
.gray { .gray {
-webkit-filter: grayscale(100%); -webkit-filter: grayscale(100%);
filter: grayscale(100%); filter: grayscale(100%);
@ -863,10 +981,18 @@ export default {
/deep/ .l7-popup { /deep/ .l7-popup {
z-index: 100; z-index: 100;
} }
/deep/ .l7-popup-content { /deep/ .l7-popup-content {
background: rgba(#fff, 1); //background: rgba(#fff, 1);
background: rgba(3, 31, 73, 0.72);
border: 1px solid #74C9FF;
opacity: 0.9;
border-radius: 5px;
color: #fff;
box-shadow: 0 0 20px 3px inset rgba(#22f, 0.1); box-shadow: 0 0 20px 3px inset rgba(#22f, 0.1);
width: 416px;
} }
/deep/ .l7-popup-close-button { /deep/ .l7-popup-close-button {
padding: 4px; padding: 4px;
font-size: 36px; font-size: 36px;
@ -877,6 +1003,7 @@ export default {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
#searchMap { #searchMap {
position: absolute; position: absolute;
width: 200px; width: 200px;
@ -884,6 +1011,7 @@ export default {
visibility: hidden; visibility: hidden;
pointer-events: none; pointer-events: none;
} }
.btn { .btn {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
@ -897,5 +1025,108 @@ export default {
background-color: rgba(#000, 0.2); background-color: rgba(#000, 0.2);
cursor: pointer; cursor: pointer;
} }
/deep/ .label-num-class {
font-size: 16px;
font-weight: 500;
color: #FFFFFF;
background: rgba(3, 31, 73, 0.72);
border: 1px solid #74C9FF;
opacity: 0.9;
border-radius: 100px;
padding: 3px 13px;
}
/deep/ .l7-popup-tip {
display: none;
}
/deep/ .jw-popup-bg {
background: url('@/assets/images/overview/map-pop-img.png') no-repeat;
width: 80px;
height: 80px;
margin-right: 10px;
}
/deep/ .jw-popup-container {
display: flex;
}
/deep/ .jw-popup-con {
}
/deep/ .jw-popup-title {
font-size: 20px;
font-family: HYShuYuanHeiJ;
font-weight: 400;
color: #FFFFFF;
background: linear-gradient(0deg, #2DC1FF 0%, #FFFFFF 58.5205078125%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-bottom: 16px;
}
/deep/ .jw-popup-des {
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
line-height: 22px;
}
/deep/ .label-point-class {
width: 32px;
height: 32px;
background-repeat: no-repeat;
&.green {
background-image: url("@/assets/images/overview/green.png");
}
&.red {
background-image: url("@/assets/images/overview/red.png");
}
&.yellow {
background-image: url("@/assets/images/overview/yellow.png");
}
}
/deep/ .jw-popup-type {
margin: 16px 0 21px;
.red {
color: #FC561F;
}
.yellow {
color: #FAB93F;
}
.green {
color: #08EBAD;
}
}
/deep/ .jw-popup-num-list {
display: flex;
flex-wrap: wrap;
& > div {
flex: 0 0 131px;
width: 131px;
height: 14px;
font-size: 14px;
font-weight: 400;
margin-bottom: 15px;
span {
font-size: 18px;
font-weight: 500;
color: #FFAA01;
}
}
}
} }
</style> </style>

16
src/views/dataBoard/cpts/personnel/modules/businessTables/community.vue

@ -8,16 +8,21 @@
<el-table-column label="是否回访" prop="isReturn" width="120" /> <el-table-column label="是否回访" prop="isReturn" width="120" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<xqwmz :showDialog="showDialog" :id="rowId" @close="close" />
</div> </div>
</template> </template>
<script> <script>
import xqwmz from "@/views/dataBoard/cpts/details/xqwmz.vue";
export default { export default {
name: "community", name: "community",
components: {
xqwmz,
},
data() { data() {
return { return {
queryParams: { queryParams: {
@ -25,6 +30,8 @@ export default {
}, },
list: [], list: [],
total: 0, total: 0,
rowId: null,
showDialog: false,
}; };
}, },
created() { created() {
@ -59,6 +66,13 @@ export default {
this.$emit("changeTotal", { name: 2, total: this.total }); this.$emit("changeTotal", { name: 2, total: this.total });
}); });
}, },
handleView(item) {
this.rowId = item.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
}, },
}; };
</script> </script>

2
src/views/dataBoard/cpts/personnel/modules/businessTables/complaint.vue

@ -9,7 +9,7 @@
<el-table-column label="标记" prop="marktype" width="" /> <el-table-column label="标记" prop="marktype" width="" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

16
src/views/dataBoard/cpts/personnel/modules/businessTables/economize.vue

@ -8,16 +8,21 @@
<el-table-column label="是否回访" prop="isReturn" width="120" /> <el-table-column label="是否回访" prop="isReturn" width="120" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<smyd :showDialog="showDialog" :id="rowId" @close="close" />
</div> </div>
</template> </template>
<script> <script>
import smyd from "@/views/dataBoard/cpts/details/smyd.vue";
export default { export default {
name: "economize", name: "economize",
components: {
smyd,
},
data() { data() {
return { return {
queryParams: { queryParams: {
@ -25,6 +30,8 @@ export default {
}, },
list: [], list: [],
total: 0, total: 0,
rowId: null,
showDialog: false,
}; };
}, },
created() {}, created() {},
@ -34,6 +41,13 @@ export default {
this.getList(); this.getList();
}, },
methods: { methods: {
handleView(row) {
this.rowId = row.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
getList() { getList() {
// //
this.$http this.$http

21
src/views/dataBoard/cpts/personnel/modules/businessTables/give-service.vue

@ -8,21 +8,28 @@
<el-table-column label="创建时间" prop="serviceTimeStart" width="180" /> <el-table-column label="创建时间" prop="serviceTimeStart" width="180" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<yxwxfw :showDialog="showDialog" :id="rowId" @close="close" />
</div> </div>
</template> </template>
<script> <script>
import yxwxfw from "@/views/dataBoard/cpts/details/yxwxfw.vue";
export default { export default {
name: "give-service", name: "give-service",
components: {
yxwxfw,
},
data() { data() {
return { return {
queryParams: { queryParams: {
residList: [], residList: [],
}, },
rowId: null,
showDialog: false,
list: [], list: [],
total: 0, total: 0,
}; };
@ -37,7 +44,10 @@ export default {
getList() { getList() {
// //
this.$http this.$http
.post("/actual/base/peopleRoomOverview/communityServicePageList", this.queryParams) .post(
"/actual/base/peopleRoomOverview/communityServicePageList",
this.queryParams
)
.then(({ data: res }) => { .then(({ data: res }) => {
this.list = res.data.map((item) => { this.list = res.data.map((item) => {
return { return {
@ -48,6 +58,13 @@ export default {
this.$emit("changeTotal", { name: 5, total: this.total }); this.$emit("changeTotal", { name: 5, total: this.total });
}); });
}, },
handleView(item) {
this.rowId = item.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
}, },
}; };
</script> </script>

2
src/views/dataBoard/cpts/personnel/modules/businessTables/reporting-events.vue

@ -8,7 +8,7 @@
<el-table-column label="接收时间" prop="happentime" width="180" /> <el-table-column label="接收时间" prop="happentime" width="180" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

16
src/views/dataBoard/cpts/personnel/modules/businessTables/resident.vue

@ -8,16 +8,21 @@
<el-table-column label="上报时间" prop="reportTime" width="180" /> <el-table-column label="上报时间" prop="reportTime" width="180" />
<el-table-column label="操作" width="90" align="center"> <el-table-column label="操作" width="90" align="center">
<template slot-scope="data"> <template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button> <el-button type="text" @click="handleView(data.row)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<jmxq :showDialog="showDialog" :id="rowId" @close="close" />
</div> </div>
</template> </template>
<script> <script>
import jmxq from "@/views/dataBoard/cpts/details/jmxq.vue";
export default { export default {
name: "complaint", name: "complaint",
components:{
jmxq,
},
data() { data() {
return { return {
queryParams: { queryParams: {
@ -25,6 +30,8 @@ export default {
}, },
list: [], list: [],
total: 0, total: 0,
rowId: null,
showDialog: false,
}; };
}, },
created() { created() {
@ -34,6 +41,13 @@ export default {
}, },
mounted() {}, mounted() {},
methods: { methods: {
handleView(row) {
this.rowId = row.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
getList() { getList() {
// //
this.$http this.$http

38
src/views/dataBoard/overview/components/jdwgy.vue

@ -5,6 +5,7 @@
:data="list" :data="list"
v-if="currentLevelData.orgLevel != 'grid'" v-if="currentLevelData.orgLevel != 'grid'"
v-loading="loading" v-loading="loading"
element-loading-background="rgba(0, 0, 0, 0.3)"
max-height="190px" max-height="190px"
height="190px" height="190px"
> >
@ -95,14 +96,24 @@ export default {
} }
}, },
}, },
mounted() {}, mounted() {
if (this.currentLevelData.orgId) {
this.getData(
this.peopleType,
this.currentLevelData.orgLevel,
this.currentLevelData.orgId
);
}
},
methods: { methods: {
getData(peopleType, level = "", orgId = "") { getData(peopleType, level = "", orgId = "") {
this.loading = true; this.loading = true;
if (level == "grid") { if (level == "grid") {
this.$http this.$http
.get( .get(
"/actual/base/streetOverview/queryPersonnelGridGroup?personnelType=unit&level=" + "/actual/base/streetOverview/queryPersonnelGridGroup?personnelType="+
peopleType
+"&level=" +
level + level +
"&orgId=" + "&orgId=" +
orgId orgId
@ -110,6 +121,7 @@ export default {
.then(({ data: { data } }) => { .then(({ data: { data } }) => {
this.loading = false; this.loading = false;
this.wglist = data; this.wglist = data;
this.$emit('setPoint',data.filter(item => item.longitude && item.latitude))
}); });
} else { } else {
this.$http this.$http
@ -124,17 +136,27 @@ export default {
.then(({ data: { data } }) => { .then(({ data: { data } }) => {
this.loading = false; this.loading = false;
this.list = data.personnelInfoVOList; this.list = data.personnelInfoVOList;
this.$emit('setNum',data.orgPersonnelVOList)
}); });
} }
}, },
handleClick(item) { handleClick(item) {
console.log("handleClick::", item); console.log("handleClick::", item);
this.$router.push({ if (this.currentLevelData.orgLevel == "grid") {
path: "/dataBoard/overview/resident", this.$router.push({
query: { path: "/homeDetails/index",
user_id: item.id, query: {
}, id: item.id,
}); },
});
} else {
this.$router.push({
path: "/dataBoard/overview/resident",
query: {
user_id: item.id,
},
});
}
}, },
}, },
}; };

183
src/views/dataBoard/overview/components/map-top.vue

@ -1,70 +1,118 @@
<template> <template>
<div class="m-per"> <div class="m-per">
<div :class="selectIndex === 0 ? 'item xz' : 'item'"> <template v-if="level != 'grid'">
<div class="item-info" @click="selectIcon(0, 'staffAgency')"> <div class="item" :class="selectIndex === 'staffAgency' ? 'xz' : ''">
<div> <div class="item-info" @click="selectIcon('staffAgency')">
<img src="~@/assets/images/shuju/overview/sqgzz-icon.png" /> <div>
社区工作者 <img src="~@/assets/images/shuju/overview/sqgzz-icon.png"/>
</div> 社区工作者
<div> </div>
<b>{{ numData.staffAgencyNum }}</b> <div>
<b>{{ numData.staffAgencyNum }}</b>
</div>
</div> </div>
</div> </div>
</div> <div class="item" :class="selectIndex === 'staffGrid' ? 'xz' : ''">
<div :class="selectIndex === 1 ? 'item xz' : 'item'"> <div class="item-info" @click="selectIcon('staffGrid')">
<div class="item-info" @click="selectIcon(1, 'staffGrid')"> <div>
<div> <img src="~@/assets/images/shuju/overview/wgy-icon.png"/>
<img src="~@/assets/images/shuju/overview/wgy-icon.png" /> 网格员
网格员 </div>
</div> <div>
<div> <b>{{ numData.staffGridNum }}</b>
<b>{{ numData.staffGridNum }}</b> </div>
</div> </div>
</div> </div>
</div> <div class="item" :class="selectIndex === 'chief' ? 'xz' : ''">
<div :class="selectIndex === 2 ? 'item xz' : 'item'"> <div class="item-info" @click="selectIcon( 'chief')">
<div class="item-info" @click="selectIcon(2, 'chief')"> <div>
<div> <img src="~@/assets/images/shuju/overview/lzz-icon.png"/>
<img src="~@/assets/images/shuju/overview/lzz-icon.png" /> 楼组/单元长
楼组/单元长 </div>
<div>
<b>{{ numData.chiefNum }}</b>
</div>
</div> </div>
<div> </div>
<b>{{ numData.chiefNum }}</b> <div class="item" :class="selectIndex === 'publicWelfareNum' ? 'xz' : ''">
<div class="item-info" @click="selectIcon('publicWelfareNum')">
<div>
<img src="~@/assets/images/shuju/overview/gyg-icon.png"/>
公益岗
</div>
<div>
<b>{{ numData.publicWelfareNum }}</b>
</div>
</div> </div>
</div> </div>
</div> <div class="item" :class="selectIndex === 'staffDepartment' ? 'xz' : ''">
<div :class="selectIndex === 3 ? 'item xz' : 'item'"> <div class="item-info" @click="selectIcon('staffDepartment')">
<div class="item-info" @click="selectIcon(3, 'publicWelfareNum')"> <div>
<div> <img src="~@/assets/images/shuju/overview/dwzz-icon.png"/>单位/组织
<img src="~@/assets/images/shuju/overview/gyg-icon.png" /> </div>
公益岗 <div>
<b>{{ numData.staffDepartmentNum }}</b>
</div>
</div> </div>
<div> </div>
<b>{{ numData.publicWelfareNum }}</b> <div class="item" :class="selectIndex === 'volunteer'? 'xz':''">
<div class="item-info" @click="selectIcon('volunteer')">
<div>
<img src="~@/assets/images/shuju/overview/zyz-icon.png"/>
志愿者
</div>
<div>
<b>{{ numData.volunteerNum }}</b>
</div>
</div> </div>
</div> </div>
</div> </template>
<div :class="selectIndex === 4 ? 'item xz' : 'item'"> <template v-else>
<div class="item-info" @click="selectIcon(4, 'staffDepartment')"> <div class="item" :class="selectIndex === 'unit' ? 'xz' : ''" @click="selectIcon('unit')">
<div> <div class="item-info" >
<img src="~@/assets/images/shuju/overview/dwzz-icon.png" />单位/组织 <div>
<img src="~@/assets/images/overview/icon_wg.png"/>
微网格
</div>
<div>
<b>{{ numData.unitNum }}</b>
</div>
</div> </div>
<div> </div>
<b>{{ numData.staffDepartmentNum }}</b> <div class="item" :class="selectIndex === 'building' ? 'xz' : ''" @click="selectIcon('building')">
<div class="item-info">
<div>
<img src="~@/assets/images/overview/icon_ld.png"/>
楼栋
</div>
<div>
<b>{{ numData.buldingNum }}</b>
</div>
</div> </div>
</div> </div>
</div> <div class="item" >
<div :class="selectIndex === 5 ? 'item xz' : 'item'"> <div class="item-info">
<div class="item-info" @click="selectIcon(5, 'volunteer')"> <div>
<div> <img src="~@/assets/images/overview/icon_fw.png"/>
<img src="~@/assets/images/shuju/overview/zyz-icon.png" /> 房屋
志愿者 </div>
<div>
<b>{{ numData.houseNum }}</b>
</div>
</div> </div>
<div> </div>
<b>{{ numData.volunteerNum }}</b> <div class="item" >
<div class="item-info">
<div>
<img src="~@/assets/images/overview/icon_jm.png"/>
居民
</div>
<div>
<b>{{ numData.residentNum }}</b>
</div>
</div> </div>
</div> </div>
</div> </template>
</div> </div>
</template> </template>
<script> <script>
@ -75,6 +123,10 @@ export default {
type: Object, type: Object,
default: {}, default: {},
}, },
level: {
type: String,
default: '',
},
}, },
data() { data() {
return { return {
@ -89,31 +141,36 @@ export default {
} }
}, },
}, },
mounted() {
if (this.currentLevelData.orgId) {
this.getData(this.currentLevelData);
}
},
methods: { methods: {
selectIcon(num, type) { selectIcon(type) {
this.selectIndex = num; this.selectIndex = type;
this.$emit("changeType", type); this.$emit("changeType", type);
}, },
getData(item) { getData(item) {
this.$http this.$http
.get( .get(
"/actual/base/streetOverview/mapOrgSum?level=" + "/actual/base/streetOverview/mapOrgSum?level=" +
item.orgLevel + item.orgLevel +
"&orgId=" + "&orgId=" +
item.orgId item.orgId
) )
.then(({ data: { data } }) => { .then(({data: {data}}) => {
this.numData = data; this.numData = data;
}); });
}, },
}, },
}; };
</script> </script>
<style <style
lang="scss" lang="scss"
src="@/assets/scss/dataBoard/overview/index.scss" src="@/assets/scss/dataBoard/overview/index.scss"
scoped scoped
></style> ></style>
<style lang="scss" scoped> <style lang="scss" scoped>
.xz { .xz {

63
src/views/dataBoard/overview/familyPortrait/index.vue

@ -0,0 +1,63 @@
<template>
<div>
<div class="breadcrumb">
<Breadcrumb :list="breadcrumbList"/>
</div>
<Family/>
</div>
</template>
<script>
import Breadcrumb from '@/views/dataBoard/satisfactionEval/components/Breadcrumb'
import Family from '@/views/dataBoard/cpts/family'
export default {
name: "dissatisfiedPersonnelDetail",
components: {
Breadcrumb,
Family
},
data() {
return {
breadcrumbList: [{
path: '/dataBoard/overview/index',
name: '概览'
}, {
path: '/homeDetails/index',
name: '画像匹配同类不满意人员'
}, {
path: '',
name: ''
}],
}
},
watch: {
'$route.query'() {
this.$set(this.breadcrumbList[1], 'name', this.$route.query.name2)
this.$set(this.breadcrumbList[1], 'path', this.breadcrumbList[1].path + '?id=' +this.$route.query.id)
this.$set(this.breadcrumbList[2], 'name', this.$route.query.name)
this.breadcrumbList[2].name = this.$route.query.name
}
},
mounted() {
this.$set(this.breadcrumbList[1], 'name', this.$route.query.name2)
this.$set(this.breadcrumbList[1], 'path', this.breadcrumbList[1].path + '?id=' +this.$route.query.id)
this.$set(this.breadcrumbList[2], 'name', this.$route.query.name)
this.breadcrumbList[2].name = this.$route.query.name
}
}
</script>
<style scoped lang="scss">
.sub-title {
background: url("@/assets/images/manyidu/icon_fk.png") no-repeat left center;
font-size: 18px;
font-weight: 500;
color: #FFFFFF;
line-height: 22px;
padding-left: 26px;
margin-bottom: 20px;
}
.breadcrumb {
margin-bottom: 25px;
}
</style>

194
src/views/dataBoard/overview/index.vue

@ -9,7 +9,7 @@
<div class="g-left"> <div class="g-left">
<div class="m-box"> <div class="m-box">
<title-box <title-box
:text="`${ :text="`${
currentLevel === 'district' currentLevel === 'district'
? '区' ? '区'
: currentLevel === 'street' : currentLevel === 'street'
@ -21,12 +21,12 @@
: '' : ''
}介绍`" }介绍`"
/> />
<jdjs :currentLevelData="currentLevelData" /> <jdjs :currentLevelData="currentLevelData"/>
</div> </div>
<div class="m-box"> <div class="m-box">
<title-box <title-box
:text="`${ :text="`${
currentLevel === 'district' currentLevel === 'district'
? '区' ? '区'
: currentLevel === 'street' : currentLevel === 'street'
@ -38,123 +38,137 @@
: '' : ''
}图谱画像`" }图谱画像`"
/> />
<jdtphx :currentLevelData="currentLevelData" :id="orgId" /> <jdtphx :currentLevelData="currentLevelData" :id="orgId"/>
</div> </div>
</div> </div>
<div class="g-center"> <div class="g-center">
<div class="m-map" style="overflow: hidden"> <div class="m-map" style="overflow: hidden">
<map-top <map-top
:currentLevelData="currentLevelData" :currentLevelData="currentLevelData"
@changeType="changeType" @changeType="changeType"
:level="currentLevel"
/> />
<div v-if="breadList.length > 1" class="go-back" @click="goBackMap"> <div v-if="breadList.length > 1" class="go-back" @click="goBackMap">
<img src="~@/assets/images/shuju/overview/go-back.png" /> <img src="~@/assets/images/shuju/overview/go-back.png"/>
</div> </div>
<grid-map ref="map" @clickAgency="clickAgencyItem" :srcGridData="orgData" @clickDotBtn="handleClickDotBtn" /> <grid-map
ref="map"
@clickAgency="clickAgencyItem"
:srcGridData="orgData"
@clickDotBtn="handleClickDotBtn"
:level="currentLevel"
/>
</div> </div>
<div class="m-box m-rybox"> <div class="m-box m-rybox">
<title-box :text="`${customerName}${peopleList[peopleType]}`" /> <title-box :text="`${customerName}${peopleList[peopleType]}`"/>
<jdwgy <jdwgy
:peopleType="peopleType" :peopleType="peopleType"
:currentLevelData="currentLevelData" :currentLevelData="currentLevelData"
@setNum="setNum"
@setPoint="setPoint"
/> />
</div> </div>
</div> </div>
<div class="g-right"> <div class="g-right">
<div class="m-box"> <div class="m-box">
<title-box text="人房数据统计" /> <title-box text="人房数据统计"/>
<rfsjtj :currentLevelData="currentLevelData" /> <rfsjtj :currentLevelData="currentLevelData"/>
</div> </div>
<!-- 街道概览 --> <!-- 街道概览 -->
<div v-if="currentLevel === 'street' || currentLevel === 'district'" class="m-box"> <div v-if="currentLevel === 'street' || currentLevel === 'district'" class="m-box">
<title-box text="各社区人房数据更新排行"> <title-box text="各社区人房数据更新排行">
<span class="date-span"> <span class="date-span">
<el-date-picker v-model="rfphDate" format="yyyy-MM" value-format="yyyy-MM" @change="changeDate" type="month" :clearable="false" placeholder="选择月"> </el-date-picker> <el-date-picker v-model="rfphDate" format="yyyy-MM" value-format="yyyy-MM" @change="changeDate"
type="month" :clearable="false" placeholder="选择月"> </el-date-picker>
</span> </span>
</title-box> </title-box>
<sqrfph :currentLevelData="currentLevelData" :date="rfphDate" /> <sqrfph :currentLevelData="currentLevelData" :date="rfphDate"/>
</div> </div>
<div v-if="currentLevel === 'street' || currentLevel === 'district'" class="m-box"> <div v-if="currentLevel === 'street' || currentLevel === 'district'" class="m-box">
<title-box text="各社区12345投诉事件统计"> <title-box text="各社区12345投诉事件统计">
<span class="date-span"> <span class="date-span">
<el-date-picker v-model="sq12345Date" format="yyyy-MM" value-format="yyyy-MM" type="month" :clearable="false" placeholder="选择月" /> <el-date-picker v-model="sq12345Date" format="yyyy-MM" value-format="yyyy-MM" type="month"
:clearable="false" placeholder="选择月"/>
</span> </span>
</title-box> </title-box>
<sq12345 :currentLevelData="currentLevelData" :date="sq12345Date" /> <sq12345 :currentLevelData="currentLevelData" :date="sq12345Date"/>
</div> </div>
<!-- 社区&网格--> <!-- 社区&网格-->
<div <div
v-if="currentLevel === 'community' || currentLevel === 'grid'" v-if="currentLevel === 'community' || currentLevel === 'grid'"
class="m-box" class="m-box"
> >
<title-box text="人房数据动态更新" /> <title-box text="人房数据动态更新"/>
<Tabs <Tabs
v-model="dynamicType" v-model="dynamicType"
:list="dynamicTypeList" :list="dynamicTypeList"
v-if="currentLevel === 'community'" v-if="currentLevel === 'community'"
@changeVal="dynamicTypeChange" @changeVal="dynamicTypeChange"
/> />
<DynamicHumanRoomData <DynamicHumanRoomData
:currentLevelData="currentLevelData" :currentLevelData="currentLevelData"
v-if="dynamicType === 1" v-if="dynamicType === 1"
/> />
<GridUpdateRanking <GridUpdateRanking
:currentLevelData="currentLevelData" :currentLevelData="currentLevelData"
v-if="dynamicType === 2" v-if="dynamicType === 2"
/> />
</div> </div>
<!-- 社区概览--> <!-- 社区概览-->
<div v-if="currentLevel === 'community'" class="m-box"> <div v-if="currentLevel === 'community'" class="m-box">
<title-box text="社区满意度自查结果"> <title-box text="社区满意度自查结果">
<span class="date-span"> <span class="date-span">
<el-date-picker v-model="sqzcDate" format="yyyy-MM" value-format="yyyy-MM" type="month" :clearable="false" placeholder="选择月" /> <el-date-picker v-model="sqzcDate" format="yyyy-MM" value-format="yyyy-MM" type="month" :clearable="false"
placeholder="选择月"/>
</span> </span>
</title-box> </title-box>
<CommunityResult <CommunityResult
:currentLevelData="currentLevelData" :currentLevelData="currentLevelData"
:date="sqzcDate" :date="sqzcDate"
/> />
</div> </div>
<div v-if="currentLevel === 'community'" class="m-box"> <div v-if="currentLevel === 'community'" class="m-box">
<title-box text="事件&回访"> <title-box text="事件&回访">
<span class="date-span"> <span class="date-span">
<el-date-picker v-model="sjhfDate" format="yyyy-MM" value-format="yyyy-MM" @change="changeDate" type="month" :clearable="false" placeholder="选择月" /> <el-date-picker v-model="sjhfDate" format="yyyy-MM" value-format="yyyy-MM" @change="changeDate"
type="month" :clearable="false" placeholder="选择月"/>
</span> </span>
</title-box> </title-box>
<Tabs <Tabs
v-model="eventType" v-model="eventType"
:list="eventTypeList" :list="eventTypeList"
@changeVal="eventTypeChange" @changeVal="eventTypeChange"
/> />
<EventAndFollowUp <EventAndFollowUp
:currentLevelData="currentLevelData" :currentLevelData="currentLevelData"
:date="sjhfDate" :date="sjhfDate"
v-if="eventType === 1" v-if="eventType === 1"
/> />
<FollowUp <FollowUp
:currentLevelData="currentLevelData" :currentLevelData="currentLevelData"
:date="sjhfDate" :date="sjhfDate"
v-if="eventType === 2" v-if="eventType === 2"
/> />
</div> </div>
<!-- 网格 --> <!-- 网格 -->
<div v-if="currentLevel === 'grid'" class="m-box"> <div v-if="currentLevel === 'grid'" class="m-box">
<title-box text="社区网格数据更新情况排行"> <title-box text="社区网格数据更新情况排行">
<span class="date-span"> <span class="date-span">
<el-date-picker v-model="sqwggxDate" format="yyyy-MM" value-format="yyyy-MM" @change="changeDate" type="month" :clearable="false" placeholder="选择月" /> <el-date-picker v-model="sqwggxDate" format="yyyy-MM" value-format="yyyy-MM" @change="changeDate"
type="month" :clearable="false" placeholder="选择月"/>
</span> </span>
</title-box> </title-box>
<RankingGridData <RankingGridData
:currentLevelData="currentLevelData" :currentLevelData="currentLevelData"
:date="sqwggxDate" :date="sqwggxDate"
/> />
</div> </div>
</div> </div>
</div> </div>
<cpt-loading v-show="false" /> <cpt-loading v-show="false"/>
</div> </div>
</template> </template>
@ -179,8 +193,8 @@ import RankingGridData from "@/views/dataBoard/overview/components/RankingGridDa
import FollowUp from "@/views/dataBoard/overview/components/FollowUp.vue"; import FollowUp from "@/views/dataBoard/overview/components/FollowUp.vue";
import Tabs from "@/views/dataBoard/satisfactionEval/components/Tabs/index.vue"; import Tabs from "@/views/dataBoard/satisfactionEval/components/Tabs/index.vue";
import { requestPostBi } from "@/js/dai/request-bipass"; import {requestPostBi} from "@/js/dai/request-bipass";
import { requestPost } from "@/js/dai/request"; import {requestPost} from "@/js/dai/request";
export default { export default {
name: "renfang", name: "renfang",
@ -223,7 +237,7 @@ export default {
currentLevelData: { currentLevelData: {
orgId: this.$store.state.chooseArea.chooseName.orgId, orgId: this.$store.state.chooseArea.chooseName.orgId,
orgLevel: this.$store.state.chooseArea.chooseName.level, orgLevel: this.$store.state.chooseArea.chooseName.level,
meta: { title: "人房总览" }, meta: {title: "人房总览"},
}, },
breadList: [ breadList: [
{ {
@ -231,7 +245,7 @@ export default {
orgLevel: "", orgLevel: "",
id: "", id: "",
level: "", level: "",
meta: { title: "人房总览" }, meta: {title: "人房总览"},
}, },
], ],
peopleList: { peopleList: {
@ -299,7 +313,7 @@ export default {
methods: { methods: {
changeCustomerName() { changeCustomerName() {
this.customerName = this.customerName =
localStorage.getItem("customerNameDataBoard") || "数据分析可视化平台"; localStorage.getItem("customerNameDataBoard") || "数据分析可视化平台";
}, },
changeType(e) { changeType(e) {
this.peopleType = e; this.peopleType = e;
@ -337,11 +351,12 @@ export default {
} }
}, },
clickBreadItem({ item }) { clickBreadItem({item}) {
this.toBread(item); this.toBread(item);
}, },
clickAgencyItem(item) { clickAgencyItem(item) {
this.$refs.map.clearMarkert()
if (item.id) { if (item.id) {
this.customerName = item.name || item.meta.title; this.customerName = item.name || item.meta.title;
this.currentLevelData = { this.currentLevelData = {
@ -350,7 +365,7 @@ export default {
}; };
} else { } else {
this.customerName = this.customerName =
localStorage.getItem("customerNameDataBoard") || "数据分析可视化平台"; localStorage.getItem("customerNameDataBoard") || "数据分析可视化平台";
this.currentLevelData = { this.currentLevelData = {
...this.$store.state.chooseArea.chooseName, ...this.$store.state.chooseArea.chooseName,
orgLevel: this.$store.state.chooseArea.chooseName.level, orgLevel: this.$store.state.chooseArea.chooseName.level,
@ -359,7 +374,7 @@ export default {
this.toBread({ this.toBread({
orgId: item.id, orgId: item.id,
orgLevel: item.level, orgLevel: item.level,
meta: { title: item.name }, meta: {title: item.name},
}); });
}, },
goBackMap() { goBackMap() {
@ -367,13 +382,13 @@ export default {
this.clickAgencyItem(item); this.clickAgencyItem(item);
}, },
toBread(item) { toBread(item) {
const { orgId } = item; const {orgId} = item;
const { breadList } = this; const {breadList} = this;
let index = breadList.findIndex((val) => val.orgId === orgId); let index = breadList.findIndex((val) => val.orgId === orgId);
if (index >= 0) { if (index >= 0) {
this.breadList = breadList.slice(0, index + 1); this.breadList = breadList.slice(0, index + 1);
} else { } else {
breadList.push({ ...item, id: item.orgId, level: item.orgLevel }); breadList.push({...item, id: item.orgId, level: item.orgLevel});
this.breadList = breadList; this.breadList = breadList;
} }
this.getMapData(item.orgId, item.orgLevel); this.getMapData(item.orgId, item.orgLevel);
@ -386,18 +401,49 @@ export default {
} }
this.$refs.map.setDotMarker(item, [parseFloat(item.longitude), parseFloat(item.latitude)]); this.$refs.map.setDotMarker(item, [parseFloat(item.longitude), parseFloat(item.latitude)]);
}, },
setNum(data) {
console.log(this.orgData,data,'111')
// data
let params = []
let org = this.orgData.children
org.forEach(item => {
data.forEach(item2 => {
if (item2.orgId === item.id && item.coordinates) {
params.push({
...item2,
peopleType: this.peopleList[this.peopleType],
latitude: item.latitude,
longitude: item.longitude
})
}
})
})
if (params.length) {
this.$refs.map.setNum(params)
}
},
setPoint(data) {
if (data) {
this.$refs.map.setPoint(data)
}
},
// //
async getMapData( async getMapData(
orgId = this.$store.state.chooseArea.chooseName.orgId, orgId = this.$store.state.chooseArea.chooseName.orgId,
level = this.$store.state.chooseArea.chooseName.level level = this.$store.state.chooseArea.chooseName.level
) { ) {
const url = "org_map"; const url = "org_map";
this.$http.post(`/gov/org/agency/maporg`, { orgId, level }).then(({ data: { data } }) => { this.$http.post(`/gov/org/agency/maporg`, {orgId, level}).then(({data: {data}}) => {
this.orgData = data; this.orgData = data;
this.orgId = this.orgData.org_id; this.orgId = this.orgData.id;
console.log(this.orgId)
this.orgLevel = this.orgData.level; this.orgLevel = this.orgData.level;
this.currentLevel = this.orgData.agencyLevel; this.currentLevel = this.orgData.agencyLevel;
this.currentLevelData = {
orgId: this.orgId,
orgLevel: this.currentLevel,
};
this.peopleType = this.currentLevel === 'grid'?'unit':'staffAgency';
}); });
}, },
@ -405,20 +451,20 @@ export default {
async getSubMapData() { async getSubMapData() {
const url = "sub_org_map"; const url = "sub_org_map";
const { data, code, msg } = await requestPostBi( const {data, code, msg} = await requestPostBi(
url, url,
{ {
queryParam: { queryParam: {
org_id: this.orgId, org_id: this.orgId,
},
}, },
}, {
{ // mockId: 61831860,
// mockId: 61831860, }
}
); );
if (code === 0) { if (code === 0) {
const { orgData } = this; const {orgData} = this;
orgData.children = data.map((item) => { orgData.children = data.map((item) => {
return { return {
...item, ...item,
@ -429,7 +475,7 @@ export default {
coordinates: item.coordinates || "", coordinates: item.coordinates || "",
}; };
}); });
this.orgData = { ...orgData }; this.orgData = {...orgData};
} else { } else {
this.$message.error(msg); this.$message.error(msg);
} }
@ -443,7 +489,7 @@ export default {
level: this.orgLevel, level: this.orgLevel,
}; };
const { data, code, msg } = await requestPost(url, params); const {data, code, msg} = await requestPost(url, params);
if (code === 0) { if (code === 0) {
this.orgData = data; this.orgData = data;
this.orgId = this.orgId; this.orgId = this.orgId;
@ -465,10 +511,12 @@ export default {
top: 100px; top: 100px;
left: 16px; left: 16px;
right: 0; right: 0;
img { img {
height: 36px; height: 36px;
width: 36px; width: 36px;
} }
img:hover { img:hover {
cursor: pointer; cursor: pointer;
} }

2
src/views/dataBoard/renfang/index.vue

@ -549,7 +549,7 @@ export default {
}, },
toResiClassPage(pageType, type_id = "", type_name) { toResiClassPage(pageType, type_id = "", type_name) {
this.$router.push({ this.$router.push({
path: "/dataBoard/renfang/resi-class-new", path: "/dataBoard/renfang/resi-class",
query: { query: {
org_id: this.orgId, org_id: this.orgId,
type_id, type_id,

2
src/views/dataBoard/satisfactionEval/index.vue

@ -23,7 +23,7 @@
<SelfTrend/> <SelfTrend/>
</div> </div>
<div class="bg2"> <div class="bg2">
<Title text="下级网格不满意事项统计"/> <Title text="下级组织不满意事项统计"/>
<EventStatistics/> <EventStatistics/>
</div> </div>
</el-col> </el-col>

97
src/views/dataBoard/satisfactionEval/modules/PersonnelPortrait/index.vue

@ -1,6 +1,6 @@
<template> <template>
<div class="personnel-portrait"> <div class="personnel-portrait">
<Tabs v-model="resultType" :list="resultTypeList" @changeVal="resultTypeChange"/> <Tabs v-model="resultType" :list="resultTypeList" @changeVal="resultTypeChange" />
<div class="screen"> <div class="screen">
<div class="txt">不满意人员画像</div> <div class="txt">不满意人员画像</div>
<!-- <el-select v-model="typeCondition" @change="getData" placeholder="请选择" class="select" popper-class="selectPopClass"> <!-- <el-select v-model="typeCondition" @change="getData" placeholder="请选择" class="select" popper-class="selectPopClass">
@ -26,19 +26,24 @@
<div class="tag light" v-if="monthIncomeLevel"> <div class="tag light" v-if="monthIncomeLevel">
<div class="text">{{ monthIncomeLevel }}</div> <div class="text">{{ monthIncomeLevel }}</div>
</div> </div>
<div class="tag green" v-if="cultureLevel"> <div class="tag green" v-if="cultureName">
<div class="text">{{ cultureLevel }}</div> <div class="text">{{ cultureName }}</div>
</div> </div>
<div class="tag orange" v-if="marriageName"> <div class="tag orange" v-if="marriageName">
<div class="text">{{ marriageName }}</div> <div class="text">{{ marriageName }}</div>
</div> </div>
<div class="tag purple" v-if="gender"> <div class="tag purple" v-if="gender">
<div class="text">{{ gender === '1' ? '男' : gender === '2' ? '女' : gender === '0' ? '未知' : '' }}</div> <div class="text">{{ gender === "1" ? "男" : gender === "2" ? "女" : gender === "0" ? "未知" : "" }}</div>
</div> </div>
</div> </div>
<div class="btn" @click="gotopage"> <div class="btn" @click="gotopage">
<div>按画像匹配到同类<span> <b>{{ matchPeopleNum ? matchPeopleNum : 0 }}</b></span></div> <div>
按画像匹配到同类<span>
<b>{{ matchPeopleNum ? matchPeopleNum : 0 }}</b
></span
>
</div>
<i class="el-icon-arrow-right"></i> <i class="el-icon-arrow-right"></i>
</div> </div>
</div> </div>
@ -49,30 +54,32 @@ import Tabs from "@/views/dataBoard/satisfactionEval/components/Tabs/index.vue";
export default { export default {
name: "PersonnelPortrait", name: "PersonnelPortrait",
components: {Tabs}, components: { Tabs },
data() { data() {
return { return {
resultType: 'provinceAndSelf', resultType: "provinceAndSelf",
resultTypeList: [{ resultTypeList: [
label: '按省调查/社区自查结果', {
value: 'provinceAndSelf' label: "按省调查/社区自查结果",
value: "provinceAndSelf",
}, { },
label: '按12345热线投诉结果', {
value: '12345' label: "按12345热线投诉结果",
}], value: "12345",
typeCondition: '', },
],
typeCondition: "",
typeConditionList: [], typeConditionList: [],
gender: "", gender: "",
marriageName: "", marriageName: "",
ageClassification: "", ageClassification: "",
cultureLevel: "", cultureName: "",
gridName: "", gridName: "",
monthIncomeLevel: "", monthIncomeLevel: "",
residentTagName: "", residentTagName: "",
matchPeopleNum: 0, matchPeopleNum: 0,
searchParams: '' searchParams: "",
} };
}, },
watch: { watch: {
"$store.state.chooseArea.chooseName"(val) { "$store.state.chooseArea.chooseName"(val) {
@ -80,7 +87,7 @@ export default {
// this.getDisKey() // this.getDisKey()
this.getData(); this.getData();
} }
} },
}, },
mounted() { mounted() {
if (this.$store.state.chooseArea.chooseName.orgId) { if (this.$store.state.chooseArea.chooseName.orgId) {
@ -90,17 +97,17 @@ export default {
}, },
methods: { methods: {
resultTypeChange(val) { resultTypeChange(val) {
this.resultType = val this.resultType = val;
this.getData() this.getData();
}, },
gotopage() { gotopage() {
this.$router.push('/dataBoard/satisfactionEval/dissatisfiedPersonnel?searchParams=' + this.searchParams) this.$router.push("/dataBoard/satisfactionEval/dissatisfiedPersonnel?searchParams=" + this.searchParams);
}, },
getDisKey() { getDisKey() {
this.$http.post('/sys/dict/data/dictlist', {'dictType': 'satisfaction_category'}).then(({data: {data}}) => { this.$http.post("/sys/dict/data/dictlist", { dictType: "satisfaction_category" }).then(({ data: { data } }) => {
this.typeCondition = data[0].value this.typeCondition = data[0].value;
this.typeConditionList = data this.typeConditionList = data;
}) });
}, },
getData() { getData() {
let params = { let params = {
@ -108,22 +115,22 @@ export default {
orgId: this.$store.state.chooseArea.chooseName.orgId, orgId: this.$store.state.chooseArea.chooseName.orgId,
queryType: this.resultType, queryType: this.resultType,
category: this.typeCondition, category: this.typeCondition,
} };
this.$http.get('/governance/satisfactionOverview/satisfactionCrowdPortrait?' + this.$paramsFormat(params)).then(({data: {data}}) => { this.$http.get("/governance/satisfactionOverview/satisfactionCrowdPortrait?" + this.$paramsFormat(params)).then(({ data: { data } }) => {
this.gender = data.gender; this.gender = data.gender;
this.marriageName = data.marriageName; this.marriageName = data.marriageName;
this.ageClassification = data.ageClassification; this.ageClassification = data.ageClassification;
this.cultureLevel = data.cultureLevel; this.cultureName = data.cultureName;
this.gridName = data.gridName; this.gridName = data.gridName;
this.monthIncomeLevel = data.monthIncomeLevel; this.monthIncomeLevel = data.monthIncomeLevel;
this.residentTagName = data.residentTagName; this.residentTagName = data.residentTagName;
this.matchPeopleNum = data.matchPeopleNum; this.matchPeopleNum = data.matchPeopleNum;
this.searchParams = JSON.stringify({...data, ...params}) this.searchParams = JSON.stringify({ ...data, ...params });
}) });
} },
} },
} };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@ -146,7 +153,7 @@ $purple: #6642fd;
.txt { .txt {
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 500;
color: #FFFFFF; color: #ffffff;
line-height: 22px; line-height: 22px;
margin-right: 25px; margin-right: 25px;
} }
@ -154,15 +161,15 @@ $purple: #6642fd;
/deep/ .el-input__inner { /deep/ .el-input__inner {
width: 110px !important; width: 110px !important;
height: 24px !important; height: 24px !important;
background: #021C49 !important; background: #021c49 !important;
border: 1px solid #125AAA !important; border: 1px solid #125aaa !important;
border-radius: 12px !important; border-radius: 12px !important;
color: #A0CDFF; color: #a0cdff;
} }
/deep/ .el-input__icon { /deep/ .el-input__icon {
line-height: 24px !important; line-height: 24px !important;
color: #A0CDFF; color: #a0cdff;
} }
} }
@ -196,13 +203,12 @@ $purple: #6642fd;
&:after { &:after {
content: ""; content: "";
opacity: .3; opacity: 0.3;
display: block; display: block;
width: 76px; width: 76px;
height: 76px; height: 76px;
position: absolute; position: absolute;
border-radius: 50%; border-radius: 50%;
} }
&:nth-of-type(1) { &:nth-of-type(1) {
@ -315,11 +321,11 @@ $purple: #6642fd;
.btn { .btn {
width: 240px; width: 240px;
height: 46px; height: 46px;
border: 1px solid #125AAA; border: 1px solid #125aaa;
border-radius: 23px; border-radius: 23px;
font-size: 14px; font-size: 14px;
font-weight: 400; font-weight: 400;
color: #FFFFFF; color: #ffffff;
line-height: 46px; line-height: 46px;
display: flex; display: flex;
align-items: center; align-items: center;
@ -332,5 +338,4 @@ $purple: #6642fd;
font-size: 18px; font-size: 18px;
} }
} }
</style>
</style>

Loading…
Cancel
Save