2024-08-08 14:32:22 +08:00
|
|
|
|
<template>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="container">
|
2024-08-08 14:32:22 +08:00
|
|
|
|
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="topHeadView">
|
|
|
|
|
<div class="itemView">
|
|
|
|
|
<div class="imgView"></div>
|
|
|
|
|
<div class="label">待派单</div>
|
|
|
|
|
<div class="num">{{ adminStatsCount.wait }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="itemView">
|
|
|
|
|
<div class="imgView"></div>
|
|
|
|
|
<div class="label">重派单</div>
|
|
|
|
|
<div class="num">{{ adminStatsCount.anew }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="itemView">
|
|
|
|
|
<div class="imgView"></div>
|
|
|
|
|
<div class="label">未查看通知</div>
|
|
|
|
|
<div class="num">{{ adminStatsCount.newnotice }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="itemView">
|
|
|
|
|
<div class="imgView"></div>
|
|
|
|
|
<div class="label">已查看通知</div>
|
|
|
|
|
<div class="num">{{ adminStatsCount.oldnotice }}</div>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="caseStatisticsView">
|
|
|
|
|
<div class="headView">
|
|
|
|
|
<div class="titleView">工单统计</div>
|
|
|
|
|
<div class="typeView">
|
|
|
|
|
<div :class="type=='month' ? 'activity' : ''" class="type " @click="repairCount">本月</div>
|
|
|
|
|
<div :class="type=='year' ? 'activity' : ''" class="type" @click="getYearCount">本年</div>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="contentView">
|
|
|
|
|
<div class="itemView">
|
|
|
|
|
<div class="label">维修工单</div>
|
|
|
|
|
<div class="value">{{ repairStatsCount.zs }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="itemView">
|
|
|
|
|
<div class="label">待维修工单</div>
|
|
|
|
|
<div class="value">{{ repairStatsCount.wait }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="itemView">
|
|
|
|
|
<div class="label">超时量</div>
|
|
|
|
|
<div class="value">{{ repairStatsCount.timeout }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="itemView">
|
|
|
|
|
<div class="label">差评量</div>
|
|
|
|
|
<div class="value">{{ repairStatsCount.l }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="itemView">
|
|
|
|
|
<div class="label">中评量</div>
|
|
|
|
|
<div class="value">{{ repairStatsCount.m }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="itemView">
|
|
|
|
|
<div class="label">好评量</div>
|
|
|
|
|
<div class="value">{{ repairStatsCount.h }}</div>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="statusView">
|
|
|
|
|
<div class="caseStatusView">
|
|
|
|
|
<div class="headView">
|
|
|
|
|
<div class="titleView">工单完成情况</div>
|
|
|
|
|
<!-- <div class="typeView">-->
|
|
|
|
|
<!-- <div class="type activity">本周</div>-->
|
|
|
|
|
<!-- <div class="type">本年</div>-->
|
|
|
|
|
<!-- </div>-->
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="contentView">
|
|
|
|
|
<div class="circularView">
|
|
|
|
|
<div id="echart1" style="width: 400px; height: 300px"></div>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="centerLine"></div>
|
|
|
|
|
<div class="circularView">
|
|
|
|
|
<div id="echart2" style="width: 400px; height: 300px"></div>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="evaluateView">
|
|
|
|
|
<div class="headView">
|
|
|
|
|
<div class="titleView">评价情况</div>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="contentView">
|
|
|
|
|
<div id="echart3" style="width: 400px; height: 300px"></div>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="faultView">
|
|
|
|
|
<div class="floorView">
|
|
|
|
|
<div class="headView">
|
|
|
|
|
<div class="titleView">楼层负责人情况</div>
|
|
|
|
|
<div class="conditionView">
|
2024-08-19 08:43:40 +08:00
|
|
|
|
<a-select :value="floor.type" @select="selectFloor" style="width: 120px;margin-right: 10px">
|
|
|
|
|
<a-select-option value="month">按月</a-select-option>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<a-select-option value="year">按年</a-select-option>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</a-select>
|
2024-08-18 14:03:13 +08:00
|
|
|
|
<a-date-picker
|
2024-08-19 08:43:40 +08:00
|
|
|
|
v-if="floor.type == 'year' || floor.type == ''"
|
|
|
|
|
format="YYYY"
|
|
|
|
|
mode="year"
|
|
|
|
|
:value="floor.time"
|
|
|
|
|
placeholder="选择年份"
|
|
|
|
|
:open="floor.open"
|
|
|
|
|
@openChange="openChange"
|
|
|
|
|
@panelChange="panelChange"
|
2024-08-18 14:03:13 +08:00
|
|
|
|
>
|
|
|
|
|
</a-date-picker>
|
2024-08-19 08:43:40 +08:00
|
|
|
|
<a-month-picker v-if='floor.type =="month"' @change="clickFloor" :value="floor.time"
|
|
|
|
|
placeholder="请选择月" />
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="contentView">
|
|
|
|
|
<div id="echart4" style="width: 550px; height: 600px"></div>
|
2024-08-08 17:36:38 +08:00
|
|
|
|
</div>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="rightView">
|
|
|
|
|
<div class="blockView">
|
|
|
|
|
<div class="headView">
|
|
|
|
|
<div class="titleView">故障统计</div>
|
|
|
|
|
<div class="conditionView">
|
2024-08-19 08:43:40 +08:00
|
|
|
|
<a-select :value="fault.type" @select="selectFault" style="width: 120px;margin-right: 10px">
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<a-select-option value="month">按月</a-select-option>
|
|
|
|
|
<a-select-option value="year">按年</a-select-option>
|
2024-08-09 10:57:16 +08:00
|
|
|
|
</a-select>
|
2024-08-19 08:43:40 +08:00
|
|
|
|
<a-date-picker
|
|
|
|
|
v-if="fault.type == 'year' || fault.type == ''"
|
|
|
|
|
format="YYYY"
|
|
|
|
|
mode="year"
|
|
|
|
|
:value="fault.time"
|
|
|
|
|
placeholder="选择年份"
|
|
|
|
|
:open="fault.open"
|
|
|
|
|
@openChange="openFaultChange"
|
|
|
|
|
@panelChange="panelFaultChange"
|
|
|
|
|
>
|
|
|
|
|
</a-date-picker>
|
|
|
|
|
<a-month-picker v-if='fault.type =="month"' @change="clickFault" :value="fault.time"
|
|
|
|
|
placeholder="请选择月" />
|
2024-08-09 10:57:16 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="contentView">
|
|
|
|
|
<div id="echart5" style="width: 700px; height: 327px"></div>
|
2024-08-09 10:57:16 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="blockView">
|
|
|
|
|
<div class="headView">
|
|
|
|
|
<div class="titleView">故障类型</div>
|
|
|
|
|
<div class="conditionView">
|
2024-08-19 09:14:39 +08:00
|
|
|
|
<a-select :value="faultType.type" @select="selectFaultType" style="width: 120px;margin-right: 10px">
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<a-select-option value="month">按月</a-select-option>
|
|
|
|
|
<a-select-option value="year">按年</a-select-option>
|
2024-08-09 10:57:16 +08:00
|
|
|
|
</a-select>
|
2024-08-19 09:14:39 +08:00
|
|
|
|
<a-date-picker
|
|
|
|
|
v-if="faultType.type == 'year' || faultType.type == ''"
|
|
|
|
|
format="YYYY"
|
|
|
|
|
mode="year"
|
|
|
|
|
:value="faultType.time"
|
|
|
|
|
placeholder="选择年份"
|
|
|
|
|
:open="faultType.open"
|
|
|
|
|
@openChange="openFaultTypeChange"
|
|
|
|
|
@panelChange="panelFaultTypeChange"
|
|
|
|
|
>
|
|
|
|
|
</a-date-picker>
|
|
|
|
|
<a-month-picker v-if='faultType.type =="month"' @change="clickFaultType" :value="faultType.time"
|
|
|
|
|
placeholder="请选择月" />
|
2024-08-09 10:57:16 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="contentView">
|
|
|
|
|
<div id="echart6" style="width: 700px; height: 327px"></div>
|
2024-08-09 10:57:16 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="tableView">
|
|
|
|
|
<div class="headView">
|
2024-08-19 08:43:40 +08:00
|
|
|
|
<div class="titleView">项目详情</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="conditionView">
|
2024-08-19 08:43:40 +08:00
|
|
|
|
<a-select :value="deviceType.type" @select="selectDeviceType" style="width: 120px;margin-right: 10px">
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<a-select-option value="month">按月</a-select-option>
|
|
|
|
|
<a-select-option value="year">按年</a-select-option>
|
2024-08-09 10:57:16 +08:00
|
|
|
|
</a-select>
|
2024-08-19 08:43:40 +08:00
|
|
|
|
<a-date-picker
|
|
|
|
|
v-if="deviceType.type == 'year' || deviceType.type == ''"
|
|
|
|
|
format="YYYY"
|
|
|
|
|
mode="year"
|
|
|
|
|
:value="deviceType.time"
|
|
|
|
|
placeholder="选择年份"
|
|
|
|
|
:open="deviceType.open"
|
|
|
|
|
@openChange="openDeviceTypeChange"
|
|
|
|
|
@panelChange="panelDeviceTypeChange"
|
|
|
|
|
>
|
|
|
|
|
</a-date-picker>
|
|
|
|
|
<a-month-picker v-if='deviceType.type =="month"' @change="clickDeviceType" :value="deviceType.time"
|
|
|
|
|
placeholder="请选择月" />
|
2024-08-09 10:57:16 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-08-17 16:31:37 +08:00
|
|
|
|
<div class="contentView">
|
2024-08-09 11:02:17 +08:00
|
|
|
|
<a-table
|
2024-08-19 08:43:40 +08:00
|
|
|
|
style="width: 100%"
|
2024-08-09 11:02:17 +08:00
|
|
|
|
:columns="columns"
|
|
|
|
|
:data-source="loadData"
|
|
|
|
|
showPagination="true"
|
|
|
|
|
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
|
|
|
|
|
|
|
|
|
|
>
|
2024-08-09 10:57:16 +08:00
|
|
|
|
</a-table>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
|
|
|
|
|
</div>
|
2024-08-08 14:32:22 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
import * as echarts from 'echarts'
|
2024-08-19 08:43:40 +08:00
|
|
|
|
import {
|
|
|
|
|
repairAdminStats,
|
|
|
|
|
repairStats,
|
|
|
|
|
floorStats,
|
|
|
|
|
deviceTypeStats,
|
2024-08-19 09:14:39 +08:00
|
|
|
|
selectDeviceStats,
|
|
|
|
|
selectFailureStats
|
2024-08-19 08:43:40 +08:00
|
|
|
|
} from '@/api/admin/repair/repairStats'
|
2024-08-08 17:18:00 +08:00
|
|
|
|
|
2024-08-08 14:32:22 +08:00
|
|
|
|
export default {
|
2024-08-08 17:18:00 +08:00
|
|
|
|
name: 'RepairStatistics',
|
2024-08-09 10:57:16 +08:00
|
|
|
|
data () {
|
|
|
|
|
return {
|
2024-08-17 16:31:37 +08:00
|
|
|
|
type: '',
|
|
|
|
|
adminStatsCount: [],
|
|
|
|
|
repairStatsCount: [],
|
|
|
|
|
finishCount: [],
|
|
|
|
|
timeout: [],
|
2024-08-18 14:03:26 +08:00
|
|
|
|
deviceTypeCount: [],
|
2024-08-17 16:31:37 +08:00
|
|
|
|
pj: [],
|
|
|
|
|
floorStatsCount: [],
|
2024-08-09 10:57:16 +08:00
|
|
|
|
// 查询参数
|
|
|
|
|
queryParam: {},
|
2024-08-09 11:02:17 +08:00
|
|
|
|
selectedRowKeys: [],
|
|
|
|
|
selectedRows: [],
|
2024-08-19 08:43:40 +08:00
|
|
|
|
faultStatsCount: [],
|
2024-08-19 09:14:39 +08:00
|
|
|
|
selectFaultStatsCount: [],
|
2024-08-19 08:43:40 +08:00
|
|
|
|
deviceType: {
|
|
|
|
|
type: '',
|
|
|
|
|
time: '',
|
|
|
|
|
open: false
|
|
|
|
|
},
|
|
|
|
|
fault: {
|
|
|
|
|
type: '',
|
|
|
|
|
time: '',
|
|
|
|
|
open: false
|
|
|
|
|
},
|
2024-08-18 14:03:26 +08:00
|
|
|
|
yearShowOne: false,
|
2024-08-19 08:43:40 +08:00
|
|
|
|
//
|
|
|
|
|
floor: {
|
|
|
|
|
type: '',
|
|
|
|
|
time: '',
|
|
|
|
|
open: false
|
|
|
|
|
},
|
2024-08-19 09:14:39 +08:00
|
|
|
|
faultType: {
|
|
|
|
|
type: '',
|
|
|
|
|
time: '',
|
|
|
|
|
open: false
|
|
|
|
|
},
|
2024-08-09 10:57:16 +08:00
|
|
|
|
// 表头
|
|
|
|
|
columns: [
|
|
|
|
|
{
|
2024-08-18 14:03:26 +08:00
|
|
|
|
title: '类型',
|
|
|
|
|
dataIndex: 'typename'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '保修次数',
|
|
|
|
|
dataIndex: 'zs'
|
2024-08-09 10:57:16 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
2024-08-18 14:03:26 +08:00
|
|
|
|
title: '维修次数',
|
|
|
|
|
dataIndex: 'closed'
|
2024-08-09 10:57:16 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
2024-08-18 14:03:26 +08:00
|
|
|
|
title: '损坏最多品牌',
|
|
|
|
|
dataIndex: 'brand'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '维修完成率',
|
|
|
|
|
dataIndex: 'wcl'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '好评率',
|
|
|
|
|
dataIndex: 'hl'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '中评率',
|
|
|
|
|
dataIndex: 'ml'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '差评率',
|
|
|
|
|
dataIndex: 'll'
|
2024-08-09 11:05:28 +08:00
|
|
|
|
}
|
2024-08-09 10:57:16 +08:00
|
|
|
|
],
|
|
|
|
|
// 加载数据方法 必须为 Promise 对象
|
2024-08-19 08:43:40 +08:00
|
|
|
|
loadData: []
|
2024-08-09 10:57:16 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
2024-08-17 16:31:37 +08:00
|
|
|
|
mounted () {
|
|
|
|
|
this.adminStats()
|
|
|
|
|
this.repairCount()
|
|
|
|
|
this.getfloorStats()
|
2024-08-18 14:03:26 +08:00
|
|
|
|
this.deviceStats()
|
2024-08-19 08:43:40 +08:00
|
|
|
|
this.faultStats()
|
2024-08-19 09:14:39 +08:00
|
|
|
|
this.selectFailureStats()
|
2024-08-17 16:31:37 +08:00
|
|
|
|
|
2024-08-08 17:18:00 +08:00
|
|
|
|
},
|
|
|
|
|
methods: {
|
2024-08-19 08:43:40 +08:00
|
|
|
|
// 使用openChange事件控制日期下拉面板显示与收起
|
|
|
|
|
openChange (open) {
|
|
|
|
|
this.floor.open = open
|
|
|
|
|
},
|
|
|
|
|
// 使用panelChange事件控制选中年份的方法
|
|
|
|
|
panelChange (value) {
|
|
|
|
|
// 接收panelChange返回的值
|
|
|
|
|
this.floor.time = value
|
|
|
|
|
const date1 = new Date(this.floor.time).getFullYear()
|
|
|
|
|
floorStats({ date: date1 }).then(res => {
|
|
|
|
|
this.createEchartLine('echart4', res.data)
|
|
|
|
|
})
|
|
|
|
|
this.floor.open = false
|
|
|
|
|
},
|
|
|
|
|
// 选择-楼层负责人情况
|
|
|
|
|
selectFloor (value, option) {
|
|
|
|
|
this.floor.type = value
|
|
|
|
|
},
|
|
|
|
|
clickFloor (a, c) {
|
|
|
|
|
this.floor.time = c
|
|
|
|
|
console.log(c)
|
|
|
|
|
floorStats({ date: c }).then(res => {
|
|
|
|
|
this.createEchartLine('echart4', res.data)
|
|
|
|
|
})
|
|
|
|
|
},
|
2024-08-18 14:03:26 +08:00
|
|
|
|
|
2024-08-19 08:43:40 +08:00
|
|
|
|
// 故障统计 使用openChange事件控制日期下拉面板显示与收起
|
|
|
|
|
openFaultChange (open) {
|
|
|
|
|
this.fault.open = open
|
|
|
|
|
},
|
|
|
|
|
// 使用panelChange事件控制选中年份的方法
|
|
|
|
|
panelFaultChange (value) {
|
|
|
|
|
// 接收panelChange返回的值
|
|
|
|
|
this.fault.time = value
|
|
|
|
|
const date1 = new Date(this.fault.time).getFullYear()
|
2024-08-19 09:14:39 +08:00
|
|
|
|
selectDeviceStats({ date: date1 }).then(res => {
|
|
|
|
|
this.faultStatsCount = res.data
|
|
|
|
|
this.createColumnEcharrt('echart5', res.data)
|
|
|
|
|
})
|
2024-08-19 08:43:40 +08:00
|
|
|
|
this.fault.open = false
|
|
|
|
|
},
|
|
|
|
|
// 选择-楼层负责人情况
|
|
|
|
|
selectFault (value, option) {
|
|
|
|
|
this.fault.type = value
|
|
|
|
|
},
|
|
|
|
|
clickFault (a, c) {
|
|
|
|
|
this.fault.time = c
|
2024-08-19 09:14:39 +08:00
|
|
|
|
selectDeviceStats({ date: c }).then(res => {
|
|
|
|
|
this.faultStatsCount = res.data
|
|
|
|
|
this.createColumnEcharrt('echart5', res.data)
|
|
|
|
|
})
|
2024-08-19 08:43:40 +08:00
|
|
|
|
},
|
|
|
|
|
|
2024-08-19 09:14:39 +08:00
|
|
|
|
// 故障类型 使用openChange事件控制日期下拉面板显示与收起
|
|
|
|
|
openFaultTypeChange (open) {
|
|
|
|
|
this.faultType.open = open
|
|
|
|
|
},
|
|
|
|
|
// 使用panelChange事件控制选中年份的方法
|
|
|
|
|
panelFaultTypeChange (value) {
|
|
|
|
|
// 接收panelChange返回的值
|
|
|
|
|
this.faultType.time = value
|
|
|
|
|
const date1 = new Date(this.faultType.time).getFullYear()
|
|
|
|
|
selectFailureStats({ date: date1 }).then(res => {
|
|
|
|
|
console.log(res)
|
|
|
|
|
this.selectFaultStatsCount = res.data
|
|
|
|
|
this.createEchartCake('echart6', {
|
|
|
|
|
bottom: 10,
|
|
|
|
|
left: 'right',
|
|
|
|
|
orient: 'vertical'
|
|
|
|
|
}, this.selectFaultStatsCount)
|
|
|
|
|
})
|
|
|
|
|
this.faultType.open = false
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
// 选择-楼层负责人情况
|
|
|
|
|
selectFaultType (value, option) {
|
|
|
|
|
this.faultType.type = value
|
|
|
|
|
},
|
|
|
|
|
clickFaultType (a, c) {
|
|
|
|
|
this.faultType.time = c
|
|
|
|
|
selectFailureStats({ date: c }).then(res => {
|
|
|
|
|
console.log(res)
|
|
|
|
|
this.selectFaultStatsCount = res.data
|
|
|
|
|
this.createEchartCake('echart6', {
|
|
|
|
|
bottom: 10,
|
|
|
|
|
left: 'right',
|
|
|
|
|
orient: 'vertical'
|
|
|
|
|
}, this.selectFaultStatsCount)
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
2024-08-19 08:43:40 +08:00
|
|
|
|
// 使用openChange事件控制日期下拉面板显示与收起
|
|
|
|
|
openDeviceTypeChange (open) {
|
|
|
|
|
this.deviceType.open = open
|
|
|
|
|
},
|
|
|
|
|
// 使用panelChange事件控制选中年份的方法
|
|
|
|
|
panelDeviceTypeChange (value) {
|
|
|
|
|
// 接收panelChange返回的值
|
|
|
|
|
this.deviceType.time = value
|
|
|
|
|
this.deviceType.open = false
|
|
|
|
|
const date1 = new Date(this.deviceType.time).getFullYear()
|
|
|
|
|
deviceTypeStats({ date: date1 }).then(res => {
|
|
|
|
|
this.loadData = res.rows
|
|
|
|
|
})
|
2024-08-18 14:03:26 +08:00
|
|
|
|
},
|
2024-08-19 08:43:40 +08:00
|
|
|
|
// 选择-楼层负责人情况
|
|
|
|
|
selectDeviceType (value, option) {
|
|
|
|
|
this.deviceType.type = value
|
2024-08-18 14:03:26 +08:00
|
|
|
|
},
|
2024-08-19 08:43:40 +08:00
|
|
|
|
clickDeviceType (a, c) {
|
|
|
|
|
console.log(c)
|
|
|
|
|
this.deviceType.time = c
|
|
|
|
|
deviceTypeStats({ date: c }).then(res => {
|
|
|
|
|
this.loadData = res.rows
|
|
|
|
|
})
|
2024-08-18 14:03:26 +08:00
|
|
|
|
},
|
2024-08-19 08:43:40 +08:00
|
|
|
|
|
2024-08-17 16:31:37 +08:00
|
|
|
|
adminStats () {
|
|
|
|
|
repairAdminStats().then(res => {
|
|
|
|
|
this.adminStatsCount = res.repairAdminStats
|
|
|
|
|
})
|
|
|
|
|
},
|
2024-08-18 14:03:26 +08:00
|
|
|
|
deviceStats () {
|
2024-08-19 08:43:40 +08:00
|
|
|
|
let date = this.formatDate()
|
|
|
|
|
deviceTypeStats({ date: date }).then(res => {
|
2024-08-18 14:03:26 +08:00
|
|
|
|
this.loadData = res.rows
|
|
|
|
|
})
|
|
|
|
|
},
|
2024-08-19 08:43:40 +08:00
|
|
|
|
faultStats () {
|
2024-08-19 09:14:39 +08:00
|
|
|
|
let date = this.formatDate()
|
|
|
|
|
|
|
|
|
|
selectDeviceStats({ date: date }).then(res => {
|
2024-08-19 08:43:40 +08:00
|
|
|
|
this.faultStatsCount = res.data
|
|
|
|
|
this.createColumnEcharrt('echart5', res.data)
|
|
|
|
|
})
|
|
|
|
|
},
|
2024-08-19 09:14:39 +08:00
|
|
|
|
selectFailureStats () {
|
|
|
|
|
let date = this.formatDate()
|
2024-08-19 08:43:40 +08:00
|
|
|
|
|
2024-08-19 09:14:39 +08:00
|
|
|
|
selectFailureStats({ date: date }).then(res => {
|
|
|
|
|
console.log(res)
|
|
|
|
|
this.selectFaultStatsCount = res.data
|
|
|
|
|
this.createEchartCake('echart6', {
|
|
|
|
|
bottom: 10,
|
|
|
|
|
left: 'right',
|
|
|
|
|
orient: 'vertical'
|
|
|
|
|
}, this.selectFaultStatsCount)
|
|
|
|
|
})
|
|
|
|
|
},
|
2024-08-17 16:31:37 +08:00
|
|
|
|
getYearCount () {
|
|
|
|
|
this.type = 'year'
|
|
|
|
|
repairStats().then(res => {
|
|
|
|
|
this.repairStatsCount = res.currentYear.stats
|
|
|
|
|
this.finishCount = res.currentYear.wc
|
|
|
|
|
this.timeout = res.currentYear.timeout
|
|
|
|
|
this.pj = res.currentYear.pj
|
|
|
|
|
this.createEchartCake('echart1', {
|
|
|
|
|
bottom: 10,
|
|
|
|
|
left: 'right',
|
|
|
|
|
orient: 'vertical'
|
|
|
|
|
}, this.finishCount)
|
|
|
|
|
this.createEchartCake('echart2', {
|
|
|
|
|
bottom: 10,
|
|
|
|
|
left: 'right',
|
|
|
|
|
orient: 'vertical'
|
|
|
|
|
}, this.timeout)
|
|
|
|
|
this.createEchartCake('echart3', {
|
|
|
|
|
bottom: 10,
|
|
|
|
|
left: 'right',
|
|
|
|
|
orient: 'vertical'
|
|
|
|
|
}, this.pj)
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
repairCount () {
|
|
|
|
|
repairStats().then(res => {
|
|
|
|
|
this.type = 'month'
|
|
|
|
|
|
|
|
|
|
console.log(res.currentMonth.wc)
|
|
|
|
|
this.repairStatsCount = res.currentMonth.stats
|
|
|
|
|
this.finishCount = res.currentMonth.wc
|
|
|
|
|
this.timeout = res.currentMonth.timeout
|
|
|
|
|
this.pj = res.currentMonth.pj
|
|
|
|
|
this.createEchartCake('echart1', {
|
|
|
|
|
bottom: 10,
|
|
|
|
|
left: 'right',
|
|
|
|
|
orient: 'vertical'
|
|
|
|
|
}, this.finishCount)
|
|
|
|
|
this.createEchartCake('echart2', {
|
|
|
|
|
bottom: 10,
|
|
|
|
|
left: 'right',
|
|
|
|
|
orient: 'vertical'
|
|
|
|
|
}, this.timeout)
|
|
|
|
|
this.createEchartCake('echart3', {
|
|
|
|
|
bottom: 10,
|
|
|
|
|
left: 'right',
|
|
|
|
|
orient: 'vertical'
|
|
|
|
|
}, this.pj)
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
// 楼层负责人情况
|
|
|
|
|
getfloorStats () {
|
2024-08-19 08:43:40 +08:00
|
|
|
|
let date = this.formatDate()
|
|
|
|
|
floorStats({ date: date }).then(res => {
|
|
|
|
|
this.createEchartLine('echart4', res.data)
|
2024-08-17 16:31:37 +08:00
|
|
|
|
})
|
|
|
|
|
},
|
2024-08-19 08:43:40 +08:00
|
|
|
|
formatDate () {
|
|
|
|
|
let date = new Date()
|
|
|
|
|
let myyear = date.getFullYear()
|
|
|
|
|
let mymonth = date.getMonth() + 1
|
|
|
|
|
mymonth < 10 ? mymonth = '0' + mymonth : mymonth
|
|
|
|
|
return `${myyear}-${mymonth}`
|
|
|
|
|
},
|
2024-08-17 16:31:37 +08:00
|
|
|
|
|
2024-08-09 11:02:17 +08:00
|
|
|
|
onSelectChange (selectedRowKeys, selectedRows) {
|
|
|
|
|
this.selectedRowKeys = selectedRowKeys
|
|
|
|
|
this.selectedRows = selectedRows
|
|
|
|
|
},
|
2024-08-17 16:31:37 +08:00
|
|
|
|
createEchartCake (id, legend, data) {
|
|
|
|
|
console.log(data)
|
2024-08-08 17:18:00 +08:00
|
|
|
|
// 基于准备好的dom,初始化echarts实例
|
|
|
|
|
let myChart = echarts.init(document.getElementById(id))
|
|
|
|
|
// 指定图表的配置项和数据
|
|
|
|
|
let option = {
|
|
|
|
|
tooltip: {
|
|
|
|
|
trigger: 'item'
|
|
|
|
|
},
|
2024-08-09 10:57:16 +08:00
|
|
|
|
legend: legend,
|
2024-08-08 17:18:00 +08:00
|
|
|
|
series: [
|
|
|
|
|
{
|
2024-08-17 16:31:37 +08:00
|
|
|
|
name: '完成率',
|
2024-08-08 17:18:00 +08:00
|
|
|
|
type: 'pie',
|
|
|
|
|
radius: ['40%', '70%'],
|
|
|
|
|
avoidLabelOverlap: false,
|
|
|
|
|
itemStyle: {
|
|
|
|
|
borderRadius: 2,
|
|
|
|
|
borderColor: '#fff',
|
|
|
|
|
borderWidth: 2
|
|
|
|
|
},
|
|
|
|
|
label: {
|
|
|
|
|
show: false,
|
|
|
|
|
position: 'center'
|
|
|
|
|
},
|
|
|
|
|
emphasis: {
|
|
|
|
|
label: {
|
|
|
|
|
show: true,
|
|
|
|
|
fontSize: 40,
|
|
|
|
|
fontWeight: 'bold'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
labelLine: {
|
|
|
|
|
show: false
|
|
|
|
|
},
|
2024-08-17 16:31:37 +08:00
|
|
|
|
data: data
|
2024-08-08 17:18:00 +08:00
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
// 使用刚指定的配置项和数据显示图表。
|
|
|
|
|
myChart.setOption(option)
|
2024-08-19 08:43:40 +08:00
|
|
|
|
}
|
|
|
|
|
,
|
|
|
|
|
createEchartLine (id, data) {
|
2024-08-08 17:36:38 +08:00
|
|
|
|
// 基于准备好的dom,初始化echarts实例
|
|
|
|
|
let myChart = echarts.init(document.getElementById(id))
|
|
|
|
|
let option = {
|
|
|
|
|
tooltip: {
|
|
|
|
|
trigger: 'axis',
|
|
|
|
|
axisPointer: {
|
|
|
|
|
type: 'shadow'
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
legend: {},
|
|
|
|
|
grid: {
|
|
|
|
|
left: '3%',
|
|
|
|
|
right: '4%',
|
|
|
|
|
bottom: '3%',
|
|
|
|
|
containLabel: true
|
|
|
|
|
},
|
|
|
|
|
xAxis: {
|
|
|
|
|
type: 'value',
|
|
|
|
|
boundaryGap: [0, 0.01]
|
|
|
|
|
},
|
|
|
|
|
yAxis: {
|
|
|
|
|
type: 'category',
|
2024-08-19 08:43:40 +08:00
|
|
|
|
data: data.y
|
2024-08-08 17:36:38 +08:00
|
|
|
|
},
|
|
|
|
|
series: [
|
|
|
|
|
{
|
2024-08-19 08:43:40 +08:00
|
|
|
|
name: '故障数量',
|
2024-08-08 17:36:38 +08:00
|
|
|
|
type: 'bar',
|
2024-08-19 08:43:40 +08:00
|
|
|
|
data: data.total
|
2024-08-08 17:36:38 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
2024-08-19 08:43:40 +08:00
|
|
|
|
name: '数量类型',
|
2024-08-08 17:36:38 +08:00
|
|
|
|
type: 'bar',
|
2024-08-19 08:43:40 +08:00
|
|
|
|
data: data.finish
|
2024-08-08 17:36:38 +08:00
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
// 使用刚指定的配置项和数据显示图表。
|
|
|
|
|
myChart.setOption(option)
|
2024-08-19 08:43:40 +08:00
|
|
|
|
}
|
|
|
|
|
,
|
|
|
|
|
createColumnEcharrt (id, data) {
|
|
|
|
|
data.x = data.x.map(item => {
|
|
|
|
|
if (item && item.length > 4) {
|
|
|
|
|
item = item.substring(0, 4) + '..'
|
|
|
|
|
}
|
|
|
|
|
return item
|
|
|
|
|
})
|
|
|
|
|
|
2024-08-09 10:57:16 +08:00
|
|
|
|
// 基于准备好的dom,初始化echarts实例
|
|
|
|
|
let myChart = echarts.init(document.getElementById(id))
|
|
|
|
|
// There should not be negative values in rawData
|
|
|
|
|
const rawData = [
|
2024-08-19 08:43:40 +08:00
|
|
|
|
data.total,
|
|
|
|
|
data.finish
|
2024-08-09 10:57:16 +08:00
|
|
|
|
]
|
|
|
|
|
const totalData = []
|
|
|
|
|
for (let i = 0; i < rawData[0].length; ++i) {
|
|
|
|
|
let sum = 0
|
|
|
|
|
for (let j = 0; j < rawData.length; ++j) {
|
|
|
|
|
sum += rawData[j][i]
|
|
|
|
|
}
|
|
|
|
|
totalData.push(sum)
|
|
|
|
|
}
|
|
|
|
|
const grid = {
|
|
|
|
|
left: 100,
|
|
|
|
|
right: 100,
|
|
|
|
|
top: 50,
|
|
|
|
|
bottom: 50
|
|
|
|
|
}
|
|
|
|
|
const series = [
|
2024-08-19 08:43:40 +08:00
|
|
|
|
'未完成',
|
|
|
|
|
'已完成'
|
2024-08-09 10:57:16 +08:00
|
|
|
|
].map((name, sid) => {
|
|
|
|
|
return {
|
|
|
|
|
name,
|
|
|
|
|
type: 'bar',
|
|
|
|
|
stack: 'total',
|
|
|
|
|
barWidth: '60%',
|
|
|
|
|
label: {
|
|
|
|
|
show: true,
|
|
|
|
|
formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
|
|
|
|
|
},
|
|
|
|
|
data: rawData[sid].map((d, did) =>
|
|
|
|
|
totalData[did] <= 0 ? 0 : d / totalData[did]
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
let option = {
|
|
|
|
|
legend: {
|
|
|
|
|
selectedMode: false
|
|
|
|
|
},
|
|
|
|
|
grid,
|
|
|
|
|
yAxis: {
|
|
|
|
|
type: 'value'
|
|
|
|
|
},
|
|
|
|
|
xAxis: {
|
|
|
|
|
type: 'category',
|
2024-08-19 08:43:40 +08:00
|
|
|
|
data: data.x
|
2024-08-09 10:57:16 +08:00
|
|
|
|
},
|
|
|
|
|
series
|
|
|
|
|
}
|
|
|
|
|
// 使用刚指定的配置项和数据显示图表。
|
|
|
|
|
myChart.setOption(option)
|
2024-08-08 17:18:00 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2024-08-08 14:32:22 +08:00
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
2024-08-08 17:18:00 +08:00
|
|
|
|
* {
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
word-break: break-all;
|
|
|
|
|
line-height: 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.topHeadView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-around;
|
|
|
|
|
align-items: center;
|
|
|
|
|
padding: 40px 0;
|
|
|
|
|
background: #4093f7;
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.topHeadView .itemView {
|
|
|
|
|
position: relative;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.topHeadView .itemView .imgView {
|
|
|
|
|
width: 80px;
|
|
|
|
|
height: 80px;
|
|
|
|
|
background: white;
|
|
|
|
|
border-radius: 80px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.topHeadView .itemView .label {
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
color: white;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.topHeadView .itemView .num {
|
|
|
|
|
position: absolute;
|
|
|
|
|
left: calc(100% + 10px);
|
|
|
|
|
top: 50%;
|
|
|
|
|
transform: translateY(-100%);
|
|
|
|
|
width: 90px;
|
|
|
|
|
color: white;
|
|
|
|
|
font-size: 28px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView {
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
padding: 0 20px;
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
background: white;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView .headView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView .headView .titleView {
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #4093f7;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
padding: 14px 30px;
|
|
|
|
|
border-bottom: 2px solid #4093f7;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView .headView .typeView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView .headView .typeView .type {
|
|
|
|
|
margin-right: 40px;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView .headView .typeView .activity {
|
|
|
|
|
color: #4093f7;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView .contentView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
padding: 30px 50px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView .contentView .itemView {
|
|
|
|
|
flex: 1;
|
|
|
|
|
border: 1px solid #4093f7;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
padding: 14px 20px;
|
|
|
|
|
margin-left: 20px;
|
|
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView .contentView .itemView:first-of-type {
|
|
|
|
|
margin-left: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView .contentView .itemView .label {
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
color: #4093f7;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.caseStatisticsView .contentView .itemView .value {
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.statusView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: flex-start;
|
|
|
|
|
align-items: center;
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.statusView .caseStatusView, .statusView .evaluateView {
|
|
|
|
|
background: white;
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.statusView .caseStatusView {
|
|
|
|
|
flex: 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.statusView .evaluateView {
|
|
|
|
|
flex: 1;
|
|
|
|
|
margin-left: 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.statusView .caseStatusView .headView, .statusView .evaluateView .headView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
padding: 0 20px;
|
|
|
|
|
height: 40px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.statusView .caseStatusView .headView .titleView, .statusView .evaluateView .headView .titleView {
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: gray;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.statusView .caseStatusView .headView .typeView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.statusView .caseStatusView .headView .typeView .type {
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
color: #4093f7;
|
|
|
|
|
margin-left: 20px;
|
|
|
|
|
padding: 4px 8px;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.statusView .caseStatusView .headView .typeView .type.activity {
|
|
|
|
|
border: 1px solid #4093f7;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.statusView .caseStatusView .contentView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: flex-start;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.statusView .caseStatusView .contentView .circularView {
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.statusView .caseStatusView .contentView .centerLine {
|
|
|
|
|
width: 1px;
|
|
|
|
|
height: 200px;
|
|
|
|
|
background: rgba(0, 0, 0, 0.1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.statusView .evaluateView .contentView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.faultView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: flex-start;
|
2024-08-09 10:57:16 +08:00
|
|
|
|
align-items: flex-start;
|
2024-08-08 17:18:00 +08:00
|
|
|
|
margin-top: 10px;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-08 17:36:38 +08:00
|
|
|
|
.faultView .floorView {
|
2024-08-08 17:18:00 +08:00
|
|
|
|
background: white;
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
width: 600px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.faultView .floorView .headView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
padding: 0 20px;
|
|
|
|
|
height: 40px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.faultView .floorView .headView .titleView {
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: gray;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.faultView .floorView .headView .conditionView {
|
2024-08-08 17:36:38 +08:00
|
|
|
|
display: flex;
|
2024-08-08 17:18:00 +08:00
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-08 17:36:38 +08:00
|
|
|
|
.faultView .floorView .contentView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
height: 700px;
|
|
|
|
|
}
|
2024-08-08 14:32:22 +08:00
|
|
|
|
|
2024-08-09 10:57:16 +08:00
|
|
|
|
.rightView {
|
|
|
|
|
flex: 1;
|
|
|
|
|
margin-left: 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.rightView .blockView {
|
|
|
|
|
background: white;
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.rightView .blockView:last-of-type {
|
|
|
|
|
margin-top: 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.rightView .blockView .headView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
padding: 0 20px;
|
|
|
|
|
height: 40px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.rightView .blockView .headView .titleView {
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: gray;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.rightView .blockView .headView .conditionView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.rightView .blockView .contentView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.tableView {
|
|
|
|
|
background: white;
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
margin-top: 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.tableView .headView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
padding: 0 20px;
|
|
|
|
|
height: 40px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.tableView .headView .titleView {
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: gray;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.tableView .headView .conditionView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.tableView .contentView {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-08 14:32:22 +08:00
|
|
|
|
</style>
|