master
loveflow 7 months ago
parent ce1c677ed2
commit f897b4c568

15
package-lock.json generated

@ -15,6 +15,7 @@
"core-js": "^3.6.5",
"echarts": "^5.4.2",
"echarts-gl": "^2.0.9",
"echarts-liquidfill": "^3.1.0",
"element-ui": "^2.15.13",
"highcharts": "^11.1.0",
"highcharts-vue": "^1.4.3",
@ -6811,6 +6812,14 @@
"echarts": "^5.1.2"
}
},
"node_modules/echarts-liquidfill": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/echarts-liquidfill/-/echarts-liquidfill-3.1.0.tgz",
"integrity": "sha512-5Dlqs/jTsdTUAsd+K5LPLLTgrbbNORUSBQyk8PSy1Mg2zgHDWm83FmvA4s0ooNepCJojFYRITTQ4GU1UUSKYLw==",
"peerDependencies": {
"echarts": "^5.0.1"
}
},
"node_modules/echarts/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
@ -21340,6 +21349,12 @@
"zrender": "^5.1.1"
}
},
"echarts-liquidfill": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/echarts-liquidfill/-/echarts-liquidfill-3.1.0.tgz",
"integrity": "sha512-5Dlqs/jTsdTUAsd+K5LPLLTgrbbNORUSBQyk8PSy1Mg2zgHDWm83FmvA4s0ooNepCJojFYRITTQ4GU1UUSKYLw==",
"requires": {}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",

@ -15,6 +15,7 @@
"core-js": "^3.6.5",
"echarts": "^5.4.2",
"echarts-gl": "^2.0.9",
"echarts-liquidfill": "^3.1.0",
"element-ui": "^2.15.13",
"highcharts": "^11.1.0",
"highcharts-vue": "^1.4.3",

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

@ -0,0 +1,145 @@
<template>
<div style="height: 100%; width: 100%">
<g-chart :echartdata="option"></g-chart>
</div>
</template>
<script>
import "echarts-liquidfill";
export default {
props: {
chartObj: {
type: Object,
default: () => {
return {};
},
},
},
data() {
return {
option: {},
};
},
mounted() {
this.setOption();
},
methods: {
setOption() {
let datas = [0.6, 0.6, 0.6];
this.option = {
title: {
show: true, //
text: this.chartObj.name,
textStyle: {
fontSize: 12,
lineHeight: 12,
color: this.chartObj.color[1],
},
left: "30%",
bottom: "10%",
},
series: [
{
type: "liquidFill",
radius: "50%",
center: ["50%", "40%"],
data: datas,
backgroundStyle: {
color: {
type: "linear",
x: 1,
y: 0,
x2: 0.5,
y2: 1,
colorStops: [
{
offset: 1,
color: this.chartObj.color[3],
},
{
offset: 0.5,
color: this.chartObj.color[4],
},
{
offset: 0,
color: this.chartObj.color[5],
},
],
globalCoord: false,
},
},
outline: {
borderDistance: 1,
itemStyle: {
borderWidth: 1,
//borderColor: "#27FDA5",
borderColor: {
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 1,
color: this.chartObj.color[4],
},
{
offset: 0.5,
color: this.chartObj.color[3],
},
{
offset: 0,
color: this.chartObj.color[2],
},
],
globalCoord: false,
},
},
},
color: [
{
type: "linear",
x: 0,
y: 0,
x2: 1,
y2: 0,
colorStops: [
{
offset: 1,
color: this.chartObj.color[4],
},
{
offset: 0.5,
color: this.chartObj.color[3],
},
{
offset: 0,
color: this.chartObj.color[2],
},
],
globalCoord: false,
},
],
label: {
//
textStyle: {
fontSize: 20,
color: this.chartObj.color[0],
},
},
},
],
};
},
},
watch: {
chartObj: {
handler(newval) {
this.setOption();
},
deep: true,
// immediate: true,
},
},
};
</script>

@ -0,0 +1,159 @@
<template>
<div style="height: 100%; width: 100%" id="pieWrap">
<g-chart :echartdata="option"></g-chart>
</div>
</template>
<script>
export default {
props: {
chartObj: {
type: Object,
default: () => {
return {};
},
},
},
data() {
return {
option: {},
};
},
mounted() {
this.setOption();
},
methods: {
setOption() {
let point = this.chartObj.point; //
let total = this.chartObj.total;
this.option = {
title: {
//
show: true, //
text: this.chartObj.name,
textStyle: {
fontSize: 14,
color: "#D0DEEE",
},
subtextStyle: {
fontSize: 18,
fontWeight: 500,
lineHeight: 10,
color: "#E3FEFF",
},
left: "18%",
top: "76%",
},
series: [
{
// name: '访1',
type: "pie",
radius: ["50%", "65%"],
center: ["50%", "40%"],
data: [
{
value: 80, //100%
itemStyle: {
normal: {
borderRadius: 15,
color: "#1B2221",
},
},
},
{
value: 20,
itemStyle: {
normal: {
color: "rgba(255,255,255,0)", //
},
},
},
],
startAngle: -127, //[0, 360]
minAngle: 0, //0 ~ 360
label: {
show: false,
position: "center",
},
},
{
// name: '访2',
type: "pie",
showEmptyCircle: true, //
radius: ["50%", "65%"],
avoidLabelOverlap: true, //
center: ["50%", "40%"],
data: [
{
value: (point / total) * 100 * 0.8,
itemStyle: {
normal: {
borderRadius: 15, //
color: {
//
type: "linear",
colorStops: [
{
offset: 0,
color: "#37A1CC", // 0%
},
{
offset: 1,
color: "#08FAC4", // 100%
},
],
},
},
},
},
{
value: ((total - point) / total) * 100 * 0.8, //
itemStyle: {
normal: {
borderRadius: 15, //
color: "rgba(255,255,255,0)", //
},
},
},
{
value: 20, //
itemStyle: {
normal: {
color: "rgba(255,255,255,0)", //
},
},
},
],
startAngle: -127, //[0, 360]
// minAngle: 0, //0 ~ 360
label: {
show: true,
position: "center",
textStyle: {
fontSize: 20,
color: "#E3FEFF",
textShadowColor: "rgba(87,240,255,0.88)",
textShadowBlur: 8,
},
formatter: (item) => {
return `${item.value}` + "分";
},
},
labelLine: {
show: false,
},
},
],
};
},
},
watch: {
chartObj: {
handler(newval) {
this.setOption();
},
deep: true,
// immediate: true,
},
},
};
</script>

@ -1,5 +1,98 @@
<template>
<div>
<div class="antiAttackPanel">
<!-- 防攻击 -->
<div class="screenRow screenTopRow">
<div class="screenLeft mr18">
<div class="screenLeftTop">
<colWrap class="mb14" title="人防数据"> </colWrap>
</div>
<div class="screenLeftBtm">
<colWrap class="mb14" title="物防数据"> </colWrap>
</div>
</div>
<div class="screenMid mr18">
<colWrap class="mb14" title="重点人员出入特定区域预警"> </colWrap>
</div>
<div class="screenRight">
<colWrap class="mb14" title="企业隐患分析"> </colWrap>
<colWrap class="mb14" title="应急预案制定异常分析"> </colWrap>
</div>
</div>
<div class="screenRow screenBtmRow">
<div class="screenBLeft mr18">
<colWrap class="" title="反恐目标单位检查数据"> </colWrap>
</div>
<div class="screenBRight">
<colWrap class="" title="技防数据"> </colWrap>
</div>
</div>
</div>
</template>
<script>
import colWrap from "../components/colWrap.vue";
export default {
components: {
colWrap,
},
data() {},
};
</script>
<style lang="scss" scoped>
@import "@/loveflow/assets/index.scss";
.antiAttackPanel {
height: 100%;
padding: 16px;
box-sizing: border-box;
overflow: hidden;
.screenRow {
display: flex;
.screenLeft {
height: 100%;
flex: 1;
display: flex;
flex-direction: column;
.screenLeftTop {
display: flex;
flex-direction: column;
height: 26%;
}
.screenLeftBtm {
display: flex;
flex-direction: column;
height: 74%;
}
}
.screenMid {
flex: 1;
display: flex;
flex-direction: column;
}
.screenRight {
flex: 1;
display: flex;
flex-direction: column;
}
.screenRight {
flex: 1;
display: flex;
flex-direction: column;
}
.screenBLeft {
flex: 1;
display: flex;
}
.screenBRight {
flex: 1;
display: flex;
}
}
.screenTopRow {
height: 68%;
}
.screenBtmRow {
height: 32%;
}
}
</style>

@ -0,0 +1,221 @@
<template>
<div style="height: 100%; width: 100%">
<g-chart :echartdata="option"></g-chart>
</div>
</template>
<script>
export default {
props: {
chartObj: {
type: Object,
default: () => {
return {};
},
},
},
data() {
return {
option: {},
};
},
mounted() {
this.setOption();
},
methods: {
setOption() {
let dataList = this.chartObj.data;
let maxArr = [];
let maxValue = 0;
let xData = [];
let yData = [];
let total = 0;
dataList.forEach((item) => {
xData.push(item.name);
yData.push(item.value);
if (maxValue < item.value) {
maxValue = item.value;
}
});
dataList.forEach((item) => {
maxArr.push(maxValue);
total = total + item.value;
});
if (!total) {
total = 1;
}
this.option = {
grid: {
left: "14",
top: "5%", //
right: "0",
bottom: "0",
},
xAxis: {
show: false,
},
yAxis: [
{
type: "category",
inverse: true,
data: xData,
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
show: true,
textStyle: {
verticalAlign: "bottom",
color: "#299CD4",
fontSize: 14,
fontFamily: "Microsoft YaHei",
align: "left",
padding: [0, 0, 5, 7],
rich: {
index: {
padding: [4, 0, 0, 1],
color: "#ffffff",
},
name: {
padding: [4, 16, 0, 2],
color: "#ffffff",
fontSize: 14,
},
rate: {
align: "right",
color: "rgba(255,255,255,0.9)",
fontSize: 12,
},
},
},
formatter: (name, index) => {
if (dataList.length) {
const item = dataList.filter((item) => item.name == name)[0];
return `{name|${name}}`;
}
},
},
offset: 0,
},
],
series: [
{
//
type: "bar",
barWidth: 6,
itemStyle: {
color: (params) => {
console.log(params);
var color = {
type: "linear",
x: 0,
y: 0,
x2: 1,
y2: 0,
colorStops: [
{
offset: 0,
color: this.chartObj.color[params.dataIndex][0], // 0%
},
{
offset: 1,
color: this.chartObj.color[params.dataIndex][1], // 100%
},
],
};
return color;
},
},
label: {
show: false,
},
data: dataList,
z: 2,
animationEasing: "elasticOut",
},
{
//
type: "pictorialBar",
symbol: "rect",
symbolBoundingData: maxValue,
barWidth: 1,
itemStyle: {
barBorderRadius: 10,
normal: {
color: "none",
},
},
label: {
padding: [-20, 0, 0, -30],
textStyle: {
rich: {
rate: {
fontSize: 14,
color: "#9CE0FF",
},
rate1: {
fontSize: 14,
color: "#FFDE9C",
},
},
},
formatter: (params) => {
var text = `{rate|${((params.data * 100) / total).toFixed(
0
)}%}`;
if (params.dataIndex === 1) {
text = `{rate1|${((params.data * 100) / total).toFixed(0)}%}`;
}
return text;
},
rich: {
a: {
color: "#9CE0FF",
fontSize: 16,
align: "right",
},
},
position: "right",
distance: 1, //
show: true,
},
data: yData,
z: 0,
animationEasing: "elasticOut",
},
{
name: "外框",
type: "pictorialBar",
symbol: "rect",
symbolBoundingData: maxValue,
barGap: "-100%", //
data: maxArr,
barWidth: 6,
itemStyle: {
color: "rgba(255,255,255,0.06)", //
label: {
//
show: false,
},
},
z: 0,
},
],
};
},
},
watch: {
chartObj: {
handler(newval) {
this.setOption();
},
deep: true,
// immediate: true,
},
},
};
</script>

@ -0,0 +1,336 @@
<template>
<div class="dpiePanel">
<div class="dpieLegend">
<div class="dpieRow" v-for="item in data" :key="item.name">
<div class="flex-center">
<div
class="dpieIcon"
:style="{ backgroundColor: item.itemStyle.color }"
></div>
<div class="dpieName">{{ item.name }}</div>
</div>
<div class="dpieValue">{{ item.value }}</div>
</div>
</div>
<div class="flex-center" style="flex: 1">
<div class="dpiebg">
<div ref="dpieWrapRef" class="dpieWrap"></div>
</div>
</div>
</div>
</template>
<script>
import * as echarts from "echarts";
import "echarts-gl";
export default {
data() {
return {
data: [
{
name: "企业整改合格",
value: 128,
itemStyle: {
color: "#2B82F3",
},
},
{
name: "企业整改不合格",
value: 86,
itemStyle: {
color: "#E15A4E",
},
},
],
total: 1,
};
},
mounted() {
this.total = 1;
for (let i = 0; i < this.data.length; i++) {
this.total += this.data[i].value;
}
this.echartsPie();
},
methods: {
echartsPie() {
let optionsData = this.data;
let hoveredIndex = "";
let chartDom = this.$refs["dpieWrapRef"];
let myChart = echarts.init(chartDom);
const getPie3D = (pieData, internalDiameterRatio) => {
//internalDiameterRatio:
let series = [];
let sumValue = 0;
let startValue = 0;
let endValue = 0;
let k = 1 / 5;
pieData.sort((a, b) => {
return b.value - a.value;
});
// series-surface
for (let i = 0; i < pieData.length; i++) {
sumValue += pieData[i].value;
let seriesItem = {
name:
typeof pieData[i].name === "undefined"
? `series${i}`
: pieData[i].name,
type: "surface",
parametric: true,
wireframe: {
show: false,
},
pieData: pieData[i],
pieStatus: {
selected: false,
hovered: false,
k: k,
},
radius: "90%",
center: ["50%", "50%"],
};
if (typeof pieData[i].itemStyle != "undefined") {
let itemStyle = {};
typeof pieData[i].itemStyle.color != "undefined"
? (itemStyle.color = pieData[i].itemStyle.color)
: null;
typeof pieData[i].itemStyle.opacity != "undefined"
? (itemStyle.opacity = pieData[i].itemStyle.opacity)
: null;
seriesItem.itemStyle = itemStyle;
}
series.push(seriesItem);
}
// 使 sumValue getParametricEquation
// series-surface series-surface.parametricEquation
for (let i = 0; i < series.length; i++) {
endValue = startValue + series[i].pieData.value;
series[i].pieData.startRatio = startValue / sumValue;
series[i].pieData.endRatio = endValue / sumValue;
series[i].parametricEquation = getParametricEquation(
series[i].pieData.startRatio,
series[i].pieData.endRatio,
false,
false,
k,
series[i].pieData.value
);
startValue = endValue;
}
let boxHeight = getHeight3D(series, 6); //3d/2626px
// legendDataseries
let option = {
// backgroundColor: "#fff",
tooltip: {
show: false,
},
legend: {
show: false,
},
xAxis3D: {
min: -1,
max: 1,
},
yAxis3D: {
min: -1,
max: 1,
},
zAxis3D: {
min: -1,
max: 1,
},
grid3D: {
show: false,
boxHeight: boxHeight, //
left: 0,
top: -20, //3d
viewControl: {
//3d
alpha: 24, //
distance: 120, //zoom
rotateSensitivity: 0, //0
zoomSensitivity: 0, //0
panSensitivity: 0, //0
autoRotate: false, //
},
},
series: series,
};
return option;
};
//3d
const getHeight3D = (series, height) => {
series.sort((a, b) => {
return b.pieData.value - a.pieData.value;
});
return (height * 50) / series[0].pieData.value;
};
// series-surface.parametricEquation
const getParametricEquation = (
startRatio,
endRatio,
isSelected,
isHovered,
k,
h
) => {
//
let midRatio = (startRatio + endRatio) / 2;
let startRadian = startRatio * Math.PI * 2;
let endRadian = endRatio * Math.PI * 2;
let midRadian = midRatio * Math.PI * 2;
//
if (startRatio === 0 && endRatio === 1) {
isSelected = false;
}
// / k 1/3
k = typeof k !== "undefined" ? k : 1 / 3;
// x y 0
let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0;
let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0;
// 1
let hoverRate = isHovered ? 1.05 : 1;
//
return {
u: {
min: -Math.PI,
max: Math.PI * 3,
step: Math.PI / 32,
},
v: {
min: 0,
max: Math.PI * 2,
step: Math.PI / 20,
},
x: function (u, v) {
if (u < startRadian) {
return (
offsetX +
Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate
);
}
if (u > endRadian) {
return (
offsetX +
Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate
);
}
return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate;
},
y: function (u, v) {
if (u < startRadian) {
return (
offsetY +
Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate
);
}
if (u > endRadian) {
return (
offsetY +
Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate
);
}
return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate;
},
z: function (u, v) {
if (u < -Math.PI * 0.5) {
return Math.sin(u);
}
if (u > Math.PI * 2.5) {
return Math.sin(u) * h * 0.1;
}
return Math.sin(v) > 0 ? 1 * h * 0.1 : -1;
},
};
};
let option = getPie3D(this.data, 0.8);
//label线2d使labelLine3dsetOption
option.series.push({
// name: "pie3d",
type: "pie",
label: {
show: true,
position: "outside",
formatter: "{c}%",
},
// startAngle: -25, //[0, 360]
clockwise: false, //3d
radius: ["80%", "80%"],
center: ["50%", "50%"], //线
itemStyle: {
opacity: 0,
},
});
option && myChart.setOption(option);
},
},
watch: {
chartObj: {
handler(newval) {
this.setOption();
},
deep: true,
// immediate: true,
},
},
};
</script>
<style lang="scss" scoped>
.dpiePanel {
position: relative;
flex: 1;
height: 100%;
.dpieLegend {
position: absolute;
top: vw(200);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
.dpieRow {
display: flex;
align-items: center;
justify-content: space-around;
margin-bottom: vw(16);
height: vw(30);
width: vw(240);
background-color: rgba(108, 128, 151, 0.1);
.dpieIcon {
margin-right: 6px;
width: 8px;
height: 8px;
transform: rotate(45deg);
}
.dpieName {
margin-right: 18px;
font-size: 12px;
color: #d0deee;
}
.dpieValue {
font-size: 16px;
color: #ffffff;
}
}
}
}
.dpieWrap {
width: 240px;
height: 120px;
}
.dpiebg {
margin-top: vw(20);
width: 240px;
height: 120px;
background: url("~@/assets/images/screen/dpie.png");
background-size: 100% 100%;
display: flex;
justify-content: flex-start;
}
</style>

@ -0,0 +1,157 @@
<template>
<div style="height: 100%; width: 100%" id="pieWrap">
<g-chart :echartdata="option"></g-chart>
</div>
</template>
<script>
export default {
props: {
chartObj: {
type: Object,
default: () => {
return {};
},
},
},
data() {
return {
option: {},
};
},
mounted() {
this.setOption();
},
methods: {
setOption() {
let point = this.chartObj.point; //
let total = this.chartObj.total;
this.option = {
tooltip: {
show: false,
},
title: {
//
show: true, //
text: this.chartObj.name,
textStyle: { fontSize: 12, lineHeight: 12, color: "#D0DEEE" },
/* subtextStyle: {
fontSize: 18,
fontWeight: 500,
lineHeight: 10,
color: "#E3FEFF",
}, */
textAlign: "center",
left: "47%",
top: 120,
},
color: this.chartObj.color,
graphic: {
elements: [
{
type: "image",
style: {
image: this.chartObj.icon,
width: 160,
height: 160,
zIndex: 1,
},
left: "center",
top: -20,
},
],
},
series: [
{
// name: '访1',
type: "pie",
radius: [30, 40],
center: ["center", 60],
data: [
{
value: 100, //100%
itemStyle: {
normal: {
borderRadius: 15,
color: "#1B2221",
},
},
},
],
label: {
position: "center",
formatter: ((100 * point) / total).toFixed(0) + "%",
color: this.chartObj.color[0],
fontSize: 18,
},
labelLine: {
show: false,
},
},
{
// name: '访2',
type: "pie",
showEmptyCircle: true, //
radius: [30, 40],
avoidLabelOverlap: true, //
center: ["center", 60],
data: [
{
value: (point / total) * 100,
itemStyle: {
normal: {
borderRadius: 15, //
color: {
//
type: "linear",
colorStops: [
{
offset: 0,
color: this.chartObj.color[1], // 0%
},
{
offset: 1,
color: this.chartObj.color[2], // 100%
},
],
},
},
},
},
{
value: 120, //
itemStyle: {
normal: {
color: "rgba(255,255,255,0)", //
},
},
},
],
label: {
show: false,
position: "center",
},
labelLine: {
show: false,
},
},
],
};
},
getHeight() {
let div = document.getElementById("pieWrap");
return div.clientHeight;
},
},
watch: {
chartObj: {
handler(newval) {
this.setOption();
},
deep: true,
// immediate: true,
},
},
};
</script>

@ -0,0 +1,147 @@
<template>
<div style="height: 100%; width: 100%">
<g-chart :echartdata="option"></g-chart>
</div>
</template>
<script>
export default {
props: {
chartObj: {
type: Object,
default: () => {
return {};
},
},
},
data() {
return {
option: {},
};
},
mounted() {
this.setOption();
},
methods: {
setOption() {
this.option = {
title: [
{
text: "68.31",
x: "center",
top: "45%",
textStyle: {
fontSize: "20",
color: "#FFF3C9",
foontWeight: "500",
},
},
],
polar: {
radius: ["50%", "65%"],
center: ["50%", "50%"],
},
angleAxis: {
max: 100,
show: false,
},
radiusAxis: {
type: "category",
show: true,
axisLabel: {
show: false,
},
axisLine: {
show: false,
},
axisTick: {
show: false,
},
},
series: [
{
// 线
name: "",
z: 5,
type: "pie",
cursor: "default",
radius: ["40%", "40%"],
hoverAnimation: false,
legendHoverLink: false,
labelLine: {
normal: {
show: false,
},
},
data: [
{
value: 1,
itemStyle: {
normal: {
borderWidth: 2,
borderColor: "rgba(38,95,92,0.6)",
},
},
},
],
},
{
//
type: "pie",
radius: "39%",
center: ["50%", "50%"],
z: 1,
itemStyle: {
normal: {
color: new this.$echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: "rgba(108,128,151,0)",
},
{
offset: 0.5,
color: "rgba(108,128,151,0.5)",
},
{
offset: 1,
color: "rgba(108,128,151,0.8)",
},
],
false
),
label: {
show: false,
},
labelLine: {
show: false,
},
},
},
hoverAnimation: false,
label: {
show: false,
},
tooltip: {
show: false,
},
data: [100],
},
],
};
},
},
watch: {
chartObj: {
handler(newval) {
this.setOption();
},
deep: true,
// immediate: true,
},
},
};
</script>

@ -2,8 +2,19 @@
<div class="inSecurityDetail">
<div class="screenRow screenTopRow">
<div class="screenLeft mr18">
<colWrap class="mb14" title="企业三防异常分析"></colWrap>
<colWrap class="mb14" title="企业三防异常分析">
<div class="qysfWrap">
<div class="qysfCol">
<pie-wrap :chartObj="mllObj"></pie-wrap>
</div>
<div class="qysfCol">
<pie-wrap :chartObj="mlmObj"></pie-wrap>
</div>
<div class="qysfCol">
<pie-wrap :chartObj="mlrObj"></pie-wrap>
</div>
</div>
</colWrap>
<colWrap class="" title="技防数据概览">
<el-row :gutter="16">
<el-col :span="6" v-for="item in jssjList" :key="item.name">
@ -22,10 +33,46 @@
</el-row>
</colWrap>
</div>
<div class="screenMid mr18"></div>
<div class="screenMid mr18">
<div class="screenMTop">{{ title }}</div>
<div class="screenMMid">
<div class="midTotalWrap">
<stmWrap></stmWrap>
</div>
</div>
<div class="screenMBtm">
<div
class="item"
v-for="item in tmList"
:key="item.name"
:style="{ backgroundImage: 'url(' + item.icon + ')' }"
>
<div class="value">{{ item.value }}</div>
<div class="name">{{ item.name }}</div>
</div>
</div>
</div>
<div class="screenRight">
<colWrap class="mb14" title="企业应急预案与应急演练异常分析"></colWrap>
<colWrap class="" title="部门检查及系统研判异常分析"></colWrap>
<colWrap class="mb14" title="企业应急预案与应急演练异常分析">
<div class="ycfxWrap">
<div class="ycfxCol">
<ballWrap :chartObj="trlObj"></ballWrap>
</div>
<div class="ycfxCol">
<ballWrap :chartObj="trrObj"></ballWrap>
</div>
</div>
</colWrap>
<colWrap class="" title="部门检查及系统研判异常分析">
<div class="bmjcWrap">
<div class="bmjcLeft">
<sevenWrap :chartObj="bmjcLeft"></sevenWrap>
</div>
<div class="bmjcRight">
<barOne :chartObj="bmjcObj"></barOne>
</div>
</div>
</colWrap>
</div>
</div>
<div class="screenRow screenBtmRow">
@ -119,22 +166,118 @@
</div>
<div class="screenBRight">
<colWrap class="mr18" title="案件信息">
<barOne :chartObj="barOneObj"></barOne>
<barWrap :chartObj="barOneObj"></barWrap>
</colWrap>
<colWrap class="" title="企业整改异常分析">
<dPie :chartObj="{}"></dPie>
</colWrap>
<colWrap class="" title="企业整改异常分析"></colWrap>
</div>
</div>
</div>
</template>
<script>
import colWrap from "../components/colWrap.vue";
import barOne from "../components/bar.vue";
import barWrap from "../components/bar.vue";
import barOne from "../components/barOne.vue";
import dPie from "../components/dPie.vue";
import pieWrap from "../components/pie.vue";
import stmWrap from "../components/stm.vue";
import ballWrap from "@/loveflow/components/echart/other/ball.vue";
import sevenWrap from "@/loveflow/components/echart/pie/seven.vue";
export default {
components: { colWrap, barOne },
components: {
colWrap,
barWrap,
barOne,
dPie,
pieWrap,
ballWrap,
sevenWrap,
stmWrap,
},
data() {
return {
title: "",
mllObj: {
name: "人防异常单位占比",
total: 3400,
point: 1000,
icon: require("@/assets/images/topic/pie1b.png"),
color: ["#57F0FF", "#37A1CC", "#08FAC4"],
},
mlmObj: {
name: "物防异常单位占比",
total: 3400,
point: 1000,
icon: require("@/assets/images/topic/pie2b.png"),
color: ["#FFCE57", "#EB9104", "#FAC608"],
},
mlrObj: {
name: "技防异常单位占比",
total: 3400,
point: 1000,
icon: require("@/assets/images/topic/pie4b.png"),
color: ["#FFE3E3", "#FF2C2C", "#FF6D6D"],
},
tmList: [
{
name: "矛盾纠纷",
value: 32145,
icon: require("@/assets/images/topic/stmdjf.png"),
},
{
name: "劳资纠纷",
value: 32145,
icon: require("@/assets/images/topic/stlzjf.png"),
},
{
name: "特种设备",
value: 32145,
icon: require("@/assets/images/topic/sttzsb.png"),
},
{
name: "原材料被盗",
value: 32145,
icon: require("@/assets/images/topic/stycl.png"),
},
],
trlObj: {
name: "企业应急预案完善率",
color: [
"#D9E7FF",
"#D0DEEE",
"rgba(29,172,180,1)",
"rgba(29,172,180,0.8)",
"rgba(29,172,180,0.5)",
"rgba(29,172,180,0)",
],
},
trrObj: {
name: "应急演练异常比例",
color: [
"#D9E7FF",
"#D0DEEE",
"rgba(253,141,39,1)",
"rgba(253,141,39,0.8)",
"rgba(253,141,39,0.5)",
"rgba(253,141,39,0)",
],
},
bmjcLeft: {
total: 300,
point: 120,
name: "企业治安准备情况",
},
bmjcObj: {
data: [
{ name: "制度完善比例", value: 1123 },
{ name: "设施完善比例", value: 808 },
],
color: [
["#FFDE9C", "#0E9FF7"],
["#f9c407", "#FFDE9C"],
],
},
yjList: [
{
name: "消防应急预案",
@ -332,6 +475,15 @@ export default {
padding-top: vw(6);
background-color: rgba(108, 151, 149, 0.2);
} */
.qysfWrap {
height: 100%;
display: flex;
.qysfCol {
flex: 1;
}
}
.line {
display: flex;
align-items: center;
@ -366,12 +518,91 @@ export default {
}
}
.screenMid {
position: relative;
flex: 1;
background: url("~@/assets/images/topic/stmbg.png") no-repeat center
center;
background-size: 100% 100%;
.screenMTop {
display: flex;
align-items: center;
justify-content: center;
height: vw(60);
background: url("~@/assets/images/topic/stmt.png") no-repeat center
center;
background-size: 100% 100%;
font-weight: bold;
font-size: vw(20);
color: #ffffff;
}
.screenMMid {
position: absolute;
bottom: vw(50);
width: 100%;
height: vw(300);
background: url("~@/assets/images/topic/stzp.png") no-repeat center
center;
background-size: 100% 100%;
display: flex;
justify-content: center;
.midTotalWrap {
position: absolute;
bottom: vw(100);
width: vw(250);
height: vw(250);
}
}
.screenMBtm {
display: flex;
justify-content: space-between;
position: absolute;
width: 100%;
bottom: vw(40);
.item {
height: vw(106);
width: vw(150);
background-repeat: no-repeat;
background-position: center center;
background-size: 100% 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-end;
.value {
font-weight: 500;
font-size: vw(16);
color: #e3feff;
}
.name {
font-weight: 400;
font-size: vw(14);
color: #d0deee;
}
}
}
}
.screenRight {
flex: 1;
display: flex;
flex-direction: column;
.ycfxWrap {
height: 100%;
display: flex;
.ycfxCol {
flex: 1;
}
}
.bmjcWrap {
height: 100%;
display: flex;
.bmjcLeft {
flex: 1;
}
.bmjcRight {
flex: 2;
}
}
}
.screenBLeft {
flex: 1;

16565
yarn.lock

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save