From 75e02f6b05d0c4da02afd9f010f305f4867e5b40 Mon Sep 17 00:00:00 2001
From: Admin <978517621@qq.com>
Date: 星期二, 13 九月 2022 17:49:49 +0800
Subject: [PATCH] Default Changelist

---
 src/views/specialWorkSystem/workPlan/reserveSum/index.vue |  413 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/api/specialWorkSystem/workPlan/workAppoint/index.ts   |    9 +
 2 files changed, 422 insertions(+), 0 deletions(-)

diff --git a/src/api/specialWorkSystem/workPlan/workAppoint/index.ts b/src/api/specialWorkSystem/workPlan/workAppoint/index.ts
index de6fb5e..9d44e51 100644
--- a/src/api/specialWorkSystem/workPlan/workAppoint/index.ts
+++ b/src/api/specialWorkSystem/workPlan/workAppoint/index.ts
@@ -36,6 +36,15 @@
                 method: 'post',
                 data: data
             });
+        },
+
+        //获取各部门各作业的数量
+        getAllRecords: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/specialWork/appointment/statistics`,
+                method: 'post',
+                data: data
+            });
         }
     };
 }
diff --git a/src/views/specialWorkSystem/workPlan/reserveSum/index.vue b/src/views/specialWorkSystem/workPlan/reserveSum/index.vue
new file mode 100644
index 0000000..8002cd6
--- /dev/null
+++ b/src/views/specialWorkSystem/workPlan/reserveSum/index.vue
@@ -0,0 +1,413 @@
+<template>
+	<div class="home-container">
+		<div style="height: 100%">
+			<el-row class="homeCard">
+				<el-col :span="8" style="display:flex;align-items: center">
+					<span style="white-space: nowrap">选择时间段:</span>
+					<div class="grid-content topInfo">
+						<el-date-picker
+								v-model="searchDates"
+								type="daterange"
+								unlink-panels
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期"
+								value-format="YYYY-MM-DD"
+								:shortcuts="shortcuts"
+						/>
+					</div>
+				</el-col>
+				<el-button style="margin-left: 20px" type="primary" @click="searchRecord">查询</el-button>
+				<el-button plain @click="clearSearch">重置</el-button>
+			</el-row>
+			<div class="homeCard">
+				<div :id="chartName" style="width: 100%;height: 100%"></div>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script lang="ts">
+	import {toRefs, reactive, ref, onMounted, defineAsyncComponent, nextTick} from 'vue';
+	import { storeToRefs } from 'pinia';
+	import { initBackEndControlRoutes } from '/@/router/backEnd';
+	import { useUserInfo } from '/@/stores/userInfo';
+	import { Session } from '/@/utils/storage';
+	import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+	import { ElTable, ElMessage, ElMessageBox } from 'element-plus'
+	import { workAppointApi } from '/@/api/specialWorkSystem/workPlan/workAppoint';
+	import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
+	import * as echarts from "echarts";
+
+	// 定义接口来定义对象的类型
+	interface stateType {
+		tableData: [],
+		departmentList: [],
+		hotCount: [],
+		confinedSpaceCount: [],
+		liftingCount: [],
+		groundBreakingCount: [],
+		openCircuitCout: [],
+		heightCount: [],
+		temporaryPowerCount: [],
+		blindPlatePluggingCount: [],
+		searchDates: Array<any>,
+		startTime: String,
+		endTime: String
+	}
+
+	export default {
+		name: 'workReservation',
+		components: {},
+		setup() {
+			const userInfo = useUserInfo();
+			const { userInfos } = storeToRefs(userInfo);
+			const state = reactive<stateType>({
+				tableData: [],
+				departmentList: [],
+				hotCount: [],
+				confinedSpaceCount: [],
+				liftingCount: [],
+				groundBreakingCount: [],
+				openCircuitCout: [],
+				heightCount: [],
+				temporaryPowerCount: [],
+				blindPlatePluggingCount: [],
+				searchDates: '',
+				startTime: '',
+				endTime: ''
+			});
+			const chartName = ref("eChart" + Date.now() + Math.random())
+			const shortcuts = [
+				{
+					text: '上周',
+					value: () => {
+						const end = new Date()
+						const start = new Date()
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
+						return [start, end]
+					},
+				},
+				{
+					text: '上个月',
+					value: () => {
+						const end = new Date()
+						const start = new Date()
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
+						return [start, end]
+					},
+				},
+				{
+					text: '上个季度',
+					value: () => {
+						const end = new Date()
+						const start = new Date()
+						start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
+						return [start, end]
+					},
+				},
+			]
+			// 页面载入时执行方法
+			onMounted(() => {
+				getListByPage()
+				// getAllDepartment()
+			});
+
+			// 获取列表
+			const getListByPage = async () => {
+				console.log(state.searchDates)
+				const data = { startTime: state.searchDates[0], endTime: state.searchDates[1] };
+				let res = await workAppointApi().getAllRecords(data);
+				if (res.data.code === '200') {
+					if(JSON.parse(JSON.stringify(res.data.data)).length>0){
+						state.tableData = JSON.parse(JSON.stringify(res.data.data))
+						state.departmentList = Array.from(state.tableData, ({ applyDepName }) => applyDepName);
+						state.hotCount = Array.from(state.tableData, ({ hotCount }) => hotCount);
+						state.confinedSpaceCount = Array.from(state.tableData, ({ confinedSpaceCount }) => confinedSpaceCount);
+						state.liftingCount = Array.from(state.tableData, ({ liftingCount }) => liftingCount);
+						state.groundBreakingCount = Array.from(state.tableData, ({ groundBreakingCount }) => groundBreakingCount);
+						state.openCircuitCout = Array.from(state.tableData, ({ openCircuitCout }) => openCircuitCout);
+						state.heightCount = Array.from(state.tableData, ({ heightCount }) => heightCount);
+						state.temporaryPowerCount = Array.from(state.tableData, ({ temporaryPowerCount }) => temporaryPowerCount);
+						state.blindPlatePluggingCount = Array.from(state.tableData, ({ blindPlatePluggingCount }) => blindPlatePluggingCount);
+						initCharts()
+					}else{
+						ElMessage({
+							type: 'warning',
+							message: '暂无数据'
+						});
+					}
+				} else {
+					ElMessage({
+						type: 'warning',
+						message: res.data.msg
+					});
+				}
+			};
+
+			const initCharts =()=>{
+				let dom = document.getElementById(chartName.value);
+				let myChart = echarts.init(dom);
+
+				let option: EChartsOption;
+
+				option = {
+					tooltip: {
+						trigger: 'axis',
+						axisPointer: {
+							type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
+						}
+					},
+					legend: {},
+					grid: {
+						left: '3%',
+						right: '4%',
+						bottom: '3%',
+						containLabel: true
+					},
+					xAxis: {
+						type: 'value'
+					},
+					yAxis: {
+						type: 'category',
+						data: state.departmentList
+					},
+					series: [
+						{
+							name: '动火作业',
+							type: 'bar',
+							stack: 'total',
+							label: {
+								show: true
+							},
+							emphasis: {
+								focus: 'series'
+							},
+							data: state.hotCount
+						},
+						{
+							name: '受限空间作业',
+							type: 'bar',
+							stack: 'total',
+							label: {
+								show: true
+							},
+							emphasis: {
+								focus: 'series'
+							},
+							data: state.confinedSpaceCount
+						},
+						{
+							name: '吊装作业',
+							type: 'bar',
+							stack: 'total',
+							label: {
+								show: true
+							},
+							emphasis: {
+								focus: 'series'
+							},
+							data: state.liftingCount
+						},
+						{
+							name: '动土作业',
+							type: 'bar',
+							stack: 'total',
+							label: {
+								show: true
+							},
+							emphasis: {
+								focus: 'series'
+							},
+							data: state.groundBreakingCount
+						},
+						{
+							name: '断路作业',
+							type: 'bar',
+							stack: 'total',
+							label: {
+								show: true
+							},
+							emphasis: {
+								focus: 'series'
+							},
+							data: state.openCircuitCout
+						},
+						{
+							name: '高处作业',
+							type: 'bar',
+							stack: 'total',
+							label: {
+								show: true
+							},
+							emphasis: {
+								focus: 'series'
+							},
+							data: state.heightCount
+						},
+						{
+							name: '临时用电作业',
+							type: 'bar',
+							stack: 'total',
+							label: {
+								show: true
+							},
+							emphasis: {
+								focus: 'series'
+							},
+							data: state.temporaryPowerCount
+						},
+						{
+							name: '盲板抽堵作业',
+							type: 'bar',
+							stack: 'total',
+							label: {
+								show: true
+							},
+							emphasis: {
+								focus: 'series'
+							},
+							data: state.blindPlatePluggingCount
+						}
+					]
+				};
+
+				option && myChart.setOption(option);
+
+				window.addEventListener("resize",function (){
+					myChart.resize();
+				});
+			}
+
+			// 关键词查询记录
+			const searchRecord = async () => {
+				if (state.searchDates == []) {
+					ElMessage({
+						type: 'warning',
+						message: '请选择时间段'
+					});
+				} else {
+					getListByPage();
+				}
+			};
+
+			const clearSearch = async () => {
+				state.searchDates = [];
+				getListByPage();
+			};
+
+			// 刷新
+			const reLoadData = async () => {
+				getListByPage();
+			};
+
+			// 折线图
+			const renderMenu = async (value: string) => {
+				Session.set('projectId', value);
+				userInfos.value.projectId = value;
+				await initBackEndControlRoutes();
+			};
+			return {
+				View,
+				Edit,
+				Delete,
+				Refresh,
+				Plus,
+				Search,
+				shortcuts,
+				chartName,
+				searchRecord,
+				clearSearch,
+				getListByPage,
+				reLoadData,
+				...toRefs(state)
+			};
+		}
+	};
+</script>
+
+<style scoped lang="scss">
+	$homeNavLengh: 8;
+	.red{
+		color: red;
+	}
+	.home-container {
+		height: calc(100vh - 144px);
+		box-sizing: border-box;
+		overflow: hidden;
+		.homeCard {
+			width: 100%;
+			padding: 20px;
+			box-sizing: border-box;
+			background: #fff;
+			border-radius: 4px;
+
+			.main-card {
+				width: 100%;
+				height: 100%;
+				.cardTop {
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					margin-bottom: 20px;
+					.mainCardBtn {
+						margin: 0;
+					}
+				}
+				.pageBtn {
+					height: 60px;
+					display: flex;
+					align-items: center;
+					justify-content: right;
+
+					.demo-pagination-block + .demo-pagination-block {
+						margin-top: 10px;
+					}
+					.demo-pagination-block .demonstration {
+						margin-bottom: 16px;
+					}
+				}
+			}
+			&:last-of-type {
+				height: calc(100% - 100px);
+			}
+		}
+		.el-row {
+			display: flex;
+			align-items: center;
+			margin-bottom: 20px;
+			&:last-child {
+				margin-bottom: 0;
+			}
+			.grid-content {
+				align-items: center;
+				min-height: 36px;
+			}
+
+			.topInfo {
+				width: 100%;
+				display: flex;
+				align-items: center;
+				font-size: 16px;
+				font-weight: bold;
+
+				& > div {
+					white-space: nowrap;
+					margin-right: 20px;
+				}
+			}
+		}
+	}
+	.el-input{
+		width: 100% !important;
+	}
+	::v-deep(.el-date-editor){
+		width: 100%;
+	}
+	.el-select{
+		width: 100%;
+	}
+	:deep(.el-cascader){
+		width: 100% !important;
+	}
+</style>

--
Gitblit v1.9.2