| | |
| | | <template> |
| | | <div class="main_app"> |
| | | <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getData(1)" @clear="clear" |
| | | @changeForm='changeForm'> |
| | | <template #fastdate> |
| | | <el-radio-group v-model="filters.fastdate" size="small" @input="changeRadio"> |
| | | <el-radio-button label="0">当天</el-radio-button> |
| | | <el-radio-button label="6">近7天</el-radio-button> |
| | | <el-radio-button label="29">近30天</el-radio-button> |
| | | </el-radio-group> |
| | | </template> |
| | | </QueryForm> |
| | | <div class="main_app1"> |
| | | <div class="main_head"> |
| | | <div class="main_head_item blue"> |
| | | <span>{{totalList.total}}</span> |
| | | <span>总隐患数</span> |
| | | </div> |
| | | <div class="main_head_item red"> |
| | | <span>{{totalList.waitDeal}}</span> |
| | | <span>待处理</span> |
| | | </div> |
| | | <div class="main_head_item yellow"> |
| | | <span>{{totalList.dealFinish}}</span> |
| | | <span>已整改</span> |
| | | </div> |
| | | <div class="main_head_item orange"> |
| | | <span>{{totalList.back}}</span> |
| | | <span>已退回</span> |
| | | </div> |
| | | <div class="main_head_item darkBlue"> |
| | | <span>{{totalList.todayNew}}</span> |
| | | <span>今日新增</span> |
| | | </div> |
| | | </div> |
| | | <!-- <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getData(1)" @clear="clear"--> |
| | | <!-- @changeForm='changeForm'>--> |
| | | <!-- <template #fastdate>--> |
| | | <!-- <el-radio-group v-model="filters.fastdate" size="small" @input="changeRadio">--> |
| | | <!-- <el-radio-button label="0">当天</el-radio-button>--> |
| | | <!-- <el-radio-button label="6">近7天</el-radio-button>--> |
| | | <!-- <el-radio-button label="29">近30天</el-radio-button>--> |
| | | <!-- </el-radio-group>--> |
| | | <!-- </template>--> |
| | | <!-- </QueryForm>--> |
| | | <div class="main_content"> |
| | | <div class="type_wrap"> |
| | | <div class="title">隐患类型统计</div> |
| | | <div class="echart1" ref="typeRef"></div> |
| | | <div class="title">本月隐患类型统计</div> |
| | | <div v-show="typeList && typeList.length > 0" class="echart1" ref="typeRef"></div> |
| | | <div v-show="typeList.length == 0" style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;"> |
| | | <img style="width: 240px;" src="@/assets/images/default_homeimg.png" alt=""> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="dept_wrap"> |
| | | <div class="title">隐患归属部门统计</div> |
| | | <div class="echart2" ref="deptRef"></div> |
| | | <div class="title">本月隐患归属部门统计</div> |
| | | <div v-show="deptList && deptList.length > 0" class="echart2" ref="deptRef"></div> |
| | | <div v-show="deptList.length == 0" style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;"> |
| | | <img style="width: 240px;" src="@/assets/images/default_homeimg.png" alt=""> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="main_table"> |
| | | <div class="main_table_echart"> |
| | | <div class="title">本年隐患趋势</div> |
| | | <div id="echart3" v-show="yearList.length > 0"></div> |
| | | <div style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;" v-show="yearList.length === 0"> |
| | | <img style="width: 240px;" src="@/assets/images/default_homeimg.png" alt=""> |
| | | </div> |
| | | </div> |
| | | <div class="main_table_list"> |
| | | <div class="title">本月频繁发生隐患区域Top10</div> |
| | | <div class="list_head"> |
| | | <div class="list_head_item">责任部门</div> |
| | | <div class="list_head_item">隐患区域</div> |
| | | <div class="list_head_item">隐患数量</div> |
| | | </div> |
| | | <div class="table_box"> |
| | | <div class="list_content" v-for="(item, index) in departmentList" :key="index"> |
| | | <div class="list_head_item">{{item.name}}</div> |
| | | <div class="list_head_item">{{item.categoryName}}</div> |
| | | <div class="list_head_item">{{item.total}}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | data() { |
| | | return { |
| | | filters: { |
| | | fastdate: '0', |
| | | fastdate: '29', |
| | | queryStartTime: '', |
| | | queryEndTime: '' |
| | | }, |
| | |
| | | options: [ |
| | | { label: '待处理', value: '0' }, |
| | | { label: '已处理', value: '1' }, |
| | | { label: '不处理', value: '2' }, |
| | | { label: '已退回', value: '2' }, |
| | | ] |
| | | }, |
| | | { |
| | |
| | | }, |
| | | typeList: [], |
| | | deptList: [], |
| | | totalList: { |
| | | total: 0, |
| | | waitDeal: 0, |
| | | dealFinish: 0, |
| | | back: 0, |
| | | todayNew: 0 |
| | | }, |
| | | yearList: [], |
| | | departmentList: [] |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.changeRadio('0') |
| | | this.changeRadio('29') |
| | | this.initDept3() |
| | | // this.getData() |
| | | }, |
| | | methods: { |
| | | changeRadio(day) { |
| | |
| | | getData(page) { |
| | | hiddenDangerDataPost({ ...this.filters }).then(res => { |
| | | if (res) { |
| | | this.totalList.total = res.total || 0 |
| | | this.totalList.waitDeal = res.waitDeal || 0 |
| | | this.totalList.dealFinish = res.dealFinish || 0 |
| | | this.totalList.back = res.back || 0 |
| | | this.totalList.todayNew = res.todayNew || 0 |
| | | |
| | | this.yearList = res.yearList |
| | | |
| | | this.departmentList = res.departmentSortList.slice(0, 10) |
| | | |
| | | this.typeList = res.cateList || [] |
| | | this.deptList = res.departmentList || [] |
| | | this.initType() |
| | | this.initDept() |
| | | this.$nextTick(() => { |
| | | this.initType() |
| | | this.initDept() |
| | | this.initDept3() |
| | | }) |
| | | |
| | | } |
| | | }) |
| | | |
| | |
| | | this.typeList.forEach(i => { |
| | | total += i.total |
| | | }) |
| | | let colors = ['#d75a44', '#e39f4d', '#7ac7f6', '#7ac7f6', '#4469ee', '#698af0', '#9fb5f4', '#b6c7f7', '#c8d5f8'] |
| | | let colors = ['#d75a44', '#e39f4d', '#f0d05f', '#7ac7f6', '#4469ee', '#698af0','#86a2f1','#a1b4f6','#a0b5f5', '#9fb5f4', '#b6c7f7', '#c8d5f8'] |
| | | let option = { |
| | | grid: { |
| | | left: '0%', |
| | | right: '0%', |
| | | bottom: '0%', |
| | | top: '0%', |
| | | containLabel: true |
| | | }, |
| | | title: [ |
| | | { |
| | | text: '隐患总数', |
| | | top: '46%', |
| | | left: '46%', |
| | | left: '45%', |
| | | textStyle: { |
| | | color: '#666666', |
| | | fontSize: 16, |
| | | fontSize: 13, |
| | | }, |
| | | }, { |
| | | text: total, |
| | | top: '50%', |
| | | left: '48%', |
| | | left: '47.6%', |
| | | textStyle: { |
| | | color: '#080404', |
| | | fontSize: 24, |
| | | fontSize: 16, |
| | | fontWeight: 'bold', |
| | | }, |
| | | }], |
| | |
| | | }, |
| | | series: [ |
| | | { |
| | | name: 'Access From', |
| | | type: 'pie', |
| | | radius: ['28%', '46%'], |
| | | radius: ['34%', '50%'], |
| | | label: { |
| | | formatter: "{a|{b}}\n\n{c} | {d}%", |
| | | rich: { |
| | |
| | | const myChart = echarts.init(document.querySelector('.echart2')) |
| | | |
| | | let option = { |
| | | grid: { |
| | | left: '10%', |
| | | right: '10%', |
| | | bottom: '10%', |
| | | top: '20%', |
| | | containLabel: true |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: this.deptList.map(i => i.name), |
| | |
| | | yAxis: { |
| | | type: 'value', |
| | | name: '隐患数', |
| | | minInterval: 1, |
| | | axisLine: { |
| | | show: true, |
| | | }, |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | |
| | | myChart.resize() |
| | | }) |
| | | }, |
| | | initDept3() { |
| | | if (this.yearList.length === 0) return |
| | | |
| | | const myChart = echarts.init(document.querySelector('#echart3')) |
| | | |
| | | let names = this.yearList.map(item => item.name) |
| | | let datas = this.yearList.map(item => item.total) |
| | | |
| | | let option = { |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { |
| | | type: 'line' |
| | | } |
| | | }, |
| | | grid: { |
| | | left: '5%', |
| | | right: '10%', |
| | | bottom: '0%', |
| | | top: '20%', |
| | | containLabel: true |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: names |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | axisLine: { |
| | | show: true |
| | | }, |
| | | axisLabel: { |
| | | formatter: function (value) { |
| | | // 四舍五入到最近的整数 |
| | | return Math.round(value); |
| | | } |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | | data: datas, |
| | | type: 'line', |
| | | areaStyle: { |
| | | normal: { |
| | | color: { |
| | | x: 0, |
| | | y: 0, |
| | | x2: 0, |
| | | y2: 1, |
| | | colorStops: [{ |
| | | offset: 0, |
| | | color: '#207FF7' // 0% 处的颜色 |
| | | }, { |
| | | offset: 1, |
| | | color: 'rgba(255,255,255,.2)' // 100% 处的颜色 |
| | | }], |
| | | globalCoord: false // 缺省为 false |
| | | } |
| | | } |
| | | }, |
| | | lineStyle: { // 线条样式 |
| | | color: { |
| | | type: 'linear', |
| | | x: 0, |
| | | y: 0, |
| | | x2: 0, |
| | | y2: 1, |
| | | colorStops: [{ |
| | | offset: 0, color: '#207FF7' // 0% 处的颜色 |
| | | }, { |
| | | offset: 1, color: '#207FF7' // 100% 处的颜色 |
| | | }] |
| | | }, |
| | | width: 2 // 线条粗细 |
| | | }, |
| | | symbol: 'circle', |
| | | symbolSize: 10, |
| | | itemStyle: { |
| | | borderWidth: 1, |
| | | borderColor: '#fff', |
| | | color: '#207FF7' |
| | | }, |
| | | smooth: false |
| | | } |
| | | ] |
| | | } |
| | | myChart.setOption(option) |
| | | window.addEventListener('resize', function () { // 执行 |
| | | myChart.resize() |
| | | }) |
| | | }, |
| | | clear() { |
| | | this.filters = {} |
| | | this.getData() |
| | |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .main_app { |
| | | /*.main_app { |
| | | height: 100%; |
| | | } |
| | | |
| | | .main_content { |
| | | display: flex; |
| | | height: calc(100% - 100px); |
| | | |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 16px; |
| | | color: #222222; |
| | | margin-bottom: 20px; |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .type_wrap { |
| | | flex: 5; |
| | | flex-shrink: 0; |
| | | height: calc(100% - 20px); |
| | | border-right: 12px solid #f7f7f7; |
| | | |
| | | |
| | | .echart1 { |
| | | width: 100%; |
| | | height: calc(100% - 60px); |
| | | }*/ |
| | | .main_app1 { |
| | | width: 100%; |
| | | height: calc(100% - 44px); |
| | | overflow-y: auto; |
| | | overflow-x: hidden; |
| | | padding: 15px; |
| | | box-sizing: border-box; |
| | | background-color: #F4F7FC; |
| | | .main_head { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | margin-bottom: 10px; |
| | | background-color: #ffffff; |
| | | padding: 20px; |
| | | box-sizing: border-box; |
| | | .blue { |
| | | border-left: 8px solid #12BB8B; |
| | | } |
| | | .red { |
| | | border-left: 8px solid #F6CF46; |
| | | } |
| | | .yellow { |
| | | border-left: 8px solid #5DC9FB; |
| | | } |
| | | .orange { |
| | | border-left: 8px solid #FF9E56; |
| | | } |
| | | .darkBlue { |
| | | border-left: 8px solid #6B6EFF; |
| | | } |
| | | .main_head_item { |
| | | width: 19%; |
| | | height: 112px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | justify-content: center; |
| | | box-sizing: border-box; |
| | | border-radius: 5px; |
| | | background: #F4F7FC; |
| | | span { |
| | | &:nth-child(1) { |
| | | font-weight: 600; |
| | | font-size: 30px; |
| | | color: #222222; |
| | | } |
| | | &:nth-child(2) { |
| | | font-weight: 400; |
| | | font-size: 14px; |
| | | color: #222222; |
| | | margin-top: 10px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .dept_wrap { |
| | | flex: 4; |
| | | flex-shrink: 0; |
| | | height: calc(100% - 20px); |
| | | padding-left: 20px; |
| | | .main_table { |
| | | display: flex; |
| | | align-items: start; |
| | | justify-content: space-between; |
| | | .main_table_echart { |
| | | width: 64%; |
| | | height: 400px; |
| | | background-color: #ffffff; |
| | | padding: 20px; |
| | | box-sizing: border-box; |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 16px; |
| | | color: #222222; |
| | | } |
| | | #echart3 { |
| | | width: 100%; |
| | | height: calc(100% - 33px); |
| | | } |
| | | } |
| | | .main_table_list { |
| | | flex-shrink: 0; |
| | | width: 35%; |
| | | padding: 20px; |
| | | box-sizing: border-box; |
| | | background-color: #ffffff; |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 16px; |
| | | color: #222222; |
| | | } |
| | | .list_head { |
| | | width: 100%; |
| | | height: 50px; |
| | | display: flex; |
| | | align-items: center; |
| | | background-color: #F7F7F7; |
| | | border-left: 1px solid #DFE2E8; |
| | | border-top: 1px solid #DFE2E8; |
| | | margin-top: 15px; |
| | | .list_head_item { |
| | | flex: 1; |
| | | height: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | font-size: 13px; |
| | | color: #222222; |
| | | border-right: 1px solid #DFE2E8; |
| | | } |
| | | } |
| | | .table_box { |
| | | width: 100%; |
| | | border-bottom: 1px solid #DFE2E8; |
| | | .list_content { |
| | | width: 100%; |
| | | height: 50px; |
| | | display: flex; |
| | | align-items: center; |
| | | border-left: 1px solid #DFE2E8; |
| | | border-top: 1px solid #DFE2E8; |
| | | .list_head_item { |
| | | flex: 1; |
| | | height: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | font-size: 13px; |
| | | color: #222222; |
| | | border-right: 1px solid #DFE2E8; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .echart2 { |
| | | width: 100%; |
| | | height: calc(100% - 60px); |
| | | .main_content { |
| | | display: flex; |
| | | align-items: start; |
| | | justify-content: space-between; |
| | | height: 500px; |
| | | margin-bottom: 10px; |
| | | .title { |
| | | font-weight: 600; |
| | | font-size: 16px; |
| | | color: #222222; |
| | | /*margin-bottom: 20px;*/ |
| | | } |
| | | |
| | | .type_wrap { |
| | | width: 49.5%; |
| | | flex-shrink: 0; |
| | | height: 100%; |
| | | /*border-right: 12px solid #f7f7f7;*/ |
| | | background-color: #ffffff; |
| | | padding: 20px; |
| | | box-sizing: border-box; |
| | | |
| | | .echart1 { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | |
| | | .dept_wrap { |
| | | width: 49.5%; |
| | | flex-shrink: 0; |
| | | height: 100%; |
| | | background-color: #ffffff; |
| | | padding: 20px; |
| | | box-sizing: border-box; |
| | | .echart2 { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | | |
| | | </style> |