Files
medical-mall/doc_mall/MIGRATION_GUIDE.md
2026-01-21 12:12:22 +08:00

543 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 doc_mall 项目迁移指南
## 📋 迁移概述
本指南将帮助你将 `doc_mall` 商城系统模块从当前项目迁移到一个独立的仓库中,确保所有相关模块和依赖项都能正确复用。
---
## 📁 需要迁移的文件和目录清单
### 1. 核心文档和数据库脚本 (`doc_mall/`)
**完整目录结构**
```
doc_mall/
├── README.md # 文档索引
├── TECHNICAL_IMPLEMENTATION.md # 技术实现拆解
├── MODULE_ANALYSIS.md # 模块深度分析
├── FRONTEND_BACKEND_DEBUGGING.md # 前后端联调指南
├── user_reuse_summary.md # 用户表复用方案
├── migration_complete_report.md # 迁移完成报告
├── README_subscription_consumer.md # 订阅功能说明
├── 裂变红包.md # 红包功能文档
├── create_mall_subscription_tables.sql # 订阅表创建脚本
├── subscription_guard_trigger.sql # 订阅触发器
├── subscription_rls_policies.sql # 订阅RLS策略
├── analysis/ # 分析文档目录
│ └── user_compatibility_analysis.md
├── database/ # 数据库脚本目录
│ ├── complete_mall_database.sql # 完整数据库(推荐)
│ ├── database_creation_report.md
│ ├── database_syntax_fix_report.md
│ ├── user_compatibility_implementation.sql
│ ├── product_database.sql
│ ├── mock_data_insert.sql
│ ├── mock_data_documentation.md
│ ├── deployment_guide.md
│ ├── validation_test.sql
│ ├── complete_deployment_guide.md
│ └── [其他SQL和文档文件]
└── reports/ # 生成报告目录
├── system_generation_report.md
├── detail_pages_report.md
└── profile_pages_report.md
```
**迁移操作**
```bash
# 直接复制整个 doc_mall 目录
cp -r doc_mall/ /path/to/new-repo/doc_mall/
```
---
### 2. 前端页面代码 (`pages/mall/`)
**完整目录结构**
```
pages/mall/
├── admin/ # 管理端页面
│ ├── index.uvue
│ ├── profile.uvue
│ ├── user-detail.uvue
│ └── subscription/
│ ├── plan-management.uvue
│ └── user-subscriptions.uvue
├── analytics/ # 数据分析端页面
│ ├── index.uvue
│ ├── profile.uvue
│ └── report-detail.uvue
├── consumer/ # 消费者端页面
│ ├── index.uvue
│ ├── product-detail.uvue
│ ├── order-detail.uvue
│ ├── profile.uvue
│ └── subscription/
│ ├── plan-list.uvue
│ ├── plan-detail.uvue
│ ├── subscribe-checkout.uvue
│ ├── my-subscriptions.uvue
│ └── README.md
├── delivery/ # 配送端页面
│ ├── index.uvue
│ ├── order-detail.uvue
│ └── profile.uvue
├── merchant/ # 商家端页面
│ ├── index.uvue
│ ├── product-detail.uvue
│ └── profile.uvue
├── service/ # 客服端页面
│ ├── index.uvue
│ ├── profile.uvue
│ └── ticket-detail.uvue
├── nfc/ # NFC支付相关可选
│ ├── admin/index.uvue
│ ├── librarian/index.uvue
│ ├── merchant/pos-cashier.uvue
│ ├── parent/index.uvue
│ ├── security/index.uvue
│ ├── student/index.uvue
│ ├── teacher/index.uvue
│ └── [其他NFC相关文件]
├── mall.md # 业务需求文档
├── nfc.md # NFC功能文档
├── nfc-modules-guide.md # NFC模块指南
├── pages-config.json # 页面路由配置(主要)
├── pages-admin.json # 管理端路由配置
├── pages-librarian.json # 图书管理员路由配置
├── pages-merchant.json # 商家路由配置
├── pages-parent.json # 家长路由配置
├── pages-security.json # 安全员路由配置
├── pages-student.json # 学生路由配置
└── pages-teacher.json # 教师路由配置
```
**迁移操作**
```bash
# 复制整个 pages/mall 目录
cp -r pages/mall/ /path/to/new-repo/pages/mall/
```
---
### 3. 类型定义文件 (`types/mall-types.uts`)
**文件路径**
```
types/mall-types.uts
```
**说明**
- 包含所有商城系统相关的 TypeScript/UTS 类型定义
- 所有 `pages/mall/` 下的页面都依赖此文件
- 必须迁移,否则前端代码无法编译
**迁移操作**
```bash
# 复制类型定义文件
mkdir -p /path/to/new-repo/types
cp types/mall-types.uts /path/to/new-repo/types/
```
---
## 🔗 依赖关系分析
### 3.1 内部依赖(必须迁移)
#### Supabase 客户端封装
- **依赖文件**`components/supadb/aksupainstance.uts`
- **使用情况**:所有商城页面都通过 Supabase 客户端访问数据库
- **迁移建议**
- 如果新仓库也需要使用 Supabase需要迁移此文件
- 或者创建新的 Supabase 客户端封装
#### 工具函数
- **检查项目**:是否需要 `utils/` 下的工具函数
- **常见使用**:日期格式化、数据验证等
- **迁移建议**
- 检查商城页面中 `@/utils/` 的引用
- 根据需要迁移相应的工具函数
### 3.2 外部依赖(需要配置)
#### 数据库依赖
- **依赖表**`ak_users` (用户主表)
- **说明**:商城系统复用现有用户表实现单点登录
- **迁移策略**
- **方案A**:在新仓库中创建独立的用户表
- **方案B**:保持与现有用户表的关联(需要跨数据库访问)
- **方案C**:通过 API 服务访问用户数据
#### Supabase 配置
- **需要配置**Supabase 项目 URL 和 API Key
- **配置文件**:通常保存在环境变量或配置文件中
- **迁移步骤**
1. 在新仓库创建 Supabase 项目(或使用现有项目)
2. 执行数据库脚本创建表结构
3. 配置 RLS 策略和权限
4. 更新前端配置中的 Supabase 连接信息
---
## 📝 迁移步骤详解
### 步骤 1: 创建新仓库
```bash
# 1. 创建新仓库目录
mkdir mall-system
cd mall-system
# 2. 初始化 Git 仓库
git init
# 3. 创建基础目录结构
mkdir -p doc_mall/{analysis,database,reports}
mkdir -p pages/mall
mkdir -p types
mkdir -p components/supadb # 如果需要
mkdir -p utils # 如果需要
```
### 步骤 2: 迁移文档和数据库脚本
```bash
# 从原项目复制 doc_mall 目录
cp -r /path/to/akmon/doc_mall/* ./doc_mall/
# 验证文件完整性
ls -la doc_mall/
```
### 步骤 3: 迁移前端代码
```bash
# 复制页面代码
cp -r /path/to/akmon/pages/mall/* ./pages/mall/
# 复制类型定义
cp /path/to/akmon/types/mall-types.uts ./types/
# 验证关键文件
ls -la pages/mall/
ls -la types/mall-types.uts
```
### 步骤 4: 迁移依赖文件(可选)
```bash
# 如果需要 Supabase 客户端
cp -r /path/to/akmon/components/supadb/* ./components/supadb/
# 检查并迁移需要的工具函数
# 查看 pages/mall/ 下文件中的 import 语句
grep -r "from '@/utils" pages/mall/
```
### 步骤 5: 更新导入路径
在新仓库中,需要检查并更新以下内容:
#### 5.1 检查类型导入
```bash
# 查找所有 mall-types 的引用
grep -r "from '@/types/mall-types" pages/mall/
```
确保导入路径正确:
```typescript
// 应该是相对路径或配置的别名
import type { ProductType } from '@/types/mall-types.uts'
```
#### 5.2 检查 Supabase 导入
```bash
# 查找 Supabase 引用
grep -r "from '@/components/supadb" pages/mall/
```
#### 5.3 检查工具函数导入
```bash
# 查找工具函数引用
grep -r "from '@/utils" pages/mall/
```
### 步骤 6: 配置数据库
#### 6.1 创建 Supabase 项目
1. 访问 Supabase 控制台
2. 创建新项目或使用现有项目
3. 记录项目 URL 和 API Key
#### 6.2 执行数据库脚本
```bash
# 方式1: 通过 Supabase Dashboard SQL Editor
# 打开 doc_mall/database/complete_mall_database.sql
# 复制内容到 Supabase SQL Editor 执行
# 方式2: 通过 psql 命令行(如果使用自建 PostgreSQL
psql -h localhost -U postgres -d your_database -f doc_mall/database/complete_mall_database.sql
```
#### 6.3 配置 RLS 策略
确保执行以下脚本:
- `doc_mall/subscription_rls_policies.sql`
- `doc_mall/subscription_guard_trigger.sql`
- 数据库脚本中已包含的 RLS 策略
#### 6.4 插入测试数据(可选)
```bash
psql -h localhost -U postgres -d your_database -f doc_mall/database/mock_data_insert.sql
```
### 步骤 7: 配置前端环境
#### 7.1 创建配置文件
在新仓库根目录创建配置文件(根据你的项目结构):
**示例:`config/supabase.config.ts`**
```typescript
export const supabaseConfig = {
url: 'https://your-project.supabase.co',
anonKey: 'your-anon-key',
// 其他配置
}
```
#### 7.2 更新 Supabase 客户端初始化
如果迁移了 `components/supadb/aksupainstance.uts`,确保它使用新的配置。
#### 7.3 配置路由
检查并更新以下路由配置文件:
- `pages/mall/pages-config.json` (主要路由配置)
- 其他角色端路由配置 JSON 文件
### 步骤 8: 处理用户表依赖
商城系统依赖 `ak_users` 表,有几种处理方案:
#### 方案 A: 创建独立的用户表(推荐用于完全独立部署)
```sql
-- 创建独立的用户表(简化版)
CREATE TABLE public.mall_users (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
phone VARCHAR(20) UNIQUE NOT NULL,
email VARCHAR(255),
nickname VARCHAR(100),
-- 其他必要字段
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
```
然后更新所有 `ml_user_profiles` 等表的外键引用:
```sql
-- 修改外键引用
ALTER TABLE public.ml_user_profiles
DROP CONSTRAINT ml_user_profiles_user_id_fkey;
ALTER TABLE public.ml_user_profiles
ADD CONSTRAINT ml_user_profiles_user_id_fkey
FOREIGN KEY (user_id) REFERENCES public.mall_users(id) ON DELETE CASCADE;
```
#### 方案 B: 通过 API 服务访问用户数据
- 保持数据库结构不变
- 通过 API 服务层访问用户数据
- 前端不直接访问 `ak_users`
#### 方案 C: 跨数据库访问(复杂,不推荐)
- 保持现有的数据库引用
- 配置跨数据库访问权限
### 步骤 9: 测试和验证
#### 9.1 编译测试
```bash
# 尝试编译项目(根据你的构建工具)
npm run build
# 或
uni-app-x build
```
#### 9.2 数据库连接测试
- 测试 Supabase 连接
- 验证 RLS 策略是否生效
- 测试 CRUD 操作
#### 9.3 功能测试
- 测试各个角色端页面是否能正常加载
- 测试核心业务流程(商品浏览、下单等)
- 测试权限控制
---
## 🔧 迁移后需要修改的内容
### 1. 更新导入路径
检查并更新所有文件中的导入路径,确保它们指向正确的位置:
```typescript
// 原项目中的导入
import type { ProductType } from '@/types/mall-types.uts'
import { supabase } from '@/components/supadb/aksupainstance.uts'
// 新仓库中可能需要调整为
import type { ProductType } from '@/types/mall-types.uts'
import { supabase } from '@/lib/supabase/client.uts' // 如果路径改变了
```
### 2. 更新数据库表引用
如果用户表方案改变,需要更新所有相关的外键和查询:
```sql
-- 原项目中引用 ak_users
user_id UUID NOT NULL REFERENCES public.ak_users(id)
-- 如果改为独立用户表
user_id UUID NOT NULL REFERENCES public.mall_users(id)
```
### 3. 更新环境变量和配置
- Supabase 项目 URL 和 API Key
- 数据库连接字符串
- 其他环境相关配置
### 4. 更新文档中的路径引用
检查 `doc_mall/` 下的文档,更新其中的文件路径引用:
```markdown
# 原文档中的路径
- `../types/mall-types.uts`
# 新仓库中应该为
- `types/mall-types.uts`
```
---
## ✅ 迁移检查清单
使用以下清单确保迁移完整:
- [ ] **文档迁移**
- [ ] `doc_mall/` 目录完整复制
- [ ] 所有子目录analysis, database, reports已迁移
- [ ] 文档中的路径引用已更新
- [ ] **前端代码迁移**
- [ ] `pages/mall/` 所有页面文件已迁移
- [ ] `types/mall-types.uts` 已迁移
- [ ] 所有路由配置文件pages-*.json已迁移
- [ ] 业务需求文档mall.md已迁移
- [ ] **依赖文件迁移**
- [ ] Supabase 客户端封装已迁移或重新创建
- [ ] 必要的工具函数已迁移
- [ ] 组件依赖已处理
- [ ] **数据库配置**
- [ ] Supabase 项目已创建并配置
- [ ] 数据库脚本已执行
- [ ] RLS 策略已配置
- [ ] 测试数据已插入(可选)
- [ ] 用户表依赖已处理
- [ ] **代码适配**
- [ ] 所有导入路径已更新
- [ ] 数据库表引用已更新(如需要)
- [ ] 配置文件已更新
- [ ] 环境变量已配置
- [ ] **测试验证**
- [ ] 项目可以正常编译
- [ ] 数据库连接正常
- [ ] 页面可以正常加载
- [ ] 核心功能测试通过
---
## 🚨 常见问题和解决方案
### 问题 1: 编译错误 - 找不到类型定义
**错误信息**
```
Cannot find module '@/types/mall-types.uts'
```
**解决方案**
1. 确认 `types/mall-types.uts` 文件已迁移
2. 检查 TypeScript/UTS 配置中的路径别名设置
3. 确保 `@/types` 正确映射到 `types/` 目录
### 问题 2: Supabase 连接失败
**错误信息**
```
Failed to connect to Supabase
```
**解决方案**
1. 检查 Supabase 项目 URL 和 API Key 配置
2. 验证网络连接
3. 检查 Supabase 项目的状态
### 问题 3: RLS 策略导致权限错误
**错误信息**
```
new row violates row-level security policy
```
**解决方案**
1. 确认已执行所有 RLS 策略脚本
2. 检查用户认证状态
3. 验证 RLS 策略的 SELECT/INSERT/UPDATE 权限设置
### 问题 4: 外键约束错误
**错误信息**
```
foreign key constraint "ml_user_profiles_user_id_fkey" fails
```
**解决方案**
1. 如果使用独立用户表,需要更新外键引用
2. 确保引用的用户记录存在
3. 检查外键约束的 CASCADE 设置
---
## 📚 参考资料
- [Supabase 官方文档](https://supabase.com/docs)
- [uni-app-x 官方文档](https://uniapp.dcloud.net.cn/uni-app-x/)
- [PostgreSQL 官方文档](https://www.postgresql.org/docs/)
- 项目内部文档:
- `doc_mall/TECHNICAL_IMPLEMENTATION.md` - 技术实现详情
- `doc_mall/FRONTEND_BACKEND_DEBUGGING.md` - 调试指南
- `doc_mall/database/complete_deployment_guide.md` - 数据库部署指南
---
## 📞 迁移支持
如果在迁移过程中遇到问题:
1. **查看文档**:先查看 `doc_mall/` 下的相关文档
2. **检查日志**:查看编译日志和运行时日志
3. **数据库验证**:使用 `doc_mall/database/validation_test.sql` 验证数据库状态
4. **联系开发团队**:提供详细的错误信息和迁移步骤
---
**最后更新**: 2025年1月
**版本**: v1.0
**状态**: ✅ 完整迁移指南