Files
dormnotice-front/README.md
T
2026-09-20 15:47:34 +08:00

6.3 KiB
Raw Blame History

家校宿舍通知(dorm-notice)

武校家校信息发布模块 —— 宿舍通知 子模块。用于德育处 / 生活管理科 / 宿管向住宿生家长发布宿舍类通知, 并回收家长的已读与回执(确认知悉 / 按单据填报)。

以 D:\项目管理\FamilyActivity(家校活动信息发布)为模板工程改造:保留其 Vue3 + Vite + view-ui-plus + alova + vite-plugin-mock 技术栈、布局壳层、权限菜单契约、表格/分页/选人/富文本/附件等基础设施,业务域整体替换为「宿舍通知」。 完整的功能与接口说明见 docs/宿舍通知模块-功能与接口说明-v1.md。

快速开始

# 纯前端演示(内置 mock 数据,无需后端)
npm run dev:mock

# 联调本地后端
npm run dev

# 构建(产物直出 dist/)
npm run build

mock 模式默认访问 http://localhost:8078/(端口被占用时 Vite 会自动改用 8079,以控制台输出为准)。

环境要求:Node 20(package.json 里 nodeversion: 20.19.4)。

与「活动」模块的核心差异

维度 活动信息发布 宿舍通知
收件人粒度 班级(receiveType=class) 宿舍房间(receiveType=room)
应收人数口径 班级学生数 覆盖房间的实际入住床位数
回执形态 报名(人数 + 随行 + 费用) 仅通知 / 需确认(打开即确认) / 需填报(按单据字段)
回执字段 固定 动态,由发布方声明
紧急程度 无 普通 / 重要 / 紧急(家长端置顶标红)
宿管协同 无 needSupervisor 需宿管到场配合
覆盖统计 按班 按楼栋统计房间数 / 床位数

为什么必须下沉到房间:武校寄宿制下同班学生分住不同楼栋房间,按班级下发会让「1号楼 3 层明日停水」触达全校家长, 真正受影响的房间只占少数,回执率也失去管理意义。

功能范围

发布端(教师 / 宿管 / 德育处)

菜单 路由 说明
我发布的 /list 自己发布的通知,按流程状态分标签(全部/已发布/已截止/已结束/草稿)
全部通知 /noticelist 管理端全量列表(同一组件,去掉 scope=user)
发布通知 /list/new 新建 / 编辑 / 复用再发;支持存草稿与定时发布
通知详情 /list/detail、/noticelist/detail type=0 管理视角(已读进度 + 回执进度 + 编辑/打印/复用);type=1 查看视角
回执情况 /receipts 按「楼栋 · 房间」分组的回执/填报名单 + 汇总卡 + 代确认/取消/退回 + 催办 + 导出 CSV
通知统计 /stats 总量卡、类型分布、月度趋势、楼栋覆盖、发布人分布、我发布通知的回执明细
宿舍设置 /setting 通知类型字典(拖拽排序/启停)+ 宿舍楼栋房间台账(含住宿生床位安排 / 宿舍长指定)+ 自定义组(宿管/生活老师)

家长端(家长 / 学生,演示用)

菜单 路由 说明
宿舍通知箱 /par/notices 左侧分桶列表(全部/待回执/已回执/已结束)+ 右侧详情与回执操作
我的回执 /par/mine 同一组件,默认落「已回执」

三档回执方式

  • 仅通知(none):阅读即知悉,不产生回执记录,只统计已读。适合作息调整、停水停电、卫生检查、违规通报、假期安排。
  • 需确认(confirm):家长打开通知详情即自动确认,无需点击;仅在自动确认失败时给手动兜底按钮。
  • 需填报(fill):家长按发布方声明的字段提交单据(留宿申请 / 家长探视 / 宿舍调整),截止前可修改、可取消。

三套预设填报模板

留宿申请单、家长探视预约单、宿舍调整确认单 —— 字段口径与后端一致,可一键套用后按需增删。

目录结构(本模块相关)

src/
├── api/module/dorm.ts          # 接口封装:baseApi / noticeApi / dormApi / settingApi
├── types/dorm.ts               # 类型契约(枚举、VO/DTO、请求入参)
├── assets/mock/dormapi.ts      # 全量 mock(约 2200 行,确定性伪随机)
├── views/dorm/
│   ├── NoticeList.vue          # 我发布的 / 全部通知
│   ├── NewNotice.vue           # 发布通知(含宿舍选择器、填报字段编辑器)
│   ├── NoticeDetails.vue       # 通知详情
│   ├── Receipts.vue            # 回执情况
│   ├── NoticeStats.vue         # 通知统计
│   ├── DormSetting.vue         # 宿舍设置(通知类型 / 楼栋房间 / 自定义组)
│   └── ParentNotices.vue       # 家长端通知箱
├── router/routes.ts            # 路由 + modId 契约
├── assets/config/menu.ts       # 本地菜单兜底
└── utils/menuRoute.ts          # 平台模块配置 → 内部路由的统一解析器
docs/宿舍通知模块-功能与接口说明-v1.md

mock 数据(演示要点)

  • 4 栋宿舍楼:1/2 号男生(6+5 层 × 8 间 × 8 床)、3 号女生(4 层 × 6 间 × 6 床)、4 号武术特长班(3 层 × 6 间 × 4 床)
  • roomId = buildingId*10000 + floor*100 + index,如 10305 = 1 号楼 3 层 05 房(房间号 305)
  • 1 床 1 生,含武校风格姓名、文化班 + 套路表演班/散打竞技班/拳击班混合编排、家长信息
  • 14 条通知覆盖 13 种类型 × 4 种流程状态 × 3 档回执方式 × 3 种紧急程度,含草稿 / 已撤回 / 定时未到 / 已截止等边界
  • 家长端演示身份固定为 1 号楼 305 室 的第一位学生,只看该房间命中的通知
  • 写操作(发布、编辑、删除、处理回执、提交回执)都会改内存数据,刷新后行为一致;重启 dev server 复位

接入后端时需改的地方

  1. vite.config.ts 中 /api 代理 target —— 现仍指向模板的 familyactivity 上下文,需换成本模块后端。
  2. src/assets/config/menu.ts —— 本地菜单兜底,接入 GetUserMod 后以接口返回为准(modId 契约见路由注释)。
  3. src/assets/mock/index.ts —— prod mock 入口,正式构建不启用(localEnabled: mode === "mock")。