|
|
@@ -0,0 +1,319 @@
|
|
|
+<!DOCTYPE html>
|
|
|
+<html lang="zh-CN">
|
|
|
+<head>
|
|
|
+<meta charset="UTF-8">
|
|
|
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
+<title>绿水青山 · 移动端审查报告</title>
|
|
|
+<script src="https://cdn.tailwindcss.com"></script>
|
|
|
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css">
|
|
|
+<style>
|
|
|
+ body {
|
|
|
+ background: #e8f0ec;
|
|
|
+ font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
|
|
|
+ }
|
|
|
+ .glass {
|
|
|
+ background: rgba(255, 255, 255, 0.9);
|
|
|
+ border: 1px solid rgba(164, 216, 152, 0.4);
|
|
|
+ box-shadow: 0 14px 40px -14px rgba(54, 143, 111, 0.35);
|
|
|
+ }
|
|
|
+ .bar-green { background: linear-gradient(180deg, #368f6f 0%, #5ab8d0 100%); }
|
|
|
+ .chip-p0 { color: #dc2626; background: rgba(220,38,38,0.08); border: 1px solid rgba(220,38,38,0.25); }
|
|
|
+ .chip-p1 { color: #b7791f; background: rgba(251,211,141,0.25); border: 1px solid rgba(251,211,141,0.6); }
|
|
|
+ .chip-p2 { color: #2563eb; background: rgba(37,99,235,0.07); border: 1px solid rgba(37,99,235,0.25); }
|
|
|
+ .severity-row + .severity-row { border-top: 1px solid rgba(164, 216, 152, 0.25); }
|
|
|
+ .file-tag {
|
|
|
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
|
+ font-size: 11px;
|
|
|
+ color: #368f6f;
|
|
|
+ background: rgba(164, 216, 152, 0.18);
|
|
|
+ border-radius: 6px;
|
|
|
+ padding: 1px 6px;
|
|
|
+ word-break: break-all;
|
|
|
+ }
|
|
|
+ .num-badge {
|
|
|
+ width: 22px; height: 22px;
|
|
|
+ border-radius: 8px;
|
|
|
+ display: inline-flex; align-items: center; justify-content: center;
|
|
|
+ color: #fff; font-size: 12px; font-weight: 700;
|
|
|
+ flex-shrink: 0;
|
|
|
+ }
|
|
|
+</style>
|
|
|
+</head>
|
|
|
+<body class="min-h-screen py-8 px-4">
|
|
|
+
|
|
|
+<div class="max-w-5xl mx-auto">
|
|
|
+
|
|
|
+ <!-- 标题 -->
|
|
|
+ <header class="text-center mb-6">
|
|
|
+ <h1 class="text-2xl font-extrabold text-gray-800">绿水青山 · 移动端审查报告</h1>
|
|
|
+ <p class="text-sm text-gray-500 mt-1">全量页面与逻辑盘点 · 2026-07-13 · 共 50+ 页面 / API / Store / Utils</p>
|
|
|
+ </header>
|
|
|
+
|
|
|
+ <!-- 概览数字 -->
|
|
|
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-3 mb-5">
|
|
|
+ <div class="glass rounded-2xl p-4 text-center">
|
|
|
+ <p class="text-2xl font-extrabold" style="color:#dc2626;">2 类</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-1">严重:假数据 / 假操作</p>
|
|
|
+ </div>
|
|
|
+ <div class="glass rounded-2xl p-4 text-center">
|
|
|
+ <p class="text-2xl font-extrabold" style="color:#b7791f;">10 项</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-1">结构性缺陷</p>
|
|
|
+ </div>
|
|
|
+ <div class="glass rounded-2xl p-4 text-center">
|
|
|
+ <p class="text-2xl font-extrabold" style="color:#368f6f;">3 批</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-1">P0 / P1 / P2 修复计划</p>
|
|
|
+ </div>
|
|
|
+ <div class="glass rounded-2xl p-4 text-center">
|
|
|
+ <p class="text-2xl font-extrabold" style="color:#2563eb;">~2.5 天</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-1">预估总工作量</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- ============ 一、假数据 ============ -->
|
|
|
+ <section class="glass rounded-3xl p-5 mb-4">
|
|
|
+ <div class="flex items-center mb-4">
|
|
|
+ <div class="w-9 h-9 rounded-xl flex items-center justify-center mr-2.5" style="background: rgba(220,38,38,0.1);">
|
|
|
+ <i class="fa fa-exclamation-triangle" style="color:#dc2626;"></i>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <h2 class="text-base font-bold text-gray-800">一、严重:整块假数据<span class="text-xs font-normal text-gray-400 ml-2">演示会露馅</span></h2>
|
|
|
+ </div>
|
|
|
+ <span class="chip-p0 ml-auto text-[11px] font-semibold px-2.5 py-1 rounded-full">P0</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">1</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">调度端发布任务是假的</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">项目/车辆下拉写死数组,"提交"只 toast 不调 createTask,照片未上传</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">pages-dispatch/publishTask.vue:173-223</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">2</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">排班日历失效 + 新增排班未实现</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">日期字段用错(scheduleDate vs 后端 workDate),日历圆点全空;新增仅 toast"开发中"</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">pages-dispatch/schedule.vue:143-226</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">3</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">数据看板图表写死</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">饼图/趋势图为固定数组,与上方真实统计数字互相矛盾</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">pages-dispatch/visualization.vue:145-160</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">4</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">车辆 / 人员 / 应急待命全走 mock</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">vehicle / personnel store 直接展开 mock 数组,loading 用 setTimeout 假装;真实接口在 api/staff.ts 已存在但没接</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">stores/vehicle.ts</span> <span class="file-tag">stores/personnel.ts</span> <span class="file-tag">vehicleList / availableVehicles / emergencyStandby / onDutyStaff.vue</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">5</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">通知详情点进去必显示"公告不存在"</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">写死假公告,id 字符串 'n1' 与列表传入的数字不匹配;且与 pages-common 版重复</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">pages-dispatch/noticeDetail.vue</span> <span class="file-tag">pages-construction/noticeDetail.vue</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">6</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">任务处理记录时间线是假数据</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">固定 3 条(销售-李明/调度-王调度/施工-张师傅),未调任务日志接口</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">pages-common/taskDetail.vue:109-131</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">7</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">首页统计数字写死</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">三个 Home 的 notificationCount、tomorrowCount 为固定值;统计卡未接 dashboard 接口</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">SalesHome / DispatchHome / ConstructionHome.vue</span> <span class="file-tag">stores/task.ts:31</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">8</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">销售端 6 个子页面全是写死数组</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">知识库 / 消息 / 任务提醒均为硬编码数据,确认/拒绝按钮只 toast 不调接口</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">pages-sales/*(6 个文件)</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <!-- ============ 二、假操作 ============ -->
|
|
|
+ <section class="glass rounded-3xl p-5 mb-4">
|
|
|
+ <div class="flex items-center mb-4">
|
|
|
+ <div class="w-9 h-9 rounded-xl flex items-center justify-center mr-2.5" style="background: rgba(220,38,38,0.1);">
|
|
|
+ <i class="fa fa-hand-paper-o" style="color:#dc2626;"></i>
|
|
|
+ </div>
|
|
|
+ <h2 class="text-base font-bold text-gray-800">二、严重:假操作<span class="text-xs font-normal text-gray-400 ml-2">点了以为成功实际没生效</span></h2>
|
|
|
+ <span class="chip-p0 ml-auto text-[11px] font-semibold px-2.5 py-1 rounded-full">P0</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">1</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">修改密码完全没调接口</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">仅本地校验后 toast 成功;api/auth.ts 也无 changePassword 接口(需后端补)</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">pages-common/changePassword.vue:85</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">2</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">应急任务列表大概率是空的</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">筛选字段 t.type==='emergency' 与任务实际字段(taskType/urgencyLevel)不符</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">pages-dispatch/emergencyTeam.vue:83</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">3</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">施工端问题反馈只 toast 不上报</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">onReject 误用 updateTask 改状态,应使用已有的 cancelTask 接口</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">pages-construction/taskDetail.vue:591-636</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">4</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">车辆检查只写本地 storage</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">出车前检查未提交后端,刷新/换设备即丢失</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">pages-construction/dailyTask.vue:194-221</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="severity-row py-2.5 flex items-start">
|
|
|
+ <span class="num-badge mr-2.5" style="background:#dc2626;">5</span>
|
|
|
+ <div class="flex-1 min-w-0">
|
|
|
+ <p class="text-sm font-semibold text-gray-700">多处"标记已读 / 删除"只改本地数组</p>
|
|
|
+ <p class="text-xs text-gray-500 mt-0.5">noticeList、messageList 的滑动操作未调后端接口</p>
|
|
|
+ <p class="mt-1"><span class="file-tag">noticeList.vue:110</span> <span class="file-tag">messageList.vue</span></p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <!-- ============ 三、结构性缺陷 ============ -->
|
|
|
+ <section class="glass rounded-3xl p-5 mb-4">
|
|
|
+ <div class="flex items-center mb-4">
|
|
|
+ <div class="w-9 h-9 rounded-xl flex items-center justify-center mr-2.5" style="background: rgba(183,121,31,0.12);">
|
|
|
+ <i class="fa fa-sitemap" style="color:#b7791f;"></i>
|
|
|
+ </div>
|
|
|
+ <h2 class="text-base font-bold text-gray-800">三、结构性缺陷</h2>
|
|
|
+ <span class="chip-p1 ml-auto text-[11px] font-semibold px-2.5 py-1 rounded-full">P1 / P2</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-2.5 text-xs text-gray-600">
|
|
|
+ <div class="rounded-2xl p-3 bg-white border border-gray-100">
|
|
|
+ <p class="font-semibold text-gray-800 mb-1"><i class="fa fa-database mr-1" style="color:#b7791f;"></i>storage 传参反模式</p>
|
|
|
+ knowledge / message / notice 详情页用 setStorageSync 传整对象,无 id 入参兜底,刷新/分享即空白
|
|
|
+ </div>
|
|
|
+ <div class="rounded-2xl p-3 bg-white border border-gray-100">
|
|
|
+ <p class="font-semibold text-gray-800 mb-1"><i class="fa fa-list mr-1" style="color:#b7791f;"></i>列表无分页加载更多</p>
|
|
|
+ 任务/客户/合同/通知只拉首屏 10 条;搜索筛选为前端内存过滤,数据多了就漏
|
|
|
+ </div>
|
|
|
+ <div class="rounded-2xl p-3 bg-white border border-gray-100">
|
|
|
+ <p class="font-semibold text-gray-800 mb-1"><i class="fa fa-th-large mr-1" style="color:#b7791f;"></i>tab 索引错位</p>
|
|
|
+ task.vue dispatch 端 setSelected(2)、schedule.vue setSelected(1),与 pages.json 实际索引相反,高亮错位
|
|
|
+ </div>
|
|
|
+ <div class="rounded-2xl p-3 bg-white border border-gray-100">
|
|
|
+ <p class="font-semibold text-gray-800 mb-1"><i class="fa fa-refresh mr-1" style="color:#b7791f;"></i>返回不刷新</p>
|
|
|
+ contract.vue / customer.vue 用 onMounted 而非 onShow,编辑后返回列表数据陈旧
|
|
|
+ </div>
|
|
|
+ <div class="rounded-2xl p-3 bg-white border border-gray-100">
|
|
|
+ <p class="font-semibold text-gray-800 mb-1"><i class="fa fa-flask mr-1" style="color:#b7791f;"></i>mock 残留会崩</p>
|
|
|
+ mock/index.ts 仍被 5 个 store 引用;mockProjects 用旧字段 type:'包年'(后端为 cooperationType:'annual'),切真实后端会崩
|
|
|
+ </div>
|
|
|
+ <div class="rounded-2xl p-3 bg-white border border-gray-100">
|
|
|
+ <p class="font-semibold text-gray-800 mb-1"><i class="fa fa-shield mr-1" style="color:#b7791f;"></i>request.ts 缺陷</p>
|
|
|
+ 错误 toast 无静默开关(权限 toast bug 根源);401 不清 roleInfo;无 token 刷新;BASE_URL 硬编码 localhost
|
|
|
+ </div>
|
|
|
+ <div class="rounded-2xl p-3 bg-white border border-gray-100">
|
|
|
+ <p class="font-semibold text-gray-800 mb-1"><i class="fa fa-trash-o mr-1" style="color:#b7791f;"></i>死代码</p>
|
|
|
+ dispatch/construction 下重复的 notification/noticeList/noticeDetail;stores/schedule.ts 未使用
|
|
|
+ </div>
|
|
|
+ <div class="rounded-2xl p-3 bg-white border border-gray-100">
|
|
|
+ <p class="font-semibold text-gray-800 mb-1"><i class="fa fa-file-o mr-1" style="color:#b7791f;"></i>占位页面</p>
|
|
|
+ paymentRecord / followUpList 整页空态;合同付款记录、客户关联项目为占位文案
|
|
|
+ </div>
|
|
|
+ <div class="rounded-2xl p-3 bg-white border border-gray-100">
|
|
|
+ <p class="font-semibold text-gray-800 mb-1"><i class="fa fa-download mr-1" style="color:#b7791f;"></i>一次性拉 1000 条</p>
|
|
|
+ contractForm.vue:268 拉 1000 条客户、addProject.vue:600 拉 1000 条合同,客户多时会卡
|
|
|
+ </div>
|
|
|
+ <div class="rounded-2xl p-3 bg-white border border-gray-100">
|
|
|
+ <p class="font-semibold text-gray-800 mb-1"><i class="fa fa-tasks mr-1" style="color:#b7791f;"></i>其他零散</p>
|
|
|
+ taskNo 前端用 Date.now() 生成(应后端生成);地理位置占位仅 toast;checklist 3 项与点检 12 项不一致
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <!-- ============ 四、解决方案 ============ -->
|
|
|
+ <section class="glass rounded-3xl p-5 mb-4">
|
|
|
+ <div class="flex items-center mb-4">
|
|
|
+ <div class="w-9 h-9 rounded-xl flex items-center justify-center mr-2.5" style="background: rgba(54,143,111,0.12);">
|
|
|
+ <i class="fa fa-check-square-o" style="color:#368f6f;"></i>
|
|
|
+ </div>
|
|
|
+ <h2 class="text-base font-bold text-gray-800">四、解决方案(按优先级分批)</h2>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- P0 -->
|
|
|
+ <div class="rounded-2xl p-4 mb-3" style="background: rgba(220,38,38,0.04); border: 1px solid rgba(220,38,38,0.2);">
|
|
|
+ <div class="flex items-center mb-2.5">
|
|
|
+ <span class="chip-p0 text-[11px] font-bold px-2.5 py-1 rounded-full mr-2">P0</span>
|
|
|
+ <span class="text-sm font-bold text-gray-800">演示前必修 — 消灭假数据 / 假操作</span>
|
|
|
+ <span class="text-[11px] text-gray-400 ml-auto">约 1 ~ 1.5 天 · 前端为主 + 后端 3~4 个小接口</span>
|
|
|
+ </div>
|
|
|
+ <ol class="text-xs text-gray-600 space-y-1.5 pl-1">
|
|
|
+ <li><b class="text-gray-700">1.</b> 调度端发布任务接真实接口:项目/车辆下拉 + createTask + 照片上传</li>
|
|
|
+ <li><b class="text-gray-700">2.</b> 排班页字段修正为 workDate;新增排班接 createSchedule</li>
|
|
|
+ <li><b class="text-gray-700">3.</b> 删除 noticeDetail 死代码文件(列表本就跳 pages-common 版);统一 id 数字传参</li>
|
|
|
+ <li><b class="text-gray-700">4.</b> 车辆/人员/应急页面 store 接 api/vehicle.ts、api/staff.ts(接口已存在,纯前端)</li>
|
|
|
+ <li><b class="text-gray-700">5.</b> 后端补缺口接口:修改密码、任务反馈、消息已读、付款/跟进记录——或演示版先隐藏入口</li>
|
|
|
+ <li><b class="text-gray-700">6.</b> visualization 图表接 dashboard 接口</li>
|
|
|
+ </ol>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- P1 -->
|
|
|
+ <div class="rounded-2xl p-4 mb-3" style="background: rgba(251,211,141,0.12); border: 1px solid rgba(251,211,141,0.5);">
|
|
|
+ <div class="flex items-center mb-2.5">
|
|
|
+ <span class="chip-p1 text-[11px] font-bold px-2.5 py-1 rounded-full mr-2">P1</span>
|
|
|
+ <span class="text-sm font-bold text-gray-800">交互正确性</span>
|
|
|
+ <span class="text-[11px] text-gray-400 ml-auto">约半天</span>
|
|
|
+ </div>
|
|
|
+ <ol class="text-xs text-gray-600 space-y-1.5 pl-1" start="7">
|
|
|
+ <li><b class="text-gray-700">7.</b> tab 索引修正(task/schedule 互换);列表页统一 onShow 刷新 + 触底加载 + 搜索传后端</li>
|
|
|
+ <li><b class="text-gray-700">8.</b> 详情页统一改为 onLoad(options.id) + 接口拉取,废弃 storage 传参</li>
|
|
|
+ <li><b class="text-gray-700">9.</b> request.ts 加 silent 选项;401 清全 store;BASE_URL 走环境变量</li>
|
|
|
+ </ol>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- P2 -->
|
|
|
+ <div class="rounded-2xl p-4" style="background: rgba(37,99,235,0.04); border: 1px solid rgba(37,99,235,0.2);">
|
|
|
+ <div class="flex items-center mb-2.5">
|
|
|
+ <span class="chip-p2 text-[11px] font-bold px-2.5 py-1 rounded-full mr-2">P2</span>
|
|
|
+ <span class="text-sm font-bold text-gray-800">清理与规范化</span>
|
|
|
+ <span class="text-[11px] text-gray-400 ml-auto">约半天</span>
|
|
|
+ </div>
|
|
|
+ <ol class="text-xs text-gray-600 space-y-1.5 pl-1" start="10">
|
|
|
+ <li><b class="text-gray-700">10.</b> 删除 mock 引用(5 个 store)、重复子包页面、未用 store;统一类型定义(SimpleOption 重复、API 返回值无类型)</li>
|
|
|
+ </ol>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 建议执行顺序 -->
|
|
|
+ <div class="mt-4 rounded-2xl p-3 flex items-start" style="background: rgba(54,143,111,0.06); border: 1px solid rgba(164,216,152,0.4);">
|
|
|
+ <i class="fa fa-lightbulb-o mr-2 mt-0.5" style="color:#368f6f;"></i>
|
|
|
+ <span class="text-xs text-gray-600"><b style="color:#368f6f;">建议顺序:</b>先做 P0 的 1-4(纯前端、风险低、演示收益最大),后端缺口接口并行补;P1/P2 随后跟进。</span>
|
|
|
+ </div>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <p class="text-center text-[10px] text-gray-400 mt-2">青道夫管道疏通管理平台 · 移动端审查报告 | 外围架构已固定,本报告聚焦内部完善项</p>
|
|
|
+</div>
|
|
|
+
|
|
|
+</body>
|
|
|
+</html>
|