Files
YuShiSheJiShi/README.md
changyoutongxue e3ff55b4db docs(readme): 编写项目README文档,描述功能与架构
- 完整撰写玉宗珠宝设计大师项目README,介绍项目概况及核心功能
- 说明用户认证系统实现及优势,包含JWT鉴权和密码加密细节
- 详细描述品类管理系统,支持多流程类型和多种玉石品类
- 说明设计图生成方案及技术,包含Pillow生成示例及字体支持
- 介绍设计管理功能,支持分页浏览、预览、下载和删除设计
- 个人信息管理模块说明,涵盖昵称、手机号、密码的安全修改
- 绘制业务流程图和关键数据流图,清晰展现系统架构与数据流
- 提供详细API调用链路及参数说明,涵盖用户、品类、设计接口
- 列明技术栈及版本,包含前后端框架、ORM、认证、加密等工具
- 展示目录结构,标明后端与前端项目布局
- 规划本地开发环境与启动步骤,包括数据库初始化及运行命令
- 说明服务器部署流程和Nginx配置方案
- 详细数据库表结构说明及环境变量配置指导
- 汇总常用开发及测试命令,方便开发调试与部署管理
2026-03-27 13:10:17 +08:00

12 KiB
Raw Blame History

玉宗 - 珠宝设计大师

AI 驱动的珠宝玉石设计生成系统,支持 12 种玉石品类的智能设计图生成。

功能特性

1. 用户认证系统

  • 功能说明支持用户注册、登录、退出JWT Token 鉴权
  • 实现方式:后端使用 python-jose 生成 JWT Token有效期 1440 分钟),密码通过 passlib + bcrypt 加密存储;前端通过 Axios 拦截器自动携带 Token401 响应自动跳转登录页
  • 优点:无状态认证,前后端分离友好;密码 bcrypt 加密,安全可靠

2. 品类管理系统

  • 功能说明12 种玉石品类(牌子、珠子、手把件、雕刻件、摆件、手镯、耳钉、耳饰、手链、项链、戒指、表带),支持子类型和颜色选择
  • 实现方式:品类通过 flow_type 字段区分三种工作流程:full(选子类型,如牌子选牌型)、size_color(选尺寸+颜色,如珠子)、simple(直接设计);前端 SubTypePanel 组件根据 flow_type 动态渲染不同的选择界面
  • 优点:灵活的品类工作流适配不同产品特性,用户操作路径清晰

3. 设计图生成

  • 功能说明:用户选择品类参数后输入设计描述,系统生成 800×800 PNG 设计图
  • 实现方式:后端 mock_generator 使用 Pillow 生成设计图包含品类信息、颜色映射中文颜色名→HEX、自动文字颜色对比计算、系统中文字体检测PingFang/STHeiti/DroidSansFallback设计记录先创建status=generating生成完成后更新为 completed
  • 优点:即时生成预览图,支持颜色定制;后续可替换为真实 AI 模型

4. 设计管理

  • 功能说明:用户中心查看设计历史列表(分页),支持预览、下载、删除设计
  • 实现方式:设计列表通过 DesignListResponse 分页返回(默认每页 20 条),图片通过 FileResponse 下载;删除时同步清理数据库记录和磁盘文件
  • 优点:完整的设计生命周期管理,支持历史设计的查看和复用

5. 个人信息管理

  • 功能说明:修改昵称、手机号、密码
  • 实现方式:手机号唯一性校验,密码修改需验证旧密码;前端表单使用 Element Plus 表单验证
  • 优点:安全的密码修改流程,手机号去重保障数据一致性

业务流程

整体流程图

graph TB
    A[用户注册/登录] --> B[设计页 - 选择品类]
    B --> C{品类类型}
    C -->|full| D[选择子类型/牌型]
    C -->|size_color| E[选择尺寸 + 颜色]
    C -->|simple| F[直接进入]
    D --> G[生成页 - 输入设计描述]
    E --> G
    F --> G
    G --> H[提交生成请求]
    H --> I[后端生成设计图]
    I --> J[预览设计图]
    J --> K{用户操作}
    K -->|下载| L[下载 PNG 文件]
    K -->|重新生成| G
    K -->|查看历史| M[用户中心]
    M --> N[设计历史列表]
    N -->|点击卡片| G

各阶段详细流程

  1. 用户认证:注册时检查用户名唯一性 → 密码 bcrypt 加密 → 创建用户记录 → 注册成功后自动登录 → 获取 JWT Token 存储到 localStorage
  2. 品类选择:进入设计页自动加载品类列表 → 左侧导航选择品类 → 根据 flow_type 加载对应的子类型/颜色数据 → 右侧面板显示选择界面
  3. 设计生成:跳转生成页携带品类参数 → 输入设计描述(最多 500 字) → 提交请求 → 显示水墨风格加载动画 → 生成完成后展示预览
  4. 设计管理:用户中心加载设计列表 → 卡片网格展示 → 支持分页浏览、下载 PNG、删除确认弹窗、点击卡片跳转重新编辑

关键数据流图

graph LR
    A[前端 Store] -->|Axios + Token| B[API 路由]
    B -->|Depends 注入| C[Service 层]
    C -->|SQLAlchemy ORM| D[MySQL 数据库]
    C -->|Pillow 生成| E[uploads/ 目录]
    E -->|StaticFiles 服务| F[前端图片展示]

API 调用链路

接口路径 方法 功能说明 关键参数
/api/auth/register POST 用户注册 username, password, nickname
/api/auth/login POST 用户登录 username, password
/api/auth/me GET 获取当前用户 Bearer Token
/api/users/profile PUT 更新个人信息 nickname, phone, avatar
/api/users/password PUT 修改密码 old_password, new_password
/api/categories GET 获取品类列表 -
/api/categories/{id}/sub-types GET 获取子类型 category_id
/api/categories/{id}/colors GET 获取颜色选项 category_id
/api/designs/generate POST 生成设计 category_id, sub_type_id, color_id, prompt
/api/designs GET 设计列表(分页) page, page_size
/api/designs/{id} GET 设计详情 design_id
/api/designs/{id} DELETE 删除设计 design_id
/api/designs/{id}/download GET 下载设计图 design_id

技术栈

分类 技术 版本 说明
前端框架 Vue 3 3.5.30 Composition API + <script setup>
构建工具 Vite 8.0.1 开发服务器 + 构建打包
类型系统 TypeScript 5.9.3 全项目类型化
UI 组件库 Element Plus 2.13.6 表单、弹窗、分页等
状态管理 Pinia 3.0.4 Composition API 风格 Store
路由 Vue Router 4.6.4 History 模式 + 路由守卫
HTTP 客户端 Axios 1.13.6 请求/响应拦截器
CSS 预处理 Sass 1.98.0 SCSS 语法
后端框架 FastAPI 0.109.2 异步 Python Web 框架
ORM SQLAlchemy 2.0.27 同步模式
数据库驱动 PyMySQL 1.1.0 MySQL 连接
认证 python-jose 3.3.0 JWT Token
密码加密 passlib + bcrypt 1.7.4 bcrypt 哈希
图片生成 Pillow 10.2.0 PNG 设计图生成
数据库 MySQL - utf8mb4 编码

目录结构

YuShiSheJi/
├── backend/                    # 后端服务
│   ├── app/
│   │   ├── models/             # SQLAlchemy 数据模型
│   │   │   ├── user.py         # 用户模型
│   │   │   ├── category.py     # 品类/子类型/颜色模型
│   │   │   └── design.py       # 设计作品模型
│   │   ├── routers/            # API 路由
│   │   │   ├── auth.py         # 认证路由(注册/登录)
│   │   │   ├── categories.py   # 品类查询路由
│   │   │   ├── designs.py      # 设计生成/管理路由
│   │   │   └── users.py        # 用户信息路由
│   │   ├── schemas/            # Pydantic 数据验证
│   │   ├── services/           # 业务逻辑层
│   │   │   ├── auth_service.py # 认证业务
│   │   │   ├── design_service.py # 设计业务
│   │   │   └── mock_generator.py # 图片生成服务
│   │   ├── utils/              # 工具函数
│   │   │   ├── deps.py         # 认证依赖注入
│   │   │   └── security.py     # JWT/密码工具
│   │   ├── config.py           # 配置管理
│   │   ├── database.py         # 数据库连接
│   │   └── main.py             # 应用入口
│   ├── uploads/                # 生成图片存储目录
│   ├── .env                    # 环境变量
│   └── requirements.txt        # Python 依赖
├── frontend/                   # 前端应用
│   ├── src/
│   │   ├── api/                # API 接口定义
│   │   │   ├── request.ts      # Axios 实例(拦截器)
│   │   │   ├── auth.ts         # 认证接口
│   │   │   ├── category.ts     # 品类接口
│   │   │   └── design.ts       # 设计接口
│   │   ├── components/         # 公共组件
│   │   │   ├── AppHeader.vue   # 顶部导航栏
│   │   │   ├── CategoryNav.vue # 品类左侧导航
│   │   │   ├── SubTypePanel.vue# 子类型/颜色选择面板
│   │   │   ├── ColorPicker.vue # 颜色选择器
│   │   │   └── DesignPreview.vue # 设计预览(缩放/下载)
│   │   ├── stores/             # Pinia 状态管理
│   │   │   ├── user.ts         # 用户状态
│   │   │   ├── category.ts     # 品类状态
│   │   │   └── design.ts       # 设计状态
│   │   ├── views/              # 页面组件
│   │   │   ├── Login.vue       # 登录页
│   │   │   ├── Register.vue    # 注册页
│   │   │   ├── DesignPage.vue  # 设计页(品类选择)
│   │   │   ├── GeneratePage.vue# 生成页(输入描述+预览)
│   │   │   └── UserCenter.vue  # 用户中心(历史+信息)
│   │   ├── router/index.ts     # 路由配置 + 认证守卫
│   │   ├── assets/styles/theme.scss # 品牌主题色
│   │   └── main.ts             # 应用入口
│   ├── package.json
│   └── vite.config.ts          # Vite 配置(代理)
└── init_data.sql               # 数据库初始化脚本

本地开发

环境要求

  • Python 3.10+
  • Node.js 18+
  • MySQL 5.7+ / 8.0
  • npm 或 pnpm

启动步骤

# 1. 创建数据库
mysql -u root -p -e "CREATE DATABASE yuzong CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# 2. 初始化表结构FastAPI 启动时 SQLAlchemy 自动创建表)并导入初始数据
mysql -u root -p yuzong < init_data.sql

# 3. 后端启动
cd backend
cp .env.example .env  # 修改数据库连接信息
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000

# 4. 前端启动(新终端)
cd frontend
npm install
npm run dev

前端访问:http://localhost:3000 后端 APIhttp://localhost:8000 API 文档:http://localhost:8000/docs

服务器部署

部署步骤

# 1. 安装依赖
cd backend && pip install -r requirements.txt
cd frontend && npm install

# 2. 前端构建
cd frontend
npm run build  # 输出到 dist/ 目录

# 3. 配置后端环境变量
cd backend
vim .env  # 配置生产数据库地址和密钥

# 4. 启动后端服务
uvicorn app.main:app --host 0.0.0.0 --port 8000

# 5. Nginx 配置(前端静态文件 + API 反向代理)
# location / { root /path/to/frontend/dist; try_files $uri $uri/ /index.html; }
# location /api { proxy_pass http://127.0.0.1:8000; }
# location /uploads { proxy_pass http://127.0.0.1:8000; }

数据库

表结构说明

分类 表名 说明
用户 users 用户基本信息(用户名、密码、昵称、手机、头像)
品类 categories 12 种玉石品类(名称、图标、排序、流程类型)
品类 sub_types 品类子类型(牌型/尺寸,关联品类)
品类 colors 品类颜色选项颜色名、HEX 色值,关联品类)
设计 designs 设计记录用户、品类、子类型、颜色、描述、图片URL、状态

环境变量

配置项 默认值 必填 说明
DATABASE_URL mysql+pymysql://root:password@localhost:3306/yuzong MySQL 连接字符串
SECRET_KEY your-secret-key-change-this JWT 签名密钥(生产环境务必修改)
ALGORITHM HS256 JWT 算法
ACCESS_TOKEN_EXPIRE_MINUTES 1440 Token 有效期(分钟,默认 24 小时)
UPLOAD_DIR uploads 图片上传存储目录

常用命令

# ========== 开发 ==========
cd backend && uvicorn app.main:app --reload --port 8000   # 启动后端(热重载)
cd frontend && npm run dev                                  # 启动前端开发服务器
cd frontend && npm run build                                # 前端生产构建

# ========== 数据库 ==========
mysql -u root -p yuzong < init_data.sql                     # 导入初始品类数据
mysql -u root -p -e "SELECT * FROM yuzong.categories;"      # 查看品类数据

# ========== 依赖管理 ==========
cd backend && pip install -r requirements.txt               # 安装后端依赖
cd frontend && npm install                                  # 安装前端依赖

# ========== 调试 ==========
curl http://localhost:8000/health                            # 后端健康检查
curl http://localhost:8000/docs                              # 查看 API 文档