Browse Source

督察情况大屏11/16/16:33

main
parent
commit
5302ba92e5
  1. 1
      src/components/datav/chart-bar-pro.vue
  2. 258
      src/components/datav/chart-bar.vue
  3. 21
      src/views/datav/Gobal.vue
  4. 6
      src/views/datav/SceneInsp.vue

1
src/components/datav/chart-bar-pro.vue

@ -132,6 +132,7 @@ function getColor(val) {
.bar-item_content {
.bar-item_content-bar {
height: 13px;
}
}
}

258
src/components/datav/chart-bar.vue

@ -1,172 +1,190 @@
<template>
<div class="flex between v-center mb-10">
<span class="bar-title">{{ title }}</span>
<span class="bar-sub-title">{{ subTitle }}</span>
</div>
<div>
<div
class="flex v-center bar-item wrap between"
v-for="item in data"
:size="size"
:style="{ '--label-width': `${labelWidth}px` }"
:position="labelPosition"
>
<div class="flex between v-center mb-10">
<span class="bar-title">{{ title }}</span>
<span class="bar-sub-title">{{ subTitle }}</span>
</div>
<div>
<div
class="flex v-center bar-item wrap between"
v-for="item in data"
:size="size"
:style="{ '--label-width': `${labelWidth}px` }"
:position="labelPosition"
>
<span class="bar-item-label mr-8">
{{ item.label }}
</span>
<div class="bar-item_content mr-8" :long="!item.denominator">
<div
class="bar-item_content-bar"
:style="{
<div class="bar-item_content " :long="!item.denominator">
<div
class="bar-item_content-bar"
:style="{
width: `${(item.value / max) * 100}%`,
background: getColor((item.value / max) * 100),
}"
></div>
</div>
<span >{{ item.value }}</span>
<span
class="bar-item_remark text-right ml-8"
v-if="item.denominator"
style="min-width: 40px"
>
></div>
</div>
<span>{{ item.value }}</span>
<span
class="bar-item_remark text-right ml-8"
v-if="item.denominator"
style="min-width: 40px"
>
<span class="text-success">{{ item.numerator }}</span>
<span>/</span>
<span>{{ item.denominator }}</span>
</span>
</div>
</div>
</div>
</template>
<script setup>
import { onMounted } from "vue";
import {onMounted} from "vue";
const props = defineProps({
title: {
type: String,
default: "",
},
subTitle: {
type: String,
default: "",
},
data: {
type: Array,
default: [],
},
size: {
type: String,
default: "",
},
unit: {
type: String,
default: "",
},
color: {
type: Object,
default: "linear-gradient(270deg, #63e700 0%, #19674c 100%)",
},
labelWidth: {
type: Number,
default: 80,
},
labelPosition: {
type: String,
default: "left",
},
title: {
type: String,
default: "",
},
subTitle: {
type: String,
default: "",
},
data: {
type: Array,
default: [],
},
size: {
type: String,
default: "",
},
unit: {
type: String,
default: "",
},
color: {
type: Object,
default: "linear-gradient(270deg, #63e700 0%, #19674c 100%)",
},
labelWidth: {
type: Number,
default: 80,
},
labelPosition: {
type: String,
default: "left",
},
});
const max = ref(100);
watch(
() => props.data,
() => {
getMax();
getMax();
}
);
function getMax() {
if (props.unit !== "%") {
max.value = Math.max(...props.data.map((item) => item.value));
}
if (props.unit !== "%") {
max.value = Math.max(...props.data.map((item) => item.value));
}
}
onMounted(() => {
getMax();
getMax();
});
function getColor(val) {
if (props.color instanceof String) {
return props.color;
if (props.color instanceof String) {
return props.color;
}
if (props.color instanceof Array) {
const colors = [...props.color];
colors.sort((a, b) => b.percentage - a.percentage);
for (let i = 0; i < colors.length; i++) {
if (val > colors[i].percentage) {
return colors[i].color;
}
}
if (props.color instanceof Array) {
const colors = [...props.color];
colors.sort((a, b) => b.percentage - a.percentage);
for (let i = 0; i < colors.length; i++) {
if (val > colors[i].percentage) {
return colors[i].color;
}
}
}
return "linear-gradient(270deg, #63e700 0%, #19674c 100%)";
}
return "linear-gradient(270deg, #63e700 0%, #19674c 100%)";
}
</script>
<style lang="scss" scoped>
.bar-title {
font-size: 19px;
font-size: 19px;
}
.bar-sub-title {
color: #597ae9;
font-size: 14px;
color: #597ae9;
font-size: 14px;
}
.bar-item {
font-size: 17px;
&[size="large"] {
.bar-item_content {
.bar-item_content-bar {
height: 13px;
}
}
font-size: 17px;
&[size="large"] {
.bar-item_content {
.bar-item_content-bar {
height: 13px;
}
}
&[size="small"] {
font-size: 12px;
}
&[size="small"] {
font-size: 12px;
.bar-item_content {
width: calc(100% - 180px);
}
}
.bar-item-label {
text-align: right;
width: var(--label-width);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
&[position="left"] {
height: 32px;
line-height: 32px;
}
&[position="top"] {
margin-bottom: 4px;
.bar-item-label {
text-align: right;
width: var(--label-width);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
width: 100%;
text-align: left;
}
&[position="left"] {
height: 32px;
line-height: 32px;
.bar-item_content {
width: calc(100% - 80px);
}
&[position="top"] {
margin-bottom: 4px;
.bar-item-label {
width: 100%;
text-align: left;
}
.bar-item_content {
width: calc(100% - 80px);
}
}
.bar-item_content {
width: calc(100% - var(--label-width) - 16px - 30px);
&[long=false] {
width: calc(100% - var(--label-width) - 36px - 110px);
}
.bar-item_content {
width: calc(100% - var(--label-width) - 16px - 30px);
&[long=false] {
width: calc(100% - var(--label-width) - 36px - 58px);
}
.bar-item_content-bar {
width: 0;
height: 9px;
background: linear-gradient(270deg, #63e700 0%, #19674c 100%);
transition: width 0.3s;
}
.bar-item_content-bar {
width: 0;
height: 9px;
background: linear-gradient(270deg, #63e700 0%, #19674c 100%);
transition: width 0.3s;
}
.bar-item_remark {
font-size: 14px;
.text-success {
color: #09c700;
}
}
.bar-item_remark {
font-size: 14px;
.text-success {
color: #09c700;
}
}
}
</style>

21
src/views/datav/Gobal.vue

@ -47,32 +47,32 @@
<datav-statistic
:value="overview.totalPro"
title="问题总数"
style="width: 16.66%"
style="width: 13.66%; margin-left: 20px"
/>
<datav-statistic
:value="overview.supervisionPro"
title="督察问题"
style="width: 16.66%"
style="width: 13.66%; margin-left: 30px"
/>
<datav-statistic
:value="overview.caseVerificationPro"
title="案件核查问题"
style="width: 16.66%"
style="width: 13.66%; margin-left: 30px"
/>
<datav-statistic
:value="overview.complaintPro"
title="信访投诉问题"
style="width: 16.66%;"
style="width: 13.66%; margin-left: 30px"
/>
<datav-statistic
:value="overview.talkPro"
title="警务评议问题"
style="width: 16.66%"
style="width: 13.66%; margin-left: 30px"
/>
<datav-statistic
:value="overview.auditPro"
title="审计监督问题"
style="width: 16.66%"
style="width: 13.66%; margin-left: 10px"
/>
</div>
<v-charts
@ -360,6 +360,7 @@ const zfbaPieOption = computed(() => {
color: "#fff",
},
data: ywzblist.value,
},
],
};
@ -378,8 +379,7 @@ const wtlxPieOption = computed(() => {
color: "#fff",
},
data: wtlxlist.value,
width: 350,
height: 300
},
],
};
@ -439,7 +439,6 @@ const colors = [
];
// endregion
@ -502,9 +501,9 @@ const colors = [
// span
.tooltip-ul span {
float: right;
width: 30px;
width: 50px;
text-align: right;
margin-right: 15px;
margin-right: 35px;
color: #fff;
font-size: 13px;
}

6
src/views/datav/SceneInsp.vue

@ -60,6 +60,7 @@
<datav-chart-bar
:data="data1"
:color="colors"
:size="small"
title="整改率排名"
sub-title="已整改/问题数"
/>
@ -484,7 +485,7 @@ const option1 = ref({
});
const data1 = ref([
{
/*{
label: "开福分局",
value: 90,
unit: "%",
@ -532,7 +533,7 @@ const data1 = ref([
unit: "%",
numerator: 3,
denominator: 3,
},
},*/
]);
const data2 = [
@ -619,6 +620,7 @@ function getData() {
});
getChangedRank(time.value, 3).then((res) => {
rankOverview.value = res.rankOverview;
data1.value = res.changedRankList;
});
}

Loading…
Cancel
Save