xy 2 years ago
parent dfaf74cfd7
commit 4cddc74b25

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

@ -3,7 +3,7 @@
<Echart
:options="options"
id="centreLeft1Chart"
height="480px"
height="400px"
width="100%"
></Echart>
</div>
@ -113,12 +113,12 @@ export default {
color: '#fff',
fontSize: 16
},
top: 50,
left: 80
top: 14,
left: 30
},
legend: {
top: 120,
left: 80,
top: 128,
left: 30,
orient: 'vertical',
itemGap: 15,
itemWidth: 12,
@ -133,7 +133,7 @@ export default {
trigger: 'item'
},
radar: {
center: ['68%', '27%'],
center: ['58%', '24%'],
radius: '40%',
name: {
color: '#fff'
@ -181,10 +181,10 @@ export default {
]
},
grid: {
left: 90,
right: 80,
left: 70,
right: 60,
bottom: 40,
top: '60%'
top: '62%'
},
xAxis: {
type: 'category',

@ -2,8 +2,8 @@
<div class="page">
<div class="container" ref="appRef">
<dv-loading v-if="loading">Loading...</dv-loading>
<div v-else>
<dv-decoration-3 style="width:250px;height:30px;position: absolute;bottom: -10px;right: 60px;" />
<div v-else style="height: 100%;" class="d-flex flex-column">
<dv-decoration-3 style="width:250px;height:30px;position: absolute;bottom: 0;left: 0px;" />
<HeaderComponent></HeaderComponent>
@ -18,6 +18,7 @@
<div class="right d-flex flex-column ml-2">
<dv-border-box-12><right1></right1></dv-border-box-12>
<dv-border-box-12><right2></right2></dv-border-box-12>
<dv-border-box-12><right3></right3></dv-border-box-12>
</div>
</div>
</div>
@ -31,6 +32,7 @@ import MapComponent from "./map.vue";
import HeaderComponent from "./header.vue";
import right1 from "./right1.vue";
import right2 from "./right2.vue";
import right3 from "./right3.vue";
import btns from "./btns.vue";
import leftBottom from "./leftBottom.vue"
import { index } from '@/api/system/baseForm';
@ -40,22 +42,45 @@ export default {
HeaderComponent,
right1,
right2,
right3,
btns,
leftBottom
},
mixins: [drawMixin],
provide() {
return {
assets: () => this.assetsData
assets: () => this.assetsData,
leases: () => this.leases,
}
},
data() {
return {
loading: true,
assetsData: [[],[]],
leases: []
}
},
methods: {
async getLeases () {
const res = await index({
table_name: "leases",
page: 1,
page_size: 999,
filter: [
{
key: 'zulinjieshuqixian',
op: 'range',
value: `${this.$moment().format("YYYY-MM-DD")},2999-12-31`
},
{
key: 'zulinkaishiqixian',
op: 'range',
value: `${this.$moment(0).format("YYYY-MM-DD")},${this.$moment().format("YYYY-MM-DD")}`
}
]
})
console.log(res)
},
async getData () {
await Promise.all([
index({
@ -82,6 +107,7 @@ export default {
},
created() {
this.getData();
this.getLeases()
}
}
</script>
@ -107,10 +133,10 @@ export default {
left: 50%;
.body {
padding-top: 60px;
padding-left: 14%;
padding-top: 20px;
padding-left: 13%;
.left {
flex-basis: 60%;
flex-basis: 74%;
}
.right {
flex: 1;

@ -4,19 +4,85 @@
</template>
<script>
import Vue from "vue";
import * as echarts from "echarts";
import "echarts-gl";
import WUXI from "@/assets/wuxi.json";
import tooltip from "./tooltip.vue"
export default {
inject: ["assets"],
data() {
return {}
return {
areas: new Map([
[1,"宜兴市"],
[2,"惠山区"],
[3,"新吴区"],
[4,"梁溪区"],
[5,"江阴市"],
[6,"滨湖区"],
[7,"锡山区"]
]),
chart: "",
label: {
show: true,
formatter(params) {
if (params.value) {
return `{radiusBg|${params.value}}`
} else {
return null;
}
},
rich: {
radiusBg: {
color: "#666",
align: 'center',
width: 50,
height: 50,
fontSize: 22,
},
},
textStyle: {
width: 62,
height: 60,
backgroundColor: {
image: require('@/assets/point.png')
},
}
},
params: {},
mapTooltip: "",
}
},
methods: {
initMap () {
echarts.registerMap("wuxi", WUXI);
let chart = echarts.init(document.querySelector("#map"))
chart.setOption({
this.chart = echarts.init(document.querySelector("#map"))
this.setOption()
},
setTooltip () {
const div = document.createElement("div");
let mapTooltip = new Vue({
render: h => h(tooltip, { props: { info: this.params?.data?.originalData } })
})
mapTooltip.$mount(div);
this.mapTooltip = mapTooltip.$el;
},
setOption () {
this.chart.setOption(this.chartOption);
}
},
computed: {
chartOption () {
return {
tooltip: {
trigger: 'item',
formatter: (params) => {
this.params = params;
return this.mapTooltip;
},
},
series: [{
type: 'map3D', // mapmap3D
map: 'wuxi', //
@ -74,16 +140,65 @@ export default {
intensity: 0.5 // [ default: 0.2 ]
}
},
}],
},{
zlevel: 20,
map: 'wuxi',
type: "map3D",
regionHeight: 2,
itemStyle: {
color: 'transparent'
},
emphasis: {
itemStyle: {
color: 'transparent'
}
},
data: this.labelData.map(v => {
v.label = this.label;
v.emphasis = {
label: this.label
}
return v
})
}]
}
},
labelData () {
let a = this.assets()
const [houses,lands] = a
let temp = Array.from(this.areas,(item,index) => ({
tag: item[0],
name: item[1],
value: 0,
originalData: []
}))
houses.forEach(item => {
let find = temp.find(v => v.tag === item.area)
if (find) {
find.value++;
find.originalData.push(item)
}
})
chart.on("click", (params) => {
console.log(params)
lands.forEach(item => {
let find = temp.find(v => v.tag === item.area)
if (find) {
find.value++;
find.originalData.push(item)
}
})
return temp.filter(v => v.value > 0);
}
},
watch: {
labelData () {
this.setOption()
}
},
computed: {},
mounted() {
this.initMap()
this.initMap();
this.setTooltip();
}
}
</script>

@ -1,11 +1,11 @@
<template>
<div>
<div class="ranking bg-color-black">
<div class="title">
<div class="title d-flex align-center">
<span>
<icon name="chart-pie" class="text-icon"></icon>
<SvgIcon icon-class="tudi" class="text-icon"></SvgIcon>
</span>
<span class="fs-xl text mx-2 mb-1 pl-3">年度负责人组件达标榜</span>
<span class="fs-xl text">土地资产</span>
</div>
<dv-scroll-ranking-board class="dv-scr-rank-board mt-1" :config="ranking" />
@ -14,73 +14,61 @@
</template>
<script>
import SvgIcon from "@/components/SvgIcon"
export default {
components: {
SvgIcon
},
inject: ["assets"],
data() {
return {
ranking: {
data: [
{
name: '周口',
value: 55
},
{
name: '南阳',
value: 120
},
{
name: '西峡',
value: 78
},
{
name: '驻马店',
value: 66
},
{
name: '新乡',
value: 80
},
{
name: '新乡2',
value: 80
},
{
name: '新乡3',
value: 80
},
{
name: '新乡4',
value: 80
},
{
name: '新乡5',
value: 80
},
{
name: '新乡6',
value: 80
}
],
carousel: 'single',
unit: '人'
}
}
},
methods: {},
computed: {}
computed: {
ranking () {
if (this.assets()[1]) {
return {
data: this.assets()[1].map(item => ({
name: item.name.length > 16 ? (item.name.slice(0, 14) + '...') : item.name,
value: item.dengjimianji ?? 0
})),
carousel: 'single',
unit: '平方',
waitTime: 4000,
rowNum: 3
}
}
}
}
}
</script>
<style scoped lang="scss">
.text-icon {
width: 24px;
height: 24px;
color: #1da4a1;
}
.ranking {
padding: 20px 10px;
width: 100%;
.dv-scr-rank-board {
height: 225px;
padding: 20px;
height: 180px;
padding: 10px 20px;
}
.title {
display: flex;
color: #fff;
padding: 0 20px;
align-items: center;
.text {
padding: 0 8px;
}
}
}
::v-deep .dv-scroll-ranking-board .ranking-column .inside-column {
background: linear-gradient(to left,#7ddacd,#1da4a1);
}
</style>

@ -1,112 +1,78 @@
<template>
<div id="bottomRight">
<div class="bg-color-black">
<div class="d-flex pt-2 pl-2">
<div class="title">
<span>
<icon name="chart-area" class="text-icon"></icon>
</span>
<span class="fs-xl text mx-2">工单修复以及满意度统计图</span>
</div>
<div class="d-flex">
<div class="decoration2">
<dv-decoration-2 :reverse="true" style="width:5px;height:6rem;" />
</div>
</div>
</div>
<div>
<Chart :cdata="cdata" />
<div>
<div class="ranking bg-color-black">
<div class="title d-flex align-center">
<span>
<SvgIcon icon-class="fangwu" class="text-icon"></SvgIcon>
</span>
<span class="fs-xl text">房屋资产</span>
</div>
<dv-scroll-ranking-board class="dv-scr-rank-board mt-1" :config="ranking"/>
</div>
</div>
</template>
<script>
import Chart from "@/components/Charts"
import SvgIcon from "@/components/SvgIcon"
export default {
data () {
return {
drawTiming: null,
cdata: {
year: null,
weekCategory: [],
radarData: [],
radarDataAvg: [],
maxData: 12000,
weekMaxData: [],
weekLineData: []
}
}
},
components: {
Chart,
},
mounted () {
this.drawTimingFn();
SvgIcon
},
beforeDestroy () {
clearInterval(this.drawTiming);
inject: ["assets"],
data() {
return {}
},
methods: {
drawTimingFn () {
this.setData();
this.drawTiming = setInterval(() => {
this.setData();
}, 6000);
},
setData () {
//
this.cdata.weekCategory = [];
this.cdata.weekMaxData = [];
this.cdata.weekLineData = [];
this.cdata.radarData = [];
this.cdata.radarDataAvg = [];
methods: {},
computed: {
ranking() {
if (this.assets()[0]) {
return {
data: this.assets()[0].map(item => ({
name: item.name.length > 16 ? (item.name.slice(0, 14) + '...') : item.name,
value: item.dengjimianji ?? 0
})),
carousel: 'single',
unit: '平方',
waitTime: 4000,
rowNum: 3
}
}
}
}
}
</script>
let dateBase = new Date();
this.cdata.year = dateBase.getFullYear();
//
for (let i = 0; i < 7; i++) {
//
let date = new Date();
this.cdata.weekCategory.unshift([date.getMonth() + 1, date.getDate()-i].join("/"));
<style scoped lang="scss">
.text-icon {
width: 24px;
height: 24px;
color: #1da4a1;
}
// 线
this.cdata.weekMaxData.push(this.cdata.maxData);
let distance = Math.round(Math.random() * 11000 + 500);
this.cdata.weekLineData.push(distance);
.ranking {
padding: 20px 10px;
width: 100%;
//
//
let averageSpeed = +(Math.random() * 5 + 3).toFixed(3);
let maxSpeed = averageSpeed + +(Math.random() * 3).toFixed(2);
let hour = +(distance / 1000 / averageSpeed).toFixed(1);
let radarDayData = [distance, averageSpeed, maxSpeed, hour];
this.cdata.radarData.unshift(radarDayData);
.dv-scr-rank-board {
height: 180px;
padding: 10px 20px;
}
//
let distanceAvg = Math.round(Math.random() * 8000 + 4000);
let averageSpeedAvg = +(Math.random() * 4 + 4).toFixed(3);
let maxSpeedAvg = averageSpeedAvg + +(Math.random() * 2).toFixed(2);
let hourAvg = +(distance / 1000 / averageSpeed).toFixed(1);
let radarDayDataAvg = [
distanceAvg,
averageSpeedAvg,
maxSpeedAvg,
hourAvg
];
this.cdata.radarDataAvg.unshift(radarDayDataAvg);
}
.title {
display: flex;
color: #fff;
padding: 0 20px;
align-items: center;
.text {
padding: 0 8px;
}
}
};
</script>
<style scoped lang="scss">
#bottomRight {
padding: 20px;
}
.title {
color: #fff;
::v-deep .dv-scroll-ranking-board .ranking-column .inside-column {
background: linear-gradient(to left, #7ddacd, #1da4a1);
}
</style>

@ -0,0 +1,125 @@
<template>
<div id="bottomRight">
<div class="bg-color-black">
<div class="d-flex pt-2">
<div class="title">
<span>
<SvgIcon class="text-icon" icon-class="skill"></SvgIcon>
</span>
<span class="fs-xl text mx-2">资产数据</span>
</div>
<div class="d-flex">
<div class="decoration2">
<dv-decoration-2 :reverse="true" style="position:absolute;width:5px;height:6rem;" />
</div>
</div>
</div>
<div>
<Chart :cdata="cdata" />
</div>
</div>
</div>
</template>
<script>
import SvgIcon from "@/components/SvgIcon"
import Chart from "@/components/Charts"
export default {
components: {
SvgIcon,
Chart
},
data () {
return {
drawTiming: null,
cdata: {
year: null,
weekCategory: [],
radarData: [],
radarDataAvg: [],
maxData: 12000,
weekMaxData: [],
weekLineData: []
}
}
},
mounted () {
this.drawTimingFn();
},
beforeDestroy () {
clearInterval(this.drawTiming);
},
methods: {
drawTimingFn () {
this.setData();
this.drawTiming = setInterval(() => {
this.setData();
}, 6000);
},
setData () {
//
this.cdata.weekCategory = [];
this.cdata.weekMaxData = [];
this.cdata.weekLineData = [];
this.cdata.radarData = [];
this.cdata.radarDataAvg = [];
let dateBase = new Date();
this.cdata.year = dateBase.getFullYear();
//
for (let i = 0; i < 7; i++) {
//
let date = new Date();
this.cdata.weekCategory.unshift([date.getMonth() + 1, date.getDate()-i].join("/"));
// 线
this.cdata.weekMaxData.push(this.cdata.maxData);
let distance = Math.round(Math.random() * 11000 + 500);
this.cdata.weekLineData.push(distance);
//
//
let averageSpeed = +(Math.random() * 5 + 3).toFixed(3);
let maxSpeed = averageSpeed + +(Math.random() * 3).toFixed(2);
let hour = +(distance / 1000 / averageSpeed).toFixed(1);
let radarDayData = [distance, averageSpeed, maxSpeed, hour];
this.cdata.radarData.unshift(radarDayData);
//
let distanceAvg = Math.round(Math.random() * 8000 + 4000);
let averageSpeedAvg = +(Math.random() * 4 + 4).toFixed(3);
let maxSpeedAvg = averageSpeedAvg + +(Math.random() * 2).toFixed(2);
let hourAvg = +(distance / 1000 / averageSpeed).toFixed(1);
let radarDayDataAvg = [
distanceAvg,
averageSpeedAvg,
maxSpeedAvg,
hourAvg
];
this.cdata.radarDataAvg.unshift(radarDayDataAvg);
}
}
}
};
</script>
<style scoped lang="scss">
#bottomRight {
padding: 20px 10px;
}
.title {
display: flex;
color: #fff;
padding: 0 20px;
align-items: center;
.text {
padding: 0 8px;
}
}
.text-icon {
width: 24px;
height: 24px;
color: #1da4a1;
}
</style>

@ -0,0 +1,36 @@
<template>
<div>
<Table class="table" :data="info" :columns="columns"></Table>
</div>
</template>
<script>
export default {
props: {
info: Array
},
data() {
return {
columns: [
{
key: "name",
title: "资产名称"
},
{
key: "dengjimianji",
title: "登记面积"
}
]
}
},
methods: {},
computed: {}
}
</script>
<style scoped lang="scss">
.table {
width: 320px;
height: auto;
}
</style>

@ -252,8 +252,8 @@ export default {
},
daterangePick (e) {
if (e && e[0] && e[1]) {
this.select.filter[0].value = `${this.$moment(e[0]).format('YYYY-MM-DD HH:mm:ss')},2999-01-01 00:00:00`;
this.select.filter[1].value = `${this.$moment(0).format('YYYY-MM-DD HH:mm:ss')},${this.$moment(e[1]).format('YYYY-MM-DD HH:mm:ss')}`;
this.select.filter[0].value = `${this.$moment(e[0]).format('YYYY-MM-DD')},2999-01-01`;
this.select.filter[1].value = `${this.$moment(0).format('YYYY-MM-DD')},${this.$moment(e[1]).format('YYYY-MM-DD')}`;
} else {
this.select.filter[0].value = "";
this.select.filter[1].value = "";

Loading…
Cancel
Save