You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

635 lines
16 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
* @Author: lough
* @Date: 2021-12-17 10:07:07
* @LastEditors: lough
* @LastEditTime: 2022-11-15 14:16:58
* @Description:
-->
<template>
<div class="container">
<div class="module-container">
<div class="section-proportion">
<span class="proportion-title">本级上级网评指令比例</span>
<div>
<!-- 圆柱 -->
<div id="cylinder" />
<img
src="@/assets/privateOrder/positiveEnergy/底座3.png"
alt=""
class="cylinderBottom"
/>
<div class="proportion-ratio">
<div class="proportion-ratio-bl">
<img
src="@/assets/privateOrder/positiveEnergy/本级网评指令比例.png"
alt=""
/>
<span>本级网评指令比例 </span>
<span style="margin-left: 20px; color: #71e8fb">
{{ sjNum }}%
</span>
<div class="progress">
<div
:style="{
backgroundColor: '#71e8fb',
height: 9,
width: sjNum + '%',
}"
></div>
</div>
</div>
<div class="proportion-ratio-bl">
<img
src="@/assets/privateOrder/positiveEnergy/上级网评指令比例.png"
alt=""
/>
<span>上级网评指令比例</span>
<span style="margin-left: 20px; color: #79ffd0">
{{ bjNum }}%
</span>
<div class="progress">
<div
:style="{
backgroundColor: '#79ffd0',
height: 9,
width: bjNum + '%',
}"
></div>
</div>
</div>
</div>
</div>
</div>
<div class="setion-percentage">
<span class="percentage-title">网评员任务完成率</span>
<div id="bar" />
</div>
</div>
</div>
</template>
<script>
import { getComplete } from "@/api/common";
import {
networkAppraisercomplete,
networkAppraiser,
} from "@/api/zongzhi/st.js";
export default {
components: {},
filters: {
numFilter(value) {
const realVal = Number(value).toFixed(2);
return Number(realVal);
},
},
data() {
return {
sjNum: 0,
bjNum: 0,
percentageList: null,
percentageName: [],
percentageValue: [],
sjdata: null,
bjdata: null,
};
},
computed: {},
watch: {},
created() {
const tableObject = require("./data.json");
this.tableData = tableObject["网评文章录用情况"];
},
destroyed() {},
mounted() {
this.getpercentageData();
this.getNetworkAppraiser();
// this.sjdata = Math.round(this.sjNum)
// this.bjdata = Math.round(this.bjNum)
// this.inItCylinder()
},
methods: {
getNetworkAppraiser() {
networkAppraiser().then((res) => {
this.sjNum = res.data[0].pt;
this.bjNum = res.data[1].pt;
this.sjdata = Math.round(this.bjNum);
this.bjdata = Math.round(this.sjNum);
this.inItCylinder();
});
},
// 获取任务完成率data
getpercentageData() {
networkAppraisercomplete().then((res) => {
res.data.forEach((item) => {
this.percentageName.push(item.name);
this.percentageValue.push(item.pt);
this.inItBar();
});
});
// this.percentageName = ['陆渡街道', '港区', '浮桥镇', '编办', '老干部局', '党校', '档案馆']
// this.percentageValue = [80, 90, 60, 90, 90, 70, 50]
// this.inItBar()
// getComplete().then((res) => {
// this.percentageName = res['T_DEPT_COMPLETE[]'].map(e => {
// return e.dept_name
// })
// this.percentageValue = res['T_DEPT_COMPLETE[]'].map((e) => {
// return e.dept_completion_rate
// })
// this.inItBar()
// })
},
inItBar() {
const myChartBar = this.$echarts.init(document.getElementById("bar"));
const option = {
animation: true,
grid: {
top: "20%",
bottom: "10%",
left: "5%",
},
tooltip: {
trigger: "axis",
formatter: "{b} : {c}%",
textStyle: {
fontSize: 26,
fontWight: "bold",
},
},
xAxis: {
data: this.percentageName,
axisLine: {
show: true, // 隐藏X轴轴线
lineStyle: {
color: "rgb(255,255,255,0.5)",
},
},
axisTick: {
show: false, // 隐藏X轴轴线
},
axisLabel: {
interval: 0,
show: true,
margin: 12,
fontSize: 28,
textStyle: {
color: "rgb(255,255,255,1)", // X轴文字颜色
},
},
},
yAxis: [
{
type: "value",
gridIndex: 0,
min: 0,
max: 100,
interval: 20,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
color: "rgba(77, 128, 254, 0.2)",
width: 1,
},
},
axisTick: {
show: true,
},
axisLine: {
show: true,
lineStyle: {
color: "rgba(77, 128, 254, 0)",
},
},
axisLabel: {
show: true,
margin: 14,
fontSize: 24,
textStyle: {
color: "#68cff9",
},
},
},
],
series: [
{
name: "网评员任务完成率",
type: "bar",
barWidth: 25,
itemStyle: {
normal: {
color: "#39b3ff",
},
},
data: this.percentageValue,
z: 10,
zlevel: 0,
},
{
name: "网评员任务完成率",
// 分隔
type: "pictorialBar",
itemStyle: {
normal: {
color: "#0F375F",
},
},
symbolRepeat: "fixed",
symbolMargin: 3,
symbol: "rect",
symbolClip: true,
symbolSize: [18, 7],
symbolPosition: "start",
symbolOffset: [-3, 1],
data: this.percentageValue,
width: 2,
z: 1,
zlevel: 1,
},
{
name: "外框",
type: "bar",
barGap: "-130%", // 设置外框粗细
data: [100, 100, 100, 100, 100, 100, 100, 100, 100],
barWidth: 40,
itemStyle: {
normal: {
color: "rgba(14, 41, 78, 0.3)", // 填充色
barBorderColor: "#2b405b", // 边框色
barBorderWidth: 1, // 边框宽度
label: {
// 标签显示位置
show: false,
position: "top",
},
},
},
z: 0,
},
],
dataZoom: [
{
type: "slider",
show: false,
xAxisIndex: [0],
endValue: 6,
startValue: 0,
},
],
};
if (option && typeof option === "object") {
myChartBar.setOption(option, true);
// 定时自动滚动
setInterval(() => {
if (option.dataZoom[0].endValue === this.percentageValue?.length) {
option.dataZoom[0].endValue = 6;
option.dataZoom[0].startValue = 0;
} else {
option.dataZoom[0].endValue = option.dataZoom[0].endValue + 1;
option.dataZoom[0].startValue = option.dataZoom[0].startValue + 1;
}
myChartBar.setOption(option, true);
}, 2000);
}
},
// 初始化圆柱
inItCylinder() {
const myChartCylinder = this.$echarts.init(
document.getElementById("cylinder")
);
const option = {
grid: {
height: 280,
width: 130,
},
xAxis: {
data: ["上级"],
show: false,
},
yAxis: {
show: false,
type: "value",
},
series: [
// 最下面的圆片
{
name: "",
type: "pictorialBar",
symbolSize: [111, 30],
symbolOffset: [-9, 15],
z: 12,
data: [
{
name: "",
value: this.sjdata,
itemStyle: {
normal: {
color: "rgba(89,211,255,1)", // 最下圆
},
},
},
],
},
// 上最面圆片
{
name: "", // 头部
type: "pictorialBar",
symbolSize: [111, 30],
symbolOffset: [-9, -15],
z: 12,
data: [
{
name: "",
value: this.sjdata + this.sjdata / 2.4 + this.bjdata * 1.2,
symbolPosition: "end",
itemStyle: {
normal: {
color: "rgba(57,119,119,1)", // 最上面的圆
},
},
},
],
},
// 中部的圆
{
name: "",
type: "pictorialBar",
symbolSize: [113, 40],
symbolOffset: [-10, -20],
z: 12,
data: [
{
name: "",
value: this.sjdata * 1.4 - 2,
symbolPosition: "end",
itemStyle: {
normal: {
color: "#43bafe",
},
},
},
],
},
// 下半截柱状图
{
name: "",
type: "bar",
barWidth: 250,
barGap: "-100%",
itemStyle: {
// lenged文本
color: "rgba(56,117,168,0.2)",
},
data: [
{
name: "",
value: this.sjdata * 1.4,
itemStyle: {
normal: {
color: {
x: 0,
y: 0,
x2: 0,
y2: 1,
type: "linear",
global: false,
colorStops: [
{
// 第一节下面
offset: 0,
color: "rgba(56,117,168,0.3)",
},
{
offset: 1,
color: "#43bafe",
},
],
},
},
},
},
],
label: {
show: true,
position: "inside",
offset: [-10, this.sjdata / 3],
color: "#70c1f9",
fontSize: 20,
fontStyle: "bold",
align: "center",
formatter: "上级" + "\n" + this.sjdata + "%",
},
textStyle: {},
},
// 。。。中下??
{
// 替代柱状图 默认不显示颜色是最下方柱图的value值 - 20
type: "bar",
barWidth: 250,
barGap: "-100%",
stack: "网评",
itemStyle: {
color: "transparent",
},
data: [this.sjdata + this.sjdata / 2.4],
},
// 上半部
{
name: "本级",
type: "bar",
barWidth: 250,
barGap: "-100%",
stack: "网评",
// 上班截开始
data: [
{
name: "本级网评比例",
value: this.bjdata * 1.2,
itemStyle: {
normal: {
color: {
x: 0,
y: 0,
x2: 0,
y2: 1,
type: "linear",
global: false,
colorStops: [
{
offset: 0,
color: "rgba(70,141,132,1)",
},
{
offset: 1,
color: "rgba(131,237,169,1)",
},
],
},
},
},
},
],
label: {
show: true,
position: "inside",
offset: [-10, 10],
color: "rgba(131,237,169,1)",
fontSize: 20,
fontStyle: "bold",
align: "center",
formatter: "本级" + "\n" + this.bjdata + "%",
rich: {
a: {
color: "#fff",
},
},
},
},
],
};
myChartCylinder.setOption(option, true);
},
},
};
</script>
<style lang="scss" scoped>
//圆柱
#cylinder {
position: absolute;
left: 25px;
top: 186px;
width: 123px;
height: 390px;
}
// //进度条
// #progress {
// position: relative;
// top: -8px;
// left: 31px;
// display: inline-block;
// width: 799px;
// height: 10px;
// }
//任务完成率
#bar {
width: 1200px;
height: 380px;
position: relative;
left: 60px;
top: 10px;
}
.container {
width: 100%;
height: 100%;
.module-container {
width: 1229px;
height: 971px;
margin: 130px 0 0 -50px;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-content: space-between;
.section-proportion {
width: 1229px;
height: 474px;
background: url("~@/assets/privateOrder/positiveEnergy/网评比例-bj.png")
no-repeat;
background-size: 100% 100%;
.proportion-title {
position: relative;
left: 389px;
top: 50px;
font-family: PangMenZhengDao;
font-size: 38px;
font-weight: normal;
font-stretch: normal;
letter-spacing: 0px;
color: #ffffff;
}
.cylinderBottom {
position: absolute;
top: 432px;
left: -6px;
}
.proportion-ratio {
position: relative;
left: 250px;
top: 90px;
.proportion-ratio-bl {
margin-bottom: 40px;
width: 910px;
height: 127px;
font-family: SourceHanSansCN-Regular;
font-size: 36px;
font-weight: normal;
font-stretch: normal;
letter-spacing: 0px;
color: #ffffff;
background: url("~@/assets/privateOrder/positiveEnergy/bjsj网评.png")
no-repeat;
background-size: 100% 100%;
.progress {
position: relative;
top: 21px;
left: 102px;
width: 799px;
height: 8px;
background-color: #3a5270;
div {
height: 8px;
display: inline-block;
position: absolute;
}
}
}
div:nth-child(1) {
position: relative;
img {
position: absolute;
top: 40px;
left: 32px;
}
span {
display: inline-block;
margin-top: 35px;
margin-left: 120px;
}
}
div:nth-child(2) {
position: relative;
img {
position: absolute;
top: 40px;
left: 32px;
}
span {
display: inline-block;
margin-top: 35px;
margin-left: 120px;
}
}
}
}
.setion-percentage {
width: 1229px;
height: 474px;
background: url("~@/assets/privateOrder/positiveEnergy/完成率-bj.png");
background-size: 100% 100%;
.percentage-title {
position: relative;
left: 473px;
top: 47px;
font-family: PangMenZhengDao;
font-size: 38px;
font-weight: normal;
font-stretch: normal;
letter-spacing: 0px;
color: #ffffff;
}
}
}
}
</style>