接口对接

This commit is contained in:
张宁 2024-05-31 18:55:17 +08:00
parent ddd5ab1ed5
commit 0efc8516d1
21 changed files with 904 additions and 1232 deletions

View File

@ -1,6 +1,6 @@
/*
* @LastEditors:
* @LastEditTime: 2024-05-23 10:32:10
* @LastEditors: 18339727226@163.com
* @LastEditTime: 2024-05-30 09:15:55
*/
import axios from "axios";
import type { AxiosRequestConfig, AxiosResponse } from "axios";
@ -18,7 +18,7 @@ axios.interceptors.request.use(
function (config: AxiosRequestConfig): any {
// 在发送请求之前做些什么 传token
// let token: any = getLocalStorage(StorageEnum.GB_TOKEN_STORE);
let token: any = getToken() || 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjA4ZGI3NTE5LTMxOGUtNDE0My04MDhjLWVmYTI3YmZkZWUyOCIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6IlRlYWNoZXIiLCJ1c2VyaW5mbyI6IntcIklkXCI6XCIwOGRiNzUxOS0zMThlLTQxNDMtODA4Yy1lZmEyN2JmZGVlMjhcIixcIk5hbWVcIjpcImFkbWluXCIsXCJQd2RcIjpcIlwiLFwiUGhvbmVOdW1iZXJcIjpcIjE1OTcyMTc4NDQ1XCIsXCJQZXJzb25uZWxUeXBlXCI6MSxcIlVzZXJUeXBlXCI6MCxcIlJlcG9ydGluZ1Byb2Nlc3NcIjowLFwiSGVhZFNjdWxwdHVyZVVybFwiOm51bGwsXCJTZXhcIjowLFwiVGVhY2hlckNsYXNzSWRzXCI6bnVsbCxcIklzU3VydmV5XCI6ZmFsc2UsXCJTdHVkZW50SWRcIjpcIlwiLFwiV2VsY29tZVllYXJcIjowLFwiSURDYXJkXCI6bnVsbCxcIkV4YW1pbmVlTnVtYmVyXCI6bnVsbCxcIk5vdGlmaWNhdGlvbk51bWJlclwiOm51bGwsXCJFZHVjYXRpb25hbExldmVsXCI6MCxcIlBob3RvUmV2aWV3U3RhdGVcIjowLFwiQ29sbGVnZU5hbWVcIjpudWxsLFwiRW5kVGltZVwiOlwiMDAwMS0wMS0wMVQwMDowMDowMFwiLFwiQWxsRGF0YVBlcm1pc3Npb25cIjowLFwiUm9sZXNcIjpudWxsLFwiUmV2aWV3ZWRTdGF0ZVwiOm51bGx9IiwibmJmIjoxNzE2NDI4NjIxLCJleHAiOjE3MTY0MzIyMjEsImlzcyI6InprSXNzdWVyIUAjJCVeJioiLCJhdWQiOiJ6a0F1ZGllbmNlIUAjJCVeJioifQ.iH1LYSEHNKs5LZVAvRTdghF-hUkKQxFLxBbJOXdRIao';
let token: any = getToken() || 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjA4ZGI3NTE5LTMxOGUtNDE0My04MDhjLWVmYTI3YmZkZWUyOCIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6IlRlYWNoZXIiLCJ1c2VyaW5mbyI6IntcIklkXCI6XCIwOGRiNzUxOS0zMThlLTQxNDMtODA4Yy1lZmEyN2JmZGVlMjhcIixcIk5hbWVcIjpcImFkbWluXCIsXCJQd2RcIjpcIlwiLFwiUGhvbmVOdW1iZXJcIjpcIjE1OTcyMTc4NDQ1XCIsXCJQZXJzb25uZWxUeXBlXCI6MSxcIlVzZXJUeXBlXCI6MCxcIlJlcG9ydGluZ1Byb2Nlc3NcIjowLFwiSGVhZFNjdWxwdHVyZVVybFwiOm51bGwsXCJTZXhcIjowLFwiVGVhY2hlckNsYXNzSWRzXCI6bnVsbCxcIklzU3VydmV5XCI6ZmFsc2UsXCJTdHVkZW50SWRcIjpcIlwiLFwiV2VsY29tZVllYXJcIjowLFwiSURDYXJkXCI6bnVsbCxcIkV4YW1pbmVlTnVtYmVyXCI6bnVsbCxcIk5vdGlmaWNhdGlvbk51bWJlclwiOm51bGwsXCJFZHVjYXRpb25hbExldmVsXCI6MCxcIlBob3RvUmV2aWV3U3RhdGVcIjowLFwiQ29sbGVnZU5hbWVcIjpudWxsLFwiRW5kVGltZVwiOlwiMDAwMS0wMS0wMVQwMDowMDowMFwiLFwiQWxsRGF0YVBlcm1pc3Npb25cIjowLFwiUm9sZXNcIjpudWxsLFwiUmV2aWV3ZWRTdGF0ZVwiOm51bGx9IiwibmJmIjoxNzE3MDMwNTkyLCJleHAiOjE3MTcwMzQxOTIsImlzcyI6InprSXNzdWVyIUAjJCVeJioiLCJhdWQiOiJ6a0F1ZGllbmNlIUAjJCVeJioifQ.AyTB_XsJbLCh9u3vOgbQknWCr1suOJj62LtbcRZdAUI';
if (token) {
// @ts-ignore
// config.headers.common[RequestEnum.GB_TOKEN_KEY] = token;

View File

@ -1,4 +1,14 @@
import {GET,POST,FILE,FILEPOST,PUT,GETNOBASE} from "../api";
export const testGet=(param:any={})=>{
return GET('/api/TeacherManagement/AdminPCIndex',param)
}
import { GET, POST, FILE, FILEPOST, PUT, GETNOBASE } from "../api";
export const AdminPCIndex = (param: any = {}) => {
return GET("/api/TeacherManagement/AdminPCIndex", param);
};
//主页 今日缴费情况
export const WeekPay = (param: any = {}) => {
return GET("/api/TeacherManagement/WeekPay", param);
};
// 专业报道
export const StatisticsReportedRanking = (param: any = {}) => {
return GET("/api/TeacherManagement/StatisticsReportedRanking", param);
};

View File

@ -0,0 +1,136 @@
<template>
<div id="chart" style="width: 150%;height: 150%;">
</div>
</template>
<script>
import * as echarts from 'echarts';
export default {
name: 'chart',
data() {
return {
myChart: null,
};
},
mounted() {
// window.addEventListener('resize',()=>{this.resize();getRem(1920,100)})
this.init()
},
beforeDestroy() {
// window.removeEventListener('resize',this.resize)
},
methods: {
// resize(){
// this.myChart.resize();
// },
init(max, value) {
var max = max?max:100;
var value = value?value:0;
var rate = 0
if (max && value) {
rate = (value / max * 100).toFixed(1)
}
if (rate === "100.0") {
rate = "100"; // 100
}
var chartDom = document.getElementById('chart');
this.myChart = echarts.init(chartDom);
// window.onresize = this.myChart.resize;
var option;
option = {
title: {
text: (rate || '0.0') + '%',
x: 'center',
y: '20%',
textStyle: {
color: '#fff',
fontSize: '18',
fontWeight: '600',
fontFamily: 'YouSheBiaoTiHei'
},
},
tooltip: {
trigger: 'item'
},
angleAxis: {
axisLine: {
show: false,
},
axisLabel: {
show: false,
},
splitLine: {
show: false,
},
axisTick: {
show: false,
},
min: 0,
max: max,
startAngle: 60,
},
radiusAxis: {
type: 'category',
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
show: true,
},
data: [],
},
polar: {
radius: ['40%', '65%'],
center: ['50%', '30%'],
},
series: [
{
type: 'bar',
data: [{ name: '预报到填写报到人数', value: value }],
startAngle: 225,
z: 1,
coordinateSystem: 'polar',
barMaxWidth: 35,
roundCap: 1,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
offset: 0,
color: '#5E7DCD'
},
{
offset: 0.5,
color: '#d81e48'
},
{
offset: 1,
color: '#db4238'
}
])
},
{
type: 'bar',
data: [max],
z: 0,
silent: true,
coordinateSystem: 'polar',
barMaxWidth: 35,
roundCap: true,
color: '#00214d',
barGap: '-100%',
},
],
};
option && this.myChart.setOption(option);
}
},
};
</script>
<style lang="scss" scoped></style>

View File

@ -0,0 +1,137 @@
<template>
<div id="pieChart" style="width: 150%;height: 150%;">
</div>
</template>
<script>
import * as echarts from 'echarts';
export default {
name: 'pieChart',
data() {
return {
myChart: null,
};
},
mounted() {
// window.addEventListener('resize',()=>{this.resize();getRem(1920,100)})
this.init()
},
beforeDestroy() {
// window.removeEventListener('resize',this.resize)
},
methods: {
// resize(){
// this.myChart.resize();
// },
init(max, value) {
var max = max?max:100;
var value = value?value:0;
var rate = 0
if (max && value) {
rate = (value / max * 100).toFixed(1)
}
if (rate === "100.0") {
rate = "100"; // 100
}
var chartDom = document.getElementById('pieChart');
this.myChart = echarts.init(chartDom);
// window.onresize = this.myChart.resize;
var option;
option = {
title: {
text: (rate || '0.0') + '%',
x: 'center',
y: '20%',
textStyle: {
color: '#fff',
fontSize: '18',
fontWeight: '600',
fontFamily: 'YouSheBiaoTiHei'
},
},
tooltip: {
trigger: 'item'
},
angleAxis: {
axisLine: {
show: false,
},
axisLabel: {
show: false,
},
splitLine: {
show: false,
},
axisTick: {
show: false,
},
min: 0,
max: max,
startAngle: 60,
},
radiusAxis: {
type: 'category',
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
show: true,
},
data: [],
},
polar: {
radius: ['40%', '65%'],
center: ['50%', '30%'],
},
series: [
{
type: 'bar',
data: [{ name: '预报到填写人数', value: value }],
startAngle: 225,
z: 1,
coordinateSystem: 'polar',
barMaxWidth: 35,
roundCap: 1,
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
offset: 0,
color: '#5E7DCD'
},
{
offset: 0.5,
color: '#d81e48'
},
{
offset: 1,
color: '#db4238'
}
])
},
{
type: 'bar',
data: [max],
z: 0,
silent: true,
coordinateSystem: 'polar',
barMaxWidth: 35,
roundCap: true,
color: '#00214d',
barGap: '-100%',
},
],
};
option && this.myChart.setOption(option);
}
},
};
</script>
<style lang="scss" scoped></style>

View File

@ -2,7 +2,7 @@
* @Author: 张宁 18339727226@163.com
* @Date: 2024-05-27 14:46:17
* @LastEditors: 张宁 18339727226@163.com
* @LastEditTime: 2024-05-29 15:37:58
* @LastEditTime: 2024-05-29 16:31:43
* @FilePath: \welcome-system-screen\src\components\datePicker\datePicker.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
@ -19,16 +19,16 @@
<div class="tabs">
<div class="title-item" v-for="(tab, index) in tabs" :key="index"
:class="{ active: activeTab === index }" @click="changeTab(index)">
{{ tab.content?tab.content:'' }}{{ tab.title }}
{{ tab.content ? tab.content : '' }}{{ tab.title }}
</div>
</div>
<div class="confirm-box" @click="confirmDate">确定</div>
</div>
<div class="picker-content" v-show="activeTab === 0">
<yearPane v-model:curYear="myYear" />
<YearPane v-model:curYear="myYear" />
</div>
<div class="picker-content" v-show="activeTab === 1">
<monthPane v-model:curMonth="myMonth" />
<MonthPane v-model:curMonth="myMonth" />
</div>
<div class="picker-content" v-show="activeTab === 2">
@ -42,7 +42,7 @@
<script lang="ts" setup name="datePicker">
import { ref, onMounted, onUnmounted, nextTick } from "vue";
import { ElConfigProvider } from 'element-plus'
import { ElConfigProvider, ElMessage } from 'element-plus'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
@ -54,13 +54,16 @@ const { proxy } = getCurrentInstance();
const toggleDropdown = () => {
isOpen.value = !isOpen.value;
};
const myYear = ref();
const myMonth = ref();
const myDay = ref();
const props = defineProps({
myDate:Object
})
const myYear = ref(props.myDate.year);
const myMonth = ref(props.myDate.month);
const myDay = ref(props.myDate.day);
// tabs
const activeTab = ref(0);
const tabs = computed(()=>{
const tabs = computed(() => {
return [
{ title: '年', content: myYear.value },
{ title: '月', content: myMonth.value },
@ -74,11 +77,37 @@ const changeTab = (index: number) => {
// Select an option from the datePicker
const confirmDate = () => {
//
if (myDay.value !== 0) {
if (myYear.value === 0) {
ElMessage.error('请选择年份')
return
}
if (myMonth.value === 0) {
ElMessage.error('请选择月份')
return
}
}
//
if (myMonth.value !== 0) {
if (myYear.value === 0) {
ElMessage.error('请选择年份')
return
}
}
//
if (myYear.value === 0) {
ElMessage.error('请选择年份')
return
}
isOpen.value = false; // Close the datePicker
//
let dates = `${myYear.value}-${myMonth.value}-${myDay.value}`
console.log(dates);
proxy.$emit("getOption",dates);
let dates = {
year: myYear.value,
month: myMonth.value,
day: myDay.value,
}
proxy.$emit("getOption", dates);
};
// Close datePicker when clicking outside

74
src/stores/data/data.ts Normal file
View File

@ -0,0 +1,74 @@
/*
* @Author: 18339727226@163.com
* @Date: 2024-05-27 08:45:53
* @LastEditors: 18339727226@163.com
* @LastEditTime: 2024-05-31 16:39:38
* @FilePath: \welcome-system-screen\src\stores\time\time.ts
* @Description: ,`customMade`, koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { ref } from "vue";
import { defineStore } from "pinia";
// import { storeToRefs } from 'pinia';
export const useDataStore = defineStore("data", () => {
const allData:Ref<any> = ref({
degreeDto: [],
forecast:{},
forecastFill:{},
nationStudent:[],
payDto:{},
provinceDto:[],
rankingDto:[],
sexDto:{},
today:{},
totalDto:{}
});
const degreeDto=computed(() => allData.value.degreeDto);
const forecast=computed(() => allData.value.forecast);
const forecastFill=computed(() => allData.value.forecastFill);
const nationStudent=computed(() => allData.value.nationStudent);
const payDto=computed(() => allData.value.payDto);
const provinceDto=computed(() => allData.value.provinceDto);
const rankingDto=computed(() => allData.value.rankingDto);
const sexDto=computed(()=> allData.value.sexDto);
const today=computed(() => allData.value.today);
const totalDto=computed(() => allData.value.totalDto);
// 选中的学院id
const collageId = ref()
// 切换选中的学院
const setCollageId = (data:any)=>{
collageId.value = data
}
// 学院对应的专业报道人数
const professionRank = ref()
const setProfessionRank = (data:any) => {
professionRank.value = data;
};
const setData = (data:any) => {
allData.value = data;
};
// 本科缴费人数
const bkPay= ref()
const setBkPay = (data:any) => {
console.log('data',data);
bkPay.value = data;
};
// 专科缴费人数
const zkPay= ref()
const setZkPay = (data:any) => {
zkPay.value = data;
};
// 专升本缴费人数
const zsbPay= ref()
const setZsbPay = (data:any) => {
zsbPay.value = data;
};
return { allData,degreeDto,forecast,forecastFill,nationStudent,payDto,provinceDto,rankingDto,sexDto,today,totalDto,setData,bkPay,zkPay,zsbPay,setBkPay,setZkPay,setZsbPay,setCollageId,collageId,professionRank,setProfessionRank};
});

View File

@ -2,9 +2,10 @@
* @Author: 18339727226@163.com
* @Date: 2024-05-22 08:40:56
* @LastEditors: 18339727226@163.com
* @LastEditTime: 2024-05-27 10:28:20
* @LastEditTime: 2024-05-30 10:12:40
* @FilePath: \welcome-system-screen\src\stores\index.ts
* @Description: ,`customMade`, koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
export * from "./setting/setting"
export * from "./time/time"
export * from "./time/time"
export * from "./data/data"

View File

@ -2,7 +2,7 @@
* @Author: 18339727226@163.com
* @Date: 2024-05-27 08:45:53
* @LastEditors: 18339727226@163.com
* @LastEditTime: 2024-05-27 11:40:12
* @LastEditTime: 2024-05-31 15:32:52
* @FilePath: \welcome-system-screen\src\stores\time\time.ts
* @Description: ,`customMade`, koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@ -16,19 +16,24 @@ const now = new Date();
const dates = getCurrentDate();
export const useTimeStore = defineStore("time", () => {
const years = ref('');
const months = ref('');
const nowDays = ref(dates);
const years:Ref<any> = ref(now.getFullYear());
const months:Ref<any> = ref(now.getMonth() + 1);
const days:Ref<any>=ref(now.getDate());
const nowDays:Ref<any> = ref(dates);
const setYears = (year:any) => {
years.value = year;
};
const setMounths = (month: any) => {
months.value = month;
}
const setDays= (day: any) => {
days.value = day;
}
const setNowDays = () => {
years.value = ''
months.value = ''
}
// 根据年、月、日的切换,展示不同的标题 --- 具体问问产品怎么展示 -----待修改
const computDate = computed(() => {
let dates = '今日'
if (years.value) {
@ -54,5 +59,5 @@ export const useTimeStore = defineStore("time", () => {
return titles
})
return { years, months,nowDays, setYears, setMounths,setNowDays,computDate,nowTitle };
return { years, months,days,nowDays, setYears, setMounths,setDays,setNowDays,computDate,nowTitle };
});

View File

@ -1,58 +1,94 @@
<script setup lang="ts">
import { testGet } from "@/api";
import { AdminPCIndex ,WeekPay} from "@/api";
import { useTimeStore } from "@/stores/index";
const timeStore = useTimeStore();
import { useDataStore } from "@/stores/index";
const dataStore = useDataStore();
const test = () => {
testGet().then((res: any) => {
console.log("test", res);
//
const getAdminPCIndex = (params:any) => {
AdminPCIndex(params).then((res: any) => {
dataStore.setData(res.data);
})
};
//
// --
const payData = () => {
let params: any = [{
"EducationalLevel": 3,
"Year": myDate.value.year || void 0,
"Month": myDate.value.month || void 0,
"Day": myDate.value.day || void 0,
}, {
"EducationalLevel": 4,
"Year": myDate.value.year || void 0,
"Month": myDate.value.month || void 0,
"Day": myDate.value.day || void 0,
}, {
"EducationalLevel": 6,
"Year": myDate.value.year || void 0,
"Month": myDate.value.month || void 0,
"Day": myDate.value.day || void 0,
}]
for (let item of params) {
WeekPay(item).then((res: any) => {
switch (item.EducationalLevel) {
case 3:
dataStore.setBkPay(res.data);
case 4:
dataStore.setZkPay(res.data);
case 6:
dataStore.setZsbPay(res.data);
}
})
}
}
// const returnHome = () => {
// history.go(-1)
// };
/* const yearOptions = ref([{ label: '2024', value: 2024 }, { label: '2023', value: 2023 }, { label: '2022', value: 2022 }, { label: '2021', value: 2021 }, { label: '2020', value: 2020 }])
const monthOptions = ref([
{ label: '/', value: null },
{ label: '1月', value: 1 },
{ label: '2月', value: 2 },
{ label: '3月', value: 3 },
{ label: '4月', value: 4 },
{ label: '5月', value: 5 },
{ label: '6月', value: 6 },
{ label: '7月', value: 7 },
{ label: '8月', value: 8 },
{ label: '9月', value: 9 },
{ label: '10月', value: 10 },
{ label: '11月', value: 11 },
{ label: '12月', value: 12 },
])
//
const getYear = (val: any) => {
console.log(val)
timeStore.setYears(val)
}
//
const getMonth = (val: any) => {
console.log(val)
timeStore.setMounths(val)
}
const selectYear = ref(null)
const selectMonth = ref(null)
const selectNowdays = () => {
if (selectYear.value) {
selectYear.value.clearOption()
}
if (selectMonth.value) {
selectMonth.value.clearOption()
}
timeStore.setNowDays()
}*/
const currentDate = new Date()
//
const myDate = ref({
year: currentDate.getFullYear(),
month:currentDate.getMonth() + 1,
day: currentDate.getDate(),
})
// || ||
const getDate = (val:any)=>{
console.log('获取选择的日期',val);
const getDate = (val: any) => {
myDate.value = val
/* // 根据年日的切换展示不同的标题 --- 具体问问产品怎么展示 -----待修改
timeStore.setYears(val.year)
timeStore.setMounths(val.month)
timeStore.setDays(val.day) */
let params = {
"Year":val.year || void 0,
"Month":val.month || void 0,
"Day":val.day || void 0,
}
getAdminPCIndex(params)
payData()
}
const dateTitle = computed(()=>{
let {year, month, day} = myDate.value
return formatDate(year, month, day)
})
/**
* @description: 将日期返回成中文格式
* @param {*} year
* @param {*} month
* @param {*} day
* @return {*}
*/
function formatDate(year: number, month: number, day: number) {
let dateStr = `${year}`;
if (month !== 0) {
dateStr += `${month}`;
}
if (day !== 0) {
dateStr += `${day}`;
}
return dateStr;
}
</script>
@ -60,7 +96,7 @@ const getDate = (val:any)=>{
<div class="d-flex">
<div class="top-left">
<div class="title">
<span class="title-text" @click="test()">新生报道情况</span>
<span class="title-text">新生报道情况</span>
<!-- <span style="color: yellow;" @click="returnHome()">返回</span> -->
</div>
<div class="en-title">
@ -71,8 +107,10 @@ const getDate = (val:any)=>{
<div class="change-time">
<div class="change-year">
<DatePicker @getOption="getDate" ref="selectYear"></DatePicker>
<DatePicker @getOption="getDate" :myDate="myDate"></DatePicker>
</div>
<div class="time-title">选择日期{{ dateTitle }}</div>
<!-- <div class="change-year">
<Dropdown :options="yearOptions" title="切换年份" @getOption="getYear" ref="selectYear"></Dropdown>
</div>
@ -148,6 +186,11 @@ const getDate = (val:any)=>{
font-family: 'YouSheBiaoTiHei';
font-size: 16px;
.time-title {
margin-right: 20px;
height: 35px;
line-height: 30px;
}
.change-year {
width: 125px;

View File

@ -24,18 +24,18 @@ const getMapChart = (data) => {
backgroundColor: 'rgba(0, 0, 0, .5)', //tooltip
borderColor: '#2BEDF6', //tooltip
borderWidth: 0, //
// formatter: function (params) { // tooltip
// var html = '<div style="width:120px;background:rgba(0, 0, 0, .5); font-size: 14px; padding-bottom: 3px;">';
// html += '<span style="display:block;width:100%;text-align:center;padding:5px 0; color: #ffffff;border-bottom:1px solid #fff;font-weight:bold">' + (params.name) + '</span>'; //
// html += '<span style="margin:3px 0 0 0;padding:0;display:block;width:100%;padding-left:14px;color: #fff;font-size: 12px;">' + '' + (params.data.num3 || 0) + '</span>'; //
// html += '<span style="margin:0;padding:0;display:block;width:100%;padding-left:14px;color: #fff;font-size: 12px;">' + '' + (params.data.num1 || 0) + '</span>'; //
// // html += '<span style="margin:0;padding:0;display:block;width:100%;padding-left:14px;color: #fff;font-size: 12px;">'+'' + (params.data.num2 || 0) + '</span>'; //
// if (params.data.num2) {
// html += '<span style="margin:0;padding:0;display:block;width:100%;padding-left:14px;color: #fff;font-size: 12px;">' + '' + (params.data.num2 || 0) + '</span>';
// }
// html += '</div>';
// return html;
// }
formatter: function (params) { // tooltip
var html = '<div style="width:120px;background:rgba(0, 0, 0, .5); font-size: 14px; padding-bottom: 3px;">';
html += '<span style="display:block;width:100%;text-align:center;padding:5px 0; color: #ffffff;border-bottom:1px solid #fff;font-weight:bold">' + (params.name) + '</span>'; //
html += '<span style="margin:3px 0 0 0;padding:0;display:block;width:100%;padding-left:14px;color: #fff;font-size: 12px;">' + '统招本科:' + (params.num3 || 0) + '</span>'; //
html += '<span style="margin:0;padding:0;display:block;width:100%;padding-left:14px;color: #fff;font-size: 12px;">' + '统招专科:' + (params.num1 || 0) + '</span>'; //
// html += '<span style="margin:0;padding:0;display:block;width:100%;padding-left:14px;color: #fff;font-size: 12px;">'+'' + (params.data.num2 || 0) + '</span>'; //
if (params.num2) {
html += '<span style="margin:0;padding:0;display:block;width:100%;padding-left:14px;color: #fff;font-size: 12px;">' + '统招专升本:' + (params.num2 || 0) + '</span>';
}
html += '</div>';
return html;
}
},
visualMap: {
min: 0,
@ -44,15 +44,15 @@ const getMapChart = (data) => {
bottom: 0,
showLabel: true,
selectedMode: false,
textStyle:{
color:"#fff"
},
textStyle: {
color: "#fff"
},
pieces: [{
gte: 200,
lte: 10000,
label: ">200人",
color: "#0145b3",
},
{
gte: 100,
@ -117,14 +117,14 @@ const getMapChart = (data) => {
x2: 0,
y2: 0,
colorStops: [
{
offset: 0.5,
color: '#0D59C1', // 0%
},
{
offset: 1,
color: '#b4d9c7', // 100%
},
{
offset: 0.5,
color: '#0D59C1', // 0%
},
{
offset: 1,
color: '#b4d9c7', // 100%
},
],
global: true, // false
},
@ -195,16 +195,19 @@ const getMapChart = (data) => {
}
const resize = () => {
myChart.value.resize();
}
// const resize = () => {
// myChart.value.resize();
// }
onMounted(() => {
getMapChart();
window.addEventListener('resize', () => { resize(); getRem(1700, 100) })
// getMapChart();
// window.addEventListener('resize', () => { resize(); getRem(1700, 100) })
})
onBeforeUnmount(() => {
window.removeEventListener('resize', () => { resize() })
// window.removeEventListener('resize', () => { resize() })
})
defineExpose({
getMapChart
})
</script>
<style></style>

View File

@ -1,9 +1,19 @@
<!--
* @Author: 张宁 18339727226@163.com
* @Date: 2024-05-22 08:40:56
* @LastEditors: 张宁 18339727226@163.com
* @LastEditTime: 2024-05-31 14:53:27
* @FilePath: \welcome-system-screen\src\views\index\center-top.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<script setup lang="ts">
import { useTimeStore } from "@/stores/index";
const timeStore = useTimeStore();
const { computDate } = storeToRefs(timeStore)
import { ElMessage } from "element-plus";
import { useDataStore } from "@/stores/index";
const dataStore = useDataStore();
const { today } = storeToRefs(dataStore)
</script>
@ -15,13 +25,13 @@ import { ElMessage } from "element-plus";
</div>
<div class="top-item">
<div class="top-item-title">{{ computDate }}迎新人数</div>
<div class="top-item-content">{{ 12404 }}</div>
<div class="top-item-content">{{ today.nowStuden??'-' }}</div>
</div>
</div>
<div class="top-item">
<div class="top-item-title">{{ computDate }}预报到人数</div>
<div class="top-item-content">{{ 12404 }}</div>
<div class="top-item-content">{{ today.forecastStuden??'-' }}</div>
</div>
<div class="top-item">
<div class="top-item-title">{{ computDate }}预报到报到率</div>

View File

@ -13,11 +13,151 @@ import RightBottomTwo from "./right-bottom-two.vue";
import { useTimeStore } from "@/stores/index";
import { storeToRefs } from "pinia";
const timeStore = useTimeStore();
const { nowTitle, years, months, days } = storeToRefs(timeStore);
import { AdminPCIndex, WeekPay, StatisticsReportedRanking } from "@/api";
import { useDataStore } from "@/stores/index";
const dataStore = useDataStore();
const { allData, rankingDto, collageId, professionRank } = storeToRefs(dataStore)
const rightCenterRef = ref(null)
const mapRef = ref(null)
const tableData = ref()
const showRight = ref(true)
const changeRight = () => {
showRight.value = !showRight.value
if (!showRight.value && rbtwoRef) {
setTimeout(()=>{
rbtwoRef.value.getData(professionRank.value)
})
}
};
const { nowTitle } = storeToRefs(timeStore);
/**
* @description: 处理map中的数据
* @param {*} data
* @return {*}
*/
const dealMapData = (data: any) => {
tableData.value = data.provinceDto?.map((item: any) => {
return {
name: item.provinceName,
zk: item.degreesDto[0].paymentCompleted + item.degreesDto[0].nonPayment,
// zsb:item.degreesDto[1].paymentCompleted+ '/'+(item.degreesDto[1].paymentCompleted+item.degreesDto[1].nonPayment),
bk: item.degreesDto[2].paymentCompleted + item.degreesDto[2].nonPayment,
zkrate: divideAndFormat(item.degreesDto[0].paymentCompleted, item.degreesDto[0].paymentCompleted + item.degreesDto[0].nonPayment),
bkrate: divideAndFormat(item.degreesDto[2].paymentCompleted, item.degreesDto[2].paymentCompleted + item.degreesDto[2].nonPayment),
zbdrate: divideAndFormat(item.degreesDto[0].paymentCompleted + item.degreesDto[2].paymentCompleted, item.degreesDto[0].paymentCompleted + item.degreesDto[0].nonPayment + item.degreesDto[2].paymentCompleted + item.degreesDto[2].nonPayment),
num1: item.degreesDto[0].paymentCompleted,
num2: item.degreesDto[1].paymentCompleted,
num3: item.degreesDto[2].paymentCompleted,
reported: item.degreesDto[0].paymentCompleted + item.degreesDto[2].paymentCompleted,
AdmissionNum: item.degreesDto[0].paymentCompleted + item.degreesDto[0].nonPayment + item.degreesDto[2].paymentCompleted + item.degreesDto[2].nonPayment
}
})
tableData.value?.forEach((item: any, index: any) => {
item.sort = index + 1
item.sort = item.sort < 10 ? "0" + item.sort : item.sort;
if (item.zbdrate == '0.0%') {
item.zbdrate = '0%'
}
})
tableData.value.sort((a: any, b: any) => {
return a.zbdrate - b.zbdrate
})
}
const divideAndFormat = (divisor: any, dividend: any) => {
if (dividend === 0) {
return "0.0%";
}
let result = (divisor / dividend) * 100;
return result.toFixed(1) + "%";
}
const rbtwoRef = ref(null)
const getProfession = () => {
let params = {
"id": collageId.value
}
StatisticsReportedRanking(params).then(res => {
dataStore.setProfessionRank(res.data)
setTimeout(() => {
if (!showRight.value && rbtwoRef) {
rbtwoRef.value.getData(professionRank.value)
}
})
})
}
watch(collageId, () => {
getProfession()
})
/**
* @description: 获取页面数据
* @return {*}
*/
const getAdminPCIndex = () => {
AdminPCIndex().then((res: any) => {
dataStore.setData(res.data);
dataStore.setCollageId(res.data.rankingDto[0].collegeId)
dealMapData(res.data)
setTimeout(() => {
if (mapRef) {
mapRef.value.getMapChart(tableData.value)
}
});
})
};
// --
const payData = () => {
let params: any = [{
"EducationalLevel": 3,
"Year": years.value,
"Month": months.value,
"Day": days.value
}, {
"EducationalLevel": 4,
"Year": years.value,
"Month": months.value,
"Day": days.value
}, {
"EducationalLevel": 6,
"Year": years.value,
"Month": months.value,
"Day": days.value
}]
for (let item of params) {
WeekPay(item).then((res: any) => {
switch (item.EducationalLevel) {
case 3:
dataStore.setBkPay(res.data);
case 4:
dataStore.setZkPay(res.data);
case 6:
dataStore.setZsbPay(res.data);
}
})
}
setTimeout(() => {
if (rightCenterRef) {
rightCenterRef.value.getData()
}
});
}
onMounted(() => {
getAdminPCIndex();
payData();
});
</script>
<template>
@ -35,27 +175,27 @@ const { nowTitle } = storeToRefs(timeStore);
</div>
<div class="contetn_center">
<CenterTop class="contetn_center_top" />
<CenterMap class="contetn_center_map" title="全国地图" />
<CenterMap class="contetn_center_map" title="全国地图" ref="mapRef" />
</div>
<div class="contetn_right" v-if="showRight">
<div class="contetn_right" v-show="showRight">
<div class="change-btn" @click="changeRight"></div>
<zkItem class="contetn_left-bottom contetn_rt-one" title="缴费人数">
<RightTop />
</zkItem>
<zkItem class="contetn_left-bottom contetn_rc-item" :title="nowTitle + '缴费人数'" style="padding: 0 10px 16px 10px">
<RightCenter />
<RightCenter ref="rightCenterRef" />
</zkItem>
<zkItem class="contetn_left-bottom contetn_rb-item" title="报人数区域排名 ">
<zkItem class="contetn_left-bottom contetn_rb-item" title="报人数区域排名 ">
<RightBottom />
</zkItem>
</div>
<div class="contetn_right" v-else>
<div class="contetn_right" v-if="!showRight">
<div class="change-btn" @click="changeRight"></div>
<zkItem class="contetn_left-bottom contetn_rt_two" title="学院报到人数">
<RightTopTwo />
</zkItem>
<zkItem class="contetn_left-bottom contetn_rb-item" title="专业报到人数 ">
<RightBottomTwo />
<RightBottomTwo ref="rbtwoRef" />
</zkItem>
</div>
</div>

View File

@ -1,176 +0,0 @@
<script setup lang="ts">
import { color } from "echarts";
import { ElMessage } from "element-plus";
const option = ref({});
const getData = () => {
var dataValArray = 0.63;
var datatext = ['17.25', '20', '12', '32', '19'];
var datasubtext = ['体育意识', '体育技能', '体育行为', '体育知识', '体质健康'];
setOption(datatext, datasubtext, dataValArray)
};
const Green = {
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0,
color: '#99da69' // 0%
}, {
offset: 1,
color: '#01babc' // 100%
}],
globalCoord: false // false
};
const setOption = async (datatext: any[], datasubtext: any[], dataValArray: any) => {
option.value = {
backgroundColor: 'transparent',
title: {
text: datatext[0] + '%',
subtext: datasubtext[0],
x: 'center',
y: 'center',
textStyle: {
fontSize: 26,
fontWeight: 'normal',
color: ['#67828c']
},
subtextStyle: {
color: '#67828c',
fontSize: 16,
align: 'center',
}
},
series: [{
//
name: "",
type: "pie",
radius: ["35%", "50%"],
startAngle: 180,
hoverAnimation: false,
avoidLabelOverlap: true,
z: 0,
zlevel: 0,
label: {
show: false,
normal: { show: false }
},
data: [{
value: 0,
name: "",
itemStyle: {
normal: {
color: Green
}
}
}]
},
{
//
name: "",
type: "gauge",
radius: "50%",
startAngle: 180,
clockwise: true,
splitNumber: 50,
hoverAnimation: true,
axisTick: {
show: false
},
splitLine: {
length: 20,
lineStyle: {
width: 1,
color: "#fff"
}
},
axisLabel: {
show: false
},
pointer: {
show: false
},
axisLine: {
lineStyle: {
opacity: 0
}
},
detail: {
show: false
},
data: [{
value: Math.round((dataValArray * 100)),
name: ""
}]
},
{
//
name: 'Line 1',
type: 'pie',
startAngle: 180,
clockWise: true,
radius: ['55%', '56%'],
itemStyle: {
normal: {
label: {
show: true
},
labelLine: {
show: false
},
}
},
hoverAnimation: false,
data: [{
value: Math.round((dataValArray * 100)),
itemStyle: {
normal: {
color: '#20da97'
}
}
}, {//
name: "",
value: 0,
label: {
position: 'inside',
// backgroundColor: {
// image: uploadedDataURL
// },
width: 16,
height: 16,
borderRadius: 20,
padding: 11
}
}, {
value: 100 - Math.round((dataValArray * 100)),
name: 'invisible',
itemStyle: {
normal: {
color: 'transparent', //
label: {
show: false
},
labelLine: {
show: false
}
}
}
}
]
}
]
};
};
onMounted(() => {
getData();
});
</script>
<template>
<v-chart class="chart" :option="option" v-if="JSON.stringify(option) != '{}'" />
</template>
<style scoped lang="scss"></style>

View File

@ -1,5 +1,26 @@
<!--
* @Author: 张宁 18339727226@163.com
* @Date: 2024-05-23 20:42:55
* @LastEditors: 张宁 18339727226@163.com
* @LastEditTime: 2024-05-30 13:49:47
* @FilePath: \welcome-system-screen\src\views\index\left-bottom.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<script setup lang="ts">
import { useDataStore } from "@/stores/index";
const dataStore = useDataStore();
const {forecast,forecastFill} = storeToRefs(dataStore)
const chartRef = ref(null)
const pieChartRef = ref(null)
onMounted(()=>{
if (chartRef) {
chartRef.value.init(forecast.value.total,forecast.value.reported)
}
if (pieChartRef) {
pieChartRef.value.init(forecastFill.value.total,forecastFill.value.reported)
}
})
</script>
<template>
@ -7,7 +28,9 @@
<div class="left-bottom">
<div class="content">
<div class="title">预报到报到率</div>
<div class="left-content"></div>
<div class="left-content">
<chart ref="chartRef"></chart>
</div>
<div class="bottom-title">
<div class="icons"></div>
<div class="tips">预报到填写总数</div>
@ -19,7 +42,9 @@
</div>
<div class="content">
<div class="title">预报到填写率</div>
<div class="right-content"></div>
<div class="right-content">
<pieChart ref="pieChartRef"></pieChart>
</div>
<div class="bottom-title">
<div class="icons"></div>
<div class="tips">新生总人数</div>
@ -47,21 +72,12 @@
margin-bottom: 20px;
}
.left-content {
.left-content,.right-content {
width: 105px;
height: 105px;
background: url("@/assets/img/zheke/lb_left.png");
background-size: cover;
background-position: center center;
margin-bottom: 10px;
}
.right-content {
width: 105px;
height: 105px;
background: url("@/assets/img/zheke/lb_right.png");
background-size: cover;
background-position: center center;
// background: url("@/assets/img/zheke/lb_left.png");
// background-size: cover;
// background-position: center center;
margin-bottom: 10px;
}

View File

@ -1,5 +1,31 @@
<script setup lang="ts">
import { useDataStore } from "@/stores/index";
const dataStore = useDataStore();
const { degreeDto } = storeToRefs(dataStore)
const rate = (total: any, registers: any) => {
return ((registers / total) * 100).toFixed(1)
}
const bkRate = computed(() => {
if (degreeDto.value?.length ) {
return rate(degreeDto.value[2].studentNumber, degreeDto.value[2].reportNumber)
} else {
return 0
}
})
const zkRate = computed(() => {
if (degreeDto.value?.length) {
return rate(degreeDto.value[0].studentNumber, degreeDto.value[0].reportNumber)
} else {
return 0
}
})
const zsbRate = computed(() => {
if (degreeDto.value?.length) {
return rate(degreeDto.value[1].studentNumber, degreeDto.value[1].reportNumber)
} else {
return 0
}
})
</script>
<template>
@ -13,14 +39,14 @@
<div class="content-left">
<div class="content-title title-top">统招本科</div>
<p class="item-title">统招本科总人数</p>
<p class="item-content">12,000</p>
<p class="item-content">{{ degreeDto[2]?degreeDto[2].studentNumber:'-' }}</p>
</div>
<div class="content-right">
<div class="right-title title-top item-title">报到率
<span class="title-num numBlue">84.5%</span>
<span class="title-num numBlue">{{ isNaN(bkRate) ? '-' : bkRate }}%</span>
</div>
<p class="item-title">今日报到人数</p>
<p class="item-content numBlue">3,000</p>
<p class="item-content numBlue">{{ degreeDto[2]?degreeDto[2].reportNumber:'-' }}</p>
</div>
</div>
</div>
@ -33,14 +59,14 @@
<div class="content-left">
<div class="content-title title-top tGreen">统招专科</div>
<p class="item-title">统招专科总人数</p>
<p class="item-content">12,000</p>
<p class="item-content">{{ degreeDto[0]?degreeDto[0].studentNumber:'-' }}</p>
</div>
<div class="content-right">
<div class="right-title title-top item-title">报到率
<span class="title-num numGreen">84.5%</span>
<span class="title-num numGreen">{{ isNaN(zkRate) ? '-' : zkRate }}%</span>
</div>
<p class="item-title">今日报到人数</p>
<p class="item-content numGreen">3,000</p>
<p class="item-content numGreen">{{ degreeDto[0]?degreeDto[0].reportNumber:'-' }}</p>
</div>
</div>
</div>
@ -53,14 +79,14 @@
<div class="content-left">
<div class="content-title title-top tGray">统招专升本</div>
<p class="item-title">统招专升本总人数</p>
<p class="item-content">12,000</p>
<p class="item-content">{{ degreeDto[1]?degreeDto[1].studentNumber:'-' }}</p>
</div>
<div class="content-right">
<div class="right-title title-top item-title">报到率
<span class="title-num numGrey">84.5%</span>
<span class="title-num numGrey">{{ isNaN(zsbRate) ? '-' : zsbRate }}%</span>
</div>
<p class="item-title">今日报到人数</p>
<p class="item-content numGrey">3,000</p>
<p class="item-content numGrey">{{ degreeDto[1]?degreeDto[1].reportNumber:'-' }}</p>
</div>
</div>
</div>
@ -124,16 +150,20 @@
.numBlue {
color: #69cbff;
}
.numGreen{
.numGreen {
color: #73eba8;
}
.numGrey{
.numGrey {
color: #84baef;
}
.tGreen{
color: #a9d9c7;
.tGreen {
color: #a9d9c7;
}
.tGray{
.tGray {
color: #9499b9;
}
}

View File

@ -1,4 +1,15 @@
<script setup lang="ts">
import { useDataStore } from "@/stores/index";
const dataStore = useDataStore();
const { totalDto } = storeToRefs(dataStore)
// +
const totalReport = computed(() => {
return (totalDto.value.reportNumber + totalDto.value.notReportNumber)
})
// /
const progress = computed(() => {
return ((totalDto.value.reportNumber / totalReport.value) * 100).toFixed(1)
});
@ -12,7 +23,7 @@
</div>
<div class="top-item">
<div class="top-item-title">已报到人数</div>
<div class="top-item-content">{{ 11024 }}</div>
<div class="top-item-content">{{ totalDto.reportNumber ?? '-' }}</div>
</div>
</div>
<div class="top-item-img">
@ -21,22 +32,22 @@
</div>
<div class="top-item">
<div class="top-item-title title-red">未报到人数</div>
<div class="top-item-content content-red"> {{ 11024 }} </div>
<div class="top-item-content content-red"> {{ totalDto.notReportNumber ?? '-' }} </div>
</div>
</div>
</div>
<div class="left-bottom">
<div class="bottom-item">
<div class="bottom-item-title">预报到总人数</div>
<div class="bottom-item-content"> {{ 11024 }} </div>
<div class="bottom-item-content"> {{ isNaN(totalReport) ? '-' : totalReport }} </div>
</div>
<div class="bottom-item">
<div class="bottom-item-title">录取总人数</div>
<div class="bottom-item-content"> {{ 11024 }} </div>
<div class="bottom-item-content"> {{ totalDto.totalNumber ?? '-' }} </div>
</div>
<div class="bottom-item">
<div class="bottom-item-title">迎新总进度</div>
<div class="bottom-item-content"> 95% </div>
<div class="bottom-item-content"> {{ isNaN(progress) ? '-' : progress}}% </div>
</div>
</div>
</template>
@ -73,6 +84,7 @@
font-family: YouSheBiaoTiHei;
font-weight: 400;
font-size: 36px;
text-align: center;
color: #FFFFFF;
background: linear-gradient(80deg, rgba(112, 162, 253, 0.64) 0%, rgba(182, 198, 229, 0.64) 50%, rgba(255, 255, 255, 0.94) 100%, );
-webkit-background-clip: text;
@ -107,12 +119,14 @@
color: #fbeedb;
text-shadow: 0px 2px 6px rgba(27, 24, 19, 0.31);
font-style: italic;
// background: linear-gradient(0deg, rgba(152,115,58,1) 0%, rgba(205,169,114,1) 41.89453125%, rgba(232,215,190,1) 84.1796875%, rgba(255,236,221,0.27) 100%);
// -webkit-background-clip: text;
// -webkit-text-fill-color: transparent;
.bottom-item-content{
.bottom-item-content {
margin-top: 10px;
font-size: 26px;
text-align: center;
}
}
}

View File

@ -1,16 +1,17 @@
<!--
* @Author: 张宁 18339727226@163.com
* @Date: 2024-05-23 19:38:24
* @LastEditors: 张宁 18339727226@163.com
* @LastEditTime: 2024-05-31 18:55:10
* @FilePath: \welcome-system-screen\src\views\index\right-bottom-two.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<script setup lang="ts">
import { color } from "echarts";
import { ElMessage } from "element-plus";
const option = ref({});
const getData = () => {
let dateList = ['飞行棋制造工程', '航空服务艺术与管理', '空中乘务', '飞行技术', '航空航天工程', "飞行器数字化制造技术"]
let numList = [1, 5, 2, 4, 9, 6]
setOption(dateList, numList)
};
const setOption = async (xData: any[], yData: any[]) => {
option.value = {
xAxis: {
const xData:Ref<any> = ref([])
const yData:Ref<any> = ref([])
const option = reactive({
xAxis: {
type: "category",
data: xData,
boundaryGap: true, //
@ -56,16 +57,24 @@ const setOption = async (xData: any[], yData: any[]) => {
}
}
],
};
});
const getData = (params: any) => {
let dateList = params.map((el: any) => el.professionalName)
let numList = params.map((el: any) => el.reportNumber)
setOption(dateList, numList)
};
const setOption = async (x: any[], y: any[]) => {
console.log(x, y);
xData.value = x
yData.value = y
};
onMounted(() => {
getData();
});
defineExpose({ getData })
</script>
<template>
<v-chart class="chart" :option="option" v-if="JSON.stringify(option) != '{}'" />
<!-- v-if="JSON.stringify(option) != '{}'" -->
<v-chart class="chart" :option="option" />
</template>
<style scoped lang="scss"></style>

View File

@ -8,6 +8,12 @@ import { ElMessage } from "element-plus";
const settingStore = useSettingStore();
const { defaultOption, indexConfig } = storeToRefs(settingStore);
//
import { useDataStore } from "@/stores/index";
const dataStore = useDataStore();
const { provinceDto } = storeToRefs(dataStore)
const state = reactive<any>({
list: [],
defaultOption: {
@ -20,725 +26,6 @@ const state = reactive<any>({
scroll: true,
});
const getData = () => {
state.list = [
{
"provinceName": "北京",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "上海",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "天津",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "重庆",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "河北",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 1
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "山西",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "内蒙古",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "辽宁",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "吉林",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "黑龙江",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "江苏",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "浙江",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "安徽",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "福建",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "江西",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "山东",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 1
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "河南",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 1
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "湖北",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 2
}
]
},
{
"provinceName": "湖南",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "广东",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "广西",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "海南",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "四川",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "贵州",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "云南",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "西藏",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "陕西",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "甘肃",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "青海",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "宁夏",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "香港",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "澳门",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "台湾",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
},
{
"provinceName": "新疆",
"progress": 0,
"degreesDto": [
{
"degreesName": "统招专科",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招专升本",
"paymentCompleted": 0,
"nonPayment": 0
},
{
"degreesName": "统招本科",
"paymentCompleted": 0,
"nonPayment": 0
}
]
}
]
};
const comName = computed(() => {
if (indexConfig.value.rightBottomSwiper) {
return SeamlessScroll;
@ -746,10 +33,6 @@ const comName = computed(() => {
return EmptyCom;
}
});
onMounted(() => {
getData();
});
</script>
<template>
@ -767,7 +50,7 @@ onMounted(() => {
:singleHeight="state.defaultOption.singleHeight" :step="state.defaultOption.step"
:limitScrollNum="state.defaultOption.limitScrollNum" :hover="state.defaultOption.hover"
:singleWaitTime="state.defaultOption.singleWaitTime" :wheel="state.defaultOption.wheel"> -->
<div class="table-row" v-for="(item, i) in state.list">
<div class="table-row" v-for="(item, i) in provinceDto">
<div class="row-item">{{ i + 1 }}</div>
<div class="row-item">{{ item.provinceName }}</div>
<div class="row-item" v-for="(peo) in item.degreesDto">{{ peo.paymentCompleted }}</div>

View File

@ -1,25 +1,40 @@
<script setup lang="ts">
import { ElMessage } from "element-plus";
import { useTimeStore } from "@/stores/index";
import { useTimeStore, useDataStore } from "@/stores/index";
import { storeToRefs } from "pinia";
const timeStore = useTimeStore()
const { nowTitle } = storeToRefs(timeStore)
const dataStore = useDataStore()
const { bkPay, zkPay, zsbPay } = storeToRefs(dataStore)
const activeTab = ref(0);
const tabs = [
{ title: '本科', value: 3900, dateList: ['11-6', '11-7', '11-8', '11-9', '11-10', "11-11"], numList: [1, 5, 2, 4, 9, 6] },
{ title: '专科', value: 4500, dateList: ['1-6', '1-7', '1-8', '1-9', '1-10', "1-11"], numList: [4, 9, 6, 1, 5, 2] },
{ title: '专升本', value: 6000, dateList: ['2-6', '2-7', '2-8', '2-9', '2-10', "2-11"], numList: [1, 6, 5, 2, 4, 9,] },
];
const tabs = ref([
{ title: '本科', value: 0, dateList: ['11-6', '11-7', '11-8', '11-9', '11-10', "11-11"], numList: [1, 5, 2, 4, 9, 6] },
{ title: '专科', value: 0, dateList: ['1-6', '1-7', '1-8', '1-9', '1-10', "1-11"], numList: [4, 9, 6, 1, 5, 2] },
{ title: '专升本', value: 0, dateList: ['2-6', '2-7', '2-8', '2-9', '2-10', "2-11"], numList: [1, 6, 5, 2, 4, 9,] },
]);
const changeTab = (index: number) => {
activeTab.value = index;
setOption(tabs[index].dateList, tabs[index].numList)
setOption(tabs.value[index].dateList, tabs.value[index].numList)
};
const option = ref({});
// pinia
// ------
const getData = () => {
// console.log('bkPay.value',bkPay.value);
let dateList = ['11-6', '11-7', '11-8', '11-9', '11-10', "11-11"]
let numList = [1, 5, 2, 4, 9, 6]
// tabs.value[0].dateList = bkPay.value?.statistics
// tabs.value[1].dateList = zkPay.value?.statistics
// tabs.value[2].dateList = zsbPay.value?.statistics
// tabs.value[0].numList = bkPay.value?.statistics
// tabs.value[1].numList = zkPay.value?.statistics
// tabs.value[2].numList = zsbPay.value?.statistics
setOption(dateList, numList)
};
const setOption = async (xData: any[], yData: any[]) => {
@ -161,20 +176,20 @@ const setOption = async (xData: any[], yData: any[]) => {
};
};
onMounted(() => {
getData();
});
defineExpose({getData})
</script>
<template>
<div class="tabs">
<div class="no-tab">
<p>{{ nowTitle }}缴费总人数</p>
<p> 12,000 </p>
<p> {{ bkPay?.todayPayDto?.payNum }} </p>
</div>
<div v-for="(tab, index) in tabs" :key="index" :class="{ active: activeTab === index }" @click="changeTab(index)">
<p>{{ tab.title }}</p>
<p>{{ tab.value }}</p>
<p v-if="index == 0">{{ bkPay?.todayPayDto?.bkPayNum }}</p>
<p v-if="index == 1">{{ bkPay?.todayPayDto?.zkPayNum }}</p>
<p v-if="index == 2">{{ bkPay?.todayPayDto?.zsbPayNum }}</p>
</div>
</div>
<!-- <div class="tab-content"> -->

View File

@ -6,6 +6,22 @@ import { storeToRefs } from "pinia";
import EmptyCom from "@/components/empty-com";
import { ElMessage } from "element-plus";
import { useDataStore } from "@/stores/index";
const dataStore = useDataStore();
const { rankingDto,collageId } = storeToRefs(dataStore)
/**
* @description: 计算报到率
* @return {*}
*/
const getRate = (report: any, total: any) => {
if (report && total) {
return ((report / total) * 100).toFixed(1);
} else {
return 0;
}
}
const settingStore = useSettingStore();
const { defaultOption, indexConfig } = storeToRefs(settingStore);
const state = reactive<any>({
@ -20,151 +36,6 @@ const state = reactive<any>({
scroll: true,
});
const getData = () => {
state.list = [
{
"collegeName": "机电工程学院",
"collegeId": "08db7155-bdf1-4633-884e-95735ef931f2",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "美术与设计学院",
"collegeId": "08db81af-0a80-4dd8-8bd6-06e7020530b9",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "人文教育学院",
"collegeId": "08db81af-168b-402d-87d1-bdd7ee3c4c47",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "体育学院",
"collegeId": "08db81af-2af2-491e-8a45-a15a4fd43431",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "医学院",
"collegeId": "08db81af-5df9-4b57-834e-3ee6bbf307d4",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "音乐学院",
"collegeId": "08db81af-73b7-40e0-8103-2c38a19d03cc",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "冰冰艺术学院",
"collegeId": "08dc6f26-c565-49d7-8dc8-2bc8926d8516",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "社会科学研究院",
"collegeId": "08dc70b7-825a-4298-83cc-e3eaf08abf52",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 3
},
{
"collegeName": "绿色生态学院",
"collegeId": "08dc70b7-a640-49af-8ab7-9f520aac02d9",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 2
},
{
"collegeName": "建筑工程学院",
"collegeId": "08db81ae-fc5f-424e-868b-503bd234e8f2",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "计算机信息工程学院",
"collegeId": "08db81ae-e39d-4155-8d7a-c118d629e422",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "航天航空学院",
"collegeId": "08db7156-2004-4be4-8dfe-1ac36ebdb422",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "外国语学院",
"collegeId": "08db716b-7370-4ef3-812e-7edd113ff017",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "电子与信息学院",
"collegeId": "08db721b-e050-4480-8087-60a179e75d16",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "工商管理学院",
"collegeId": "08db751e-3c7a-406a-814e-f81580e3e1c3",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "财经学院",
"collegeId": "08db7882-089f-4105-8d01-920fa1e7327a",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "传媒学院",
"collegeId": "08db81ae-3f52-4765-8c8b-459f4b947a2c",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "法学院",
"collegeId": "08db81ae-721b-4e41-8fd7-4ecdb0b00508",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 2
},
{
"collegeName": "国际交流学院",
"collegeId": "08db81ae-9d43-4ae0-8d0f-541ba77af10d",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
},
{
"collegeName": "xie学院",
"collegeId": "08dc79fe-336b-49db-8c74-7e1a3184f2d7",
"isTeacher": false,
"reportNumber": 0,
"totalNumber": 0
}
]
};
const comName = computed(() => {
if (indexConfig.value.rightBottomSwiper) {
return SeamlessScroll;
@ -173,9 +44,10 @@ const comName = computed(() => {
}
});
onMounted(() => {
getData();
});
const onSelectData = (id: any) => {
dataStore.setCollageId(id)
}
</script>
<template>
@ -194,14 +66,18 @@ onMounted(() => {
:singleHeight="state.defaultOption.singleHeight" :step="state.defaultOption.step"
:limitScrollNum="state.defaultOption.limitScrollNum" :hover="state.defaultOption.hover"
:singleWaitTime="state.defaultOption.singleWaitTime" :wheel="state.defaultOption.wheel"> -->
<div class="table-row" v-for="(item, i) in state.list">
<template v-for="(item, i) in rankingDto">
<div class="table-row" :class="{ 'table-row-active': item.collegeId === collageId }"
@click="onSelectData(item.collegeId)">
<div class="row-item">{{ i + 1 }}</div>
<div class="row-item" :title=item.collegeName >{{ item.collegeName }}</div>
<div class="row-item" :title=item.collegeName>{{ item.collegeName }}</div>
<div class="row-item">{{ item.reportNumber }}</div>
<div class="row-item">{{ item.totalNumber }}</div>
<div class="row-item">{{ '0%' }}</div>
<div class="row-item">{{ getRate(item.reportNumber, item.totalNumber) }}%</div>
<!-- <div class="row-item" v-for="(peo) in item.degreesDto">{{ peo.paymentCompleted }}</div> -->
</div>
</template>
<!-- </component> -->
</div>
</div>
@ -240,6 +116,7 @@ onMounted(() => {
line-height: 50px;
margin-bottom: 2px;
color: #E6E6FB;
cursor: pointer;
&:hover {
background: repeating-linear-gradient(0deg, #0042b3 0%, #0049ca 50%, #0042b3 100%);
@ -253,11 +130,17 @@ onMounted(() => {
white-space: nowrap;
}
}
.table-row-active {
background: repeating-linear-gradient(0deg, #0042b3 0%, #0049ca 50%, #0042b3 100%);
}
}
.overflow-y-auto {
overflow-y: auto;
}
::-webkit-scrollbar {
width: 0px;
}

View File

@ -1,20 +1,30 @@
<!--
* @Author: 张宁 18339727226@163.com
* @Date: 2024-05-22 08:40:56
* @LastEditors: 张宁 18339727226@163.com
* @LastEditTime: 2024-05-30 14:58:06
* @FilePath: \welcome-system-screen\src\views\index\right-top.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<script setup lang="ts">
import { useDataStore } from "@/stores/index";
const dataStore = useDataStore();
const { payDto } = storeToRefs(dataStore)
</script>
<template>
<div class="right-top">
<div class="items">
<div class="item-title">已缴费人数</div>
<div class="item-content">12,120</div>
<div class="item-content">{{ payDto.payNum }}</div>
</div>
<div class="items item-two">
<div class="item-title">已报到未缴费人数</div>
<div class="item-content">4,049</div>
<div class="item-content">{{ payDto.reportNotPay }}</div>
</div>
<div class="items item-three">
<div class="item-title">生活用品缴费人数</div>
<div class="item-content">4,049</div>
<div class="item-content">{{ payDto.consumerGoods }}</div>
</div>
</div>