Admin
2022-09-13 75e02f6b05d0c4da02afd9f010f305f4867e5b40
Default Changelist
已修改1个文件
已添加1个文件
422 ■■■■■ 文件已修改
src/api/specialWorkSystem/workPlan/workAppoint/index.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/specialWorkSystem/workPlan/reserveSum/index.vue 413 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
            });
        }
    };
}
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>