Parcourir la source

chore: 补充业务流程与审查报告文档及静态资源图片

zhangzhicheng il y a 1 semaine
Parent
commit
dfa11b2d26

+ 323 - 0
business-flow.html

@@ -0,0 +1,323 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>绿水青山· 三端架构与内部 SOP</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);
+  }
+  /* 三端主题色 */
+  .lane-sales      { --c: #368f6f; --c2: #4ba98a; --soft: rgba(164,216,152,0.16); --line: rgba(164,216,152,0.45); }
+  .lane-dispatch   { --c: #2563eb; --c2: #60a5fa; --soft: rgba(37,99,235,0.07);   --line: rgba(37,99,235,0.28); }
+  .lane-construct  { --c: #b7791f; --c2: #d9a441; --soft: rgba(251,211,141,0.20); --line: rgba(251,211,141,0.6); }
+
+  .lane {
+    background: var(--soft);
+    border: 1.5px solid var(--line);
+  }
+  .lane-head {
+    background: linear-gradient(135deg, var(--c) 0%, var(--c2) 100%);
+  }
+  /* 内部 SOP 节点与小管道 */
+  .sop-node {
+    background: #ffffff;
+    border: 1px solid var(--line);
+    box-shadow: 0 6px 16px -8px var(--c);
+  }
+  .sop-node .dot { background: var(--c); }
+  .pipe {
+    width: 2px;
+    background: repeating-linear-gradient(180deg, var(--c) 0 4px, transparent 4px 8px);
+    opacity: .55;
+  }
+  .pipe-arrow {
+    width: 0; height: 0;
+    border-left: 5px solid transparent;
+    border-right: 5px solid transparent;
+    border-top: 7px solid var(--c);
+    opacity: .8;
+  }
+  /* 跨端箭头 */
+  .x-arrow {
+    display: flex; flex-direction: column; align-items: center;
+  }
+  .x-line { width: 2px; flex: 1; background: linear-gradient(180deg, #94a3b8, #64748b); }
+  .x-tri {
+    width: 0; height: 0;
+    border-left: 6px solid transparent;
+    border-right: 6px solid transparent;
+    border-top: 8px solid #64748b;
+  }
+  .x-tag {
+    font-size: 10px; color: #475569;
+    background: #ffffff;
+    border: 1px solid #cbd5e1;
+    border-radius: 999px;
+    padding: 2px 8px;
+    white-space: nowrap;
+  }
+  @media (min-width: 1024px) {
+    .x-arrow { flex-direction: row; }
+    .x-line { height: 2px; width: auto; }
+    .x-tri {
+      border-top: 6px solid transparent;
+      border-bottom: 6px solid transparent;
+      border-left: 8px solid #64748b;
+      border-right: none;
+    }
+  }
+</style>
+</head>
+<body class="min-h-screen py-8 px-4">
+
+<div class="max-w-6xl 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">外围三端结构固定 · 内部 SOP 可按需调整</p>
+  </header>
+
+  <!-- 三端泳道 -->
+  <div class="grid grid-cols-1 lg:grid-cols-[1fr_auto_1fr_auto_1fr] gap-3 items-stretch">
+
+    <!-- ============ 销售端 ============ -->
+    <section class="lane lane-sales rounded-3xl overflow-hidden flex flex-col">
+      <div class="lane-head px-4 py-3 flex items-center text-white">
+        <div class="w-9 h-9 rounded-xl bg-white/20 flex items-center justify-center mr-2.5">
+          <i class="fa fa-briefcase"></i>
+        </div>
+        <div>
+          <h2 class="text-base font-bold leading-tight">销售端</h2>
+          <p class="text-[11px] text-white/75">客户 · 项目 · 合同 · 回款</p>
+        </div>
+      </div>
+
+      <div class="p-4 flex flex-col items-center flex-1">
+        <p class="text-[11px] font-semibold mb-3 self-start" style="color: var(--c);">内部 SOP(可调)</p>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">客户建档 / 跟进</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">客户资料、跟进记录、商机转化</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">项目立项</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">项目地址、合作类型、联系人</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">合同签署</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">包年 / 包月 / 单次合同管理</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5 ring-2" style="--tw-ring-color: var(--c);">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">发布任务</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">故障位置、服务时间、现场照片</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">回款跟进</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">履约统计、回款记录、对账</p>
+        </div>
+      </div>
+    </section>
+
+    <!-- 跨端箭头 1 -->
+    <div class="x-arrow justify-center py-1 lg:px-1 lg:w-16">
+      <span class="x-tag mb-1 lg:mb-0 lg:absolute lg:-mt-8">任务流</span>
+      <div class="x-line h-6 lg:h-auto"></div>
+      <div class="x-tri"></div>
+    </div>
+
+    <!-- ============ 调度端 ============ -->
+    <section class="lane lane-dispatch rounded-3xl overflow-hidden flex flex-col">
+      <div class="lane-head px-4 py-3 flex items-center text-white">
+        <div class="w-9 h-9 rounded-xl bg-white/20 flex items-center justify-center mr-2.5">
+          <i class="fa fa-calendar-check-o"></i>
+        </div>
+        <div>
+          <h2 class="text-base font-bold leading-tight">调度端</h2>
+          <p class="text-[11px] text-white/75">审核 · 派单 · 排班 · 监控</p>
+        </div>
+      </div>
+
+      <div class="p-4 flex flex-col items-center flex-1">
+        <p class="text-[11px] font-semibold mb-3 self-start" style="color: var(--c);">内部 SOP(可调)</p>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5 ring-2" style="--tw-ring-color: var(--c);">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">任务审核</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">确认可执行性 · 通过 / 驳回退回</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">派单</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">指定执行班组与车辆</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5 ring-2" style="--tw-ring-color: var(--c);">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">排班管理</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">月计划 / 应急排班,人员车辆编排</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">过程监控</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">数据看板、进度跟踪、异常预警</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">验收确认</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">核对验收方式,不合格退回返工</p>
+        </div>
+      </div>
+    </section>
+
+    <!-- 跨端箭头 2 -->
+    <div class="x-arrow justify-center py-1 lg:px-1 lg:w-16">
+      <span class="x-tag mb-1 lg:mb-0 lg:absolute lg:-mt-8">派单流</span>
+      <div class="x-line h-6 lg:h-auto"></div>
+      <div class="x-tri"></div>
+    </div>
+
+    <!-- ============ 施工端 ============ -->
+    <section class="lane lane-construct rounded-3xl overflow-hidden flex flex-col">
+      <div class="lane-head px-4 py-3 flex items-center text-white">
+        <div class="w-9 h-9 rounded-xl bg-white/20 flex items-center justify-center mr-2.5">
+          <i class="fa fa-wrench"></i>
+        </div>
+        <div>
+          <h2 class="text-base font-bold leading-tight">施工端</h2>
+          <p class="text-[11px] text-white/75">班组 · 车辆 · 执行 · 反馈</p>
+        </div>
+      </div>
+
+      <div class="p-4 flex flex-col items-center flex-1">
+        <p class="text-[11px] font-semibold mb-3 self-start" style="color: var(--c);">内部 SOP(可调)</p>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5 ring-2" style="--tw-ring-color: var(--c);">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">接收任务</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">每日任务 / 明日任务 / 历史任务</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">出车前检查</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">车辆、设备、三大系统逐项检查</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">现场施工</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">推进工单步骤,上传现场照片</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5 ring-2" style="--tw-ring-color: var(--c);">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">完工提交</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">填写完工信息,等待验收</p>
+        </div>
+        <div class="pipe h-4"></div><div class="pipe-arrow mb-1"></div>
+
+        <div class="sop-node w-full rounded-xl px-3 py-2.5">
+          <div class="flex items-center">
+            <span class="dot w-2 h-2 rounded-full mr-2 flex-shrink-0"></span>
+            <span class="text-xs font-semibold text-gray-700">问题反馈</span>
+          </div>
+          <p class="text-[10px] text-gray-400 mt-1 pl-4">异常上报,调度协同处理</p>
+        </div>
+      </div>
+    </section>
+
+  </div>
+
+  <!-- 底部回流说明 -->
+  <div class="glass rounded-3xl p-4 mt-4">
+    <div class="flex items-center mb-3">
+      <div class="w-1 h-4 rounded mr-2" style="background: linear-gradient(180deg,#368f6f,#5ab8d0);"></div>
+      <span class="text-sm font-bold text-gray-800">跨端协同关系</span>
+    </div>
+    <div class="grid grid-cols-1 md:grid-cols-3 gap-3 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-arrow-right mr-1" style="color:#368f6f;"></i>销售 → 调度</p>
+        任务发布进入调度审核池;审核驳回则退回销售补充信息
+      </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-arrow-right mr-1" style="color:#2563eb;"></i>调度 → 施工</p>
+        派单 + 排班后,班组成员在每日任务中接收工单
+      </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-arrow-left mr-1" style="color:#b7791f;"></i>施工 → 调度 → 销售</p>
+        完工提交后调度验收,验收通过归档并生成回款记录
+      </div>
+    </div>
+    <div class="mt-3 rounded-2xl p-3 flex items-center" style="background: rgba(239,68,68,0.06); border: 1px solid rgba(239,68,68,0.2);">
+      <i class="fa fa-bolt text-red-500 mr-2"></i>
+      <span class="text-xs text-gray-600"><b class="text-red-500">应急支线:</b>标记「应急」的任务跳过常规排队,调度直接指派应急待命班组优先出车</span>
+    </div>
+  </div>
+
+  <p class="text-center text-[10px] text-gray-400 mt-4">青道夫管道疏通管理平台 · 架构 v2.0 | 外围结构固定,内部 SOP 可调整</p>
+</div>
+
+</body>
+</html>

+ 319 - 0
review-report.html

@@ -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>

BIN
src/static/index-backpage.png


BIN
src/static/peoplebackpage.png


BIN
src/static/tabbar/合同.png


BIN
src/static/tabbar/客户.png


BIN
src/static/tabbar/排班-active.png


BIN
src/static/tabbar/排班.png


BIN
src/static/tabbar/项目.png