healthapp
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

36 KiB

保健品商城 - 总体设计方案

关联项目:健康AI问询助手 开发顺序:在健康AI问询助手项目完成后开发 实现状态: 后端API已完成,前端待开发


实现进度

后端开发状态 已完成

模块 状态 说明
会员系统 完成 会员等级(普通/银卡/金卡/钻石)、积分、折扣
商品模块 完成 分类、商品列表、详情、SKU、搜索
购物车 完成 增删改查、批量操作、库存检查
收货地址 完成 地址管理、默认地址
订单系统 完成 订单创建、支付、取消、确认收货
体质推荐 完成 基于用户体质的商品推荐
用户共享 完成 与健康AI共用用户表和JWT认证

前端开发状态

平台 状态 说明
Web (Vue3) 完成 独立 mall/ 项目(10个页面 + 布局 + API层 + 状态管理)
React Native 📋 待开发 APP端商城界面

前端项目架构

healthApps/
├── web/        → 健康AI助手前端 (端口 5173)
├── mall/       → 健康商城前端 (端口 5174)  ← 独立项目
└── backend/    → 共享后端 (端口 8080)
  • web/mall/ 为独立 Vue 3 项目,各自有 package.json
  • 共享同一后端 API 和 JWT Token(通过 localStorage)
  • 通过环境变量配置双向跳转 URL

一、项目概述

1.1 项目背景

本项目是"健康AI问询助手"的关联项目,为用户提供保健品购买服务。通过AI问诊系统的体质分析和健康建议,智能推荐适合用户的保健品,实现"健康咨询 → 产品推荐 → 购买转化"的完整闭环。

1.2 核心价值

  • 精准推荐:基于用户体质和健康状况,提供个性化产品推荐
  • 信任背书:AI健康助手的专业分析增强用户购买信心
  • 便捷体验:从健康咨询到产品购买的无缝衔接
  • 用户粘性:健康管理与产品消费的双向绑定

1.3 目标用户

用户群体 特点 需求
中老年人 50-70岁,注重养生 心脑血管、骨关节、助眠、血糖调节
亚健康白领 25-45岁,工作压力大 补气、抗疲劳、护眼、免疫力
养生爱好者 各年龄段,关注中医体质 体质调养、食疗产品

二、技术架构

2.1 技术栈

层次 技术选型 说明
Web前端 Vue 3 + TypeScript + Vite 与健康AI项目保持一致
APP端 React Native + TypeScript 与健康AI项目保持一致
后端服务 Go + go-zero + GORM 与健康AI项目保持一致(已迁移)
数据库 SQLite / PostgreSQL 支持切换,与健康AI共享用户表
支付对接 微信支付 / 支付宝 预留接口
对象存储 阿里云OSS / 本地存储 产品图片存储

框架说明: 后端使用 go-zero 微服务框架,保持与健康AI后端一致。

  • API定义: 使用 .api 文件定义接口
  • ORM: 继续使用 GORM 进行数据库操作
  • 认证: 使用 go-zero 内置 JWT 中间件

2.2 系统架构图

┌─────────────────────────────────────────────────────────────────┐
│                         用户端                                   │
├─────────────────────┬───────────────────────────────────────────┤
│    健康AI Web/APP   │              商城 Web/APP                  │
│   (体质分析/AI问诊)  │    (产品浏览/购物车/订单/支付)              │
└─────────┬───────────┴────────────────┬──────────────────────────┘
          │                            │
          │         API Gateway        │
          │                            │
┌─────────▼────────────────────────────▼──────────────────────────┐
│                        后端服务层                                │
├─────────────────────┬───────────────────────────────────────────┤
│   健康AI服务         │              商城服务                      │
│  - 用户认证          │            - 产品管理                      │
│  - 体质辨识          │            - 购物车                        │
│  - AI对话           │            - 订单管理                       │
│  - 健康档案          │            - 支付对接                      │
│  - 产品推荐接口      │            - 物流查询                      │
└─────────┬───────────┴────────────────┬──────────────────────────┘
          │                            │
┌─────────▼────────────────────────────▼──────────────────────────┐
│                        数据层                                    │
├─────────────────────┬───────────────────────────────────────────┤
│   共享数据           │              商城独立数据                  │
│  - 用户表            │            - 产品详情表                    │
│  - 产品基础表        │            - SKU表                        │
│  - 体质-产品关联     │            - 购物车表                      │
│                     │            - 订单表                        │
│                     │            - 支付记录表                    │
└─────────────────────┴───────────────────────────────────────────┘

2.3 与健康AI项目的双向对接

对接方式 方向 说明
用户体系共享 双向 使用同一套用户认证(JWT Token互认)
产品数据同步 双向 健康AI存储基础产品信息,商城扩展详细信息
产品推荐跳转 健康AI → 商城 AI推荐的产品链接直接跳转到商城产品页
AI咨询跳转 商城 → 健康AI 商城产品页/首页提供AI咨询入口,跳转到健康AI
体质信息获取 商城 ← 健康AI 商城调用健康AI接口获取用户体质,优化推荐排序
购买记录同步 商城 → 健康AI 用户购买保健品后,同步到健康AI用于AI问诊参考

2.4 会员系统设计 (已实现)

会员等级体系

等级 升级条件 折扣 积分倍率 包邮门槛
普通用户 默认 1.0x ¥99
银卡会员 累计消费≥¥500 98折 1.2x ¥69
金卡会员 累计消费≥¥2000 95折 1.5x ¥49
钻石会员 累计消费≥¥5000 92折 2.0x 全场包邮

积分规则

  • 获取: 订单支付后按实付金额 × 等级倍率获得积分
  • 使用: 100积分 = 1元,单笔订单最多抵扣20%
  • 有效期: 获得后1年过期

数据模型 (已实现)

// User 扩展字段
type User struct {
    // ... 基础字段
    MemberLevel string     // normal/silver/gold/diamond
    TotalSpent  float64    // 累计消费
    Points      int        // 当前积分
    MemberSince *time.Time // 首次消费时间
}

// 积分变动记录
type PointsRecord struct {
    UserID      uint
    Type        string // earn/spend/expire/adjust
    Points      int    // 变动积分(正负)
    Balance     int    // 变动后余额
    Source      string // order/activity/system
    ReferenceID uint   // 关联订单ID
}

三、功能模块

3.1 功能架构

保健品商城
├── 首页模块
│   ├── Banner轮播
│   ├── AI健康咨询入口(悬浮按钮)
│   ├── 体质推荐卡片(对接健康AI)
│   ├── 分类导航
│   ├── 热销推荐
│   └── 新品上架
│
├── 产品模块
│   ├── 产品列表(分类筛选、排序)
│   ├── 产品详情
│   │   ├── 图文规格评价
│   │   ├── "咨询适合我吗"按钮 → 跳转AI问诊
│   │   └── 相关体质说明
│   ├── 产品搜索
│   └── 收藏功能
│
├── AI咨询模块(跳转健康AI)
│   ├── 智能健康咨询入口
│   ├── 体质测试入口
│   ├── 历史咨询记录
│   └── 携带产品信息跳转
│
├── 购物车模块
│   ├── 添加/删除商品
│   ├── 修改数量
│   ├── 选择结算
│   └── 失效商品处理
│
├── 订单模块
│   ├── 确认订单
│   ├── 地址管理
│   ├── 订单列表
│   ├── 订单详情
│   ├── 取消订单
│   └── 申请退款
│
├── 支付模块
│   ├── 微信支付
│   ├── 支付宝支付
│   └── 支付结果回调
│
├── 用户模块
│   ├── 登录/注册(共享健康AI)
│   ├── 我的体质报告(跳转健康AI)
│   ├── 收货地址管理
│   ├── 我的订单
│   ├── 我的收藏
│   └── 浏览历史
│
└── 其他模块
    ├── 物流查询
    └── 优惠券(扩展)

3.2 核心功能说明

3.2.1 体质推荐功能

从健康AI获取用户体质信息,在商城首页和产品列表页优先展示适合用户体质的产品。

用户打开商城
    │
    ▼
调用健康AI接口获取用户体质
    │
    ▼
根据体质查询关联产品
    │
    ▼
在"为您推荐"模块展示

3.2.2 智能搜索

支持按症状关键词搜索产品,如"失眠"、"关节痛"、"血压高"等。

3.2.3 AI健康咨询功能(核心)

商城内置多个AI咨询入口,用户点击后跳转到健康AI项目进行咨询。

入口位置:

位置 入口形式 跳转目标 携带参数
首页右下角 悬浮按钮"AI咨询" 健康AI对话页
首页体质卡片 "测测我的体质" 健康AI体质测试页
产品详情页 "这款适合我吗?" 健康AI对话页 产品ID、产品名称
我的页面 "查看体质报告" 健康AI体质结果页
购物车页面 "不知道选哪个?问问AI" 健康AI对话页 购物车产品列表

跳转流程:

商城产品详情页
    │
    │ 用户点击"这款适合我吗?"
    ▼
检查用户登录状态
    │
    ├─[未登录]─▶ 跳转登录页 → 登录后继续
    │
    └─[已登录]─▶ 构建跳转URL
                    │
                    ▼
            跳转健康AI对话页
            URL: health-ai://chat?product_id=123&product_name=xxx
                    │
                    ▼
            健康AI自动发起对话
            "我想咨询一下【产品名称】是否适合我"
                    │
                    ▼
            AI根据用户体质和产品信息回答
                    │
                    ▼
            用户可继续咨询或返回商城购买

跳转协议设计:

# Web端跳转(同域或配置跨域)
https://health-ai.example.com/chat?source=mall&product_id=123

# APP端跳转(Deep Link)
health-ai://chat?source=mall&product_id=123&product_name=xxx

# 小程序跳转(如扩展)
/pages/chat/index?source=mall&product_id=123

健康AI接收参数后处理:

  1. 识别来源为商城(source=mall)
  2. 根据product_id获取产品信息
  3. 自动生成用户问题:"我想了解【产品名称】是否适合我的体质"
  4. AI结合用户体质数据回答

3.2.4 购买记录同步

用户在商城购买保健品后,订单信息同步到健康AI,用于:

  • AI问诊时参考用户已购买的保健品
  • 避免重复推荐已购买产品
  • 分析用户保健品使用效果

四、数据模型设计

4.1 ER图

erDiagram
    User ||--o{ Order : places
    User ||--o{ CartItem : has
    User ||--o{ Address : has
    User ||--o{ Favorite : has
    Product ||--o{ ProductSku : has
    Product ||--o{ CartItem : in
    Product ||--o{ OrderItem : in
    Product ||--o{ Favorite : contains
    Order ||--|{ OrderItem : contains
    Order ||--o| Payment : has
    ProductSku ||--o{ CartItem : selected
    ProductSku ||--o{ OrderItem : ordered

    User {
        int id PK
        string phone
        string nickname
        string avatar
    }

    Product {
        int id PK
        string name
        string category
        string sub_category
        text description
        text detail_html
        string main_image
        json images
        decimal original_price
        decimal sale_price
        int sales_count
        int stock
        boolean is_on_sale
        int sort_order
    }

    ProductSku {
        int id PK
        int product_id FK
        string sku_name
        string sku_image
        decimal price
        int stock
        json attributes
    }

    CartItem {
        int id PK
        int user_id FK
        int product_id FK
        int sku_id FK
        int quantity
        boolean selected
    }

    Address {
        int id PK
        int user_id FK
        string receiver_name
        string phone
        string province
        string city
        string district
        string detail
        boolean is_default
    }

    Order {
        int id PK
        string order_no
        int user_id FK
        int address_id FK
        decimal total_amount
        decimal pay_amount
        decimal freight_amount
        string status
        string pay_type
        datetime pay_time
        string logistics_no
        text remark
        datetime created_at
    }

    OrderItem {
        int id PK
        int order_id FK
        int product_id FK
        int sku_id FK
        string product_name
        string sku_name
        string image
        decimal price
        int quantity
    }

    Payment {
        int id PK
        string payment_no
        int order_id FK
        string pay_type
        decimal amount
        string status
        string trade_no
        datetime paid_at
    }

    Favorite {
        int id PK
        int user_id FK
        int product_id FK
        datetime created_at
    }

4.2 核心表说明

产品表(Product)

字段 类型 说明
id int 产品ID(与健康AI同步)
name string 产品名称
category string 一级分类
sub_category string 二级分类
description text 简短描述
detail_html text 详情页富文本
main_image string 主图URL
images json 图片列表
original_price decimal 原价
sale_price decimal 售价
sales_count int 销量
stock int 库存
is_on_sale boolean 是否上架

订单表(Order)

字段 类型 说明
order_no string 订单编号(唯一)
status string 状态:pending/paid/shipped/completed/cancelled/refunding
pay_type string 支付方式:wechat/alipay
logistics_no string 物流单号

4.3 订单状态机

待支付(pending)
    │
    ├──[支付成功]──▶ 待发货(paid)
    │                  │
    │                  ├──[商家发货]──▶ 待收货(shipped)
    │                  │                  │
    │                  │                  └──[确认收货]──▶ 已完成(completed)
    │                  │
    │                  └──[申请退款]──▶ 退款中(refunding)
    │
    └──[取消/超时]──▶ 已取消(cancelled)

五、API 接口设计

5.1 产品接口

GET    /api/products                    # 产品列表(支持分类、排序、分页)
GET    /api/products/:id                # 产品详情
GET    /api/products/search?q=xxx       # 搜索产品
GET    /api/products/recommend          # 体质推荐(调用健康AI)
GET    /api/categories                  # 分类列表

5.2 购物车接口

GET    /api/cart                        # 获取购物车
POST   /api/cart                        # 添加到购物车
PUT    /api/cart/:id                    # 更新数量
DELETE /api/cart/:id                    # 删除商品
PUT    /api/cart/select-all             # 全选/取消全选

5.3 订单接口

POST   /api/orders                      # 创建订单
GET    /api/orders                      # 订单列表
GET    /api/orders/:id                  # 订单详情
PUT    /api/orders/:id/cancel           # 取消订单
PUT    /api/orders/:id/confirm          # 确认收货
POST   /api/orders/:id/refund           # 申请退款

5.4 支付接口

POST   /api/pay/wechat                  # 微信支付
POST   /api/pay/alipay                  # 支付宝支付
POST   /api/pay/callback/wechat         # 微信回调
POST   /api/pay/callback/alipay         # 支付宝回调
GET    /api/pay/status/:order_no        # 查询支付状态

5.5 地址接口

GET    /api/addresses                   # 地址列表
POST   /api/addresses                   # 添加地址
PUT    /api/addresses/:id               # 修改地址
DELETE /api/addresses/:id               # 删除地址
PUT    /api/addresses/:id/default       # 设为默认

5.6 收藏接口

GET    /api/favorites                   # 收藏列表
POST   /api/favorites                   # 添加收藏
DELETE /api/favorites/:product_id       # 取消收藏

5.7 go-zero API 定义示例

// mallapi.api - 商城API定义文件

syntax = "v1"

info(
    title: "保健品商城API"
    desc: "健康AI配套商城服务"
    author: "healthApps"
    version: "1.0"
)

// ==================== 类型定义 ====================

type (
    // 产品
    Product {
        ID          uint    `json:"id"`
        Name        string  `json:"name"`
        Category    string  `json:"category"`
        MainImage   string  `json:"main_image"`
        SalePrice   float64 `json:"sale_price"`
        OriginalPrice float64 `json:"original_price,omitempty"`
        SalesCount  int     `json:"sales_count"`
        Stock       int     `json:"stock"`
    }
    
    ProductListReq {
        Category string `form:"category,optional"`
        Page     int    `form:"page,default=1"`
        PageSize int    `form:"page_size,default=20"`
        Sort     string `form:"sort,optional"` // price_asc, price_desc, sales
    }
    
    ProductListResp {
        List  []Product `json:"list"`
        Total int64     `json:"total"`
    }
    
    // 购物车
    CartItem {
        ID        uint    `json:"id"`
        ProductID uint    `json:"product_id"`
        SkuID     uint    `json:"sku_id,omitempty"`
        Name      string  `json:"name"`
        Image     string  `json:"image"`
        Price     float64 `json:"price"`
        Quantity  int     `json:"quantity"`
        Selected  bool    `json:"selected"`
    }
    
    AddCartReq {
        ProductID uint `json:"product_id"`
        SkuID     uint `json:"sku_id,omitempty"`
        Quantity  int  `json:"quantity,default=1"`
    }
    
    // 订单
    CreateOrderReq {
        AddressID uint   `json:"address_id"`
        CartIDs   []uint `json:"cart_ids"`
        Remark    string `json:"remark,optional"`
    }
    
    OrderResp {
        OrderNo     string  `json:"order_no"`
        Status      string  `json:"status"`
        TotalAmount float64 `json:"total_amount"`
        PayAmount   float64 `json:"pay_amount"`
    }
)

// ==================== 公开接口(无需认证)====================

@server(
    prefix: /api/mall
)
service mallapi-api {
    @doc "产品列表"
    @handler GetProductList
    get /products (ProductListReq) returns (ProductListResp)
    
    @doc "产品详情"
    @handler GetProduct
    get /products/:id returns (Product)
    
    @doc "产品搜索"
    @handler SearchProducts
    get /products/search returns (ProductListResp)
    
    @doc "分类列表"
    @handler GetCategories
    get /categories returns ([]Category)
}

// ==================== 需要认证的接口 ====================

@server(
    prefix: /api/mall
    jwt: Auth
)
service mallapi-api {
    @doc "获取购物车"
    @handler GetCart
    get /cart returns ([]CartItem)
    
    @doc "添加到购物车"
    @handler AddToCart
    post /cart (AddCartReq) returns (CartItem)
    
    @doc "创建订单"
    @handler CreateOrder
    post /orders (CreateOrderReq) returns (OrderResp)
    
    @doc "订单列表"
    @handler GetOrders
    get /orders returns ([]OrderResp)
    
    @doc "体质推荐产品"
    @handler GetRecommendProducts
    get /recommend returns (ProductListResp)
}

六、项目目录结构

healthMall/
├── web/                              # Web前端
│   ├── src/
│   │   ├── api/                      # 接口定义
│   │   ├── assets/                   # 静态资源
│   │   ├── components/               # 公共组件
│   │   │   ├── ProductCard.vue       # 产品卡片
│   │   │   ├── CartItem.vue          # 购物车项
│   │   │   └── AddressCard.vue       # 地址卡片
│   │   ├── views/
│   │   │   ├── Home.vue              # 首页
│   │   │   ├── Category.vue          # 分类页
│   │   │   ├── ProductList.vue       # 产品列表
│   │   │   ├── ProductDetail.vue     # 产品详情
│   │   │   ├── Cart.vue              # 购物车
│   │   │   ├── Checkout.vue          # 结算页
│   │   │   ├── OrderList.vue         # 订单列表
│   │   │   ├── OrderDetail.vue       # 订单详情
│   │   │   └── Address.vue           # 地址管理
│   │   ├── store/                    # 状态管理
│   │   ├── router/                   # 路由配置
│   │   └── utils/                    # 工具函数
│   └── package.json
│
├── app/                              # React Native APP
│   ├── src/
│   │   ├── api/
│   │   ├── components/
│   │   ├── screens/
│   │   ├── navigation/
│   │   ├── store/
│   │   └── utils/
│   └── package.json
│
├── backend/                          # 后端服务 (go-zero)
│   └── mallapi/                      # 商城API服务
│       ├── mallapi.go                # 主入口
│       ├── mallapi.api               # API定义文件
│       ├── etc/
│       │   └── mallapi-api.yaml      # 配置文件
│       ├── internal/
│       │   ├── config/
│       │   │   └── config.go         # 配置结构
│       │   ├── handler/              # 请求处理器 (goctl生成)
│       │   │   ├── product_handler.go
│       │   │   ├── cart_handler.go
│       │   │   ├── order_handler.go
│       │   │   ├── payment_handler.go
│       │   │   ├── address_handler.go
│       │   │   └── routes.go
│       │   ├── logic/                # 业务逻辑
│       │   │   ├── product_logic.go
│       │   │   ├── cart_logic.go
│       │   │   ├── order_logic.go
│       │   │   ├── payment_logic.go
│       │   │   └── address_logic.go
│       │   ├── model/                # GORM模型
│       │   │   ├── product.go
│       │   │   ├── cart.go
│       │   │   ├── order.go
│       │   │   ├── payment.go
│       │   │   └── address.go
│       │   ├── svc/
│       │   │   └── service_context.go # 服务上下文
│       │   ├── types/
│       │   │   └── types.go          # 请求/响应类型 (goctl生成)
│       │   └── database/
│       │       └── database.go       # 数据库初始化
│       └── pkg/
│           ├── payment/              # 支付SDK封装
│           │   ├── wechat.go
│           │   └── alipay.go
│           └── logistics/            # 物流查询
│
├── config.yaml                       # 配置文件
└── README.md

七、UI 设计规范

7.1 设计原则

  • 与健康AI项目保持视觉一致性
  • 面向中老年用户,字体和按钮适当放大
  • 购买流程清晰简洁,减少操作步骤

7.2 页面规划

页面 主要功能 AI咨询入口
首页 Banner、分类入口、体质推荐卡片、热销榜 右下角悬浮按钮、体质卡片"测测体质"
分类页 左侧分类菜单、右侧产品列表 顶部"不知道选什么?问AI"
产品详情 轮播图、价格、规格选择、加入购物车 "这款适合我吗?咨询AI"
购物车 商品列表、全选、价格汇总、去结算 "不确定?咨询AI帮你选"
结算页 收货地址、商品清单、支付方式、提交订单 -
订单列表 Tab分类(全部/待付款/待发货/待收货/已完成) -
订单详情 物流信息、订单状态、商品信息、操作按钮 "使用问题?咨询AI"
我的 体质报告入口、订单、收藏、地址 "查看我的体质报告"

7.3 配色方案

用途 颜色 说明
主色调 #52C41A 绿色,与健康主题一致
价格色 #FF4D4F 红色,突出价格
辅助色 #1890FF 蓝色,链接和按钮
背景色 #F5F5F5 浅灰,页面背景
文字色 #333333 深灰,主要文字

八、开发计划

8.1 阶段划分

阶段 内容 预计周期
第一阶段 产品展示、购物车 -
第二阶段 订单流程、地址管理 -
第三阶段 支付对接 -
第四阶段 APP开发 -
第五阶段 物流、优惠券等扩展 -

8.2 开发任务清单

后端开发(go-zero):

  1. 项目初始化
    • 使用 goctl 生成项目骨架:goctl api new mallapi
    • 编写 mallapi.api 定义文件
    • 配置与健康AI共享的数据库和JWT密钥
  2. 产品模块(详情、SKU、库存)
    • GORM 模型定义
    • 产品列表、详情、搜索接口
  3. 购物车模块
    • 添加、修改、删除购物车
  4. 地址管理模块
    • CRUD 地址接口
  5. 订单模块(创建、状态流转)
    • 订单创建、列表、详情
    • 订单状态机实现
  6. 支付模块(微信/支付宝)
    • 支付SDK封装
    • 回调处理
  7. 健康AI对接
    • JWT Token 共享认证
    • 体质推荐产品接口
    • 购买记录同步接口

Web前端开发:

  1. 项目初始化
  2. 首页(Banner、分类、推荐、AI咨询入口)
  3. 产品列表和详情页(含AI咨询入口)
  4. 购物车页面(含AI咨询入口)
  5. 结算和订单页面
  6. 地址管理页面
  7. 我的页面(体质报告入口)
  8. 健康AI跳转工具封装

APP开发:

  1. 项目初始化
  2. 导航和Tab配置
  3. 各功能页面
  4. Deep Link跳转健康AI配置

九、与健康AI的集成方案

9.1 用户认证集成

商城与健康AI共享同一套JWT认证,使用相同的 AccessSecret:

# mallapi-api.yaml 配置(与健康AI保持一致)
Auth:
  AccessSecret: health-ai-secret-key-change-in-production
  AccessExpire: 86400
// go-zero 内置 JWT 中间件自动验证
// 在 .api 文件中使用 jwt:Auth 标记需要认证的路由
@server(
    prefix: /api/mall
    jwt: Auth
)
service mallapi-api {
    @handler GetCart
    get /cart returns (CartResp)
}

9.2 体质推荐集成

// internal/logic/recommend_logic.go
func (l *RecommendLogic) GetConstitutionRecommend() (*types.RecommendResp, error) {
    userID, _ := logic.GetUserIDFromCtx(l.ctx)
    
    // 1. 从共享数据库获取用户体质
    var assessment model.ConstitutionAssessment
    l.svcCtx.DB.Where("user_id = ?", userID).Order("assessed_at DESC").First(&assessment)
    
    // 2. 根据体质查询推荐产品
    // SELECT * FROM products p 
    // JOIN constitution_products cp ON p.id = cp.product_id
    // WHERE cp.constitution_type = ?
}

9.3 AI咨询跳转集成(商城 → 健康AI)

Web端跳转工具:

// utils/healthAI.ts
const HEALTH_AI_BASE_URL = import.meta.env.VITE_HEALTH_AI_URL || 'http://localhost:5173'

interface JumpParams {
  page: 'chat' | 'constitution' | 'result'  // 对话页/体质测试/体质结果
  productId?: number
  productName?: string
  source?: string
}

// 跳转到健康AI
export function jumpToHealthAI(params: JumpParams) {
  const query = new URLSearchParams()
  query.set('source', 'mall')
  
  if (params.productId) {
    query.set('product_id', String(params.productId))
  }
  if (params.productName) {
    query.set('product_name', params.productName)
  }

  const url = `${HEALTH_AI_BASE_URL}/${params.page}?${query.toString()}`
  
  // 同域:直接跳转
  // 跨域:新窗口打开
  window.location.href = url
}

// 在产品详情页使用
// jumpToHealthAI({ page: 'chat', productId: 123, productName: '氨糖软骨素' })

APP端跳转(React Native):

// utils/healthAI.ts
import { Linking, Platform } from 'react-native'

const HEALTH_AI_SCHEME = 'healthai://'
const HEALTH_AI_WEB_URL = 'https://health-ai.example.com'

export async function jumpToHealthAI(params: {
  page: 'chat' | 'constitution' | 'result'
  productId?: number
  productName?: string
}) {
  const query = `source=mall&product_id=${params.productId || ''}&product_name=${encodeURIComponent(params.productName || '')}`
  
  // 尝试Deep Link
  const deepLink = `${HEALTH_AI_SCHEME}${params.page}?${query}`
  
  const canOpen = await Linking.canOpenURL(deepLink)
  
  if (canOpen) {
    // 健康AI APP已安装,使用Deep Link
    await Linking.openURL(deepLink)
  } else {
    // 健康AI APP未安装,跳转Web版
    await Linking.openURL(`${HEALTH_AI_WEB_URL}/${params.page}?${query}`)
  }
}

健康AI接收跳转参数处理:

// 健康AI项目 - chat页面
// views/Chat.vue 或 screens/Chat.tsx

import { useRoute } from 'vue-router'  // Vue
// import { useRoute } from '@react-navigation/native'  // RN

const route = useRoute()

onMounted(() => {
  const { source, product_id, product_name } = route.query
  
  if (source === 'mall' && product_id) {
    // 从商城跳转而来,自动发起产品咨询
    const autoMessage = `我想了解【${product_name}】这款产品是否适合我的体质?`
    sendMessage(autoMessage)
  }
})

9.4 双向跳转入口汇总

方向 场景 入口 跳转目标
商城→健康AI 首页悬浮按钮 "AI咨询" 健康AI对话页
商城→健康AI 首页体质卡片 "测测我的体质" 健康AI体质测试页
商城→健康AI 产品详情页 "这款适合我吗?" 健康AI对话页(带产品参数)
商城→健康AI 购物车页 "不确定选哪个?" 健康AI对话页
商城→健康AI 我的页面 "查看体质报告" 健康AI体质结果页
健康AI→商城 AI回答推荐 产品链接 商城产品详情页
健康AI→商城 体质结果页 "选购调养产品" 商城体质推荐列表

9.5 订单数据同步

用户在商城购买后,同步订单到健康AI用于AI问诊参考:

// 商城后端 - 订单完成后同步
func SyncOrderToHealthAI(order *Order) error {
    payload := map[string]interface{}{
        "user_id":    order.UserID,
        "order_no":   order.OrderNo,
        "products":   extractProductInfo(order.Items),
        "created_at": order.CreatedAt,
    }
    
    // 调用健康AI接口同步
    _, err := http.Post(
        config.HealthAI.BaseURL + "/api/sync/purchase",
        "application/json",
        bytes.NewBuffer(jsonEncode(payload)),
    )
    return err
}
// 健康AI后端 - 接收购买记录
// POST /api/sync/purchase
func HandlePurchaseSync(c *gin.Context) {
    var req struct {
        UserID    uint   `json:"user_id"`
        OrderNo   string `json:"order_no"`
        Products  []struct {
            ID   uint   `json:"id"`
            Name string `json:"name"`
        } `json:"products"`
    }
    c.BindJSON(&req)
    
    // 存储到用户健康档案,AI问诊时可参考
    // "用户最近购买了:氨糖软骨素、深海鱼油..."
}

十、安全与合规

10.1 支付安全

  • 支付回调验签
  • 订单金额校验
  • 防止重复支付

10.2 数据安全

  • 用户隐私数据加密存储
  • HTTPS传输
  • SQL注入防护

10.3 合规要求

  • 保健品销售资质展示
  • 产品不得宣传治疗功效
  • 退换货政策明示

附录:配置文件示例

# config.yaml
server:
  port: 8081
  mode: debug

database:
  driver: sqlite
  dsn: "./data/mall.db"

# 健康AI服务配置
health_ai:
  # 后端API地址(用于数据同步)
  api_url: "http://localhost:8080"
  # Web前端地址(用于页面跳转)
  web_url: "http://localhost:5173"
  # APP Deep Link Scheme
  app_scheme: "healthai://"
  # 同步API密钥
  sync_api_key: "your-sync-key"
  
# 支付配置(正式环境从环境变量读取)
payment:
  wechat:
    app_id: ""
    mch_id: ""
    api_key: ""
    notify_url: "https://yourdomain.com/api/pay/callback/wechat"
  alipay:
    app_id: ""
    private_key: ""
    public_key: ""
    notify_url: "https://yourdomain.com/api/pay/callback/alipay"

# 文件存储
storage:
  type: local  # local / oss
  local:
    path: "./uploads"
  oss:
    endpoint: ""
    access_key: ""
    secret_key: ""
    bucket: ""

附录B:后端API汇总 (已实现)

商城公开接口 (/api/mall)

方法 路径 说明
GET /categories 获取商品分类
GET /products 商品列表
GET /products/:id 商品详情
GET /products/search 搜索商品
GET /products/featured 推荐商品

商城认证接口 (/api/mall,需JWT)

方法 路径 说明
GET /member/info 获取会员信息
GET /member/points/records 积分变动记录
GET /cart 获取购物车
POST /cart 添加到购物车
PUT /cart/:id 更新购物车项
DELETE /cart/:id 删除购物车项
POST /cart/batch-select 批量选中
DELETE /cart/clear 清空购物车
GET /addresses 地址列表
POST /addresses 创建地址
PUT /addresses/:id 更新地址
DELETE /addresses/:id 删除地址
PUT /addresses/:id/default 设为默认
GET /orders 订单列表
GET /orders/:id 订单详情
POST /orders/preview 订单预览
POST /orders 创建订单
POST /orders/:id/pay 支付订单
POST /orders/:id/cancel 取消订单
POST /orders/:id/receive 确认收货
GET /products/constitution-recommend 体质推荐商品

v1.4 增量更新(2026-02-11)

  • 购物车页补全批量操作:新增“删除已选”“清空购物车”交互和确认流程。
  • 我的页补全账号操作:新增“退出登录”入口并接入本地登录页。
  • 我的页补全订单状态总览:新增待支付/待发货/待收货/已完成角标统计。
  • 会员信息请求失败时提供重试入口,提升弱网可恢复性。
  • 修复会员积分记录分页加载:第 2 页起采用追加模式,避免“加载更多”覆盖已加载数据。

文档版本: v1.4 更新日期: 2026-02-11 创建日期: 2026-02-01 关联项目: 健康AI问询助手