|
|
@@ -8,19 +8,16 @@
|
|
|
</div>
|
|
|
<div class="top_detail">
|
|
|
<div class="detail_photo">
|
|
|
- <img
|
|
|
- class="img"
|
|
|
- src="https://img1.baidu.com/it/u=1398895526,1958525606&fm=253&fmt=auto&app=120&f=JPEG?w=1280&h=800"
|
|
|
- />
|
|
|
+ <img class="img" :src="userInfo?.headImage" />
|
|
|
<div class="photo_icon">
|
|
|
<el-icon size="20" color="#2493F1"><ArrowDownBold /></el-icon>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="detail_msg">
|
|
|
- <div>姓名:张晓晓</div>
|
|
|
- <div>性别:男</div>
|
|
|
- <div>编号:2216161</div>
|
|
|
- <div>部门:学生</div>
|
|
|
+ <div>姓名:{{ userInfo?.name }}</div>
|
|
|
+ <div>性别:{{ userInfo?.sexId === 1 ? "男" : "女" }}</div>
|
|
|
+ <div>编号:{{ userInfo?.cardNo }}</div>
|
|
|
+ <div>部门:{{ userInfo?.departMent }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -37,15 +34,15 @@
|
|
|
<div class="msg_change">
|
|
|
<div
|
|
|
class="change_box"
|
|
|
- :class="currentTimeRang === 0 ? 'active' : ''"
|
|
|
- @click="changeTimeRang(0)"
|
|
|
+ :class="currentTimeRang === 1 ? 'active' : ''"
|
|
|
+ @click="changeTimeRang(1)"
|
|
|
>
|
|
|
本学期
|
|
|
</div>
|
|
|
<div
|
|
|
class="change_box"
|
|
|
- :class="currentTimeRang === 1 ? 'active' : ''"
|
|
|
- @click="changeTimeRang(1)"
|
|
|
+ :class="currentTimeRang === 3 ? 'active' : ''"
|
|
|
+ @click="changeTimeRang(3)"
|
|
|
>
|
|
|
本周
|
|
|
</div>
|
|
|
@@ -83,13 +80,14 @@
|
|
|
</div>
|
|
|
|
|
|
<!-- 图表展示区域 -->
|
|
|
- <div class="bottom_chart" ref="pieChart">123</div>
|
|
|
+ <div class="bottom_chart" ref="pieChart"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
import { ref, onMounted } from "vue";
|
|
|
+import { useRoute } from "vue-router";
|
|
|
import * as Echarts from "echarts";
|
|
|
import { countUpNum } from "@/utils/countUpNum";
|
|
|
|
|
|
@@ -99,11 +97,18 @@ import { reqGetStudentAttendance } from "@/api/user/index";
|
|
|
//@ts-ignore
|
|
|
import { decryptDes } from "@/utils/des.ts";
|
|
|
|
|
|
-const value = ref(50);
|
|
|
-const value2 = ref(50);
|
|
|
-const value3 = ref(50);
|
|
|
-const value4 = ref(50);
|
|
|
-const value5 = ref(50);
|
|
|
+const $route = useRoute();
|
|
|
+
|
|
|
+// 准时数据
|
|
|
+const value = ref(0);
|
|
|
+// 请假数据
|
|
|
+const value2 = ref(0);
|
|
|
+// 迟到数据
|
|
|
+const value3 = ref(0);
|
|
|
+// 超时打卡数据
|
|
|
+const value4 = ref(0);
|
|
|
+// 未打卡数据
|
|
|
+const value5 = ref(0);
|
|
|
|
|
|
// DOM元素
|
|
|
const valueDom = ref();
|
|
|
@@ -112,43 +117,85 @@ const valueDom3 = ref();
|
|
|
const valueDom4 = ref();
|
|
|
const valueDom5 = ref();
|
|
|
|
|
|
+// 图表实例
|
|
|
let myPieChart: any;
|
|
|
+// 图表DOM元素
|
|
|
const pieChart = ref();
|
|
|
|
|
|
-// 切换考勤统计时间 0本学期 1本周 2本月
|
|
|
-const currentTimeRang = ref(0);
|
|
|
+// 切换考勤统计时间 1本学期 2本月 3本周
|
|
|
+const currentTimeRang = ref(1);
|
|
|
|
|
|
+// 图表数据
|
|
|
const chartData = ref([
|
|
|
- { value: 5, name: "准时" },
|
|
|
- { value: 6, name: "请假" },
|
|
|
- { value: 3, name: "迟到" },
|
|
|
- { value: 2, name: "超时打卡" },
|
|
|
- { value: 1, name: "未打卡" },
|
|
|
+ { value: 0, name: "准时" },
|
|
|
+ { value: 0, name: "请假" },
|
|
|
+ { value: 0, name: "迟到" },
|
|
|
+ { value: 0, name: "超时打卡" },
|
|
|
+ { value: 0, name: "未打卡" },
|
|
|
]);
|
|
|
|
|
|
+// 打卡总次数
|
|
|
+const total = ref(0);
|
|
|
+
|
|
|
+// 用户id
|
|
|
+const userId = ref();
|
|
|
+// 用户信息
|
|
|
+const userInfo = ref();
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
+ const obj = JSON.parse(decodeURIComponent($route.query.obj as string));
|
|
|
+ userInfo.value = obj;
|
|
|
+ userId.value = obj.id;
|
|
|
// 获取学生历史出勤数据
|
|
|
getStudentAttendance();
|
|
|
- myPieChart = Echarts.init(pieChart.value);
|
|
|
- initPieChart();
|
|
|
-
|
|
|
- getCountUpNum();
|
|
|
});
|
|
|
|
|
|
// 获取学生历史出勤数据
|
|
|
const getStudentAttendance = async () => {
|
|
|
const res = await reqGetStudentAttendance({
|
|
|
- userId: 7967,
|
|
|
- dateTime: 1,
|
|
|
+ userId: userId.value,
|
|
|
+ dateTime: currentTimeRang.value,
|
|
|
});
|
|
|
// console.log(res);
|
|
|
if ((res as any).code == 200) {
|
|
|
const result = JSON.parse(decryptDes(res.data));
|
|
|
- console.log(result);
|
|
|
+ // console.log(result);
|
|
|
+
|
|
|
+ // 准时数据
|
|
|
+ value.value = result.punctuality;
|
|
|
+ // 请假数据
|
|
|
+ value2.value = result.askForLeave;
|
|
|
+ // 迟到数据
|
|
|
+ value3.value = result.beLate;
|
|
|
+ // 超时打卡数据
|
|
|
+ value4.value = result.clockOut;
|
|
|
+ // 未打卡数据
|
|
|
+ value5.value = result.notClockingIn;
|
|
|
+
|
|
|
+ // 整理图表数据
|
|
|
+ chartData.value[0].value = result.punctuality;
|
|
|
+ chartData.value[1].value = result.askForLeave;
|
|
|
+ chartData.value[2].value = result.beLate;
|
|
|
+ chartData.value[3].value = result.clockOut;
|
|
|
+ chartData.value[4].value = result.notClockingIn;
|
|
|
+
|
|
|
+ // 获取打卡总次数
|
|
|
+ total.value = chartData.value.reduce((pre, ele) => {
|
|
|
+ return pre + ele.value;
|
|
|
+ }, 0);
|
|
|
+
|
|
|
+ // 初始化扇形图
|
|
|
+ initPieChart();
|
|
|
+
|
|
|
+ // 让数字跳动
|
|
|
+ getCountUpNum();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+// 初始化扇形图
|
|
|
const initPieChart = () => {
|
|
|
+ myPieChart = Echarts.init(pieChart.value);
|
|
|
+
|
|
|
const options = {
|
|
|
title: {
|
|
|
text: "总次数",
|
|
|
@@ -158,7 +205,7 @@ const initPieChart = () => {
|
|
|
fontSize: 14,
|
|
|
color: "#D5E3EA",
|
|
|
},
|
|
|
- subtext: "200",
|
|
|
+ subtext: " " + total.value,
|
|
|
subtextStyle: {
|
|
|
fontSize: 18,
|
|
|
color: "#D5E3EA",
|
|
|
@@ -192,7 +239,7 @@ const initPieChart = () => {
|
|
|
},
|
|
|
formatter: (params: any) => {
|
|
|
const valueObj: any = chartData.value.find(
|
|
|
- (item) => item.name === params
|
|
|
+ (item: any) => item.name === params
|
|
|
);
|
|
|
return params + "{a|" + valueObj.value + "}";
|
|
|
},
|
|
|
@@ -219,16 +266,13 @@ const initPieChart = () => {
|
|
|
|
|
|
myPieChart.setOption(options);
|
|
|
};
|
|
|
+
|
|
|
// 考勤统计切换时间范围按钮回调
|
|
|
const changeTimeRang = (value: number) => {
|
|
|
if (currentTimeRang.value !== value) {
|
|
|
- if (value === 0) {
|
|
|
- currentTimeRang.value = 0;
|
|
|
- } else if (value === 1) {
|
|
|
- currentTimeRang.value = 1;
|
|
|
- } else if (value === 2) {
|
|
|
- currentTimeRang.value = 2;
|
|
|
- }
|
|
|
+ currentTimeRang.value = value;
|
|
|
+ myPieChart.dispose();
|
|
|
+ getStudentAttendance();
|
|
|
}
|
|
|
};
|
|
|
|