2023-07-12 09:56:31 +08:00
|
|
|
<template>
|
|
|
|
|
<Card title="按分包单位分析">
|
|
|
|
|
<div class="rightHeader">
|
2023-07-14 17:44:33 +08:00
|
|
|
<div class="day Selected" @click="getNowData">实时</div>
|
|
|
|
|
<div class="year Selected" @click="getTodayData">今日</div>
|
2023-07-12 09:56:31 +08:00
|
|
|
</div>
|
|
|
|
|
<div id="echartsBottom" style="width: 100%; height: 100%"></div>
|
|
|
|
|
</Card>
|
|
|
|
|
</template>
|
|
|
|
|
|
2023-07-14 17:44:33 +08:00
|
|
|
<script lang="ts" setup>
|
2023-07-13 15:42:07 +08:00
|
|
|
import { onMounted, reactive, ref, onBeforeUnmount } from "vue";
|
2023-07-12 09:56:31 +08:00
|
|
|
import * as echarts from "echarts";
|
2023-07-13 15:42:07 +08:00
|
|
|
import { getComapnyWorkTotalListApi } from "@/api/modules/labor";
|
2023-07-12 09:56:31 +08:00
|
|
|
import Card from "@/components/card.vue";
|
2023-07-13 15:42:07 +08:00
|
|
|
import { GlobalStore } from "@/stores";
|
|
|
|
|
const store = GlobalStore();
|
2023-07-12 09:56:31 +08:00
|
|
|
|
2023-07-14 17:44:33 +08:00
|
|
|
const labelimg = ref(new URL("@/assets/images/larborManagement/greenX.png", import.meta.url).href);
|
|
|
|
|
const labelimg2 = ref(new URL("@/assets/images/larborManagement/orangeX.png", import.meta.url).href);
|
|
|
|
|
let option = ref({
|
|
|
|
|
grid: {
|
|
|
|
|
left: "10%",
|
|
|
|
|
top: "25%",
|
|
|
|
|
right: "3%",
|
|
|
|
|
bottom: "12%"
|
2023-07-12 09:56:31 +08:00
|
|
|
},
|
2023-07-14 17:44:33 +08:00
|
|
|
// "legend": {
|
|
|
|
|
// "data": [
|
|
|
|
|
// "信息",
|
|
|
|
|
// "往下场所",
|
|
|
|
|
// "关系",
|
|
|
|
|
// "关联",
|
|
|
|
|
// "人",
|
|
|
|
|
// "物",
|
|
|
|
|
// "组织"
|
|
|
|
|
// ],
|
|
|
|
|
// "top": "92%",
|
|
|
|
|
// "icon": "circle",
|
|
|
|
|
// "textStyle": {
|
|
|
|
|
// "color": "#0DCAD2"
|
|
|
|
|
// }
|
|
|
|
|
// },
|
|
|
|
|
color: ["#A3EAFF", "#ECD64F", "#00E4F0", "#44D16D"],
|
|
|
|
|
tooltip: {
|
|
|
|
|
position: "top"
|
|
|
|
|
},
|
|
|
|
|
xAxis: {
|
|
|
|
|
data: ["XX有限公司", "XX有限公司", "XX有限公司", "XX有限公司"],
|
|
|
|
|
triggerEvent: true,
|
|
|
|
|
axisTick: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisLine: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
width: 10,
|
|
|
|
|
show: true,
|
|
|
|
|
rotate: 0,
|
|
|
|
|
interval: 2,
|
|
|
|
|
textStyle: {
|
|
|
|
|
// padding: [14, 0, 0, 0],
|
|
|
|
|
fontSize: 12,
|
|
|
|
|
color: "#fff"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
yAxis: {
|
|
|
|
|
name: "单位:人数",
|
|
|
|
|
triggerEvent: true,
|
|
|
|
|
nameTextStyle: {
|
|
|
|
|
color: "#fff",
|
|
|
|
|
fontSize: 12
|
|
|
|
|
// padding: [0, 0, 10, -20]
|
|
|
|
|
},
|
|
|
|
|
splitLine: {
|
|
|
|
|
show: true,
|
|
|
|
|
lineStyle: {
|
|
|
|
|
color: "#14346c"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
axisTick: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
|
|
|
|
axisLine: {
|
|
|
|
|
show: true,
|
|
|
|
|
lineStyle: {
|
|
|
|
|
color: "#14346c"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
axisLabel: {
|
|
|
|
|
show: true,
|
|
|
|
|
textStyle: {
|
|
|
|
|
color: "#fff",
|
|
|
|
|
fontSize: 12
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
series: [
|
|
|
|
|
{
|
|
|
|
|
type: "pictorialBar",
|
|
|
|
|
data: [
|
2023-07-12 09:56:31 +08:00
|
|
|
{
|
2023-07-14 17:44:33 +08:00
|
|
|
label: {
|
|
|
|
|
show: true,
|
|
|
|
|
position: "top",
|
|
|
|
|
formatter: function (params) {
|
|
|
|
|
var index = params.dataIndex;
|
|
|
|
|
var str = "{c|}";
|
|
|
|
|
return str;
|
|
|
|
|
},
|
|
|
|
|
rich: {
|
|
|
|
|
c: {
|
|
|
|
|
fontSize: 18,
|
|
|
|
|
color: "#fff",
|
|
|
|
|
padding: [2, 0, 2, 0],
|
|
|
|
|
backgroundColor: {
|
|
|
|
|
image: labelimg
|
2023-07-12 09:56:31 +08:00
|
|
|
},
|
2023-07-14 17:44:33 +08:00
|
|
|
align: "center",
|
|
|
|
|
// verticalAlign: "bottom",
|
|
|
|
|
height: 25,
|
|
|
|
|
lineHeight: 0,
|
|
|
|
|
width: 25
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
itemStyle: {
|
|
|
|
|
normal: {
|
|
|
|
|
color: {
|
|
|
|
|
type: "linear",
|
|
|
|
|
x: 0,
|
|
|
|
|
y: 0,
|
|
|
|
|
x2: 0,
|
|
|
|
|
y2: 1,
|
|
|
|
|
colorStops: [
|
|
|
|
|
{
|
|
|
|
|
offset: 0,
|
|
|
|
|
color: "rgba(199, 250, 242)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 1,
|
|
|
|
|
color: "rgba(76, 153, 154,0.5)"
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
],
|
|
|
|
|
global: false
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: {
|
|
|
|
|
show: true,
|
|
|
|
|
position: "top",
|
|
|
|
|
formatter: function (params) {
|
|
|
|
|
var index = params.dataIndex;
|
|
|
|
|
var str = "{c|}";
|
|
|
|
|
return str;
|
2023-07-12 09:56:31 +08:00
|
|
|
},
|
2023-07-14 17:44:33 +08:00
|
|
|
rich: {
|
|
|
|
|
c: {
|
|
|
|
|
fontSize: 18,
|
|
|
|
|
color: "#fff",
|
|
|
|
|
padding: [-4, 0, 8, 0],
|
|
|
|
|
backgroundColor: {
|
|
|
|
|
image: labelimg
|
2023-07-12 09:56:31 +08:00
|
|
|
},
|
2023-07-14 17:44:33 +08:00
|
|
|
align: "center",
|
|
|
|
|
// verticalAlign: "bottom",
|
|
|
|
|
height: 25,
|
|
|
|
|
lineHeight: 0,
|
|
|
|
|
width: 25
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
itemStyle: {
|
|
|
|
|
normal: {
|
|
|
|
|
color: {
|
|
|
|
|
type: "linear",
|
|
|
|
|
x: 0,
|
|
|
|
|
y: 0,
|
|
|
|
|
x2: 0,
|
|
|
|
|
y2: 1,
|
|
|
|
|
colorStops: [
|
|
|
|
|
{
|
|
|
|
|
offset: 0,
|
|
|
|
|
color: "rgba(199, 250, 242)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 1,
|
|
|
|
|
color: "rgba(76, 153, 154,0.5)"
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
],
|
|
|
|
|
global: false
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: {
|
|
|
|
|
show: true,
|
|
|
|
|
position: "top",
|
|
|
|
|
formatter: function (params) {
|
|
|
|
|
var index = params.dataIndex;
|
|
|
|
|
var str = "{c|}";
|
|
|
|
|
return str;
|
2023-07-12 09:56:31 +08:00
|
|
|
},
|
2023-07-14 17:44:33 +08:00
|
|
|
rich: {
|
|
|
|
|
c: {
|
|
|
|
|
fontSize: 18,
|
|
|
|
|
color: "#fff",
|
|
|
|
|
padding: [-4, 0, 8, 0],
|
|
|
|
|
backgroundColor: {
|
|
|
|
|
image: labelimg
|
2023-07-12 09:56:31 +08:00
|
|
|
},
|
2023-07-14 17:44:33 +08:00
|
|
|
align: "center",
|
|
|
|
|
// verticalAlign: "bottom",
|
|
|
|
|
height: 25,
|
|
|
|
|
lineHeight: 0,
|
|
|
|
|
width: 25
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
itemStyle: {
|
|
|
|
|
normal: {
|
|
|
|
|
color: {
|
|
|
|
|
type: "linear",
|
|
|
|
|
x: 0,
|
|
|
|
|
y: 0,
|
|
|
|
|
x2: 0,
|
|
|
|
|
y2: 1,
|
|
|
|
|
colorStops: [
|
|
|
|
|
{
|
|
|
|
|
offset: 0,
|
|
|
|
|
color: "rgba(199, 250, 242)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 1,
|
|
|
|
|
color: "rgba(76, 153, 154,0.5)"
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
],
|
|
|
|
|
global: false
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
label: {
|
|
|
|
|
show: true,
|
|
|
|
|
formatter: function (params) {
|
|
|
|
|
var index = params.dataIndex;
|
|
|
|
|
var str = "{c|}";
|
|
|
|
|
return str;
|
2023-07-12 09:56:31 +08:00
|
|
|
},
|
2023-07-14 17:44:33 +08:00
|
|
|
position: "top",
|
|
|
|
|
rich: {
|
|
|
|
|
c: {
|
|
|
|
|
fontSize: 18,
|
|
|
|
|
color: "#fff",
|
|
|
|
|
padding: [-4, 0, 8, 0],
|
|
|
|
|
backgroundColor: {
|
|
|
|
|
image: labelimg
|
2023-07-12 09:56:31 +08:00
|
|
|
},
|
2023-07-14 17:44:33 +08:00
|
|
|
align: "center",
|
|
|
|
|
// verticalAlign: "bottom",
|
|
|
|
|
height: 25,
|
|
|
|
|
lineHeight: 0,
|
|
|
|
|
width: 25
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
itemStyle: {
|
|
|
|
|
normal: {
|
|
|
|
|
color: {
|
|
|
|
|
type: "linear",
|
|
|
|
|
x: 0,
|
|
|
|
|
y: 0,
|
|
|
|
|
x2: 0,
|
|
|
|
|
y2: 1,
|
|
|
|
|
colorStops: [
|
|
|
|
|
{
|
|
|
|
|
offset: 0,
|
|
|
|
|
color: "rgba(199, 250, 242)"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
offset: 1,
|
|
|
|
|
color: "rgba(76, 153, 154,0.5)"
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
],
|
|
|
|
|
global: false
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
|
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
}
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
],
|
|
|
|
|
stack: "a",
|
|
|
|
|
symbol: "path://M0,10 L10,10 C5.5,10 5.5,5 5,0 C4.5,5 4.5,10 0,10 z"
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
]
|
|
|
|
|
});
|
|
|
|
|
function draw() {
|
|
|
|
|
let echartsTest = echarts.init(document.getElementById("echartsBottom"));
|
|
|
|
|
console.log("按分包单位分析绘图数据", option.value);
|
|
|
|
|
echartsTest.setOption(option.value);
|
|
|
|
|
}
|
|
|
|
|
//获取按分包单位分析数据
|
|
|
|
|
// let timer = null
|
2023-07-13 15:42:07 +08:00
|
|
|
|
2023-07-14 17:44:33 +08:00
|
|
|
onMounted(async () => {
|
|
|
|
|
await getProjectWorkerList();
|
|
|
|
|
draw();
|
|
|
|
|
});
|
2023-07-13 15:42:07 +08:00
|
|
|
|
2023-07-14 17:44:33 +08:00
|
|
|
function getNowData() {
|
|
|
|
|
yData.value = companyWorkTotalData.value.map((item: any) => item.presencePersonNum);
|
|
|
|
|
option.value.series[0].data = option.value.series[0].data.map((item, index) => {
|
|
|
|
|
return {
|
|
|
|
|
...item,
|
|
|
|
|
value: yData.value[index]
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
draw();
|
|
|
|
|
// option.value.xAxis.data = xData.value;
|
|
|
|
|
// presencePersonNum
|
|
|
|
|
}
|
|
|
|
|
function getTodayData() {
|
|
|
|
|
yData.value = companyWorkTotalData.value.map((item: any) => item.attendancePersonNum);
|
|
|
|
|
option.value.series[0].data = option.value.series[0].data.map((item, index) => {
|
|
|
|
|
return {
|
|
|
|
|
...item,
|
|
|
|
|
value: yData.value[index]
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
draw();
|
|
|
|
|
// option.value.xAxis.data = xData.value;
|
|
|
|
|
// attendancePersonNum
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let companyWorkTotalData = ref([] as any);
|
|
|
|
|
let xData = ref([] as any);
|
|
|
|
|
let yData = ref([] as any);
|
|
|
|
|
async function getProjectWorkerList() {
|
|
|
|
|
let res = await getComapnyWorkTotalListApi({
|
|
|
|
|
projectSn: store.sn
|
|
|
|
|
});
|
|
|
|
|
if (res.result) {
|
|
|
|
|
res.result.forEach((item: any) => {
|
|
|
|
|
// 只取有数据的工种
|
|
|
|
|
if (item.totalPersonNum > 0) {
|
|
|
|
|
companyWorkTotalData.value.push(item);
|
|
|
|
|
xData.value.push(item.enterpriseName);
|
|
|
|
|
yData.value.push(item.totalPersonNum);
|
2023-07-13 15:42:07 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
});
|
|
|
|
|
console.log("按分包单位分析数据", companyWorkTotalData.value);
|
|
|
|
|
// console.log(option.value.series[0].data, `series_old`);
|
|
|
|
|
option.value.series[0].data = option.value.series[0].data.map((item, index) => {
|
|
|
|
|
return {
|
|
|
|
|
...item,
|
|
|
|
|
value: yData.value[index]
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
option.value.xAxis.data = xData.value;
|
|
|
|
|
// option.value.yAxis.data = yData;
|
|
|
|
|
// 接口成功获取新值
|
|
|
|
|
// optionData.value = getData(data);
|
|
|
|
|
// 初始化option
|
|
|
|
|
draw();
|
|
|
|
|
console.log(option.value.series[0].data, `series`);
|
|
|
|
|
// initOption();
|
2023-07-12 09:56:31 +08:00
|
|
|
}
|
2023-07-14 17:44:33 +08:00
|
|
|
// let res: any = await getComapnyWorkTotalListApi({
|
|
|
|
|
// projectSn: store.sn
|
|
|
|
|
// });
|
|
|
|
|
}
|
2023-07-12 09:56:31 +08:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
.rightHeader {
|
|
|
|
|
width: 20%;
|
|
|
|
|
display: flex;
|
|
|
|
|
position: absolute;
|
|
|
|
|
z-index: 99;
|
|
|
|
|
color: #fff;
|
|
|
|
|
font-size: 10px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
line-height: 20px;
|
|
|
|
|
left: 80%;
|
|
|
|
|
top: 75.5%;
|
|
|
|
|
.Selected {
|
|
|
|
|
height: 5%;
|
|
|
|
|
background: url("@/assets/images/dustNoise/rightImg2.png") no-repeat;
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
}
|
|
|
|
|
.day {
|
|
|
|
|
width: 15%;
|
|
|
|
|
margin-right: 5%;
|
|
|
|
|
margin-left: 55%;
|
|
|
|
|
}
|
|
|
|
|
.year {
|
|
|
|
|
width: 15%;
|
|
|
|
|
margin-right: 8%;
|
|
|
|
|
}
|
|
|
|
|
.Selected:hover {
|
|
|
|
|
background: url("@/assets/images/dustNoise/rightImg.png") no-repeat;
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</style>
|