-
Notifications
You must be signed in to change notification settings - Fork 0
25 user uniapp reuse audit
技术老胡 edited this page Jul 30, 2026
·
1 revision
本文档用于约束 SmartFarm 用户端的页面设计和后续任务拆解。目标不是为智慧农业重新设计一套移动商城,而是确认现有 uni-app 页面、DIY、组件、交易和多端适配能力可以复用到什么程度。
审计日期:2026-07-30
审计范围:smartfarm_user
本次只执行源码和运行配置读取,没有修改源码、运行服务、数据库或业务配置。
- 用户端已经具备成熟的商城视觉骨架、DIY 首页、商品、活动、下单、支付、地址、物流、售后和用户中心能力。
- 智慧农业页面不需要另起一套移动端设计系统。
- 云仓可以参考普通秒杀的场次、倒计时、库存、规格和抢购反馈,但不能继续使用普通秒杀的订单、库存、持仓和结算语义。
- 租地、认养和云仓新增的是领域状态与领域内容,不是重新开发轮播、金额、图片、弹窗、地址、支付和空状态。
- 不建议复制整个秒杀详情、订单列表或订单详情后修改。这些页面体量大,且与普通商城状态、物流和售后高度耦合。
- 用户端新业务应进入分包,不增加永久底部 Tab,入口优先来自首页 DIY 和“我的”动态菜单。
- 低保真设计前必须先完成每个页面的“现有页面基准 + 直接复用组件 + 扩展组件 + 新增领域组件”映射。
smartfarm_user/pages.json 当前包含:
- 主包:首页、分类、购物车、用户中心、登录、引导和错误页等高频入口。
- 27 个分包。
- 普通秒杀位于
pages/activity分包。 - 秒杀列表:
pages/activity/goods_seckill/index。 - 秒杀详情:
pages/activity/goods_seckill_details/index。
当前原生 tabBar:
| 导航 | pagePath |
|---|---|
| 首页 | pages/index/index |
| 分类 | pages/goods_cate/goods_cate |
| 购物车 | pages/order_addcart/order_addcart |
| 我的 | pages/user/index |
原生选中色为 #E93323。
数据库当前启用的 DIY 页脚是 5 项:
首页、分类、逛逛、购物车、我的
结论:
-
pages.jsontabBar 是静态和降级配置。 - 正式设计必须同时核对数据库 DIY 页脚。
- V1 不新增第 6 个永久底部导航。
推荐拆成两个业务分包,最终目录名在 G4 评审确认:
pages/farm
├─ 农场专区
├─ 租地
├─ 认养
├─ 我的土地
├─ 我的认养
└─ 溯源
pages/cloudWarehouse
├─ 云仓活动
├─ 抢购确认
├─ 付款结果与去向选择
├─ 我的云仓
├─ 持仓与代销进度
├─ 提货/自提
└─ 收益账本
推荐单独拆分云仓的原因:
- 云仓是营销和经营业务,不属于租地/认养资产。
- 云仓页面和状态数量较多,独立分包更利于包体积和职责控制。
- 后续可以独立控制分包加载、包体统计和回归。
- 避免把
pages/farm变成包含所有智慧农业和营销页面的超大分包。
pages/index/index.vue
↓
components/diyPage/common/diyDataProvider.vue
↓
store/modules/diy.js
↓
/api/diy
↓
sub-packages/diy/diyPage/index.vue
↓
按数据库配置动态渲染 DIY 组件
关键事实:
-
diyDataProvider同时服务平台首页、商户店铺和 DIY 预览。 -
store/modules/diy.js会缓存首页、指定 DIY 和商户 DIY 数据。 -
getDiyId的选择优先级为 URLdiyId、全局 ID、Vuex ID、最后为0。 - 当前启用首页顺序为
homeComb → menus → coupon → goodList → pageFoot。 - 当前未启用草稿中已经存在普通
seckillDIY 组件。
| 入口 | 推荐复用 |
|---|---|
| 农场专区 | 复用 menus 或 homeComb 配置入口 |
| 租地/认养频道 | 复用菜单、图片、标题和商品列表样式 |
| 集市云仓 | 新增与普通 seckill 同级的云仓 DIY 组件,复用倒计时和商品展示基础组件 |
| 我的土地/认养/云仓 | 复用用户中心 /common/menus 动态菜单 |
云仓 DIY 组件不得直接调用普通秒杀状态接口后再补字段。它应使用独立云仓 API,只复用展示基础。
main.js
↓
App.vue onLaunch
↓
/api/config
↓
GLOBAL_DATA
├─ VIEW_COLOR
└─ KEY_COLOR
↓
普通页面与 DIY 组件
关键文件:
smartfarm_user/main.jssmartfarm_user/App.vuesmartfarm_user/store/modules/app.jssmartfarm_user/utils/request.jssmartfarm_user/libs/login.jssmartfarm_user/mixins/device-env.js
| 项 | 当前值 |
|---|---|
| 主色 | #E93323 |
| 辅助色 | #FF7612 |
| 页面背景 |
#F5F5F5 / #F8F8F8
|
| 主要文字 | #282828 |
新页面要求:
- 优先使用
viewColor、--view-theme和当前主题注入能力。 - 不继续增加无必要的红色硬编码。
- 不把全站改成农业绿色。
- Figma 使用 Noto Sans SC 只是协作字体,运行端保留现有 PingFang SC 和平台字体处理。
- Token、过期时间、UID 和用户信息由缓存与 Vuex 共同维护。
- 请求层统一添加
/api/、Bearer Token 和 UUID。 - 登录失效、错误提示和登录跳转已有统一处理。
- 角色已有普通用户、商户、员工和配送员,并有各自首页映射。
智慧农业页面应复用现有登录和请求层,不新增第二套 Token、HTTP 客户端或用户身份状态。
| 模式 | 当前源码事实 | 设计要求 |
|---|---|---|
| 页面基底 | 背景 #F5F5F5、正文约 28rpx、文字 #282828
|
新页面继续使用现有页面基底 |
| 普通卡片 | 白底、常见间距 20rpx、圆角 24rpx
|
不强行改成桌面端 4px 圆角 |
| 用户中心 | 外边距 20rpx、服务宫格 4 列、图标 52rpx、标签 24rpx
|
新入口沿用现有服务宫格 |
| 搜索和筛选 | 搜索框高约 60rpx、圆角约 50rpx;筛选栏约 86rpx
|
租地/认养列表复用现有节奏 |
| 金额 | 商品主价格常见 34rpx
|
统一使用 priceFormat
|
| 底部操作栏 | 高约 120rpx + safe-area;主按钮约 200 × 72rpx
|
固定栏必须包含安全区 |
| 弹窗 | 常见顶部圆角 40rpx
|
复用 uni-popup 和现有弹层样式 |
| 空态/加载 | 已有 skeleton、Loading、emptyPage | 不新增另一套全局状态组件 |
| 秒杀卡片 | 商品图约 240rpx、圆角 16rpx;卡片圆角 24rpx
|
云仓活动列表可参考 |
代表文件:
smartfarm_user/static/css/base.csssmartfarm_user/static/css/style.scsssmartfarm_user/pages/user/index.vuesmartfarm_user/pages/users/order_list/index.vuesmartfarm_user/pages/users/order_confirm/index.vuesmartfarm_user/pages/columnGoods/goods_list/index.vuesmartfarm_user/pages/activity/goods_seckill/index.vue
| 组件 | 路径 | 用途 |
|---|---|---|
BaseContainer |
components/common/base_container.vue |
安全区、胶囊尺寸、页面最小高度和全局 CSS 变量 |
BaseNavBar |
components/common/base_nav_bar.vue |
小程序/APP 自定义导航和返回 |
priceFormat |
components/priceFormat.vue |
金额格式、整数与小数层级 |
easyLoadimage |
components/easyLoadimage/easyLoadimage.vue |
图片加载、占位和错误状态 |
countDown |
components/countDown/index.vue |
活动和截止时间倒计时 |
emptyPage |
components/emptyPage.vue |
空数据 |
Loading |
components/Loading/index.vue |
加载中 |
productConSwiper |
components/productConSwiper/index.vue |
详情页图片/视频轮播 |
jyf-parser |
components/jyf-parser/jyf-parser.vue |
富文本规则、详情和溯源内容 |
uni-popup |
uni_modules/uni-popup |
底部弹层、确认和选择 |
uni-datetime-picker |
uni_modules/uni-datetime-picker |
日期时间选择 |
注册方式:
- 全局注册只有 skeleton 和
priceFormat。 - APP 环境额外全局注册
diyPage。 - 其余组件使用页面局部注册或
uni_moduleseasycom。
新组件不应为了“使用方便”全部改成全局注册。
| 组件/页面 | 路径 | 可复用内容 | 必须隔离的内容 |
|---|---|---|---|
productWindow |
components/productWindow/index.vue |
SKU、数量、库存和确认交互 | 普通商品价格和购物车业务 |
addressWindow |
components/addressWindow/index.vue |
地址选择入口 | 代销状态 |
AddressSelector |
pages/users/order_confirm/components/AddressSelector.vue |
邮寄地址展示和选择 | 普通订单配送组合逻辑 |
DeliveryType |
pages/users/order_confirm/components/DeliveryType.vue |
邮寄/自提视觉参考 | 云仓三种去向状态 |
OrderSummary |
pages/users/order_confirm/components/OrderSummary.vue |
金额摘要布局 | 云仓本金、收益和回购公式 |
DIY seckill
|
sub-packages/diy/diyPage/seckill.vue |
标题、倒计时和横向商品展示 | 普通秒杀 API 与订单语义 |
| 普通秒杀列表 | pages/activity/goods_seckill/index.vue |
场次、倒计时、库存和抢购进度 | 云仓批次、持仓和回购 |
| 用户账单 | pages/users/user_bill/index.vue |
流水列表、金额方向和筛选风格 | 云仓账本类型、公式和冻结状态 |
pages/activity/goods_seckill_details/index.vuepages/users/order_confirm/index.vuepages/users/order_list/index.vuepages/order_details/index.vue
原因:
- 页面体量大。
- 普通商品、活动、物流、优惠和售后分支较多。
- 复制后容易形成无法同步修复的平行版本。
- 云仓、租地和认养只应复用其中的基础组件、样式和明确的适配点。
当前链路:
秒杀场次/商品列表
↓
秒杀详情
↓
postCartAdd(product_type = 1)
↓
普通 order_confirm
↓
createOrder
↓
order_payment
↓
order_pay_status
↓
普通订单列表/详情
关键文件:
smartfarm_user/api/activity.jssmartfarm_user/pages/activity/goods_seckill/index.vuesmartfarm_user/pages/activity/goods_seckill_details/index.vuesmartfarm_user/pages/users/order_confirm/index.vuesmartfarm_user/pages/users/order_payment/index.vuesmartfarm_user/pages/order_pay_status/index.vue
- 场次切换。
- 倒计时。
- SKU 和数量选择。
- 限购与活动库存。
- 抢购进度。
- 支付方式和支付结果查询。
- 支付成功后的结果页视觉。
- 云仓活动 SKU 和批次。
- 付款后延迟选择去向。
- 每个订单明细单一去向。
- 邮寄、自提、代销互斥。
- 用户持仓。
- 真实二次销售进度。
- 三种本金/收益结算模式。
- 到期未售和平台回购。
- 用户云仓账本。
云仓不能只增加一个新的 product_type 后继续依赖普通订单状态解释全部流程。
| 能力 | 复用方案 | 云仓边界 |
|---|---|---|
| 登录和用户身份 | 直接复用 | 不新增用户账号体系 |
| 地址 | 直接复用地址列表和选择 | 仅邮寄使用,代销不要求地址 |
| 自提 | 复用自提点、联系人和核销展示 | 使用云仓独立去向状态 |
| 运费模板 | 复用试算能力 | 首次付款后通过独立补运费单支付 |
| 支付 | 复用余额/微信等支付方式和结果查询 | 支付组件只返回结果,不处理持仓 |
| 普通退款 | 首次购买进入持仓前可复用 | 进入持仓后转云仓调整、冻结和冲正 |
| 物流 | 复用物流查询和展示 | 只表示邮寄提货,不表示代销进度 |
| 优惠券/积分 | CRMEB 能力存在 | V1 云仓首次购买建议禁用 |
| 会员价/分销 | CRMEB 能力存在 | V1 云仓首次购买建议禁用 |
| 页面 | 现有页面基准 | 直接复用 | 扩展/新增领域表达 |
|---|---|---|---|
| 集市云仓 | 普通秒杀列表、DIY seckill
|
倒计时、图片、金额、加载和空态 | 云仓场次、批次、预计周期和回购提示 |
| 云仓商品详情 | 秒杀详情、普通商品详情 | 轮播、富文本、SKU/数量弹层、底部栏 | 去向说明、结算模式、收益比例和回购规则 |
| 云仓抢购确认 | order_confirm |
商品摘要、金额、协议、支付入口 | 不显示地址、券、积分和普通配送;展示规则快照 |
| 云仓支付成功 | 支付状态页 | 支付结果、金额和返回 | “立即选择、稍后选择、继续抢购” |
| 云仓订单中心 | 普通订单卡片 | 图片、金额、时间、空态和分页 | 待选择、去向、持仓和批次状态 |
| 云仓去向选择 |
uni-popup、配送类型视觉 |
单选、确认、固定底栏 | 整条明细互斥选择,不拆数量 |
| 邮寄补运费 | 地址选择、订单摘要、支付 | 地址、运费试算、支付 | 独立补运费单和超时结果 |
| 自提凭证 | 自提点和核销页面 | 联系人、地图入口、核销码 | 云仓去向和逾期状态 |
| 我的云仓 | 订单列表、用户账单 | 列表、筛选、金额和状态标签 | 用户持仓、批次和未售数量 |
| 云仓持仓详情 | 订单详情视觉 | 商品、金额、时间和客服入口 | 进度、节点、本金、收益、回购和冻结 |
| 云仓账本 | user_bill |
流水方向、筛选、金额格式 | 本金、收益、回购、冲正和公式快照 |
| 页面 | 现有页面基准 | 直接复用 | 扩展/新增领域表达 |
|---|---|---|---|
| 农场专区 | DIY 首页、频道菜单 | 菜单、图片、标题和商品列表 | 农场、租地和认养聚合 |
| 租地/认养列表 | columnGoods/goods_list |
搜索、筛选、图片、价格/费用和空态 | 周期、面积、份额、预计产出和可分配状态 |
| 租地/认养详情 | 普通商品详情 | 轮播、富文本、参数、底部栏 | 地块/资产模式、周期、服务、异常和交付规则 |
| 下单确认 |
order_confirm 基础组件 |
商品摘要、协议、支付 | 作物/套餐、服务选项,不显示云仓代销 |
| 我的土地/认养 | 普通订单列表/详情视觉 | 卡片、状态、客服和时间 | 真实资产、生产时间线、异常和产出 |
| 产出邮寄 | 地址、物流和售后 | 地址、运费、物流 | 产出批次和可交付数量 |
| 溯源档案 | 富文本、图片预览、时间线样式 | 图片、视频、报告预览 | 版本、生产记录、证书、检测报告和发布状态 |
- 支持浏览器历史和 H5 返回行为。
- 微信内 H5 存在独立授权和分享分支。
- 固定底栏必须适配
safe-area-inset-bottom。
- 需要适配胶囊按钮、自定义导航和顶部安全区。
- 登录、授权、分享和支付流程与普通 H5 不同。
- 新业务页面不进入主包,避免扩大首包。
- 页面归属需要同时考虑分包预加载和包体积。
- 设计稿至少验证
390 × 844和375 × 812。 - 头部至少验证普通自定义导航和小程序胶囊导航。
- 交互不能依赖 hover。
- 弹窗和长列表需要验证 H5 与小程序返回栈。
- 固定按钮、底部弹层和核销码不能被系统安全区遮挡。
-
manifest.json已声明 Maps、Geolocation 和微信位置权限,H5/微信小程序配置中存在客户端地图 Key 硬编码;文档不记录具体值,发布前改为环境绑定配置。 -
store/modules/location.js当前使用uni.getLocation({type: "wgs84"})后请求后端腾讯逆地址,utils/util.js另有未显式指定坐标系的定位逻辑,存在 WGS84/GCJ02 混用风险。 - 现有
uni.chooseLocation和uni.openLocation可继续复用,但所有新农场和自提点目标坐标必须由后端明确返回GCJ02。 - 新农场位置页不自动获取用户当前位置,直接用保存的目标点位调用
uni.openLocation;定位权限只用于未来可选的“距我多远”能力。 - 地图加载失败、Key 未配置或用户拒绝定位时,地址、示意图、复制和导航降级必须可用。
- 当前 uni-app 版本不作为 V1 农场位置页的升级前置条件;只有启用 H5 当前定位或距离计算时,才单独评估版本升级及全端回归。
这些是现有项目缺陷或技术债,不属于智慧农业新功能:
| 等级 | 问题 | 位置/影响 |
|---|---|---|
| 高 | DIY “种草社区”错误指向秒杀页 | 数据库装修配置 |
| 高 | 原生 4 项 tabBar 与运行态 5 项 DIY 页脚不一致 | 设计和验收必须以运行配置为准 |
| 高 | 秒杀详情读取 time_id,部分跳转传 time
|
libs/order.js 与秒杀详情参数不一致 |
| 高 | 默认登录路径写成 /page/users/login/index
|
libs/login.js,正确目录为 pages
|
| 中 | 多个页面继续硬编码红色,动态主题覆盖不完整 | 新页面必须优先使用主题注入 |
| 中 | 部分组件使用不正确的多类型 Prop 写法 | 复用前应单独评估,不在设计任务中顺手重构 |
| 中 | 确认订单页残留 debugger
|
pages/users/order_confirm/index.vue |
| 中 | 首页定位使用 WGS84 后进入腾讯地图链路,其他调用又未统一坐标系 |
store/modules/location.js、utils/util.js,需独立回归后统一 |
| 中 | 种草、瀑布流和短视频商品组件存在平行版本 | 不继续复制分叉组件 |
| 低 | DIY 尺寸注释与实际限制不一致 | utils/diy.js |
| 配置 | API/WS、第三方脚本和客户端地图 Key 存在硬编码 | 上线环境需迁移配置,文档不记录具体 Key;服务端 Key/SK 禁止进入客户端 |
处理原则:
- 建立独立“CRMEB 现状缺陷修复”任务。
- 不在智慧农业页面任务中顺手大范围重构。
- 影响新页面复用的缺陷必须在联调前修复并回归。
- 页面字段字典。
- 页面状态字典。
- 普通页面基准截图。
- 直接复用组件清单。
- 扩展组件差异。
- 新增领域组件说明。
- H5 和小程序差异。
| Figma 内容 | 现有实现基准 |
|---|---|
| 首页农业入口 | DIY menus、homeComb、goodList
|
| 租地/认养列表 |
columnGoods/goods_list、easyLoadimage
|
| 租地/认养详情 |
productConSwiper、priceFormat、jyf-parser、底部购买栏 |
| 云仓活动列表 | 普通秒杀列表、DIY seckill
|
| 云仓活动详情 | 秒杀详情的轮播、倒计时和规格交互 |
| 抢购确认与支付 |
order_confirm 的基础组件、支付页和支付结果页 |
| 付款后选择 |
uni-popup、单选、固定底栏 |
| 持仓和代销进度 | 普通订单卡片视觉、独立批次进度 |
| 提货确认 |
AddressSelector、addressWindow、运费摘要 |
| 收益明细 |
user_bill、priceFormat、状态标签 |
| 全局状态 | skeleton、Loading、emptyPage、错误页 |
在页面低保真评审前,不提前创建:
- 第二套图片组件。
- 第二套价格组件。
- 第二套空态和加载组件。
- 第二套地址选择器。
- 第二套支付方式组件。
- 第二套普通订单卡片。
需要在 21-v1-code-change-blueprint.md 中调整:
- 云仓与租地/认养建议使用两个分包,不全部塞入
pages/farm/cloud。 - “新增公共组件”改为“优先组合现有组件”,只保留领域组件。
- 支付组件只增加白名单回跳参数并返回支付结果,下一步仍由订单查询的
next_action决定。 - 用户中心入口通过现有动态菜单机制增加。
- 首页入口通过 DIY 增加,云仓 DIY 与普通
seckill同级。 - 普通订单列表和详情只增加摘要和专属页跳转,不复制全部云仓状态。
- 把现状缺陷修复列为独立前置任务。
以下条件已在 17、18、21、24、30 和 Figma 低保真阶段完成;本节保留为历史进入条件:
- 云仓、租地和认养页面字段已经冻结。
- 云仓、租地和认养状态字典已经冻结。
- 每个页面已选择现有页面基准。
- 每个页面已列出直接复用组件。
- 每个页面已列出扩展组件和差异。
- 每个新增领域组件都有明确职责。
- 新业务分包方案已确认。
- 首页 DIY 和用户中心入口方案已确认。
- H5 与小程序头部、返回栈和安全区已确认。
- 云仓没有复用普通秒杀的订单和结算状态。
- 现状高风险缺陷有独立修复任务。
- 首页
- 项目总览
- 项目立项
- 端与角色
- 供应链经营闭环
- 模块地图
- V1 范围 PRD
- 任务拆解
- 结算与账本
- V1 结算口径
- 云仓秒杀
- CRMEB 底座能力映射
- 当前菜单页面审计
- V1 决策与术语
- 云仓流程与状态机
- 租地认养与溯源 PRD
- V1 数据模型草案
- 开发前设计计划
- V1 信息架构
- 页面与原型规格
- V1 API 契约草案
- 事件任务权限通知
- 五项目代码改造蓝图
- 测试验收发布与手册计划
- CRMEB 视觉基线审计
- G3/G4 决策登记表
- 用户端 uni-app 复用审计
- 开发前主清单
- 自主设计工作指引
- V1 需求追踪矩阵
- G3 技术专项验证报告
- V1 P0 页面矩阵
- 写操作契约注册表
- 事件任务操作注册表
- 状态异常事务矩阵
- 数据库字段字典
- 页面 API 文件追踪
- V1 ER 图
- API 字段契约注册表
- 平台管理员手册
- 商户手册
- 用户帮助
- 服务与现场手册
- 开发任务包
- 测试目录与 Fixtures
- 发布与运维手册
- 设计交付与研发交接