21
This commit is contained in:
parent
80f1d42f84
commit
13d10f4f9b
2143
.kiro/specs/odf-v102-update/design.md
Normal file
2143
.kiro/specs/odf-v102-update/design.md
Normal file
File diff suppressed because it is too large
Load Diff
411
.kiro/specs/odf-v102-update/tasks.md
Normal file
411
.kiro/specs/odf-v102-update/tasks.md
Normal file
|
|
@ -0,0 +1,411 @@
|
|||
# 实施计划:ODF v1.0.2 功能更新
|
||||
|
||||
## 概述
|
||||
|
||||
按照「数据库 → 后台 API → 前端 APP → 后台管理前端」的顺序实施,确保每一层的依赖在实现前已就绪。后台基于 ZRAdmin(.NET/C#/SqlSugar),前端 APP 基于 odf-uniapp(UniApp + Vue 3),后台管理前端基于 ZR.Vue(Vue 3 + Element Plus)。
|
||||
|
||||
## 任务
|
||||
|
||||
- [ ] 1. 数据库:创建新表和索引
|
||||
- [ ] 1.1 创建 odf_checkin 签到记录表(含索引 IX_odf_checkin_RoomId、IX_odf_checkin_CheckinTime)
|
||||
- 编写 SQL Server DDL 脚本,创建表和索引
|
||||
- _需求: 2.6_
|
||||
- [ ] 1.2 创建 odf_cables 光缆表(含索引 IX_odf_cables_DeptId、IX_odf_cables_CableName)
|
||||
- 编写 SQL Server DDL 脚本,创建表和索引
|
||||
- _需求: 4.1_
|
||||
- [ ] 1.3 创建 odf_cable_faults 干线故障表(含索引 IX_odf_cable_faults_CableId、IX_odf_cable_faults_FaultTime)
|
||||
- 编写 SQL Server DDL 脚本,创建表和索引
|
||||
- _需求: 5.1, 7.9_
|
||||
- [ ] 1.4 创建 odf_cable_fault_images 故障图片表(含索引 IX_odf_cable_fault_images_FaultId)
|
||||
- 编写 SQL Server DDL 脚本,创建表和索引
|
||||
- _需求: 7.9_
|
||||
- [ ] 1.5 创建 odf_user_modules 用户功能版块权限表(含唯一索引和普通索引)
|
||||
- 编写 SQL Server DDL 脚本,创建表和索引
|
||||
- _需求: 8.1_
|
||||
- [ ] 1.6 插入后台管理菜单和权限 SQL 脚本
|
||||
- 编写 INSERT INTO sys_menu SQL 脚本,添加以下一级菜单(parentId=0)和按钮权限:
|
||||
- 一级菜单「光缆管理」(MenuId=11190,OrderNum=5)及按钮权限(odfcables:query / odfcables:add / odfcables:edit / odfcables:delete / odfcables:export)
|
||||
- 一级菜单「干线故障管理」(MenuId=11200,OrderNum=6)及按钮权限(odfcablefaults:query / odfcablefaults:delete / odfcablefaults:export)
|
||||
- 一级菜单「签到记录管理」(MenuId=11210,OrderNum=7)及按钮权限(odfcheckin:query / odfcheckin:export)
|
||||
- 一级菜单「用户模块权限」(MenuId=11220,OrderNum=8)及按钮权限(odfusermodules:query / odfusermodules:edit)
|
||||
- 所有菜单 Component 指向 business/OdfXxx,ZRAdmin 动态路由自动加载对应 Vue 文件
|
||||
- 编写 INSERT INTO sys_role_menu SQL 脚本,按现有角色权限模式分配:
|
||||
- Role 2 (common):所有新菜单 + 全部按钮权限
|
||||
- Role 3 (editor):所有新菜单 + 仅查询权限
|
||||
- Role 4 (lock):所有新菜单 + 仅查询权限
|
||||
- Role 1 (admin):超级管理员自动拥有所有权限,无需插入
|
||||
- _需求: 8.1_
|
||||
|
||||
- [ ] 2. 检查点 — 数据库脚本完成
|
||||
- 确认所有 5 张表和索引创建成功,菜单权限 SQL 脚本执行无误,如有问题请告知。
|
||||
|
||||
- [ ] 3. 后台 API:实体模型层
|
||||
- [ ] 3.1 创建 OdfCheckin 实体类(ZR.Model/Business/OdfCheckin.cs)
|
||||
- 使用 [SugarTable("odf_checkin")] 注解,定义 Id、RoomId、Personnel、CheckinTime、WorkContent、UserId、CreatedAt 属性
|
||||
- _需求: 2.6_
|
||||
- [ ] 3.2 创建 OdfCables 实体类(ZR.Model/Business/OdfCables.cs)
|
||||
- 使用 [SugarTable("odf_cables")] 注解,定义 Id、CableName、DeptId、DeptName、CreatedAt、UpdatedAt 属性
|
||||
- _需求: 4.1_
|
||||
- [ ] 3.3 创建 OdfCableFaults 实体类(ZR.Model/Business/OdfCableFaults.cs)
|
||||
- 使用 [SugarTable("odf_cable_faults")] 注解,定义所有字段属性
|
||||
- _需求: 5.1, 7.9_
|
||||
- [ ] 3.4 创建 OdfCableFaultImages 实体类(ZR.Model/Business/OdfCableFaultImages.cs)
|
||||
- 使用 [SugarTable("odf_cable_fault_images")] 注解
|
||||
- _需求: 7.9_
|
||||
- [ ] 3.5 创建 OdfUserModules 实体类(ZR.Model/Business/OdfUserModules.cs)
|
||||
- 使用 [SugarTable("odf_user_modules")] 注解
|
||||
- _需求: 8.1_
|
||||
- [ ] 3.6 创建各实体的 Dto 和 QueryDto 类
|
||||
- OdfCheckinDto、OdfCheckinQueryDto(继承 PagerInfo)
|
||||
- OdfCablesQueryDto(继承 PagerInfo)
|
||||
- OdfCableFaultsQueryDto(继承 PagerInfo,含 beginFaultTime/endFaultTime)
|
||||
- OdfCableFaultAddDto(含 IFormFile[] images)
|
||||
- OdfUserModulesSaveDto(含 userId、modules 列表)
|
||||
- _需求: 2.6, 4.1, 5.1, 7.9, 8.1_
|
||||
|
||||
- [ ] 4. 后台 API:Service 层
|
||||
- [ ] 4.1 实现 IOdfUserModulesService / OdfUserModulesService
|
||||
- GetUserModules(userId):按 UserId 查询 odf_user_modules,返回 ModuleCode 列表
|
||||
- GetUserList():查询 sys_user 返回用户列表(userId, userName)
|
||||
- SaveUserModules(userId, modules):先删后插,事务保证原子性
|
||||
- _需求: 8.1, 8.2_
|
||||
- [ ]* 4.1.1 编写属性测试 Property 15:用户模块权限 round-trip
|
||||
- **Property 15: 用户模块权限 round-trip**
|
||||
- 使用 FsCheck 生成随机 UserId 和模块子集,验证插入后查询结果一致
|
||||
- **验证: 需求 8.1, 8.2**
|
||||
- [ ] 4.2 实现 IOdfCheckinService / OdfCheckinService
|
||||
- AddCheckin(dto):校验 RoomId 存在,插入 odf_checkin 记录
|
||||
- GetList(queryDto):分页查询,联查 odf_rooms 获取机房名称,联查 sys_user 获取提交人用户名
|
||||
- Export(queryDto):导出签到记录
|
||||
- _需求: 2.6_
|
||||
- [ ]* 4.2.1 编写属性测试 Property 11:签到数据持久化 round-trip
|
||||
- **Property 11: 签到数据持久化 round-trip**
|
||||
- 使用 FsCheck 生成随机签到数据,验证插入后查询字段一致
|
||||
- **验证: 需求 2.6**
|
||||
- [ ] 4.3 实现 IOdfCablesService / OdfCablesService
|
||||
- GetList(queryDto):按 DeptId 过滤光缆列表(支持分页和 CableName 模糊查询)
|
||||
- Search(deptId, keyword):在指定公司范围内搜索光缆和故障
|
||||
- Add/Update/Delete/GetDetail/Export:光缆 CRUD 和导出
|
||||
- _需求: 4.1, 4.4_
|
||||
- [ ]* 4.3.1 编写属性测试 Property 12:光缆列表 DeptId 过滤不变量
|
||||
- **Property 12: 光缆列表 DeptId 过滤不变量**
|
||||
- 使用 FsCheck 生成随机 DeptId 和光缆集合,验证过滤结果正确
|
||||
- **验证: 需求 4.1**
|
||||
- [ ]* 4.3.2 编写属性测试 Property 13:搜索结果 DeptId 范围限定
|
||||
- **Property 13: 搜索结果 DeptId 范围限定**
|
||||
- 使用 FsCheck 生成随机数据集,验证搜索结果均属于指定 DeptId
|
||||
- **验证: 需求 4.4**
|
||||
- [ ] 4.4 实现 IOdfCableFaultsService / OdfCableFaultsService
|
||||
- GetList(queryDto):按 CableId 分页查询故障列表,联查光缆名称,按 FaultTime DESC 排序
|
||||
- GetDetail(id):查询故障详情,联查光缆名称和图片列表
|
||||
- AddFault(dto):校验 CableId 存在和图片数量,插入故障记录,保存图片文件,插入图片记录
|
||||
- Delete(id):删除故障记录并级联删除关联图片
|
||||
- Export(queryDto):导出故障列表
|
||||
- _需求: 5.1, 6.1, 7.9_
|
||||
- [ ]* 4.4.1 编写属性测试 Property 14:故障新增 round-trip(含图片)
|
||||
- **Property 14: 故障新增 round-trip(含图片)**
|
||||
- 使用 FsCheck 生成随机故障数据和图片数量,验证插入后查询一致
|
||||
- **验证: 需求 7.9**
|
||||
- [ ] 4.5 实现 IOdfCableFaultImagesService / OdfCableFaultImagesService
|
||||
- GetByFaultId(faultId):按故障 ID 查询图片列表
|
||||
- BatchInsert(faultId, imageUrls):批量插入图片记录
|
||||
- DeleteByFaultId(faultId):按故障 ID 删除所有图片记录
|
||||
- _需求: 7.9_
|
||||
|
||||
- [ ] 5. 后台 API:Controller 层
|
||||
- [ ] 5.1 创建 OdfUserModulesController(路由 business/OdfUserModules)
|
||||
- GET list — 获取当前登录用户的功能版块列表(APP 端调用,无权限限制,登录即可)
|
||||
- GET users — 获取用户列表(管理端调用,[ActionPermissionFilter(Permission = "odfusermodules:query")])
|
||||
- GET list?userId=xxx — 获取指定用户的模块权限(管理端调用,[ActionPermissionFilter(Permission = "odfusermodules:query")])
|
||||
- POST save — 批量保存用户模块权限(管理端调用,[ActionPermissionFilter(Permission = "odfusermodules:edit")])
|
||||
- _需求: 8.1, 8.2_
|
||||
- [ ] 5.2 创建 OdfCheckinController(路由 business/OdfCheckin)
|
||||
- POST submit — 提交签到记录(APP 端调用,[ActionPermissionFilter(Permission = "odfcheckin:list")])
|
||||
- GET list — 分页查询签到记录(管理端调用,[ActionPermissionFilter(Permission = "odfcheckin:list")],联查机房名称和提交人)
|
||||
- GET export — 导出签到记录(管理端调用,[ActionPermissionFilter(Permission = "odfcheckin:export")])
|
||||
- _需求: 2.6_
|
||||
- [ ] 5.3 创建 OdfCablesController(路由 business/OdfCables)
|
||||
- GET list — 光缆列表([ActionPermissionFilter(Permission = "odfcables:list")])
|
||||
- GET search — 搜索光缆和故障([ActionPermissionFilter(Permission = "odfcables:query")])
|
||||
- POST — 新增光缆([ActionPermissionFilter(Permission = "odfcables:add")])
|
||||
- PUT — 修改光缆([ActionPermissionFilter(Permission = "odfcables:edit")])
|
||||
- GET {id} — 光缆详情([ActionPermissionFilter(Permission = "odfcables:query")])
|
||||
- POST delete/{id} — 删除光缆([ActionPermissionFilter(Permission = "odfcables:delete")])
|
||||
- GET export — 导出光缆([ActionPermissionFilter(Permission = "odfcables:export")])
|
||||
- _需求: 4.1, 4.4_
|
||||
- [ ] 5.4 创建 OdfCableFaultsController(路由 business/OdfCableFaults)
|
||||
- GET list — 故障列表分页查询([ActionPermissionFilter(Permission = "odfcablefaults:list")])
|
||||
- GET {id} — 故障详情含图片([ActionPermissionFilter(Permission = "odfcablefaults:query")])
|
||||
- POST add — 新增故障含图片上传(APP 端调用,[ActionPermissionFilter(Permission = "odfcablefaults:list")])
|
||||
- POST delete/{id} — 删除故障并级联删除图片([ActionPermissionFilter(Permission = "odfcablefaults:delete")])
|
||||
- GET export — 导出故障列表([ActionPermissionFilter(Permission = "odfcablefaults:export")])
|
||||
- _需求: 5.1, 6.1, 7.9_
|
||||
|
||||
- [ ] 6. 后台 API:依赖注入注册
|
||||
- 在 Startup / Program.cs 中注册所有新增 Service 的依赖注入
|
||||
- IOdfCheckinService → OdfCheckinService
|
||||
- IOdfCablesService → OdfCablesService
|
||||
- IOdfCableFaultsService → OdfCableFaultsService
|
||||
- IOdfCableFaultImagesService → OdfCableFaultImagesService
|
||||
- IOdfUserModulesService → OdfUserModulesService
|
||||
- _需求: 2.6, 4.1, 5.1, 7.9, 8.1_
|
||||
|
||||
- [ ] 7. 检查点 — 后台 API 完成
|
||||
- 确认所有 API 编译通过,依赖注入正确,如有问题请告知。
|
||||
|
||||
- [ ] 8. 前端 APP:基础设施和服务层
|
||||
- [ ] 8.1 创建 services/permission.js — 权限 API
|
||||
- getUserModules():GET /business/OdfUserModules/list,返回模块代码列表
|
||||
- _需求: 8.2_
|
||||
- [ ] 8.2 创建 services/checkin.js — 签到 API
|
||||
- submitCheckin(data):POST /business/OdfCheckin/submit
|
||||
- _需求: 2.6_
|
||||
- [ ] 8.3 创建 services/trunk.js — 干线版块 API
|
||||
- getCableList(deptId):GET /business/OdfCables/list
|
||||
- getFaultList(cableId, pageNum, pageSize):GET /business/OdfCableFaults/list
|
||||
- getFaultDetail(id):GET /business/OdfCableFaults/{id}
|
||||
- addFault(formData):POST /business/OdfCableFaults/add(multipart/form-data)
|
||||
- searchCablesAndFaults(deptId, keyword):GET /business/OdfCables/search
|
||||
- _需求: 4.1, 5.1, 6.1, 7.9, 4.4_
|
||||
- [ ] 8.4 扩展 store/index.js — 新增 modules 字段
|
||||
- 添加 modules: [] 字段
|
||||
- 添加 setModules(modules) 方法
|
||||
- 在 clearAuth() 中清除 modules
|
||||
- _需求: 8.2, 8.3_
|
||||
- [ ] 8.5 创建 utils/navigation.js — 导航工具函数
|
||||
- openNavigation(lat, lng, name):安卓端弹出导航 APP 选择列表,H5 端打开地图网页
|
||||
- _需求: 6.4, 6.5, 10.4_
|
||||
- [ ]* 8.5.1 编写属性测试 Property 6:导航 URL 构建正确性
|
||||
- **Property 6: 导航 URL 构建正确性**
|
||||
- 使用 fast-check 生成随机经纬度和地点名,验证 URL 包含正确参数
|
||||
- **验证: 需求 6.5, 10.4**
|
||||
- [ ] 8.6 创建 utils/watermark.js — 水印处理工具函数
|
||||
- addWatermark(imagePath, text):Canvas 叠加水印文字到照片左下角
|
||||
- _需求: 7.8_
|
||||
- [ ]* 8.6.1 编写属性测试 Property 7:水印叠加参数正确性
|
||||
- **Property 7: 水印叠加参数正确性**
|
||||
- 使用 fast-check 生成随机时间和人员字符串,验证水印文本包含两者
|
||||
- **验证: 需求 7.8**
|
||||
|
||||
- [ ] 9. 前端 APP:登录页改造和功能入口页
|
||||
- [ ] 9.1 修改 pages/login/index.vue — 登录成功后跳转至 pages/portal/index
|
||||
- 将 uni.reLaunch 目标从 home 改为 portal
|
||||
- 登录成功后调用 getUserModules() 获取权限并存入 store.modules
|
||||
- _需求: 1.1, 8.2_
|
||||
- [ ] 9.2 新建 pages/portal/index.vue — 功能入口列表页
|
||||
- 自定义导航栏(刷新 + 标题"功能列表" + 设置图标)
|
||||
- CSS Grid 2 列布局展示功能版块卡片(机房、干线)
|
||||
- 根据 store.modules 过滤显示的入口卡片
|
||||
- 点击机房 → navigateTo home,点击干线 → navigateTo trunk
|
||||
- 空权限时显示空状态提示
|
||||
- _需求: 1.1, 1.2, 1.3, 1.4, 1.5, 8.3, 8.4_
|
||||
- [ ]* 9.2.1 编写属性测试 Property 1:权限过滤正确性
|
||||
- **Property 1: 权限过滤正确性**
|
||||
- 使用 fast-check 生成随机权限子集,验证过滤函数只返回有权限的版块
|
||||
- **验证: 需求 1.1, 1.5, 8.3**
|
||||
- [ ] 9.3 更新 pages.json — 注册所有新增页面
|
||||
- 添加 portal、checkin、trunk、cable、fault-list、fault-detail、fault-add、trunk-search、route-plan 页面配置
|
||||
- 所有页面 navigationStyle 设为 custom
|
||||
- _需求: 1.1_
|
||||
|
||||
- [ ] 10. 前端 APP:签到功能
|
||||
- [ ] 10.1 改造 pages/rack/index.vue — 导航栏右侧添加签到按钮
|
||||
- 将 nav-icon-placeholder 替换为蓝色【签到】按钮
|
||||
- 点击签到按钮 → navigateTo checkin 页面,传递 roomId 参数
|
||||
- _需求: 2.1, 2.2_
|
||||
- [ ] 10.2 新建 pages/checkin/index.vue — 签到页
|
||||
- 自定义导航栏 + 表单区域(人员输入、时间 picker、工作内容 textarea)
|
||||
- 底部固定提交按钮
|
||||
- 点击时间字段弹出 picker mode="date" 年月日选择器
|
||||
- 提交校验必填项 → 调用 submitCheckin API → 成功 showToast + navigateBack
|
||||
- 失败保留表单数据
|
||||
- _需求: 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9_
|
||||
- [ ]* 10.2.1 编写属性测试 Property 2:签到数据完整性(前端)
|
||||
- **Property 2: 签到数据完整性(前端)**
|
||||
- 使用 fast-check 生成随机签到数据,验证请求体包含所有必要字段
|
||||
- **验证: 需求 2.6**
|
||||
|
||||
- [ ] 11. 前端 APP:干线版块 — 公司列表和光缆列表
|
||||
- [ ] 11.1 新建 pages/trunk/index.vue — 干线页(公司列表)
|
||||
- 自定义导航栏 + section-title "公司列表"
|
||||
- 复用 getCompanyList() 接口获取公司数据
|
||||
- 公司卡片列表(白色背景 + 图片占位 + 公司名称居中)
|
||||
- 点击公司卡片 → navigateTo cable 页面,传递 deptId
|
||||
- _需求: 3.1, 3.2, 3.3_
|
||||
- [ ] 11.2 新建 pages/cable/index.vue — 光缆列表页
|
||||
- 自定义导航栏 + section-title "光缆列表" + 搜索栏
|
||||
- 调用 getCableList(deptId) 获取光缆数据
|
||||
- 光缆卡片列表(同公司卡片样式)
|
||||
- 搜索栏输入关键词按确认 → navigateTo trunk-search 页面,传递 deptId 和 keyword
|
||||
- 点击光缆卡片 → navigateTo fault-list 页面,传递 cableId 和 cableName
|
||||
- _需求: 4.1, 4.2, 4.3, 4.4, 4.5_
|
||||
- [ ]* 11.2.1 编写属性测试 Property 4:搜索范围限定(前端)
|
||||
- **Property 4: 搜索范围限定(前端)**
|
||||
- 使用 fast-check 生成随机 deptId 和关键词,验证搜索请求携带正确 deptId
|
||||
- **验证: 需求 4.4**
|
||||
- [ ]* 11.2.2 编写属性测试 Property 10:页面导航参数传递正确性
|
||||
- **Property 10: 页面导航参数传递正确性**
|
||||
- 使用 fast-check 生成随机列表项数据,验证导航 URL 包含正确参数
|
||||
- **验证: 需求 3.3, 4.2, 5.2, 9.4, 9.5**
|
||||
|
||||
- [ ] 12. 前端 APP:干线版块 — 故障管理
|
||||
- [ ] 12.1 新建 pages/fault-list/index.vue — 故障列表页
|
||||
- 自定义导航栏 + section-title "故障列表"
|
||||
- 调用 getFaultList(cableId) 获取故障数据,支持分页加载(onReachBottom)
|
||||
- 故障卡片列表(显示故障时间、故障原因、表显故障里程、所属光缆)
|
||||
- 底部固定【新增故障】按钮
|
||||
- 点击故障卡片 → navigateTo fault-detail,传递 faultId
|
||||
- 点击新增故障 → navigateTo fault-add,传递 cableId 和 cableName
|
||||
- _需求: 5.1, 5.2, 5.3, 5.4_
|
||||
- [ ]* 12.1.1 编写属性测试 Property 3:故障记录渲染完整性
|
||||
- **Property 3: 故障记录渲染完整性**
|
||||
- 使用 fast-check 生成随机故障数据,验证渲染输出包含所有必要字段
|
||||
- **验证: 需求 5.1, 6.1**
|
||||
- [ ] 12.2 新建 pages/fault-detail/index.vue — 故障详情页
|
||||
- 自定义导航栏 + 图片区域(横向滚动,点击预览)+ 信息展示区域
|
||||
- 调用 getFaultDetail(faultId) 获取完整数据
|
||||
- 展示所有字段:图片列表、故障时间、人员、故障原因、表显故障里程、所属光缆、地点、备注
|
||||
- 底部【导航至地点】按钮(经纬度为空/0 时 v-if 隐藏)
|
||||
- 点击图片 → uni.previewImage 全屏预览
|
||||
- 点击导航 → 调用 openNavigation(lat, lng, name)
|
||||
- _需求: 6.1, 6.2, 6.3, 6.4, 6.5, 6.6_
|
||||
- [ ] 12.3 新建 pages/fault-add/index.vue — 新增故障页
|
||||
- 自定义导航栏 + 拍照区域(横向滚动,仅相机拍摄)+ 表单区域
|
||||
- 拍摄第 1 张照片时自动获取时间填充故障时间字段
|
||||
- 自动填充所属光缆名称(从参数传入,不可编辑)
|
||||
- 【点击获取当前经纬度】按钮 → uni.getLocation 获取位置
|
||||
- 手动输入字段:人员、故障原因、表显故障里程、备注
|
||||
- 提交流程:校验(至少 1 张照片)→ 水印处理 → 上传照片 → 提交表单
|
||||
- 成功 showToast + navigateBack,失败保留数据
|
||||
- _需求: 7.1, 7.2, 7.3, 7.4, 7.5, 7.6, 7.7, 7.8, 7.9, 7.10, 7.11, 7.12_
|
||||
- [ ]* 12.3.1 编写属性测试 Property 8:故障提交数据完整性(前端)
|
||||
- **Property 8: 故障提交数据完整性(前端)**
|
||||
- 使用 fast-check 生成随机故障表单数据,验证请求体包含所有必要字段
|
||||
- **验证: 需求 7.9**
|
||||
|
||||
- [ ] 13. 前端 APP:搜索结果页
|
||||
- [ ] 13.1 新建 pages/trunk-search/index.vue — 搜索结果页
|
||||
- 自定义导航栏 + 搜索结果区域
|
||||
- 页面 onLoad 从参数获取 deptId 和 keyword,调用 searchCablesAndFaults 接口
|
||||
- 按「光缆」和「故障列表」两个分类展示结果
|
||||
- 光缆分类:复用光缆卡片样式,点击 → navigateTo fault-list
|
||||
- 故障分类:复用故障卡片样式,点击 → navigateTo fault-detail
|
||||
- 无结果时显示"暂无搜索结果"
|
||||
- _需求: 9.1, 9.2, 9.3, 9.4, 9.5_
|
||||
- [ ]* 13.1.1 编写属性测试 Property 5:搜索结果分类正确性
|
||||
- **Property 5: 搜索结果分类正确性**
|
||||
- 使用 fast-check 生成随机搜索结果数据,验证分类展示逻辑正确
|
||||
- **验证: 需求 9.2, 9.3**
|
||||
|
||||
- [ ] 14. 前端 APP:路线规划(尝试性)
|
||||
- [ ] 14.1 新建 pages/route-plan/index.vue — 路线规划页
|
||||
- 集成地图 SDK(如高德地图 UniApp 插件)
|
||||
- 输入起终点坐标,调用路线规划 API,展示路线总长度
|
||||
- 输入距离值,计算路线上对应坐标并标注
|
||||
- 地图 API 调用失败时提示用户
|
||||
- _需求: 11.1, 11.2, 11.3, 11.4, 11.5_
|
||||
- [ ]* 14.1.1 编写属性测试 Property 9:路线距离定位计算
|
||||
- **Property 9: 路线距离定位计算**
|
||||
- 使用 fast-check 生成随机路线点序列和距离值,验证定位计算正确
|
||||
- **验证: 需求 11.3**
|
||||
|
||||
- [ ] 15. 检查点 — 前端 APP 完成
|
||||
- 确认所有新增页面正常渲染,页面跳转和参数传递正确,API 调用正常,如有问题请告知。
|
||||
|
||||
- [ ] 16. 后台管理前端:API 层
|
||||
- [ ] 16.1 创建 api/business/odfcables.js — 光缆管理 API
|
||||
- listOdfCables / addOdfCables / updateOdfCables / getOdfCables / delOdfCables / exportOdfCables
|
||||
- _需求: 4.1_
|
||||
- [ ] 16.2 创建 api/business/odfcablefaults.js — 干线故障管理 API
|
||||
- listOdfCableFaults / getOdfCableFaults / delOdfCableFaults / exportOdfCableFaults
|
||||
- _需求: 5.1_
|
||||
- [ ] 16.3 创建 api/business/odfcheckin.js — 签到记录管理 API
|
||||
- listOdfCheckin / exportOdfCheckin
|
||||
- _需求: 2.6_
|
||||
- [ ] 16.4 创建 api/business/odfusermodules.js — 用户模块权限管理 API
|
||||
- listUsers / getUserModules / saveUserModules
|
||||
- _需求: 8.1_
|
||||
|
||||
- [ ] 17. 后台管理前端:光缆管理页面
|
||||
- [ ] 17.1 创建 views/business/OdfCables.vue — 光缆管理页面
|
||||
- 查询表单(光缆名称 el-input + 所属部门 el-tree-select)
|
||||
- 工具栏按钮(新增/编辑/删除/导出,v-hasPermi 权限控制)
|
||||
- el-table 展示光缆列表(Id、光缆名称、所属部门、创建时间)
|
||||
- 操作列:详情、编辑、删除
|
||||
- 分页组件
|
||||
- _需求: 4.1_
|
||||
- [ ] 17.2 创建 components/business/OdfCableForm.vue — 光缆表单组件
|
||||
- 支持 add / edit / view 三种模式
|
||||
- 表单字段:光缆名称(必填)、所属部门(el-tree-select)
|
||||
- v-model:visible 控制弹窗显隐,@success 回调刷新列表
|
||||
- _需求: 4.1_
|
||||
- [ ]* 17.2.1 编写属性测试 Property 16:光缆表单数据完整性
|
||||
- **Property 16: 光缆表单数据完整性**
|
||||
- 使用 fast-check 生成随机光缆名称和部门 ID,验证请求体字段完整
|
||||
- **验证: 后台管理前端 — 光缆管理**
|
||||
|
||||
- [ ] 18. 后台管理前端:干线故障管理页面
|
||||
- [ ] 18.1 创建 views/business/OdfCableFaults.vue — 干线故障管理页面
|
||||
- 查询表单(所属光缆 el-select 远程搜索 + 故障时间范围 el-date-picker + 故障原因 el-input)
|
||||
- 工具栏按钮(删除/导出,无新增/编辑)
|
||||
- el-table 展示故障列表(Id、故障时间、人员、故障原因、表显故障里程、所属光缆、地点、创建时间)
|
||||
- 操作列:详情、删除
|
||||
- 详情弹窗:el-dialog 展示完整故障信息 + 图片列表(el-image 支持预览放大)
|
||||
- 分页组件
|
||||
- _需求: 5.1, 6.1_
|
||||
- [ ]* 18.1.1 编写属性测试 Property 17:管理端查询参数构建正确性
|
||||
- **Property 17: 管理端查询参数构建正确性**
|
||||
- 使用 fast-check 生成随机查询条件组合,验证 API 请求参数完整
|
||||
- **验证: 后台管理前端 — 光缆管理、故障管理、签到记录管理**
|
||||
|
||||
- [ ] 19. 后台管理前端:签到记录管理页面
|
||||
- [ ] 19.1 创建 views/business/OdfCheckin.vue — 签到记录管理页面
|
||||
- 查询表单(机房 el-select 远程搜索 + 人员 el-input + 签到时间范围 el-date-picker)
|
||||
- 工具栏按钮(仅导出,无增删改)
|
||||
- el-table 展示签到记录(Id、机房名称、人员、签到时间、工作内容、提交人、创建时间)
|
||||
- 纯只读列表,无操作列
|
||||
- 分页组件
|
||||
- _需求: 2.6_
|
||||
|
||||
- [ ] 20. 后台管理前端:用户模块权限管理页面
|
||||
- [ ] 20.1 创建 views/business/OdfUserModules.vue — 用户模块权限管理页面
|
||||
- 左右分栏布局(左侧 360px 用户列表 + 右侧模块权限配置)
|
||||
- 左侧:搜索框 + el-table 用户列表,点击行高亮选中
|
||||
- 右侧:标题"用户名 - 模块权限配置" + el-checkbox-group(odf/trunk/route)+ 保存按钮
|
||||
- 页面加载调用 listUsers() 获取用户列表
|
||||
- 点击用户 → 调用 getUserModules(userId) 填充 checkbox
|
||||
- 保存 → 调用 saveUserModules(userId, modules) 批量更新
|
||||
- v-hasPermi="['odfusermodules:edit']" 权限控制
|
||||
- _需求: 8.1_
|
||||
- [ ]* 20.1.1 编写属性测试 Property 18:用户列表前端搜索过滤
|
||||
- **Property 18: 用户列表前端搜索过滤**
|
||||
- 使用 fast-check 生成随机用户列表和关键词,验证过滤结果正确
|
||||
- **验证: 后台管理前端 — 用户模块权限管理**
|
||||
- [ ]* 20.1.2 编写属性测试 Property 19:用户模块权限保存数据构建
|
||||
- **Property 19: 用户模块权限保存数据构建**
|
||||
- 使用 fast-check 生成随机 userId 和模块子集,验证请求体正确
|
||||
- **验证: 后台管理前端 — 用户模块权限管理**
|
||||
|
||||
- [ ] 21. 后台管理前端:路由配置
|
||||
- ZRAdmin 使用动态路由(从 sys_menu 读取 Component 字段自动生成路由),因此无需手动配置 Vue Router
|
||||
- 任务 1.6 的菜单 SQL 脚本已配置 Component 指向对应 Vue 文件,执行后即可通过菜单访问
|
||||
- 仅需确认 4 个 Vue 文件路径与菜单 Component 一致:
|
||||
- business/OdfCables → views/business/OdfCables.vue
|
||||
- business/OdfCableFaults → views/business/OdfCableFaults.vue
|
||||
- business/OdfCheckin → views/business/OdfCheckin.vue
|
||||
- business/OdfUserModules → views/business/OdfUserModules.vue
|
||||
- _需求: 8.1_
|
||||
|
||||
- [ ] 22. 最终检查点 — 全部完成
|
||||
- 确认所有功能模块正常工作:数据库表、后台 API、前端 APP 页面、后台管理前端页面
|
||||
- 确认菜单权限 SQL 脚本已执行,后台管理页面可通过菜单访问
|
||||
- 确认所有测试通过,如有问题请告知。
|
||||
|
||||
## 备注
|
||||
|
||||
- 标记 `*` 的任务为可选测试任务,可跳过以加快 MVP 进度
|
||||
- 每个任务引用了对应的需求编号,确保需求可追溯
|
||||
- 检查点任务用于阶段性验证,确保增量交付质量
|
||||
- 属性测试验证系统的通用正确性属性
|
||||
- 单元测试验证具体示例和边界情况
|
||||
- 任务 1.6(菜单权限 SQL 脚本)是后台管理前端正常运行的前提,务必不要遗漏
|
||||
0
sql/v1.0.2/menu_permissions.sql
Normal file
0
sql/v1.0.2/menu_permissions.sql
Normal file
Loading…
Reference in New Issue
Block a user