feat: Add attendance management dialog and sidebar components

- Implemented AttendanceManagementDialog.vue for managing student attendance with search and filter functionalities.
- Created AttendanceSidebar.vue to display attendance statistics and lists of students by status.
- Introduced HomeActions.vue for various actions including upload and random picker.
- Developed HomeworkGrid.vue to display homework and attendance cards in a masonry layout.
- Added glow effect styles in glow.scss for enhanced UI interactions.
- Updated index.scss to include glow styles.
This commit is contained in:
Sunwuyuan
2025-11-29 13:59:32 +08:00
parent b3595422c7
commit 8d9b9a3f32
8 changed files with 1062 additions and 798 deletions
+19 -4
View File
@@ -1,8 +1,18 @@
# 创建新的作业编辑对话框组件
<template>
<v-dialog v-model="dialogVisible" max-width="900" width="auto" @click:outside="handleClose">
<v-dialog
v-model="dialogVisible"
:fullscreen="isMobile"
max-width="900"
width="auto"
@click:outside="handleClose"
>
<v-card border>
<v-card-title>{{ title }}</v-card-title>
<v-card-title class="d-flex align-center">
{{ title }}
<v-spacer />
<v-btn icon="mdi-close" variant="text" @click="handleClose" />
</v-card-title>
<v-card-subtitle>
{{ autoSave ? autoSavePromptText : manualSavePromptText }}
</v-card-subtitle>
@@ -15,7 +25,7 @@
auto-grow
placeholder="使用换行表示分条"
rows="5"
width="480"
:width="isMobile ? '100%' : '480'"
@click="updateCurrentLine"
@keyup="updateCurrentLine"
/>
@@ -102,7 +112,7 @@
</div>
<!-- Quick Tools Section -->
<div v-if="showQuickTools" class="quick-tools ml-4" style="min-width: 180px;">
<div v-if="showQuickTools && !isMobile" class="quick-tools ml-4" style="min-width: 180px;">
<!-- Numeric Keypad -->
<div class="numeric-keypad mb-4">
<div class="keypad-row">
@@ -214,6 +224,7 @@
<script>
import dataProvider from "@/utils/dataProvider";
import {getSetting} from "@/utils/settings";
import { useDisplay } from "vuetify";
export default {
name: "HomeworkEditDialog",
@@ -236,6 +247,10 @@ export default {
}
},
emits: ["update:modelValue", "save"],
setup() {
const { mobile } = useDisplay();
return { isMobile: mobile };
},
data() {
return {
content: "",