返回社区
公开项目
可预览原型图
by 匿名用户

实验室设备借用管理系统

管理实验设备的借用、归还、报修、库存盘点,支持设备分类查询、借用历史追踪、逾期提醒,使用Flask+MySQL实现,可加入二维码扫描功能。

AI 摘要:公开项目案例,包含 53 条需求、4866 个交付文件、技术栈 flask、mysql、vue;引用和总结时请优先使用本详情页。

预览原型图

版本

v1 · 完成

需求

53 条

文件

4866 个 · 114 MB

论文

暂无

答辩技巧

暂无

需求树

53 条
FR-AUTH-001

用户注册与登录

functional
pending
完成

登录表单:学号/工号(6-12位数字或字母)+ 密码(6-20位)。前端校验非空;后端验密成功返回JWT token(有效期24h),失败返回错误码1002+文案"账号或密码错误"。连续3次失败锁定该账号15分钟,锁定期间返回"账号已临时锁定,请15分钟后重试"。首次登录可走注册流程:填写学号/工号、姓名、密码、手机号(选填),学号查重。

FR-AUTH-002

角色权限分级

functional
pending
完成

三种角色——管理员、借用者、维修员。管理员:可访问全部功能模块。借用者:仅可浏览设备列表、提交借用申请、查看自己的借用记录和归还记录,不可操作审批/盘点/报修管理。维修员:仅可查看报修工单列表、更新维修状态。前端按角色动态渲染菜单;后端每个接口校验JWT中的role字段,越权返回403+错误码1003。

FR-AUTH-003

个人信息管理

functional
pending
完成

登录用户可修改自己的密码(需验证旧密码)、绑定/修改手机号和邮箱。管理员可在用户列表页重置任意用户的密码(随机生成8位临时密码,首次登录强制修改)。修改密码后使当前JWT失效,需重新登录。

FR-DEV-001

设备分类管理

functional
pending
完成

树形分类结构,支持两级(如"仪器仪表→示波器")。管理员可新增子分类(填写分类名称,同一父级下名称唯一)、编辑分类名称、删除分类。若分类下已有设备则禁止删除,返回"该分类下有N台设备,无法删除"。左侧树形导航 + 右侧分类下设备列表的布局。

FR-DEV-002

设备信息CRUD与批量导入

functional
pending
完成

设备字段:设备编号(全局唯一,6位字母数字)、名称、规格型号、分类(下拉选择)、购置日期(日期选择器)、价格(数字,两位小数)、存放位置、状态(枚举:可借/已借出/维修中/报废)、备注。新增表单必填:编号、名称、分类;编号重复后端返回错误码2001。支持CSV批量导入:上传CSV文件,前端预览解析结果,后端逐行校验后批量入库,失败行返回行号+原因。

FR-DEV-003

设备列表筛选搜索与分页

functional
pending
完成

设备列表页顶部搜索栏:关键词输入框(模糊匹配设备编号/名称)、分类下拉筛选、状态下拉筛选(可借/已借出/维修中/报废/全部)。点击搜索/筛选后刷新列表。分页:默认每页20条,可选10/20/50。排序:默认按购置日期倒序,支持点击表头按编号/名称/价格排序。三态:loading骨架屏、空数据"暂无匹配设备"占位图、接口异常时显示重试按钮。

FR-DEV-004

设备详情页

functional
pending
完成

点击设备列表行或扫码跳转设备详情页。展示全部字段(编号、名称、规格型号、分类、购置日期、价格、存放位置、状态、备注),状态用彩色标签区分。下方展示"最近借用记录"列表(最近5条,含借用人、借用时间、归还时间、状态)。管理员可见"编辑"和"删除"按钮,借用者可见"申请借用"按钮(仅状态为"可借"时可点击)。

FR-DEV-005

设备状态流转控制

functional
pending
完成

状态机规则:可借→已借出(借出时)、已借出→可借(归还时)或已借出→维修中(归还时发现损坏)、可借→维修中(报修时)、维修中→可借(修复验收)或维修中→报废(无法修复)。所有状态变更记录日志(操作人、时间、旧状态→新状态)。非法流转(如从"已借出"直接报修)后端拦截返回错误码2002+对应文案。

FR-QR-001

设备二维码生成与打印

functional
pending
完成

每个设备详情页有"生成二维码"按钮,后端用qrcode库生成PNG图片,编码内容为设备编号。支持单设备二维码下载(PNG,300dpi)和批量生成(勾选多台设备→一键生成→打包下载ZIP)。二维码下方标注设备编号和名称,适合打印贴标。批量打印时支持A4标签纸排版(每页8个标签)。

FR-QR-002

扫码识别设备

functional
pending
完成

前端导航栏有"扫码"按钮,点击打开摄像头扫码界面(使用html5-qrcode库)。扫码成功后解析设备编号,自动跳转设备详情页。摄像头不可用时降级为手动输入设备编号的文本框。扫码界面三态:摄像头加载中→扫码中(取景框动画)→扫码成功(绿色勾+自动跳转)/失败(红色提示"未识别到有效设备编号")。

FR-QR-003

扫码快速归还

functional
pending
完成

管理员在"归还管理"页面点击"扫码归还",打开摄像头扫描设备二维码,识别后直接跳转到该设备的归还确认弹窗。弹窗展示:设备编号、名称、当前借用人、借用时间、预计归还日期。管理员确认设备状况(正常/轻微损坏/严重损坏三个选项),点击"确认归还"完成操作。若选择损坏则归还后自动创建报修工单。

FR-BORROW-001

借用申请表单

functional
pending
完成

借用者在设备详情页点击"申请借用",弹出借用申请表单。字段:选择设备(从设备列表多选,最多5台,超出提示"单次最多借用5台")、借用用途(文本框,必填,最多200字)、预计归还日期(日期选择器,必填,不得早于当天,不得超过当前日期+系统最长借用天数)。提交前校验:①设备状态必须为"可借",若某设备已有未完成借用项则拒绝并提示"设备[编号]已有待处理借用";②后端校验当前用户是否存在严重逾期记录(逾期≥7天未归还),若存在则拒绝提交返回错误码2004+文案"您有严重逾期未归还设备,请先处理"。提交后生成一张借用单(含多个设备项borrow_order_items),每个设备项独立状态为"待审批"。

FR-BORROW-002

借用审批管理

functional
pending
完成

管理员"待审批"列表页:表格展示借用单编号、借用人姓名/学号、用途、申请时间、预计归还日期;每行可展开显示该借用单下的设备项列表(设备名称/编号/独立状态)。每个设备项有独立的"通过"和"拒绝"按钮。点击拒绝弹出理由输入框(必填,最多100字)。点击"通过"时后端须二次校验该设备当前状态是否为"可借"——若已被他人借出则拒绝本次审批,提示"设备[编号]已被他人借出",该设备项自动变为"已拒绝"(原因为"设备已被他人借出"),同借用单其他设备项不受影响。审批通过后对应设备状态更新为"已借出"并记录借出时间;拒绝后设备项状态变为"已拒绝",设备保持"可借"。借用单下所有设备项均已终态处理完毕时,借用单整体状态联动更新。操作结果通过站内通知告知借用者。

FR-BORROW-003

借用单状态跟踪

functional
pending
完成

借用单下每个设备项独立生命周期状态:待审批→已通过(待归还)→已归还;或待审批→已拒绝。已通过的设备项若超过借用单预计归还日期未归还,自动变更为"已逾期"。每个状态变更记录时间戳和操作人,在借用单详情页以时间线形式展示。借用者查看详情时可看到归还信息(归还时间、设备状况),但不可看到管理员填写的内部备注。借用者和管理员均可查看借用单详情,但仅管理员可操作审批/强制归还。

FR-BORROW-004

我的借用记录

functional
pending
完成

借用者侧边栏"我的借用"页面:表格展示本人全部借用记录(借用单编号、设备名称、借用时间、预计归还日期、实际归还时间、状态)。顶部状态筛选标签(全部/待审批/已通过/已归还/已拒绝/已逾期)。逾期行红色高亮 + 角标"逾期N天"。点击行展开借用单详情。三态:loading / 空数据"暂无借用记录" / 异常重试。

FR-RETURN-001

归还登记

functional
pending
完成

管理员"归还管理"页面:展示所有含"已通过(待归还)"设备项的借用单列表,按预计归还日期升序(临近到期排前面)。可搜索借用人学号/姓名或设备编号定位。点击某行"归还"按钮,弹出归还确认弹窗:列出该借用单下所有待归还的设备项,逐项确认设备状况(正常/轻微损坏/严重损坏)+备注文本框(选填)。确认归还后:设备状态恢复"可借",设备项状态变为"已归还",记录实际归还时间和设备状况。若归还前设备项状态为"已逾期",归还成功后自动清除逾期标记并恢复用户借用权限(解除严重逾期限制),同时在归还记录中留存逾期天数。当借用单下所有设备项均已归还,借用单整体状态变更为"已归还"。

FR-RETURN-002

归还损坏自动报修

functional
pending
完成

归还时若设备状况选择"轻微损坏"或"严重损坏",归还成功后系统自动创建一条报修工单。工单自动填充:设备编号/名称、报修原因为"归还时发现损坏:{借用者填写的备注}"、报修人为当前管理员。设备状态由"已借出"直接流转为"维修中",而非"可借"。同时在归还记录中标记"已触发报修"。

FR-RETURN-003

逾期自动标记

functional
pending
完成

系统定时任务每日凌晨2:00执行一次:扫描所有borrow_order_items中状态为"已通过(待归还)"且实际归还时间为空、当前时间超过借用单预计归还日期的设备项,将其状态自动更新为"已逾期"。同时触发逾期分级提醒逻辑(FR-OVERDUE-002),逾期状态变更与提醒发送在同一事务中完成保证一致性。逾期后仪表盘逾期计数+1,借用者的"我的借用"中该记录红色高亮。

FR-OVERDUE-001

逾期列表视图

functional
pending
完成

管理员"逾期管理"页面:表格展示所有逾期借用单,字段含借用人姓名/学号/手机号、设备名称/编号、借用时间、预计归还日期、逾期天数。按逾期天数降序排列(严重逾期排前面)。支持按逾期天数区间筛选(1-3天/4-7天/7天以上)。每行有"联系借用人"按钮(展示手机号/邮箱)和"强制归还"按钮(管理员手动标记归还)。三态覆盖。

FR-OVERDUE-002

逾期分级提醒

functional
pending
完成

逾期第1天:站内通知 + (如已绑定邮箱)发送邮件提醒"请尽快归还"。逾期第3天:再次站内通知+邮件,文案升级为"已逾期3天,请立即归还,否则将限制借用权限"。逾期第7天:标记"严重逾期",站内通知+邮件+限制该用户发起新借用(后端校验:若有严重逾期记录,返回错误码2004"您有严重逾期未归还设备,请先处理")。

FR-OVERDUE-003

逾期统计

functional
pending
完成

管理员仪表盘"逾期统计"区域:展示本月逾期总数、当前逾期中数量、逾期率(逾期数/总借用数×100%)。支持按时间段(本月/本学期/自定义)和用户类型(教师/学生)筛选。下方柱状图展示近6个月每月逾期趋势。数据通过后端聚合查询返回。

FR-REPAIR-001

报修登记

functional
pending
完成

管理员在设备详情页或报修管理页点击"报修",弹出报修登记表单。字段:选择设备(下拉搜索,仅可选"可借"状态的设备;已借出设备如需报修,须通过归还流程的"损坏"选项自动触发报修)、故障描述(必填,文本框,最多500字)、故障图片(可选,最多3张,每张≤5MB,支持jpg/png)。提交后:设备状态自动变更为"维修中",生成报修工单(编号规则:REP+年月日+3位序号),状态初始为"待维修",记录报修时间和报修人。

FR-REPAIR-002

维修工单跟踪

functional
pending
完成

维修员"报修工单"页面:表格展示工单编号、设备名称/编号、故障描述摘要、报修时间、状态(待维修/维修中/已修复/无法修复)。维修员点击"接单"→状态变为"维修中"并记录接单时间。维修中可填写维修日志(多次追加,每次含文字+可选图片)。维修完成后点击"修复完成"→状态变为"已修复",等待管理员验收。若无法修复则选择"无法修复",设备状态变为"报废"。

FR-REPAIR-003

维修验收

functional
pending
完成

管理员"待验收"列表展示状态为"已修复"的工单。点击"验收",弹出确认弹窗:展示工单完整信息+维修日志。验收通过→设备状态恢复"可借",工单状态变为"已验收",记录验收时间和验收人。验收不通过→工单退回"维修中"并附退回原因(必填)。验收通过后该设备的借用功能恢复正常。

FR-INV-001

盘点任务创建

functional
pending
完成

管理员"盘点管理"页面点击"新建盘点",弹窗配置:盘点名称(默认"YYYY年MM月盘点")、盘点范围(全部设备/按分类选择)、备注。创建后生成盘点清单:表格列出范围内所有设备(编号、名称、分类、存放位置、系统记录状态),每行初始核对状态为"待核对"。盘点任务状态:进行中→已确认。

FR-INV-002

实物核对登记

functional
pending
完成

盘点清单页面:逐行核对,每行可选择"账实相符/缺失/多余/损坏"。支持扫码枪或摄像头扫码设备二维码,扫描后自动定位到对应行并高亮,方便快速核对。已核对行绿色标记,未核对行保持白色。可中途保存进度,下次继续。页面顶部显示核对进度(已核对N台/共M台,百分比进度条)。

FR-INV-003

盘点差异报告

functional
pending
完成

盘点核对完成后点击"生成差异报告",系统自动汇总:缺失设备清单、损坏设备清单、状态不符清单(如系统显示"可借"但实际"损坏")。报告以表格+统计卡片形式展示。支持导出为Excel文件(含盘点时间、盘点人、差异明细)。导出按钮在差异报告页面底部。

FR-INV-004

盘点结果确认与库存修正

functional
pending
完成

管理员审核差异报告后点击"确认盘点结果",弹出二次确认"确认后将自动修正库存数据,此操作不可撤销"。确认后:缺失设备状态标记为"报废"并记录报废原因"盘点缺失",多余设备(实物有但系统无)提示管理员手动补录,损坏设备自动创建报修工单,状态不符的设备按实际状态更新。盘点任务状态变为"已确认",归档到盘点历史列表。

FR-DASH-001

管理员仪表盘

functional
pending
完成

管理员登录后首页即仪表盘。顶部4张统计卡片:设备总数(点击跳转设备列表FR-DEV-003)、当前借出数(点击跳转归还管理FR-RETURN-001)、逾期数(点击跳转逾期列表FR-OVERDUE-001)、维修中数量(点击跳转报修工单列表FR-REPAIR-002)。下方左侧"近30天借用趋势"折线图(X轴日期/Y轴借用笔数),右侧"设备状态分布"饼图(可借/已借出/维修中/报废占比)。数据通过后端聚合API获取,仪表盘加载时展示骨架屏。若后端返回空数据则卡片显示0。

FR-DASH-002

借用排行榜

functional
pending
完成

仪表盘下方展示两张Top10排行榜卡片。"热门设备Top10":按借用次数降序,每行展示设备名称+借用次数。"活跃用户Top10":按借用次数降序,每行展示用户姓名+借用次数。支持切换时间范围(本月/本学期/全部)。数据取自借用记录表聚合查询。三态覆盖。

TR-DB-001

MySQL数据库设计与迁移

technical
pending
完成

设计以下核心表:users(id/username/password_hash/role/name/phone/email/locked_until)、categories(id/name/parent_id)、devices(id/code/name/spec/category_id/purchase_date/price/location/status/remark/is_deleted)、borrow_orders(id/code/user_id/purpose/expected_return_date/overall_status/created_at,不直接关联单台设备)、borrow_order_items(id/borrow_order_id/device_id/item_status/return_time/return_condition/approver_id/reject_reason,每个设备项独立跟踪审批与归还状态)、repair_orders(id/code/device_id/description/images/status/repairer_id/created_at/completed_at)、inventory_tasks(id/name/scope/status/created_at/confirmed_at)、inventory_items(id/task_id/device_id/check_status/remark)、notifications(id/user_id/content/is_read/created_at)。使用Flask-Migrate管理迁移脚本,外键约束+软删除标记(devices表is_deleted字段)。

TR-API-001

Flask RESTful API架构

technical
pending
完成

按模块划分蓝图:auth_bp(/api/auth)、device_bp(/api/devices)、borrow_bp(/api/borrows)、return_bp(/api/returns)、repair_bp(/api/repairs)、inventory_bp(/api/inventory)、dashboard_bp(/api/dashboard)、notification_bp(/api/notifications)。统一响应格式:{code: 0, data: ..., message: "ok"}。JWT鉴权装饰器@login_required注入当前用户,角色校验装饰器@require_role("admin")。全局异常捕获返回统一错误格式。分页参数page/page_size,默认1/20。

TR-API-002

API错误码规范

technical
pending
完成

定义全局错误码枚举类:0=成功,1001=参数校验失败,1002=账号或密码错误,1003=无权限,1004=账号已锁定,2001=设备不存在,2002=非法状态流转,2003=设备已被借出,2004=有严重逾期记录,3001=借用单不存在,3002=借用单状态不允许此操作,4001=报修工单不存在,5001=盘点任务不存在,9999=服务器内部错误。每个错误码对应中文message,前端统一拦截后toast提示。

TR-FE-001

Vue 3前端项目架构

technical
pending
完成

Vue 3 + Vite + Vue Router + Pinia + Axios。目录结构:views/(按模块分目录)、components/(公共组件:表格、表单、弹窗、扫码器)、stores/(auth、device、borrow状态管理)、router/(动态路由按角色过滤)、api/(Axios实例+请求拦截器注入JWT+响应拦截器统一错误处理)、utils/(日期格式化、校验函数)。使用Element Plus组件库。Axios baseURL通过环境变量注入。

TR-QR-001

二维码技术实现方案

technical
pending
完成

后端:Python qrcode[pil]库,生成300dpi PNG,编码设备编号纯文本。批量生成时用zipfile打包。前端扫码:html5-qrcode库,适配Chrome/Edge(https环境调用摄像头),降级方案为手动输入框。扫码结果用正则/DEV-\w{6}/验证是否为有效设备编号格式,无效则提示重新扫描。

TR-SEED-001

数据库种子数据

technical
pending
完成

预置数据脚本:管理员账号admin/Admin123456、借用者测试账号user001/Test123456、维修员账号repair001/Test123456。预置分类3个(仪器仪表、计算机设备、工具耗材),每个分类下5台样例设备(状态分布可借/已借出/维修中)。预置2条已完成的借用+归还记录供演示。使用Flask CLI命令"flask seed"一键执行。

TR-PROTOTYPE-001

高保真原型HTML

technical
pending
完成

单文件HTML+Tailwind CDN+Fake数据,覆盖所有UI叶子页面:登录/注册页、设备列表(含筛选搜索分页)、设备详情、借用申请表单弹窗、我的借用记录、管理员待审批列表、归还管理、逾期列表、报修工单列表、盘点清单核对、管理员仪表盘(统计卡片+趋势图+排行榜)。每页需演示三态:正常数据态、空数据态(占位图+引导文案)、异常态(错误提示+重试按钮)。借用申请等关键流程需演示loading态。

TR-UIUX-001

UI/UX设计文档

technical
pending
完成

Tailwind设计token:主色#2563EB(蓝)、成功#16A34A(绿)、警告#F59E0B(黄)、危险#DC2626(红)、逾期#EF4444(红)。组件清单:按钮(主/次/危险/文字)、表格(可排序表头+行展开)、表单(输入框/下拉/日期选择/文本域/文件上传)、弹窗(确认/表单)、标签(设备状态彩色标签)、骨架屏、空态占位、Toast通知。信息架构:左侧导航菜单树(按角色渲染)。关键流程mermaid状态图:设备状态机、借用单状态机、报修工单状态机。

NFR-PERF-001

核心列表分页性能

nonfunctional
pending
完成

设备列表、借用记录列表、报修工单列表三类高频分页查询,在1000条数据规模下P95响应时间≤500ms。实现方式:数据库索引覆盖筛选字段(code/name/status/category_id),分页使用LIMIT+OFFSET,避免SELECT *(明确列名),关联查询使用JOIN而非子查询。前端列表使用虚拟滚动(Element Plus表格已内置)避免DOM膨胀。

FR-NOTIFY

站内通知

functional
pending
完成

站内通知模块:提供通知列表查看、未读角标、已读标记等功能,为审批结果、逾期提醒、归还确认等场景提供统一的消息触达通道。

FR-NOTIFY-001

通知列表页

functional
pending
完成

通知列表页面:顶部"全部/未读"筛选标签切换,表格展示通知内容摘要、发送时间、已读状态(未读行加粗高亮)。每行可点击标记单条已读;顶部"全部标为已读"按钮一键操作。右上角导航栏铃铛图标 + 红色未读数字角标(实时从后端获取)。分页默认20条,按时间倒序排列。三态:loading骨架屏 / 空数据"暂无通知"占位图 / 接口异常重试按钮。

FR-NOTIFY-002

通知推送触发规则

functional
pending
完成

以下事件触发站内通知写入notifications表:①审批通过→告知借用者"您的借用单[编号]已通过";②审批拒绝→告知借用者"您的借用单[编号]已被拒绝,原因:[拒绝理由]";③逾期提醒→告知借用者"设备[名称]已逾期,请尽快归还"(配合FR-OVERDUE-002分级文案);④归还确认→告知借用者"设备[名称]已归还成功"。通知写入失败不阻塞主流程,记录错误日志。

FR-USER

用户管理

functional
pending
完成

用户管理模块:管理员可查看用户列表、搜索筛选、重置密码、变更角色;普通用户可修改个人信息。

FR-USER-001

用户列表页

functional
pending
完成

管理员"用户管理"页面:表格展示学号/工号、姓名、角色、手机号、邮箱、注册时间。顶部搜索栏支持按姓名/学号模糊搜索,角色下拉筛选(全部/管理员/借用者/维修员)。分页默认20条,可选10/20/50。每行操作列有"重置密码"按钮(点击后随机生成8位临时密码,首次登录强制修改,弹出提示"已重置,临时密码为:XXXX")。三态:loading骨架屏 / 空数据"暂无用户" / 异常重试。

FR-USER-002

用户角色变更

functional
pending
完成

管理员在用户列表页每行的角色字段点击可切换角色(下拉选择:借用者/维修员/管理员)。变更即时生效,后端校验:①不能移除最后一个管理员(若当前仅剩1名管理员且操作目标为该管理员,拒绝并提示"系统中至少保留一名管理员");②变更后该用户当前JWT失效需重新登录。操作记录日志(操作人、目标用户、旧角色→新角色、时间)。

FR-BORROW

借用流程

functional
pending
完成

借用流程模块:借用者提交借用申请、管理员审批、借用单状态跟踪、借用者查看个人借用历史,以及借用期限等系统配置。

FR-BORROW-005

借用期限配置

functional
pending
完成

管理员"系统设置"页面可配置最长借用天数(默认30天,输入框仅允许1-365的整数)。修改后立即生效,不影响已提交的借用单。借用申请提交时(FR-BORROW-001)校验:预计归还日期 ≤ 借用日期 + 当前最长借用天数,超期则拒绝并提示"借用期限不能超过N天"。该值持久化到系统配置表或环境变量中。

FR-INV

盘点管理

functional
pending
完成

盘点管理模块:管理员创建盘点任务、实物核对登记、差异报告生成、盘点结果确认与库存修正,以及盘点期间设备锁定规则。

FR-INV-005

盘点期间设备锁定规则

functional
pending
完成

盘点任务创建时提供"锁定设备"复选框(默认不勾选)。若勾选锁定:盘点范围内的设备在盘点"进行中"期间禁止以下操作——借用申请(返回"设备正在盘点中,暂不可借用")、报修登记(返回"设备正在盘点中,暂不可报修");归还操作不受限制。盘点任务"已确认"或手动"取消盘点"后自动解锁全部设备。锁定的设备在前端列表页显示"盘点中"角标。

FR-DEV

设备管理

functional
pending
完成

设备管理模块:设备分类管理、设备信息CRUD与批量导入、设备列表筛选搜索分页、设备详情页、设备状态流转控制、设备删除规则。

FR-DEV-006

设备删除规则

functional
pending
完成

仅管理员可在设备详情页点击"删除"按钮。删除前校验:若该设备有未完成的借用项(状态为待审批/已通过/已逾期),禁止删除并提示"该设备有N条未完成的借用记录,请先处理"。若关联的报修工单状态为"待维修/维修中",禁止删除并提示"该设备有进行中的报修工单"。删除为软删除(设置is_deleted=1),已删除设备不出现在设备列表中,但历史借用/归还/报修记录中的设备信息不受影响。已删除设备30天后可通过"回收站"页面查看,管理员可恢复。

TR

技术交付域

technical
pending
完成

技术交付域:数据库设计与迁移、API架构与错误码规范、前端项目架构、二维码技术实现、种子数据、原型与UI/UX文档、邮件服务集成等底层技术需求。

TR-EMAIL-001

邮件发送服务集成

technical
pending
完成

使用Flask-Mail集成SMTP邮件发送。管理员在"系统设置"页面配置SMTP参数:服务器地址、端口(默认587)、发件邮箱、授权码/密码、是否启用TLS(默认开启)。邮件模板使用Jinja2渲染,模板存放templates/email/目录。发送失败时记录错误日志并自动降级——仅保证站内通知正常送达,不阻塞业务流程。逾期提醒邮件(FR-OVERDUE-002)使用该服务发送。