|
@@ -0,0 +1,206 @@
|
|
|
+<template>
|
|
|
+ <n-space vertical>
|
|
|
+ <n-table striped :data="tableData">
|
|
|
+ <thead>
|
|
|
+ <tr>
|
|
|
+ <th>节次</th>
|
|
|
+ <th>周一</th>
|
|
|
+ <th>周二</th>
|
|
|
+ <th>周三</th>
|
|
|
+ <th>周四</th>
|
|
|
+ <th>周五</th>
|
|
|
+ <th>周六</th>
|
|
|
+ <th>周日</th>
|
|
|
+ </tr>
|
|
|
+ </thead>
|
|
|
+ <tbody>
|
|
|
+ <tr v-for="time in Object.keys(tableData)" :key="time">
|
|
|
+ <td>{{ time }}</td>
|
|
|
+ <template v-for="dayOfWeek in [1, 2, 3, 4, 5, 6, 7]" :key="dayOfWeek">
|
|
|
+ <td v-if="tableData[time][dayOfWeek]" :rowspan="tableData[time][dayOfWeek]['colspan']">
|
|
|
+ <span >{{ tableData[time][dayOfWeek]["startTime"] }} -- {{ tableData[time][dayOfWeek]["endTime"] }} --
|
|
|
+ {{ tableData[time][dayOfWeek]['colspan'] }}-- {{ dayOfWeek }} </span>
|
|
|
+ </td>
|
|
|
+ <td v-if=" JSON.stringify(tableData[time]) === '{}' "><span>无课</span></td>
|
|
|
+
|
|
|
+ </template>
|
|
|
+ <!-- <td>
|
|
|
+ <span v-if="tableData[time].length === 0 || !tableData[time][1]">无课</span>
|
|
|
+ <span v-else> {{ tableData[time][1] && tableData[time][1]["startTime"] }}-{{ tableData[time][1]["endTime"]
|
|
|
+ }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <span v-if="tableData[time].length === 0 || !tableData[time][2]">无课</span>
|
|
|
+ <span v-else> {{ tableData[time][2] && tableData[time][2]["startTime"] }}-{{ tableData[time][2]["endTime"] }}
|
|
|
+ </span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <span v-if="tableData[time].length === 0 || !tableData[time][3]">无课</span>
|
|
|
+ <span v-else> {{ tableData[time][3] && tableData[time][3]["startTime"] }} -{{ tableData[time][3]["endTime"]
|
|
|
+ }}</span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <span v-if="tableData[time].length === 0 || !tableData[time][4]">无课</span>
|
|
|
+ <span v-else> {{ tableData[time][4] && tableData[time][4]["startTime"] }}-{{ tableData[time][4]["endTime"] }}
|
|
|
+ </span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <span v-if="tableData[time].length === 0 || !tableData[time][5]">无课</span>
|
|
|
+ <span v-else> {{ tableData[time][5] && tableData[time][5]["startTime"] }}-{{ tableData[time][5]["endTime"] }}
|
|
|
+ </span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <span v-if="tableData[time].length === 0 || !tableData[time][6]">无课</span>
|
|
|
+ <span v-else> {{ tableData[time][6] && tableData[time][6]["startTime"] }}-{{ tableData[time][6]["endTime"] }}
|
|
|
+ </span>
|
|
|
+ </td>
|
|
|
+ <td>
|
|
|
+ <span v-if="tableData[time].length === 0 || !tableData[time][7]">无课</span>
|
|
|
+ <span v-else> {{ tableData[time][7] && tableData[time][7]["startTime"] }}-{{ tableData[time][7]["endTime"] }}
|
|
|
+ </span>
|
|
|
+ </td> -->
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+ </n-table>
|
|
|
+ </n-space>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+import { reactive, ref } from "vue";
|
|
|
+import { query_1 } from '~/src/service/api/curriculum'
|
|
|
+
|
|
|
+
|
|
|
+const params = reactive({})
|
|
|
+//课程表数据
|
|
|
+const tableData = ref([{
|
|
|
+ id: 0,
|
|
|
+ week: 0,
|
|
|
+ startTime: "",
|
|
|
+ endTime: "",
|
|
|
+ roomId: 0,
|
|
|
+ classId: 0,
|
|
|
+ assistantId: 0,
|
|
|
+ teacherId: 0,
|
|
|
+ categoryId: 0,
|
|
|
+ subjectsId: 0,
|
|
|
+ createTime: "",
|
|
|
+ modifyTime: "",
|
|
|
+ createUid: 0,
|
|
|
+ disabled: '',
|
|
|
+}])
|
|
|
+
|
|
|
+function prsData(tableData) {
|
|
|
+ let obj = [
|
|
|
+ "08:00",
|
|
|
+ "09:00",
|
|
|
+ "10:00",
|
|
|
+ "11:00",
|
|
|
+ "12:00",
|
|
|
+ "13:00",
|
|
|
+ "14:00",
|
|
|
+ "15:00",
|
|
|
+ "16:00",
|
|
|
+ "17:00"
|
|
|
+ ]
|
|
|
+ let arr = {
|
|
|
+ "08:00": {},
|
|
|
+ "09:00": {},
|
|
|
+ "10:00": {},
|
|
|
+ "11:00": {},
|
|
|
+ "12:00": {},
|
|
|
+ "13:00": {},
|
|
|
+ "14:00": {},
|
|
|
+ "15:00": {},
|
|
|
+ "16:00": {},
|
|
|
+ "17:00": {}
|
|
|
+ }
|
|
|
+ tableData.forEach((r) => {
|
|
|
+ // console.log(r);
|
|
|
+ if (r.startTime && r.endTime) {
|
|
|
+ const startTime = r.startTime.split(" ")[1];
|
|
|
+ const dayOfWeek = getDayOfWeek(r.startTime);
|
|
|
+ const endTime = r.endTime.split(" ")[1];
|
|
|
+ if ( JSON.stringify(arr[startTime]) === "{}" ) {
|
|
|
+ r.colspan = new Date(r.endTime).getHours() - new Date( r.startTime ).getHours() + 1
|
|
|
+ arr[startTime][r.week] = r
|
|
|
+ let n = 1
|
|
|
+ while (n < r.colspan) {
|
|
|
+ r['juest'] = true
|
|
|
+ const index = obj.indexOf(startTime) + n
|
|
|
+ arr[obj[index]][r.week] = r
|
|
|
+ n++
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // for (let time in arr) {
|
|
|
+ // console.log(time);
|
|
|
+ // if (time >= startTime && time <= endTime) {
|
|
|
+
|
|
|
+ // if (!arr[time][dayOfWeek]) {
|
|
|
+ // arr[time][dayOfWeek] = [];
|
|
|
+ // }
|
|
|
+ // arr[time][dayOfWeek]=r;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // console.log(r);
|
|
|
+ // console.log(startTime);
|
|
|
+ // if (!arr[startTime]) {
|
|
|
+ // arr[startTime] = {}; // 初始化
|
|
|
+ // }
|
|
|
+ // if (!arr[startTime][dayOfWeek]) {
|
|
|
+ // arr[startTime][dayOfWeek] = r;
|
|
|
+ // } else {
|
|
|
+ // // 如果已存在数据,则将其合并到已有数据中
|
|
|
+ // arr[startTime][dayOfWeek] = Object.assign(arr[startTime][dayOfWeek], r);
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ console.log("____", arr);
|
|
|
+ return arr;
|
|
|
+}
|
|
|
+
|
|
|
+function getDayOfWeek(dateString) {
|
|
|
+ const date = new Date(dateString);
|
|
|
+ const dayOfWeek = date.getDay();
|
|
|
+ // 将星期几转换为从1开始,而不是0
|
|
|
+ return dayOfWeek === 0 ? 7 : dayOfWeek;
|
|
|
+}
|
|
|
+
|
|
|
+async function fetchCourse() {
|
|
|
+ const res = await query_1(1, 999999, params)
|
|
|
+ tableData.value = prsData(res.data.data)
|
|
|
+ // console.log(tableData.value)
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+// function groupByWeek(data) {
|
|
|
+// const groupedData = {};
|
|
|
+// data.forEach((course) => {
|
|
|
+// const week = course.week;
|
|
|
+// if (!groupedData[week]) {
|
|
|
+// groupedData[week] = [];
|
|
|
+// }
|
|
|
+// groupedData[week].push(course);
|
|
|
+// });
|
|
|
+// console.log(groupedData);
|
|
|
+// return groupedData;
|
|
|
+// }
|
|
|
+
|
|
|
+fetchCourse()
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+th {
|
|
|
+ color: rgb(141, 141, 141);
|
|
|
+ font-size: calc(var(--baseSize, 14px) * 1.1);
|
|
|
+ font-weight: bold;
|
|
|
+}
|
|
|
+
|
|
|
+th,
|
|
|
+td {
|
|
|
+ padding: 16px 12px;
|
|
|
+ font-size: var(--baseSize, 14px);
|
|
|
+ outline: 1px solid rgb(226, 226, 226);
|
|
|
+ text-align: center;
|
|
|
+ color: rgb(99, 99, 99);
|
|
|
+}
|
|
|
+</style>
|