KindergartenUI/src/views/system/StatisticsParent/index.vue

532 lines
17 KiB
Vue
Raw Normal View History

2023-04-17 18:48:39 +08:00
<template>
<div class="app-container">
<classe @classelist="classelist" style="width: 500px; display: inline;" ref="classe"></classe>
<parent @parentlist="parentlist" style="width: 500px; display: inline;" ref="resets"></parent>
<el-form size="small" :inline="true" v-show="showSearch">
<el-form-item label="日期" prop="orderStatus" label-width="60px">
<el-date-picker
v-model="valuetime"
type="daterange"
align="right"
@change="monthStartEndTimechange"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="getlist">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="list">
<el-table-column label="家长姓名" align="center" prop="parentName" />
<el-table-column label="打卡天数" align="center" prop="loginCount" />
<el-table-column label="查看打卡日历" align="center" prop>
<template slot-scope="scope">
<el-button type="text" @click="look(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="query.pageNum"
:limit.sync="query.pageSize"
@pagination="getlist"
/>
<el-dialog width="1600px" title="打卡统计" :visible.sync="loginCountshow" append-to-body>
<div class="picker">
年度
<el-date-picker
v-model="year"
type="year"
placeholder="选择年"
format="yyyy"
value-format="yyyy"
></el-date-picker>
</div>
<div class="dio" @click="false">
<el-calendar v-model="yearmonths[0]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[1]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[2]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[3]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[4]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[5]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[6]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[7]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[8]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[9]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[10]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
<el-calendar v-model="yearmonths[11]" style="width:380px">
<template slot="dateCell" slot-scope="{date, data}">
<div :class="{ selected : isSelected(date, data) }" style="font-size:14px">
<div class="solar" style="font-size:14px">{{ data.day.split('-')[2] }}</div>
<div
class="lunar"
style="font-size:2px"
:class="{ festival : isFestival(date, data) }"
>{{ solarToLunar(date, data) }}</div>
</div>
</template>
</el-calendar>
</div>
</el-dialog>
</div>
</template>
<script>
import { clockStatistics } from "@/api/system/StatisticsParent";
import classe from "../../assembly/classe.vue";
import parent from "../../assembly/parent.vue";
import calendar from "../../calendar.js";
export default {
name: "StatisticsParent",
components: { classe, parent },
data() {
return {
loginCountshow: false,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
}
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
}
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
}
}
]
},
valuetime: "",
loading: false,
showSearch: true, // 显示搜索条件
list: [],
total: 0,
query: {
pageNum: 1,
pageSize: 10,
parentInfoId: "",
classId: "",
startDate: "",
endDate: ""
},
selectedDates: ["2023-03-12", "2023-04-12", "2023-04-15", "2023-04-24"],
date: new Date(),
yearmonths: [],
year: "2023"
};
},
created() {
this.newtime();
this.getlist();
},
mounted() {},
watch: {
year() {
this.yearmonths = [
this.year + "-01",
this.year + "-02",
this.year + "-03",
this.year + "-04",
this.year + "-05",
this.year + "-06",
this.year + "-07",
this.year + "-08",
this.year + "-09",
this.year + "-10",
this.year + "-11",
this.year + "-12"
];
}
},
methods: {
// 是否选中日期
isSelected: function(slotDate, slotData) {
return this.selectedDates.includes(slotData.day);
},
// 是否节假日
isFestival(slotDate, slotData) {
let solarDayArr = slotData.day.split("-");
let lunarDay = calendar.solar2lunar(
solarDayArr[0],
solarDayArr[1],
solarDayArr[2]
);
// 公历节日\农历节日\农历节气
let festAndTerm = [];
festAndTerm.push(
lunarDay.festival == null ? "" : " " + lunarDay.festival
);
festAndTerm.push(
lunarDay.lunarFestival == null ? "" : "" + lunarDay.lunarFestival
);
festAndTerm.push(lunarDay.Term == null ? "" : "" + lunarDay.Term);
festAndTerm = festAndTerm.join("");
return festAndTerm != "";
},
// 公历转农历
solarToLunar(slotDate, slotData) {
let solarDayArr = slotData.day.split("-");
let lunarDay = calendar.solar2lunar(
solarDayArr[0],
solarDayArr[1],
solarDayArr[2]
);
// 农历日期
let lunarMD = lunarDay.IMonthCn + lunarDay.IDayCn;
// 公历节日\农历节日\农历节气
let festAndTerm = [];
festAndTerm.push(
lunarDay.festival == null ? "" : " " + lunarDay.festival
);
festAndTerm.push(
lunarDay.lunarFestival == null ? "" : "" + lunarDay.lunarFestival
);
festAndTerm.push(lunarDay.Term == null ? "" : "" + lunarDay.Term);
festAndTerm = festAndTerm.join("");
return festAndTerm == "" ? lunarMD : festAndTerm;
},
//获取list
getlist() {
clockStatistics(
this.query.pageNum,
this.query.pageSize,
this.query.parentInfoId,
this.query.classId,
this.query.startDate,
this.query.endDate
).then(res => {
this.list = res.rows;
this.total = res.total;
});
},
//今天的时间
newtime() {
let nowDate = new Date();
let dates = {
year: nowDate.getFullYear(), // 获取当前年份
month: nowDate.getMonth() + 1, //获取当前月份
date: nowDate.getDate() //获取当前日期
};
this.yearmonths = [
dates.year + "-01",
dates.year + "-02",
dates.year + "-03",
dates.year + "-04",
dates.year + "-05",
dates.year + "-06",
dates.year + "-07",
dates.year + "-08",
dates.year + "-09",
dates.year + "-10",
dates.year + "-11",
dates.year + "-12"
];
console.log(this.year);
// //拼接
// if (dates.month < 10) {
// this.query.startDate = dates.year + "-0" + dates.month;
// this.query.endDate = dates.year + "-0" + dates.month;
// } else {
// this.query.startDate = dates.year + "." + dates.month;
// this.query.endDate = dates.year + "-" + dates.month;
// }
// if (dates.date < 10) {
// this.query.startDate = this.startDate + "-0" + dates.date;
// this.query.endDate = this.endDate + "-0" + dates.date;
// } else {
// this.query.startDate = this.startDate + "-" + dates.date;
// this.query.endDate = this.endDate + "-" + dates.date;
// }
},
look() {
this.loginCountshow = true;
},
//家长
parentlist(e) {
this.query.parentInfoId = e;
},
//班级
classelist(e) {
this.query.classId = e;
},
//重置
resetQuery() {
this.newtime();
this.valuetime = "";
this.getlist();
},
//选择时期区间
monthStartEndTimechange(e) {
this.query.startDate = this.formatDate(new Date(e[0]).getTime());
this.query.endDate = this.formatDate(new Date(e[1]).getTime());
},
formatDate(time, timetype) {
let date = new Date(time); //13位时间戳
//let date = new Date(parseInt(time) * 1000); //10位时间戳
let y = date.getFullYear();
let MM = date.getMonth() + 1;
MM = MM < 10 ? "0" + MM : MM;
let d = date.getDate();
d = d < 10 ? "0" + d : d;
return y + "-" + MM + "-" + d;
}
}
};
</script>
<style lang='scss' scoped>
::v-deep .el-calendar__button-group .el-button-group {
width: 0;
height: 0;
overflow: hidden;
.el-button {
overflow: hidden;
width: 0 !important;
height: 0 !important;
}
}
::v-deep .el-calendar-table .el-calendar-day {
padding: 0;
}
::v-deep .el-calendar-table .el-calendar-day {
height: 65px;
}
.app-container {
padding: 20px 0 20px 10px;
}
::v-deep .el-card__header {
border: none;
}
::v-deep .el-form {
display: inline;
}
/**隐藏上一月、本月、下一月*/
.el-calendar__button-group {
display: none;
}
/**月份居中*/
.el-calendar__title {
width: 100%;
text-align: center;
}
/**日期div的样式*/
.el-calendar-table tr td:first-child {
border-left: 0px;
}
.el-calendar-table td {
min-height: 110px;
min-width: 110px;
border-right: 0px;
}
.el-calendar-table td.is-selected {
background-color: white;
}
.el-calendar-table .el-calendar-day {
height: 100%;
padding: 0px;
text-align: center;
}
.el-calendar-table .el-calendar-day > div {
height: 65px;
text-align: center;
}
/**日期div的样式-公历*/
.el-calendar-table .el-calendar-day > div .solar {
text-align: center;
padding-top: 5px;
}
/**日期div的样式-农历*/
.el-calendar-table .el-calendar-day > div .lunar {
padding-top: 5px;
width: 100%;
text-align: center;
}
/**日期div的样式-选中*/
.el-calendar-table .el-calendar-day > div.selected {
background-color: #fef2f2;
border: 3px solid #fb0;
border-radius: 10px;
text-align: center;
}
/**本月周末设置为红色*/
.el-calendar-table .current:nth-last-child(-n + 2) .solar {
color: red;
}
/**本月农历设置为灰色*/
.el-calendar-table .current .lunar {
color: #606266;
width: 100%;
}
/**本月农历节日设置为红色*/
.el-calendar-table .current .lunar.festival {
color: red;
}
/**禁用点击效果*/
/*.el-calendar-table td {*/
/*pointer-events: none;*/
/*}*/
.dio {
display: flex;
flex-wrap: wrap;
margin: 0 0 0 0;
}
.picker {
display: inline-block;
position: absolute;
right: 80px;
top: 20px;
padding-right: 80px;
font-size: 18px;
font-weight: 600;
}
::v-deep .el-input--medium .el-input__inner {
font-size: 16px;
}
</style>