1 changed files with 530 additions and 0 deletions
@ -0,0 +1,530 @@ |
|||
<template> |
|||
<html> |
|||
<body> |
|||
<div class="page_wrapper"> |
|||
<div class="tab_title"> <span :class="{'active':data.ontabClass1}" @click="searchTypeChange('user')"><b>个人</b>维度</span> <span :class="{'active':data.ontabClass2}" @click="searchTypeChange('bureauDept')" ><b>部门</b>维度</span> </div> |
|||
<div class="tab_cont"> |
|||
<div class="time_now">{{ data.dateStr }}</div> |
|||
<div class="time_select"> <span :class="{'active':data.submitData.dateType=='month'}" @click="dateTypeChange('month')">月度</span><span :class="{'active':data.submitData.dateType=='quarter'}" @click="dateTypeChange('quarter')">季度</span><span :class="{'active':data.submitData.dateType=='year'}" @click="dateTypeChange('year')">年度</span> |
|||
<span :class="{'active':data.submitData.dateType=='day'}" @click="dateTypeChange('day')">筛选</span> |
|||
</div> |
|||
<van-popup |
|||
:show="data.openDateType=='month'" |
|||
position="bottom"> |
|||
<van-date-picker |
|||
v-model="data.monthList" |
|||
title="选择月度" |
|||
:min-date="data.minDate" |
|||
:max-date="data.maxDate" |
|||
:columns-type="data.columnsMonthType" |
|||
@cancel="closeColumns" |
|||
@confirm="confirmMonth" |
|||
/> |
|||
</van-popup> |
|||
<van-popup |
|||
:show="data.openDateType=='quarter'" |
|||
position="bottom"> |
|||
<van-date-picker |
|||
v-model="data.quarterList" |
|||
title="选择季度" |
|||
:min-date="data.minDate" |
|||
:max-date="data.maxQuarterDate" |
|||
:columns-type="data.columnsQuarterType" |
|||
@cancel="closeColumns" |
|||
:filter="filter" |
|||
:formatter="formatter" |
|||
@confirm="confirmQuarter" |
|||
/> |
|||
</van-popup> |
|||
<van-popup |
|||
:show="data.openDateType=='year'" |
|||
position="bottom"> |
|||
<van-date-picker |
|||
v-model="data.yearList" |
|||
title="选择年度" |
|||
:min-date="data.minDate" |
|||
:max-date="data.maxDate" |
|||
:columns-type="data.columnsYearType" |
|||
@cancel="closeColumns" |
|||
@confirm="confirmYear" |
|||
/> |
|||
</van-popup> |
|||
<div> |
|||
<van-calendar :show="data.openDateType=='day'" type="range" :min-date="data.minDate" :max-date="data.maxDate" allow-same-day="true" close-on-click-overlay="true" @close="closeColumns" @confirm="confirmDay" /> |
|||
</div> |
|||
<div class="inspact_card"> |
|||
<h3 class="card_tit">涉企检查数量</h3> |
|||
<div class="inspact_box"> <span class="counts" >{{ data.whole.total }}</span> |
|||
<div class="ratioes"> |
|||
<div class="ratio_yeaer"> |
|||
<label>环比:</label> |
|||
<span class="data-rise" id="regis-dw-huan-top" v-if="data.whole.huanPercentage>0">↑<b>{{ data.whole.huanPercentageStr }}</b></span> |
|||
<span class="data-fall" id="regis-dw-huan-top" v-else-if="data.whole.huanPercentage<0">↑<b>{{ data.whole.huanPercentageStr }}</b></span> |
|||
<span class="data-rise" id="regis-dw-huan-top" v-else><b>-</b><b>{{ data.whole.huanPercentageStr }}</b></span> |
|||
</div> |
|||
<div class="ratio_month"> |
|||
<label>同比:</label> |
|||
<span class="data-rise" id="regis-dw-huan-top" v-if="data.whole.tongPercentage>0">↑<b>{{ data.whole.tongPercentageStr }}</b></span> |
|||
<span class="data-fall" id="regis-dw-huan-top" v-else-if="data.whole.tongPercentage<0">↑<b>{{ data.whole.tongPercentageStr }}</b></span> |
|||
<span class="data-rise" id="regis-dw-huan-top" v-else><b>-</b><b>{{ data.whole.tongPercentageStr }}</b></span> |
|||
</div> |
|||
</div> |
|||
<div class="item_box"> <span class="item_sub"> |
|||
<label>联合检查</label> |
|||
<b>{{data.whole.uniteTotal}}</b> </span> <span class="item_sub"> |
|||
<label>行政检查预告</label> |
|||
<b>{{data.whole.noticeTotal}}</b> </span> <span class="item_sub"> |
|||
<label>评价</label> |
|||
<b>{{data.whole.evaluateTotal}}</b> </span> <span class="item_sub comst"> |
|||
<label>投诉</label> |
|||
<b>{{data.whole.complaintTotal}}</b> </span> </div> |
|||
</div> |
|||
</div> |
|||
<h3 class="card_tit">检查类别</h3> |
|||
<div class="count_wrap"> |
|||
<div class="count_item" v-for="item in data.whole.checkCategoryList"> |
|||
<label>{{ item.checkCategory }}</label> |
|||
<span class="number_count">{{item.checkCategoryNumber}}</span> |
|||
<span class="number_percent" v-if="item.percentage!=null&&item.percentage!=0">{{item.percentage}}%</span> |
|||
<span class="number_percent" v-else>-</span> |
|||
</div> |
|||
</div> |
|||
<h3 class="card_tit">企业类别</h3> |
|||
<div class="count_wrap ent_cate"> |
|||
<div class="count_item" v-for="item in data.whole.companyOrgTypeList"> |
|||
<label>{{ item.companyOrgType }}</label> |
|||
<span class="number_count">{{item.companyOrgTypeNumber}}</span> |
|||
<span class="number_percent" v-if="item.percentage!=null&&item.percentage!=0">{{item.percentage}}%</span> |
|||
<span class="number_percent" v-else>-</span> |
|||
</div> |
|||
</div> |
|||
<h3 class="card_tit">投诉类别</h3> |
|||
<div class="count_wrap com_cate"> |
|||
<div class="count_item" v-for="item in data.whole.complaintTypeList"> |
|||
<label>{{ item.complaintType }}</label> |
|||
<span class="number_count">{{item.complaintTotal}}</span> |
|||
<span class="number_percent" v-if="item.percentage!=null&&item.percentage!=0">{{item.percentage}}%</span> |
|||
<span class="number_percent" v-else>-</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</body> |
|||
</html> |
|||
</template> |
|||
|
|||
<script setup name="comprehensiveAnalysis"> |
|||
import { onMounted, reactive } from "vue"; |
|||
import { whole } from "../../api/enforce"; |
|||
const { useCommon } = $globalStore; |
|||
|
|||
const data = reactive({ |
|||
submitData: { |
|||
searchType: "user", |
|||
// userId:useCommon.userId, |
|||
// userId: "17608514096", |
|||
userId: "17608508256", |
|||
dateType: "year", |
|||
beginTime: "", |
|||
endTime: "", |
|||
year:new Date().getFullYear(), |
|||
quarter:"", |
|||
month:"", |
|||
}, |
|||
whole: reactive({ |
|||
total: 0, |
|||
tongPercentage: 0, |
|||
tongPercentageStr: "-", |
|||
huanPercentage: 0, |
|||
huanPercentageStr: "-", |
|||
uniteTotal: 0, |
|||
evaluateTotal: 0, |
|||
complaintTotal: 0, |
|||
checkCategoryList: [], |
|||
companyOrgTypeList: [], |
|||
complaintTypeList: [], |
|||
}), |
|||
ontabClass1: true, |
|||
ontabClass2: false, |
|||
dateStr: new Date().getFullYear()+"年", |
|||
openDateType: "", |
|||
minDate: new Date("2024-01-01"), |
|||
maxDate: new Date(), |
|||
maxQuarterDate: new Date(new Date().getFullYear()+"-"+Math.ceil((new Date().getMonth()+1)/3)), |
|||
columnsYearType : ['year'], |
|||
columnsMonthType : ['year', 'month'], |
|||
columnsQuarterType : ['year', 'month'], |
|||
yearList:[new Date().getFullYear()], |
|||
quarterList:[new Date().getFullYear(),Math.ceil((new Date().getMonth()+1)/3)], |
|||
monthList:[new Date().getFullYear(),new Date().getMonth()+1], |
|||
}); |
|||
|
|||
|
|||
onMounted(() => { |
|||
getWhole(); |
|||
}); |
|||
|
|||
const getWhole = () => { |
|||
whole( |
|||
data.submitData, |
|||
(success) => { |
|||
console.log(success); |
|||
data.whole.total = success.total; |
|||
data.whole.tongPercentage = success.tongPercentage; |
|||
if (success.tongPercentage == null || success.tongPercentage == 0) { |
|||
data.whole.tongPercentageStr = "-"; |
|||
} else { |
|||
data.whole.tongPercentageStr = success.tongPercentage + "%"; |
|||
} |
|||
data.whole.huanPercentage = success.huanPercentage; |
|||
if (success.huanPercentage == null || success.huanPercentage == 0) { |
|||
data.whole.huanPercentageStr = "-"; |
|||
} else { |
|||
data.whole.huanPercentageStr = success.huanPercentage + "%"; |
|||
} |
|||
if (success.uniteTotal == null || success.uniteTotal == 0) { |
|||
data.whole.uniteTotal = "-"; |
|||
} else { |
|||
data.whole.uniteTotal = success.uniteTotal; |
|||
} |
|||
if (success.noticeTotal == null || success.noticeTotal == 0) { |
|||
data.whole.noticeTotal = "-"; |
|||
} else { |
|||
data.whole.noticeTotal = success.noticeTotal; |
|||
} |
|||
if (success.evaluateTotal == null || success.evaluateTotal == 0) { |
|||
data.whole.evaluateTotal = "-"; |
|||
} else { |
|||
data.whole.evaluateTotal = success.evaluateTotal; |
|||
} |
|||
if (success.complaintTotal == null || success.complaintTotal == 0) { |
|||
data.whole.complaintTotal = "-"; |
|||
} else { |
|||
data.whole.complaintTotal = success.complaintTotal; |
|||
} |
|||
data.whole.checkCategoryList = success.checkCategoryList; |
|||
data.whole.companyOrgTypeList = success.companyOrgTypeList; |
|||
data.whole.complaintTypeList = success.complaintTypeList; |
|||
console.log(success.total); |
|||
console.log(data.whole); |
|||
}, |
|||
(error) => {} |
|||
); |
|||
}; |
|||
const searchTypeChange = (searchType) => { |
|||
console.log(searchType); |
|||
data.submitData.searchType = searchType; |
|||
if (searchType == "user") { |
|||
data.ontabClass1 = true; |
|||
data.ontabClass2 = false; |
|||
} else if (searchType == "bureauDept") { |
|||
data.ontabClass1 = false; |
|||
data.ontabClass2 = true; |
|||
} |
|||
getWhole(); |
|||
}; |
|||
/**筛选转换 */ |
|||
const dateTypeChange = (type) => { |
|||
console.log(type); |
|||
data.openDateType = type; |
|||
console.log(data.submitData.dateType); |
|||
// getWhole(); |
|||
}; |
|||
/** |
|||
* 关闭各个筛选条件 |
|||
*/ |
|||
const closeColumns = () => { |
|||
data.openDateType = ""; |
|||
}; |
|||
/**季度过滤 */ |
|||
const filter = (type, options) => { |
|||
if (type === 'month') { |
|||
return options.filter((option) => Number(option.value) < 5); |
|||
} |
|||
return options; |
|||
}; |
|||
const formatter = (type, option) => { |
|||
if (type === 'month') { |
|||
option.text=(option.text.slice(0,1)=="0"?option.text.slice(1):option.text) |
|||
} |
|||
return option; |
|||
}; |
|||
const confirmMonth=(value)=>{ |
|||
reset(); |
|||
console.log(value); |
|||
data.submitData.dateType = "month"; |
|||
data.openDateType = ""; |
|||
data.submitData.year=value.selectedValues[0]; |
|||
data.submitData.month=value.selectedValues[1]; |
|||
data.dateStr=data.submitData.year+"年"+(data.submitData.month.slice(0,1)=="0"?data.submitData.month.slice(1):data.submitData.month)+"月" |
|||
getWhole(); |
|||
} |
|||
const confirmQuarter=(value)=>{ |
|||
reset(); |
|||
console.log(value); |
|||
data.submitData.dateType = "quarter"; |
|||
data.openDateType = ""; |
|||
data.submitData.year=value.selectedValues[0]; |
|||
data.submitData.quarter=value.selectedValues[1]; |
|||
data.dateStr=data.submitData.year+"年第"+(data.submitData.quarter.slice(0,1)=="0"?data.submitData.quarter.slice(1):data.submitData.quarter)+"季度" |
|||
getWhole(); |
|||
} |
|||
const confirmYear=(value)=>{ |
|||
reset(); |
|||
console.log(value); |
|||
data.submitData.dateType = "year"; |
|||
data.openDateType = ""; |
|||
data.submitData.year=value.selectedValues[0]; |
|||
data.dateStr=data.submitData.year+"年" |
|||
getWhole(); |
|||
} |
|||
/** |
|||
* 打开自定义筛选框 |
|||
* @param value |
|||
*/ |
|||
const confirmDay = (value) => { |
|||
reset(); |
|||
data.submitData.dateType = "day"; |
|||
data.openDateType = ""; |
|||
console.log(value); |
|||
let startTime = new Date(value[0]); |
|||
let endTime = new Date(value[1]); |
|||
console.log(startTime.getFullYear()); |
|||
data.submitData.beginTime = |
|||
startTime.getFullYear() + |
|||
"-" + |
|||
(startTime.getMonth()+1) + |
|||
"-" + |
|||
startTime.getDate(); |
|||
data.submitData.endTime = |
|||
endTime.getFullYear() + "-" + (endTime.getMonth()+1) + "-" + endTime.getDate(); |
|||
data.dateStr = data.submitData.beginTime + "~" + data.submitData.endTime; |
|||
getWhole(); |
|||
}; |
|||
const reset=()=>{ |
|||
data.submitData.year=""; |
|||
data.submitData.month=""; |
|||
data.submitData.quarter=""; |
|||
data.submitData.beginTime=""; |
|||
data.submitData.endTime=""; |
|||
} |
|||
</script> |
|||
|
|||
<style> |
|||
html, |
|||
body { |
|||
margin: 0; |
|||
padding: 0; |
|||
width: 100%; |
|||
height: 100%; |
|||
font-size: 40px; |
|||
} |
|||
.page_wrapper { |
|||
width: 100%; |
|||
height: 100%; |
|||
overflow: hidden; |
|||
} |
|||
.tab_title { |
|||
display: flex; |
|||
margin: 1% 3%; |
|||
width: 94%; |
|||
height: 1.2rem; |
|||
} |
|||
.tab_title span { |
|||
width: 50%; |
|||
height: 100%; |
|||
background: url(../../assets/images/tab_bg.png) no-repeat; |
|||
background-size: 100% 100%; |
|||
color: #5889fe; |
|||
font-size: 0.3rem; |
|||
line-height: 2.5; |
|||
text-align: center; |
|||
} |
|||
.tab_title span:first-child { |
|||
background: url(../../assets/images/tab_bg1_1.png) no-repeat; |
|||
background-size: 100% 100%; |
|||
} |
|||
.tab_title span b { |
|||
margin-right: 0.25rem; |
|||
font-size: 0.5rem; |
|||
} |
|||
.tab_title span.active { |
|||
background: url(../../assets/images/tab_bg_1.png) no-repeat; |
|||
background-size: 100% 100%; |
|||
color: #fff; |
|||
} |
|||
.tab_title span:first-child.active { |
|||
background: url(../../assets/images/tab_bg1.png) no-repeat; |
|||
background-size: 100% 100%; |
|||
color: #fff; |
|||
} |
|||
.tab_cont { |
|||
width: 100%; |
|||
height: calc(100% - 1.5rem); |
|||
overflow: hidden; |
|||
overflow-y: auto; |
|||
} |
|||
.time_now { |
|||
float: left; |
|||
margin: 3.5% 4%; |
|||
color: #4767fe; |
|||
font-size: 0.35rem; |
|||
} |
|||
.time_select { |
|||
float: right; |
|||
display: flex; |
|||
justify-content: space-around; |
|||
margin: 3% 2% 5%; |
|||
padding: 0.5% 1%; |
|||
min-width: 50%; |
|||
background: #f2f3f4; |
|||
border-radius: 1rem; |
|||
color: #757575; |
|||
font-size: 0.3rem; |
|||
} |
|||
.time_select span { |
|||
padding: 1% 4%; |
|||
white-space: nowrap; |
|||
} |
|||
.time_select span.active { |
|||
color: #4767fe; |
|||
background: #fff; |
|||
border-radius: 1rem; |
|||
} |
|||
.inspact_card { |
|||
display: table; |
|||
margin: 1% 2% 3.5%; |
|||
width: 96%; |
|||
height: 5.25rem; |
|||
background: url(../../assets/images/bg_analy_v4.jpg) no-repeat; |
|||
background-size: 100% 100%; |
|||
border-radius: 0.2rem; |
|||
} |
|||
.card_tit { |
|||
margin: 3% 3%; |
|||
width: 100%; |
|||
font-size: 0.35rem; |
|||
} |
|||
.inspact_box { |
|||
margin: 1% 2%; |
|||
width: 96%; |
|||
} |
|||
.counts { |
|||
float: left; |
|||
margin: 1% 2%; |
|||
color: #4767fe; |
|||
font-size: 1.2rem; |
|||
} |
|||
.ratioes { |
|||
float: left; |
|||
margin: 1% 3%; |
|||
min-width: 40%; |
|||
color: #999; |
|||
font-size: 0.3rem; |
|||
} |
|||
.ratio_yeaer, |
|||
.ratio_month { |
|||
display: flex; |
|||
align-items: center; |
|||
margin: 3.5% 3%; |
|||
} |
|||
.data-rise, |
|||
.data-fall { |
|||
margin: 2% 2% 0 2.5%; |
|||
color: #03a159; |
|||
font-size: 0.42rem; |
|||
font-weight: 700; |
|||
display: flex; |
|||
} |
|||
.data-fall { |
|||
color: #ff3333; |
|||
} |
|||
.data-rise b, |
|||
.data-fall b { |
|||
margin: 0 0 0 10%; |
|||
} |
|||
.item_box { |
|||
float: left; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
position: relative; |
|||
margin: 6% 2% 0; |
|||
width: 94%; |
|||
height: 1.5rem; |
|||
} |
|||
.item_sub { |
|||
position: relative; |
|||
margin: 0 1.5%; |
|||
height: 100%; |
|||
text-align: center; |
|||
} |
|||
.item_sub label { |
|||
display: block; |
|||
color: #79a3ca; |
|||
font-size: 0.32rem; |
|||
white-space: nowrap; |
|||
} |
|||
.item_sub b { |
|||
color: #4767fe; |
|||
font-size: 0.75rem; |
|||
font-weight: 500; |
|||
line-height: 1.75; |
|||
} |
|||
.comst b { |
|||
color: #ff3333; |
|||
} |
|||
.item_sub::after { |
|||
content: ""; |
|||
display: inline-block; |
|||
position: absolute; |
|||
top: 0; |
|||
right: -5%; |
|||
width: 2px; |
|||
height: 85%; |
|||
} |
|||
.count_wrap { |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
margin: 2% 2% -2%; |
|||
width: 96%; |
|||
} |
|||
.count_item { |
|||
float: left; |
|||
position: relative; |
|||
margin: -1% 0.5% 2.5% 1.5%; |
|||
width: 31.3%; |
|||
height: 3rem; |
|||
background: url(../../assets/images/bg_analy_card.jpg) no-repeat; |
|||
background-size: cover; |
|||
border-radius: 0.2rem; |
|||
font-size: 0.35rem; |
|||
text-align: center; |
|||
} |
|||
.count_item label { |
|||
display: inline-flex; |
|||
margin: 8% 5% 5%; |
|||
width: 90%; |
|||
color: #4c4c4c; |
|||
text-align: left; |
|||
} |
|||
.number_count { |
|||
display: block; |
|||
color: #4767fe; |
|||
font-size: 0.75rem; |
|||
font-weight: 500; |
|||
line-height: 1.75; |
|||
} |
|||
.number_percent { |
|||
color: #666; |
|||
} |
|||
.ent_cate .number_count { |
|||
color: #000; |
|||
} |
|||
.com_cate .number_count { |
|||
color: #f73b3b; |
|||
} |
|||
.com_cate .count_item { |
|||
background: url(../../assets/images/bg_analy_card_2.jpg) no-repeat; |
|||
background-size: cover; |
|||
} |
|||
</style> |
|||
Loading…
Reference in new issue