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