4 changed files with 198 additions and 164 deletions
@ -1,21 +1,17 @@
|
||||
import request from "@/api/request"; |
||||
export function importCaseVerif(body) { |
||||
return request.post({ |
||||
url: '/data/caseVerif/import', |
||||
body |
||||
}); |
||||
} |
||||
|
||||
export function listCaseVerif(query) { |
||||
|
||||
|
||||
export function getAllSupervisionNotifyCount(times) { |
||||
return request.get({ |
||||
url: '/data/caseVerif', |
||||
query |
||||
url: `/datav/supervisonNotify?beginTime=${times[0]}&endTime=${times[1]}` |
||||
}); |
||||
} |
||||
|
||||
|
||||
export function getAllSupervisionNotifyCount(times) { |
||||
|
||||
export function getChangedRank(times, groupType) { |
||||
return request.get({ |
||||
url: `/datav/supervisonNotify?beginTime=${times[0]}&endTime=${times[1]}` |
||||
url: `/datav/supervisonNotify/rank?beginTime=${times[0]}&endTime=${times[1]}&groupType=${groupType}` |
||||
}); |
||||
} |
||||
@ -1,180 +1,194 @@
|
||||
<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" |
||||
style="height: 40px" |
||||
> |
||||
<span style="margin-left: 18px"> |
||||
<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" |
||||
style="height: 40px" |
||||
> |
||||
<span style="margin-left: 18px"> |
||||
{{ item.sort }} |
||||
</span> |
||||
<div class="bar-item_content mr-8 " :long="!item.denominator" > |
||||
<span>{{item.label}}</span> |
||||
<div |
||||
class="bar-item_content-bar" |
||||
:style="{ |
||||
<div class="bar-item_content mr-8 " :long="!item.denominator"> |
||||
<span>{{ item.label }}</span> |
||||
<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: 60, |
||||
}, |
||||
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: 60, |
||||
}, |
||||
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(); |
||||
onMounted ( () => { |
||||
getMax(); |
||||
|
||||
}); |
||||
|
||||
function getColor(val) { |
||||
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[0].percentage) { |
||||
return colors[0].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[0].percentage) { |
||||
return colors[0].color; |
||||
} |
||||
} |
||||
return "linear-gradient(270deg, #63e700 0%, #19674c 100%)"; |
||||
// if (val >= 0.7) { |
||||
// return "linear-gradient( 270deg, #FFB90E 0%, #71501D 100%)"; |
||||
// } |
||||
// return "linear-gradient( 270deg, #FB002D 0%, #822232 100%)"; |
||||
} |
||||
return "linear-gradient(270deg, #63e700 0%, #19674c 100%)"; |
||||
// if (val >= 0.7) { |
||||
// return "linear-gradient( 270deg, #FFB90E 0%, #71501D 100%)"; |
||||
// } |
||||
// return "linear-gradient( 270deg, #FB002D 0%, #822232 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; |
||||
} |
||||
} |
||||
} |
||||
&[size="small"] { |
||||
font-size: 12px; |
||||
font-size: 17px; |
||||
|
||||
&[size="large"] { |
||||
.bar-item_content { |
||||
.bar-item_content-bar { |
||||
height: 13px; |
||||
} |
||||
} |
||||
} |
||||
|
||||
&[size="small"] { |
||||
font-size: 12px; |
||||
} |
||||
|
||||
.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 - 58px); |
||||
} |
||||
.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> |
||||
Loading…
Reference in new issue