1328 lines
33 KiB
Vue

<template>
<view class="content">
<!-- <headers class="fixedheader" :showBack="true">
<view class="headerName">
质量管理
</view>
</headers> -->
<view class="count-statistics">
<view class="top-title">
<view class="line"></view>
<text>检查统计</text>
<view class="right-date">
<uni-datetime-picker v-model="timeCombo.timeRange1" type="daterange" rangeSeparator="至"
@change="e => confirmTimeRange(e,1)" />
</view>
</view>
<view class="bottom-content">
<div class="count-type-list" v-for="(item,index) in typeList" :key="index"
:style="{backgroundColor: item.backgroundColor}">
<text :style="{color: item.color}">{{item.value}}</text>
<text>{{item.name}}</text>
</div>
</view>
</view>
<view class="count-statistics">
<view class="top-title">
<view class="line"></view>
<text>分包单位质量隐患统计</text>
<view class="right-date">
<uni-datetime-picker v-model="timeCombo.timeRange2" type="daterange" rangeSeparator="至"
@change="e => confirmTimeRange(e,2)" />
</view>
</view>
<view class="count-content">
<div class="chart-content">
<qiun-data-charts type="column" :ontouch="true" :opts="opts" :chartData="chartData" v-if="chartData.categories && chartData.categories.length > 0"/>
<view class="noData" v-else>
<image class="noDataImg" src="../../../static/noData.png"></image>
<view>暂无数据</view>
</view>
</div>
</view>
</view>
<view class="count-statistics">
<view class="top-title">
<view class="line"></view>
<text>风险统计</text>
</view>
<view class="risk-content">
<view class="risk-count">
<view class="count-title">{{riskDataObj.dangerNum || 0}}个</view>
<view class="risk-all-title">风险总数</view>
</view>
<view class="risk-type">
<view class="risk-type-item" v-for="(item,index) in riskTypeList" :key="index"
:style="{backgroundColor: item.backgroundColor}">
<text>{{item.name}}</text>
<view>{{item.value}}</view>
</view>
</view>
</view>
</view>
<view class="count-statistics">
<view class="top-title">
<view class="line"></view>
<text>隐患分析</text>
</view>
<view class="hidden-content">
<view class="chart-hidden-content">
<qiun-data-charts type="radar" :opts="radarOpts" :chartData="radarChartData" v-if="radarChartData.categories"/>
<view class="noData" v-else>
<image class="noDataImg" src="../../../static/noData.png"></image>
<view>暂无数据</view>
</view>
<view class="chart-tip-legend">
<view class="color-zfx"></view>
<text>质量检查</text>
</view>
</view>
</view>
</view>
<view class="count-statistics">
<view class="top-title">
<view class="line"></view>
<text>风险走势图
<!-- <text class="subTitle">(44%↓比上个月(4月))</text> -->
</text>
<!-- <view class="right-date">
<uni-datetime-picker v-model="timeCombo.timeRange3" type="daterange" rangeSeparator="至"
@change="e => confirmTimeRange(e,3)" />
</view> -->
</view>
<view class="trend-content">
<view class="chart-trend-content">
<qiun-data-charts type="line" :opts="lineOpts" :chartData="lineChartData" :ontouch="true" v-if="lineChartData.categories"/>
<view class="noData" v-else>
<image class="noDataImg" src="../../../static/noData.png"></image>
<view>暂无数据</view>
</view>
</view>
</view>
</view>
<view class="count-statistics">
<view class="top-title">
<view class="line"></view>
<text>隐患数量展示</text>
<view class="right-date">
<uni-datetime-picker v-model="timeCombo.timeRange4" type="daterange" rangeSeparator="至"
@change="e => confirmTimeRange(e,4)" />
</view>
</view>
<view class="hidden-sum-content">
<view class="title-one">隐患超期未整改</view>
<view class="title-two" v-for="(item,index) in noChangeTypeList" :key="'隐患超期未整改' + index" v-show="index<2">{{item.name}}未整改隐患{{item.value}}个,占比{{item.percent}}%</view>
<view class="hidden-chart-content">
<view class="hidden-chart-left">
<view class="left-legend-diy">
<view class="diy-item" v-for="(item,index) in noChangeTypeList" :key="index">
<view class="zfx" :style="{backgroundColor: item.backgroundColor}"></view>
<text>{{item.name}}</text>
<text>{{item.value}}</text>
</view>
</view>
</view>
<view class="hidden-chart-right">
<qiun-data-charts type="arcbar" :opts="noChangeOpts" :chartData="noChangeChartData" v-if="noChangeChartData.series"/>
<view class="noData" v-else>
<image class="noDataImg" src="../../../static/noData.png"></image>
<view>暂无数据</view>
</view>
</view>
</view>
<view class="divider-line"></view>
<view class="title-one">未销项隐患</view>
<view class="title-two" v-for="(item,index) in noDestroyTypeList" :key="'未销项隐患' + index" v-show="index<2">{{item.name}}未销项{{item.value}}个,占比{{item.percent}}%</view>
<view class="hidden-chart-content">
<view class="hidden-chart-left">
<view class="left-legend-diy">
<view class="diy-item" v-for="(item,index) in noDestroyTypeList" :key="index">
<view class="zfx" :style="{backgroundColor: item.backgroundColor}"></view>
<text>{{item.name}}</text>
<text>{{item.value}}</text>
</view>
</view>
</view>
<view class="hidden-chart-right">
<qiun-data-charts type="arcbar" :opts="noDestroyOpts" :chartData="noDestroyChartData" v-if="noDestroyChartData.series"/>
<view class="noData" v-else>
<image class="noDataImg" src="../../../static/noData.png"></image>
<view>暂无数据</view>
</view>
</view>
</view>
</view>
</view>
<view class="count-statistics">
<view class="top-title">
<view class="line"></view>
<text>责任区域问题统计 TOP10</text>
<view class="right-option">
<view class="option-item" v-for="(item,index) in optionList" :key="index"
:style="{backgroundColor: checkIndex == index?'#268DFF':'#fff'}" @click="optionClick(index)">
{{item.name}}
</view>
</view>
</view>
<view class="question-content">
<view class="question-content">
<view style="width:100%;"><l-echart ref="chartRef" @finished="init" :is-disable-scroll="true"></l-echart></view>
<!-- <qiun-data-charts type="bar" :opts="questionOpts" :chartData="questionChartData" v-show="questionChartData.categories"/>
<view class="noData" v-show="!questionChartData.categories">
<image class="noDataImg" src="../../../static/noData.png"></image>
<view>暂无数据</view>
</view> -->
</view>
<!-- <qiun-data-charts type="bar" :opts="questionOpts" :chartData="questionChartData" v-show="questionChartData.categories"/>
<view class="noData" v-show="!questionChartData.categories">
<image class="noDataImg" src="../../../static/noData.png"></image>
<view>暂无数据</view>
</view> -->
</view>
</view>
</view>
</template>
<script>
import headers from "../../../components/headers/headers.vue"
import * as echarts from '@/uni_modules/lime-echart/static/echarts.min'
export default {
name: "standardScheduleNewsHome",
data() {
return {
questionOpts: {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
legend: {
show: false
},
grid: {
left: '0%',
right: 20,
bottom: '0%',
top: 20,
containLabel: true
},
xAxis: {
type: 'value',
boundaryGap: [0, 0.01]
},
yAxis: {
type: 'category',
data: ['Brazil', 'Indonesia', 'USA', 'India', 'China', 'World'],
axisTick: {
show: false
}
},
dataZoom: [{
id: 'dataZoomY',
type: 'inside',
yAxisIndex: [0],
brushSelect: false,
zoomOnMouseWheel: false,
moveOnMouseWheel: true, // 开启滚轮平移
moveOnMouseMove: true, // 鼠标移动能触发数据窗口平移
preventDefaultMouseMove: false,
start: 100,
startValue: 0,
endValue: 3,
// 滚动条高度
width: 8,
// 滚动条显示位置
// height: "80%",
// 距离右边
right: 3,
// 控制手柄的尺寸
handleSize: 0,
filterMode: 'empty',
top: "top",
}, ],
series: [{
name: '2011',
type: 'bar',
itemStyle: {
color: "#278EFF"
},
label: {
show: true, //开启显示
position: 'right', //在上方显示
formatter: function(val) {
if (val.value !== 0) {
return val.value;
} else {
return '';
}
},
textStyle: { //数值样式
color: '#1a1a1a',
// fontSize: 12
}
},
barWidth: '40',
data: [18203, 23489, 29034, 104970, 131744, 630230]
}]
},
// questionOpts: {
// color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
// "#ea7ccc"
// ],
// padding: [15, 30, 0, 5],
// enableScroll: false,
// legend: {
// show: false
// },
// xAxis: {
// boundaryGap: "justify",
// disableGrid: false,
// min: 0,
// axisLine: false
// },
// yAxis: {},
// extra: {
// bar: {
// type: "stack",
// width: 30,
// meterBorde: 1,
// meterFillColor: "#FFFFFF",
// activeBgColor: "#000000",
// activeBgOpacity: 0.08,
// categoryGap: 2
// }
// }
// },
questionChartData: {},
checkIndex: 0,
optionList: [{
name: "全部",
value: 1
},
{
name: "重大",
value: 2
},
{
name: "较大",
value: 3
},
{
name: "一般",
value: 4
},
{
name: "低",
value: 5
}
],
noDestroyTypeList: [{
name: "重大隐患",
backgroundColor: "#FF0303",
value: 0,
percent: 0
},
{
name: "严重隐患",
backgroundColor: "#FF9901",
value: 0,
percent: 0
},
{
name: "一般隐患",
backgroundColor: "#FFE500",
value: 0,
percent: 0
},
{
name: "其他隐患",
backgroundColor: "#3A3AE7",
value: 0,
percent: 0
},
],
noDestroyChartData: {},
noDestroyOpts: {
color: ["#3A3AE7", "#FFE500", "#FF9901", "#FF0303"],
padding: undefined,
title: {
name: "隐患未销项",
fontSize: 12,
color: "#000000"
},
subtitle: {
name: "9个",
fontSize: 22,
color: "#000000"
},
extra: {
arcbar: {
type: "circle",
width: 12,
backgroundColor: "#E9E9E9",
startAngle: 1.5,
endAngle: 0.25,
gap: 2
}
}
},
noChangeTypeList: [{
name: "重大延期",
backgroundColor: "#FF0303",
value: 0,
percent: 0
},
{
name: "严重隐患超期",
backgroundColor: "#FF9901",
value: 0,
percent: 0
},
{
name: "一般隐患超期",
backgroundColor: "#FFE500",
value: 0,
percent: 0
},
{
name: "其他隐患超期",
backgroundColor: "#3A3AE7",
value: 0,
percent: 0
},
],
noChangeChartData: {},
noChangeOpts: {
color: ["#3A3AE7", "#FFE500", "#FF9901", "#FF0303"],
padding: undefined,
title: {
name: "超期未整改",
fontSize: 12,
color: "#000000"
},
subtitle: {
name: "7个",
fontSize: 22,
color: "#000000"
},
extra: {
arcbar: {
type: "circle",
width: 12,
backgroundColor: "#E9E9E9",
startAngle: 1.5,
endAngle: 0.25,
gap: 2
}
}
},
lineChartData: {},
lineOpts: {
color: ["#5EE4DA", "#FF0303", "#FF9A04", "#FFE603", "#3C3CE8"],
padding: [-10,0,0,0],
enableScroll: true,
legend: {
position: "top",
float: "left",
fontSize: 11,
margin: 20
},
xAxis: {
disableGrid: true,
itemCount: 6,
scrollShow: true
// rotateLabel: true,
// rotateAngle: 90
},
yAxis: {
gridType: "dash",
dashLength: 2
},
extra: {
line: {
type: "straight",
width: 2,
activeType: "hollow"
}
}
},
radarChartData: {},
//您可以通过修改 config-ucharts.js 文件中下标为 ['radar'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
radarOpts: {
color: ["#5470C6"
],
padding: [5, 5, 5, 5],
dataLabel: false,
enableScroll: false,
legend: {
show: false,
position: "right",
lineHeight: 25
},
extra: {
radar: {
gridType: "radar",
gridColor: "#CCCCCC",
gridCount: 3,
opacity: 0.2,
max: 10,
labelShow: true,
border: true,
axisLabel: true
}
}
},
chartData: {},
//您可以通过修改 config-ucharts.js 文件中下标为 ['column'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
opts: {
color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
"#ea7ccc"
],
padding: [15, 15, 0, 5],
enableScroll: true,
legend: {
show: false
},
xAxis: {
disableGrid: true,
itemCount: 5,
scrollShow: true
},
yAxis: {
data: [{
min: 0
}]
},
extra: {
column: {
type: "group",
width: 30,
activeBgColor: "#000000",
activeBgOpacity: 0.08
}
}
},
typeList: [{
name: "检查总数",
value: 0,
color: "#70CEC8",
backgroundColor: "#ECF8F7"
},
{
name: "隐患总数",
value: 0,
color: "#EAC131",
backgroundColor: "#FCF8E8"
},
{
name: "重大隐患",
value: 0,
color: "#FC7D81",
backgroundColor: "#FFEDED"
},
{
name: "超期未闭合",
value: 0,
color: "#B859A3",
backgroundColor: "#E6C3DE"
}
],
riskTypeList: [{
name: "重大风险",
value: 0,
backgroundColor: "#FF0000"
},
{
name: "较大风险",
value: 0,
backgroundColor: "#FF9901"
},
{
name: "一般风险",
value: 0,
backgroundColor: "#FFE500"
},
{
name: "低风险",
value: 0,
backgroundColor: "#3A3AE7"
}
],
timeCombo: {
timeRange1: [],
timeRange2: [],
timeRange3: [],
timeRange4: []
},
riskDataObj: {}
};
},
onLoad() {
// for(let i in this.timeCombo){
// this.timeCombo[i] = [this.$formatDates(new Date().getTime(), 'yyyy-MM-dd'), this.$formatDates(new Date()
// .getTime(), 'yyyy-MM-dd')]
// }
this.getStatisticsNumFn();
this.getStatsByEnterpriseFn();
this.getRiskStatisticsFn();
this.getHiddenAnalysisFn();
this.getRiskTrendFn();
this.getNoChangeHiddenNumFn();
this.getNoDestroyNumFn();
this.getRecordRegionNumFn();
},
methods: {
async init() {
// chart 图表实例不能存在data里
const chart = await this.$refs.chartRef.init(echarts);
chart.setOption(this.questionOpts)
},
// 责任区域问题统计TOP10
getRecordRegionNumFn() {
let that = this
let requestData = {
projectSn: uni.getStorageSync("dept")
}
if (this.checkIndex != 0) {
requestData.enumType = this.checkIndex;
}
this.sendRequest({
url: "xmgl/qualityInspectionRecord/countQualityInspectionRecordRegion",
data: requestData,
method: "post",
success(res) {
let responseData = res.result;
let xArr = [];
let yArr = [];
responseData.map(item => {
xArr.push(+item.y)
if (item.x && item.x.length > 5) {
yArr.push(item.x.substring(0, 6)) + '...'
} else if (item.x && (item.x.length < 5 || item.x.length == 5)) {
yArr.push(item.x)
}
})
that.questionOpts.yAxis.data = yArr;
that.questionOpts.series[0].data = xArr;
console.log(that.questionOpts, 777888)
that.$refs.chartRef.setOption(that.questionOpts)
// console.log(res, "责任区域问题统计")
// let responseData = res.result;
// let xArr = [];
// let yArr = [];
// responseData.map(item => {
// xArr.push(+item.y)
// if(item.x && item.x.length > 5){
// yArr.push(item.x.substring(0,6)) + '...'
// } else if(item.x && (item.x.length < 5 || item.x.length == 5)){
// yArr.push(item.x)
// }
// })
// let chartObj = {
// categories: yArr,
// series: [{
// name: "数据值",
// data: xArr
// }
// ]
// };
// that.questionChartData = JSON.parse(JSON.stringify(chartObj));
// setTimeout(function() {
// that.$forceUpdate();
// }, 500)
}
})
},
// 隐患数量未销项展示
getNoDestroyNumFn() {
let that = this
let requestData = {
projectSn: uni.getStorageSync("dept"),
isNotQualified: 1
}
if(this.timeCombo.timeRange4 && this.timeCombo.timeRange4){
requestData.inspectStartTime = this.timeCombo.timeRange4[0]
requestData.inspectEndTime = this.timeCombo.timeRange4[1]
}
this.sendRequest({
url: "xmgl/qualityInspectionRecord/countDangerLevel",
data: requestData,
method: "post",
success(res) {
console.log(res, "隐患数量未销项展示")
let responseData = res.result;
that.noDestroyOpts.subtitle.name = responseData.count + "个"
let dataArr = [];
responseData.data.map((item,index) => {
dataArr.push({
name: item.name,
data: Number(item.percent) / 100
})
that.noDestroyTypeList[index].name = item.name
that.noDestroyTypeList[index].value = +item.count
that.noDestroyTypeList[index].percent = +item.percent
})
let chartObj = {
series: dataArr
};
that.noDestroyChartData = JSON.parse(JSON.stringify(chartObj));
}
})
},
// 隐患数量超期未整改展示
getNoChangeHiddenNumFn() {
let that = this
let requestData = {
projectSn: uni.getStorageSync("dept"),
isOverdueRectification: 1
}
if(this.timeCombo.timeRange4 && this.timeCombo.timeRange4){
requestData.inspectStartTime = this.timeCombo.timeRange4[0]
requestData.inspectEndTime = this.timeCombo.timeRange4[1]
}
this.sendRequest({
url: "xmgl/qualityInspectionRecord/countDangerLevel",
data: requestData,
method: "post",
success(res) {
console.log(res, "隐患数量超期未整改展示")
let responseData = res.result;
that.noChangeOpts.subtitle.name = responseData.count + "个"
let dataArr = [];
responseData.data.map((item,index) => {
dataArr.push({
name: item.name,
data: Number(item.percent) / 100
})
that.noChangeTypeList[index].name = item.name
that.noChangeTypeList[index].value = +item.count
that.noChangeTypeList[index].percent = +item.percent
})
let chartObj = {
series: dataArr
};
that.noChangeChartData = JSON.parse(JSON.stringify(chartObj));
}
})
},
// 风险走势图
getRiskTrendFn() {
let that = this
let requestData = {
projectSn: uni.getStorageSync("dept")
}
this.sendRequest({
url: "xmgl/qualityInspectionRecord/riskChart",
data: requestData,
method: "post",
success(res) {
console.log(res, "风险走势图")
let responseData = res.result;
let categoriesArr = [];
let allArr = [];
let oneArr = [];
let twoArr = [];
let threeArr = [];
let fourArr = [];
responseData.map(item => {
categoriesArr.push(item.yearMonth)
allArr.push(+item.dangerNum)
oneArr.push(+item.greatFaultLevelNum)
twoArr.push(+item.largerRiskNum)
threeArr.push(+item.generalRiskNum)
fourArr.push(+item.lowRiskNum)
})
let chartObj = {
categories: categoriesArr,
series: [{
name: "全部",
data: allArr
},
{
name: "重大风险",
data: oneArr
},
{
name: "较大风险",
data: twoArr
},
{
name: "一般风险",
data: threeArr
},
{
name: "低风险",
data: fourArr
}
]
};
that.lineChartData = JSON.parse(JSON.stringify(chartObj));
}
})
},
// 隐患分析
getHiddenAnalysisFn() {
let that = this
let requestData = {
projectSn: uni.getStorageSync("dept")
}
this.sendRequest({
url: "xmgl/qualityInspectionRecord/selectQualityStatisticsNum",
data: requestData,
method: "post",
success(res) {
console.log(res, "获取隐患分析")
let responseData = res.result;
//模拟服务器返回数据,如果数据格式和标准格式不同,需自行按下面的格式拼接
let chartObj = {
categories: ["排查记录", "待核验", "待复查", "待整改", "超期未关闭", "未闭合"],
series: [{
name: "数量",
data: [responseData.investigateNum, responseData.verificationNum, responseData.reviewNum, responseData.rectificationNum, responseData.overdueNotCloseNum, responseData.notCloseNum]
}]
};
that.radarOpts.extra.radar.max = +responseData.totalNum;
that.radarChartData = JSON.parse(JSON.stringify(chartObj));
}
})
},
// 风险统计
getRiskStatisticsFn() {
let that = this
let requestData = {
projectSn: uni.getStorageSync("dept")
}
this.sendRequest({
url: "xmgl/qualityInspectionRecord/selectQualityStatisticsNum",
data: requestData,
method: "post",
success(res) {
console.log(res, "获取风险统计")
let responseData = res.result;
that.riskDataObj = responseData;
if(res.result){
that.riskTypeList[0].value = responseData.greatFaultLevelNum
that.riskTypeList[1].value = responseData.largerRiskNum
that.riskTypeList[2].value = responseData.generalRiskNum
that.riskTypeList[3].value = responseData.lowRiskNum
}
}
})
},
// 分包单位质量隐患统计
getStatsByEnterpriseFn() {
let that = this
let requestData = {
projectSn: uni.getStorageSync("dept"),
pageSize: -1
}
if(this.timeCombo.timeRange2 && this.timeCombo.timeRange2){
requestData.inspectTime_begin = this.timeCombo.timeRange2[0]
requestData.inspectTime_end = this.timeCombo.timeRange2[1]
}
this.sendRequest({
url: "xmgl/qualityInspectionRecord/statsByEnterprise",
data: requestData,
method: "post",
success(res) {
console.log(res, "获取分包单位质量隐患统计")
let responseData = res.result.records;
let categoriesArr = [];
let dataArr = [];
responseData.map(item => {
if(item.enterpriseName.length == 4){
categoriesArr.push(item.enterpriseName)
} else {
categoriesArr.push(item.enterpriseName.substring(0,4) + '...')
}
dataArr.push(item.totalNum)
})
let chartObj = {
categories: categoriesArr,
series: [{
name: "总数",
data: dataArr
}]
};
that.chartData = JSON.parse(JSON.stringify(chartObj));
}
})
},
// 检查统计
getStatisticsNumFn() {
let that = this
let requestData = {
projectSn: uni.getStorageSync("dept")
}
if(this.timeCombo.timeRange1 && this.timeCombo.timeRange1){
requestData.inspectStartTime = this.timeCombo.timeRange1[0]
requestData.inspectEndTime = this.timeCombo.timeRange1[1]
}
// 获取检查统计
this.sendRequest({
url: "xmgl/qualityInspectionRecord/selectQualityStatisticsNum",
data: requestData,
method: "post",
success(res) {
console.log(res, "获取检查统计")
let responseData = res.result;
if(res.result){
console.log(that.typeList)
that.typeList[0].value = responseData.totalNum
that.typeList[1].value = responseData.dangerNum
that.typeList[2].value = responseData.greatFaultLevelNum
that.typeList[3].value = responseData.overdueNotCloseNum
}
}
})
},
optionClick(index) {
this.checkIndex = index;
this.getRecordRegionNumFn();
},
confirmTimeRange(e,index) {
console.log(e,index)
if(index == 1){
this.timeCombo.timeRange1 = e;
this.getStatisticsNumFn();
} else if(index == 2){
this.timeCombo.timeRange2 = e;
this.getStatsByEnterpriseFn();
} else if(index == 3){
this.timeCombo.timeRange3 = e;
this.getStatsByEnterpriseFn();
} else if(index == 4){
this.timeCombo.timeRange4 = e;
this.getNoChangeHiddenNumFn();
this.getNoDestroyNumFn();
}
// this.form.plannedMakeBeamBeginTime = e[0]
// this.form.plannedMakeBeamEndTime = e[1]
// console.log("制梁时间选择", e)
}
}
}
</script>
<style scoped lang="scss">
.content {
height: auto;
padding: 30rpx 20rpx;
display: flex;
flex-direction: column;
background-color: #F4F5FD;
.fixedheader {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 2;
:deep(.headerBox ){
background: #2b8df3;
color: #fff;
}
}
.count-statistics {
padding: 20rpx 22rpx;
background: #FFFFFF;
box-shadow: 0px 8rpx 16rpx 0px rgba(219, 229, 255, 0.6);
border-radius: 10rpx;
.noData {
text-align: center;
font-size: 32rpx;
margin-top: 60rpx;
color: #bed0fb;
.noDataImg{
width: 200rpx;
height: 160rpx;
}
}
.top-title {
width: 100%;
display: flex;
align-items: center;
.line {
width: 6rpx;
height: 44rpx;
background: #268DFF;
border-radius: 0rpx;
margin-right: 10rpx;
}
>text {
font-family: Inter, Inter;
font-weight: bold;
font-size: 28rpx;
color: #272D45;
margin-right: auto;
}
.subTitle {
font-family: Inter, Inter;
font-weight: 500;
font-size: 18rpx;
color: #76777F;
margin-left: 10rpx;
}
.right-date {
margin-top: 8rpx;
:deep(.uni-date-range ){
height: 40rpx;
}
:deep(.uni-icons ){
font-size: 36rpx !important;
margin-bottom: 3rpx;
}
:deep(.uni-date__x-input ){
font-size: 22rpx;
}
:deep(.range-separator ){
font-size: 22rpx;
}
}
.right-option {
display: flex;
align-items: center;
border-radius: 4rpx;
border: 1px solid #D9D9D9;
.option-item {
width: 60rpx;
height: 36rpx;
line-height: 36rpx;
color: #D9D9D9;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 20rpx;
text-align: center;
}
.option-item:not(:last-child) {
border-right: 1px solid #D9D9D9;
}
}
}
.bottom-content {
display: grid;
grid-gap: 20rpx;
grid-template-columns: repeat(4, 1fr);
margin-top: 90rpx;
margin-bottom: 80rpx;
.count-type-list {
height: 195rpx;
background: #ECF8F7;
border-radius: 5rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text:nth-child(2) {
font-family: Inter, Inter;
font-weight: 400;
font-size: 24rpx;
color: #000000;
}
}
}
.count-content {
display: flex;
align-items: center;
justify-content: center;
margin-top: 40rpx;
margin-bottom: 44rpx;
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.chart-content {
width: 100%;
// height: 300px;
}
}
.risk-content {
margin-top: 42rpx;
margin-bottom: 40rpx;
.risk-count {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
.count-title,
.risk-all-title {
width: 100%;
text-align: center;
font-family: Inter, Inter;
font-weight: bold;
font-size: 36rpx;
color: #000000;
}
}
.risk-type {
display: grid;
grid-gap: 20rpx;
grid-template-columns: repeat(2, 1fr);
margin-top: 44rpx;
&-item {
// width: 364rpx;
height: 190rpx;
border-radius: 10rpx;
font-family: Inter, Inter;
font-weight: 500;
color: #FFFFFF;
text {
font-size: 24rpx;
margin-left: 10rpx;
}
view {
font-size: 40rpx;
margin-top: 32rpx;
text-align: center;
}
}
}
}
.hidden-content {
display: flex;
align-items: center;
justify-content: center;
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.chart-hidden-content {
width: 100%;
margin-top: 6rpx;
position: relative;
// height: 300px;
.chart-tip-legend {
position: absolute;
right: 0px;
bottom: 0px;
display: flex;
align-items: center;
.color-zfx {
width: 42rpx;
height: 20rpx;
background: #5470C6;
}
text {
font-family: Inter, Inter;
font-weight: 400;
font-size: 22rpx;
color: #000000;
margin-left: 10rpx;
}
}
}
}
.trend-content {
margin-top: 28rpx;
margin-bottom: 52rpx;
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.chart-trend-content {
width: 100%;
// height: 600rpx;
}
}
.hidden-sum-content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-top: 20rpx;
.title-one {
font-family: Inter, Inter;
font-weight: normal;
font-size: 30rpx;
color: #666363;
margin-bottom: 10rpx;
}
.title-two {
font-family: Inter, Inter;
font-weight: normal;
font-size: 24rpx;
color: #666363;
margin-bottom: 10rpx;
}
.hidden-chart-content {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
.hidden-chart-left {
width: 30%;
margin-right: 56rpx;
.left-legend-diy {
display: flex;
flex-direction: column;
.diy-item {
display: flex;
align-items: center;
.zfx {
width: 20rpx;
height: 20rpx;
margin-right: 6rpx;
}
text {
font-family: Inter, Inter;
font-weight: normal;
font-size: 20rpx;
color: #AAABAE;
margin-right: 8rpx;
}
}
.diy-item:not(:last-child) {
margin-bottom: 10rpx;
}
}
}
.hidden-chart-right {
width: 60%;
height: 100%;
}
}
.divider-line {
width: 500rpx;
height: 0;
border: 1px dashed #D1D2D8;
margin-bottom: 62rpx;
}
}
.question-content {
width: 100%;
}
}
.count-statistics:not(:last-child) {
margin-bottom: 25rpx;
}
.svgImage {
position: absolute;
left: -3rpx;
top: -3rpx;
}
.big-progressr {
width: 100%;
display: flex;
justify-content: center;
position: relative;
transform: rotate(130deg);
$offset: 30rpx;
.u-progress-content {
transform: rotate(-130deg);
position: absolute;
left: $offset;
right: $offset;
top: $offset;
bottom: $offset;
border-radius: 50%;
padding: 70rpx;
box-shadow: 0 0 50rpx 0rpx rgba(114, 231, 209, .5);
.u-progress-box {
border-radius: 50%;
background-color: #fff;
width: 100%;
height: 100%;
box-shadow: 0 0 15rpx 0rpx #eee;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: #3570FF;
.value {
font-size: 60rpx;
}
.title {
font-size: 30rpx;
}
}
}
}
.boxs {
position: relative;
margin-top: 30rpx;
z-index: 10;
display: flex;
justify-content: space-between;
image {
width: 80rpx;
height: 80rpx;
}
.box {
display: flex;
justify-content: space-between;
padding: 20rpx;
width: calc(50% - 15rpx);
box-shadow: 0 0 20rpx 1rpx rgba(99, 225, 214, .5);
border-radius: 12rpx;
align-items: center;
.box-content {
font-size: 25rpx;
text-align: right;
.box-title {}
.box-value {
font-size: 50rpx;
&.v1 {
color: #e15057;
}
&.v2 {
color: #e38a38;
}
}
}
}
}
}
</style>