Files
pamido/PROJECT_OVERVIEW.md
2026-05-08 03:06:24 +08:00

26 KiB
Raw Permalink Blame History

窗帘工厂管理系统 — 技术框架与功能简介

一、项目概述

窗帘工厂管理系统是一套面向窗帘制造企业的全流程业务管理平台,覆盖从客户预约、测量报价、订单生产、安装交付到售后服务的完整业务闭环,同时整合财务管理、采购库存、人员管理、数据分析等支撑模块。

  • 项目名称:窗帘工厂管理系统 (Curtain Factory Management System)
  • 版本v1.0.0
  • 开发语言:前端 JavaScript (Vue 3) / 后端 Java (Spring Boot)
  • 界面语言:简体中文

二、全栈技术架构

2.1 架构全景图

┌─────────────────────────────────────────────────────────────────┐
│                        客户端 (Browser)                          │
│   Vue 3 + Vite · Pinia · Chart.js · Font Awesome                │
│   Hash Router · 路由懒加载 · 路由守卫                              │
└──────────────────────────┬──────────────────────────────────────┘
                           │ HTTP / JSON (RESTful API)
                           ▼
┌─────────────────────────────────────────────────────────────────┐
│                     网关层 (Nginx / Gateway)                      │
│   反向代理 · 负载均衡 · HTTPS · 静态资源                           │
└──────────────────────────┬──────────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────────────┐
│                    业务服务层 (Spring Boot 2.7)                    │
│  ┌─────────────┬────────────────┬─────────────────────────────┐ │
│  │Spring Sec   │  AOP 切面       │  全局异常处理 @RestControllerAdvice │
│  │JWT 认证     │  操作日志        │  统一响应体 R<T>               │
│  │RBAC 鉴权    │  接口限流        │  参数校验 JSR-303              │
│  └─────────────┴────────────────┴─────────────────────────────┘ │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │  Controller → Service → Repository (JPA/Hibernate)       │   │
│  └──────────────────────────────────────────────────────────┘   │
└──────────────────────────┬──────────────────────────────────────┘
                           │
              ┌────────────┴────────────┐
              ▼                         ▼
┌──────────────────────┐   ┌──────────────────────┐
│    MySQL 8.0 (主库)   │   │   Redis (缓存/Session) │
│  · 读写分离           │   │  · JWT Token 黑名单    │
│  · 慢查询日志         │   │  · 验证码存储          │
│  · 索引优化           │   │  · 热点数据缓存        │
└──────────────────────┘   └──────────────────────┘

2.2 技术栈明细

层级 技术选型 版本 用途
前端框架 Vue 3 (Composition API) ^3.3.4 组件化 UI 构建
构建工具 Vite ^4.4.5 开发服务器 / HMR / 生产构建
路由管理 Vue Router ^4.6.4 Hash 模式 SPA 路由
状态管理 Pinia ^2.1.7 全局状态与跨组件通信
图表可视化 Chart.js ^4.4.0 KPI 仪表盘与数据分析图表
图标库 Font Awesome 6 CDN 2000+ 矢量图标
样式方案 CSS Variables + Scoped CSS 设计令牌 + 组件隔离
后端框架 Spring Boot 2.7.x 约定优于配置的微服务基座
安全框架 Spring Security + JWT 无状态认证 + RBAC 鉴权
ORM Spring Data JPA (Hibernate) 对象关系映射
缓存 Redis 7.x Token 黑名单 / 验证码 / 热点缓存
数据库 MySQL 8.0 主数据存储
API 文档 Knife4j (Swagger) 自动生成 RESTful API 文档
构建工具 Maven 3.8+ 依赖管理与打包

三、前端项目架构

3.1 目录结构

html-vue3/
├── index.html                    # 入口 HTML(挂载 #app + Font Awesome CDN
├── package.json                  # 项目依赖与 pnpm/npm 脚本
├── vite.config.js                # Vite 配置(@别名 / 端口3001
│
└── src/
    ├── main.js                   # 应用入口:createApp → Pinia → Router
    ├── App.vue                   # 根组件(<router-view> 路由出口)
    │
    ├── assets/css/
    │   └── global.css            # 全局样式:CSS变量 / 卡片 / 按钮 / 表格 / 模态框 / Toast
    │
    ├── components/
    │   ├── common/
    │   │   └── PagePlaceholder.vue
    │   └── layout/
    │       ├── MainLayout.vue    # 主布局:Sidebar + TopBar + <router-view>
    │       ├── Sidebar.vue       # 左侧导航(260px / 可折叠 / 13组菜单)
    │       └── TopBar.vue        # 顶部栏(侧栏切换 / 面包屑 / 全局搜索 / 用户信息)
    │
    ├── composables/              # 可复用逻辑
    │   ├── useModal.js           # 模态框 open/close/loading
    │   ├── usePagination.js      # 分页:page/size/total/pageChange
    │   ├── useSearch.js          # 搜索:keyword/loading/search
    │   └── useToast.js           # Toastmessage/type/show/autoHide
    │
    ├── router/index.js           # 路由配置(Hash模式 / 42条路由 / 路由守卫)
    │
    ├── stores/                   # Pinia 状态管理
    │   ├── customerStore.js      # 客户 CRUD + 统计
    │   ├── orderStore.js         # 订单 CRUD + 状态流转
    │   └── userStore.js          # 登录/登出/持久化
    │
    ├── utils/
    │   └── dataService.js        # 演示数据生成器
    │
    └── views/                    # 42 个业务页面(按模块分目录)
        ├── Login.vue
        ├── Dashboard.vue
        ├── Workflow.vue
        ├── NotFound.vue
        ├── customer/             # 3页
        ├── quote/                # 2页
        ├── order/                # 6页
        ├── production/           # 3页
        ├── install/              # 4页
        ├── aftersale/            # 2页
        ├── finance/              # 2页
        ├── purchase/             # 3页
        ├── product/              # 2页
        ├── staff/                # 2页
        ├── system/               # 5页
        └── analysis/             # 4页

3.2 前端技术亮点

特性 实现方式
Composition API 全部页面采用 <script setup>,逻辑内聚
路由懒加载 () => import(...) 动态按需加载,首屏 < 2s
路由守卫 beforeEach 检测 localStorage 登录态,未授权 → /login
统一布局容器 .page-wrapper(24px) → .page-container(1600px居中) 双重约束
响应式设计 4 级断点:≥1200 / 768-1199 / 480-767 / ≤480
CSS 设计令牌 :root 定义 --primary / --radius / --shadow,全局可换肤
全局搜索 TopBar 内建 18 个页面索引,实时模糊匹配

四、后端架构设计(Spring Boot 2.7

4.1 分层架构

┌─────────────────────────────────────────┐
│         Controller 层 (RESTful API)       │
│  @RestController · @Validated · R<T>    │
├─────────────────────────────────────────┤
│          Service 层 (业务逻辑)            │
│  @Transactional · 缓存注解 · 业务编排     │
├─────────────────────────────────────────┤
│        Repository 层 (数据访问)           │
│  JpaRepository · @Query · 分页查询       │
├─────────────────────────────────────────┤
│   Domain 层 (实体)  │  DTO 层 (传输对象)   │
│   @Entity · @Table  │  入参/出参分离       │
└─────────────────────────────────────────┘

4.2 推荐后端目录结构

curtain-factory-server/
├── pom.xml
├── src/main/java/com/pamido/curtain/
│   ├── CurtainApplication.java          # Spring Boot 启动类
│   ├── config/
│   │   ├── SecurityConfig.java          # Spring Security + JWT 配置
│   │   ├── RedisConfig.java             # Redis 序列化配置
│   │   ├── CorsConfig.java              # 跨域配置
│   │   └── Knife4jConfig.java           # API 文档配置
│   ├── common/
│   │   ├── R.java                       # 统一响应体 {code, msg, data}
│   │   ├── PageResult.java              # 分页结果
│   │   └── GlobalExceptionHandler.java  # @RestControllerAdvice
│   ├── security/
│   │   ├── JwtTokenProvider.java        # JWT 生成/验证/刷新
│   │   ├── JwtAuthenticationFilter.java # OncePerRequestFilter
│   │   └── UserDetailsServiceImpl.java  # UserDetailsService
│   ├── module/
│   │   ├── customer/                    # 客户模块
│   │   │   ├── CustomerController.java
│   │   │   ├── CustomerService.java
│   │   │   ├── CustomerRepository.java
│   │   │   ├── Customer.java           # @Entity
│   │   │   ├── CustomerDTO.java
│   │   │   └── CustomerVO.java
│   │   ├── order/                       # 订单模块 (同上)
│   │   ├── product/                     # 产品模块
│   │   ├── finance/                     # 财务模块
│   │   └── ...
│   └── aspect/
│       └── LogAspect.java               # AOP 操作日志
└── src/main/resources/
    ├── application.yml                   # 主配置
    ├── application-dev.yml               # 开发环境
    └── application-prod.yml              # 生产环境

五、功能模块一览

首页与总览(2页)

页面 路由 功能说明
经营仪表盘 /dashboard KPI卡片 / 趋势图 / 排行榜 / 最新订单 / 待办 / 快捷入口
功能流程图 /workflow 业务全流程可视化 + 节点快捷跳转

客户管理(3页)

页面 路由 功能说明
客户管理 /customer CRUD + 搜索筛选 + 分页 + 数据统计看板
预约测量 /customer/appointment 预约单管理 + 时间安排 + 状态跟踪
测量管理 /customer/measurement 测量任务分配 + 数据录入 + 进度管理

测量报价(2页)

页面 路由 功能说明
测量报价 /quote 测量数据转报价 + 方案对比
报价表生成 /quote/generate 报价表CRUD + 方案A/B + 邮件/打印/复制

订单管理(6页)

页面 路由 功能说明
订单管理 /order CRUD + 搜索筛选 + 分页 + 状态流转
订单跟踪 /order/tracking 全生命周期追踪 + 进度可视化
跟单页 /order/follow 跟单看板 + 客户沟通记录
定单明细 /order/detail 订单详情 + 产品明细
成交定单 /order/deal 成交订单管理 + 合同管理
复尺确认 /order/recheck 复尺分配 + 确认 + 安装前把控

生产管理(3页)

页面 路由 功能说明
生产任务板 /production/task 任务看板 + 工序管理 + 状态跟踪
生产采购 /production/purchase 生产驱动采购发起
生产采购明细 /production/purchase-detail 采购明细 + 对账

安装管理(4页)

页面 路由 功能说明
新增安装 /install/add 任务创建 + 人员/时间分配
安装任务板 /install/task 任务看板 + 状态管理
安装人员排班表 /install/schedule 日历排班 + 资源调配
安装完成 /install/complete 签收确认 + 满意度收集

售后管理(2页)

页面 路由 功能说明
售后原因 /after-sale/reason 原因分类 + 分析
维修安排 /after-sale/arrange 维修工单 + 派工 + 跟踪

财务管理(2页)

页面 路由 功能说明
收尾款 /finance/final-payment 尾款收款 + 到账确认
发票管理 /finance/invoice 发票申请 + 开具 + 寄送跟踪

采购库存(3页)

页面 路由 功能说明
采购订单 /purchase/order CRUD + 审批流程
供应商管理 /purchase/supplier 信息维护 + 评估评级
库存管理 /purchase/inventory 出入库 + 库存盘点

产品管理(2页)

页面 路由 功能说明
产品库管理 /product/library 产品信息 + 规格/定价
面料配件库 /product/material 面料/轨道/配件管理

人员管理(2页)

页面 路由 功能说明
测量师管理 /staff/measurer 信息 + 资质 + 排班
安装师傅管理 /staff/installer 信息 + 技能评级 + 排班

系统设置(5页)

页面 路由 功能说明
角色权限 /system/role 角色定义 + 权限分配
系统用户 /system/user 账号管理 + 密码重置
通知模板 /system/notification-template 短信/邮件模板
工作时间 /system/work-time 工作日/节假日配置
消息中心 /system/message 系统消息 + 站内信

数据分析(4页)

页面 路由 功能说明
数据分析中心 /analysis/center 综合看板 + 交叉分析
报表分析 /analysis/report 定期报表 + 趋势
满意度调查 /analysis/satisfaction 满意度收集 + 统计
渠道管理 /analysis/channel 获客渠道 + 转化率

其他

页面 路由 功能说明
登录页 /login 账号密码 + 验证码 + 快捷登录
404 /* 友好提示 + 首页回跳

六、快速开始

6.1 环境要求

组件 版本
Node.js 18.0+
JDK 11 或 17
MySQL 8.0+
Redis 7.x
Maven 3.8+

6.2 前端启动

cd html-vue3
npm install
npm run dev          # → http://localhost:3001
npm run build        # 生产构建 → dist/

6.3 后端启动(规划)

cd curtain-factory-server
mvn clean package -DskipTests
java -jar target/curtain-factory-1.0.0.jar --spring.profiles.active=dev
# API 文档 → http://localhost:8080/doc.html

6.4 演示账号

角色 账号 密码
管理员 admin admin123
普通用户 user user123

七、产品经理视角 — 代码审查与优化建议

7.1 功能完整度评估

维度 当前状态 评分 问题
核心业务流 客户→报价→订单→安装→售后完整串联
CRUD 操作 ⚠️ 部分页面仅占位,无完整 CRUD PagePlaceholder 覆盖不够
演示数据 ⚠️ 数据分散在各自组件内 无统一数据工厂
表单校验 无校验框架 提交无拦截、无错误提示
操作反馈 ⚠️ Toast 已统一但非所有操作都触发 删改无确认对话框
权限控制 仅路由级区分,UI 无差异 按钮不隐藏、菜单全可见
异常处理 无全局错误捕获 接口失败无用户提示
加载状态 无骨架屏/loading 数据为空时仅空白
导出功能 ⚠️ 仅按钮入口无实现 Excel/PDF 导出缺失
打印功能 ⚠️ 仅 QuoteGenerate 有媒体查询 其他页面无打印样式

7.2 产品层优先优化项

优先级 优化项 说明
P0 引入 Axios + 拦截器 + 统一错误处理 所有页面目前使用硬编码数据,必须先建立 HTTP 通信层
P0 全局 Loading/Skeleton 状态 用户等待时必须看到反馈,否则造成"页面坏了"的错觉
P1 操作确认弹窗 (ConfirmDialog) 删除/状态变更等不可逆操作必须有二次确认
P1 表单校验 (vee-validate 或原生) 必填拦截、格式校验、实时错误提示
P1 按钮级权限指令 v-permission 无权限按钮直接移除 DOM,而非仅置灰
P2 Excel 导入导出 (xlsx 库) 批量操作必须支持导入导出
P2 通知中心 WebSocket 实时推送 当前消息中心为静态页面
P2 操作日志与审计轨迹 敏感操作记录操作人/时间/IP

八、架构师视角 — 代码审查与优化建议

8.1 前端架构问题诊断

问题 严重度 现状 改进方案
无 HTTP 请求层 🔴 严重 数据全部硬编码在组件/composables 建立 utils/request.js→Axios实例→拦截器链
Store 不调用 API 🔴 严重 stores/ 内只有静态 ref,无 async action Store 负责调用 API + 缓存,组件只读 store
路由守卫绕过 Store 🟡 中等 router.beforeEach 直接读 localStorage 应读 userStore.isLoggedInStore 是唯一真相源
无 TypeScript 🟡 中等 全项目 .js 渐进式迁移:先 stores/api/→组件
Composables 粗粒度 🟡 中等 useSearch/usePagination 只管理状态 应内置请求逻辑:search → API → results
菜单硬编码 🟡 中等 Sidebar.vue 内 menuGroups 数组 应抽为 config/menu.js + 后端权限动态返回
无 env 配置 🟡 中等 API 地址无处配置 .env.development / .env.production
CSS 变量不全 🟢 --danger / --warning / --success 语义色 补齐设计令牌,全局一致性
无测试 🟢 无 Vitest/Jest 核心逻辑 + Store 优先覆盖
Chart.js 功能有限 🟢 仅支持基础图表 复杂分析场景建议升级 ECharts

8.2 前端重构路线图

阶段一:通信基座(本周)
  ├─ 新建 src/api/
  │   ├── request.js         # Axios 实例 + 拦截器
  │   ├── modules/
  │   │   ├── customer.js    # 客户 API
  │   │   ├── order.js       # 订单 API
  │   │   └── ...
  │   └── index.js
  ├─ 新建 .env.development   # VITE_API_BASE_URL=http://localhost:8080
  └─ 重构 stores/ → async actions 调用 api/

阶段二:工程质量(下周)
  ├─ ESLint + Prettier 配置
  ├─ TypeScript 初始化(tsconfig.json
  ├─ stores/ 迁移 .js → .ts
  ├─ v-permission 指令
  └─ Vue DevTools 调试规范

阶段三:体验增强(两周内)
  ├─ 骨架屏组件 (Skeleton.vue)
  ├─ ConfirmDialog 全局组件
  ├─ vee-validate 表单校验
  ├─ Excel 导入导出
  └─ 全局错误边界 (ErrorBoundary)

8.3 前端推荐新增目录

src/
├── api/                       # ★ 新增:HTTP 请求层
│   ├── request.js             # Axios 封装(baseURL/interceptor/retry
│   ├── index.js
│   └── modules/
│       ├── auth.js
│       ├── customer.js
│       ├── order.js
│       ├── product.js
│       ├── finance.js
│       └── ...
├── config/
│   └── menu.js                # ★ 新增:菜单配置(从 Sidebar.vue 抽取)
├── directives/
│   └── permission.js          # ★ 新增:v-permission 指令
├── plugins/
│   └── echarts.js             # ★ 可选:ECharts 按需引入
└── types/                     # ★ 新增:TypeScript 类型定义
    ├── api.d.ts
    └── models.d.ts

8.4 前端 API 层设计规范

// src/api/request.js
import axios from 'axios'
import { useUserStore } from '@/stores/userStore'
import { ElMessage } from 'element-plus' // 或自定义 Toast

const request = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL,
  timeout: 30000
})

// 请求拦截 — 自动附带 JWT
request.interceptors.request.use(config => {
  const token = localStorage.getItem('accessToken')
  if (token) config.headers.Authorization = `Bearer ${token}`
  return config
})

// 响应拦截 — 统一解包 + 错误处理 + Token 刷新
request.interceptors.response.use(
  res => res.data,             // 自动解包 R<T> → data
  async err => {
    if (err.response?.status === 401) {
      // Token 过期 → 尝试 refreshToken → 失败则跳登录
      useUserStore().logout()
      router.push('/login')
    }
    ElMessage.error(err.response?.data?.msg || '网络异常')
    return Promise.reject(err)
  }
)

export default request

8.5 后端架构要点

设计点 推荐方案
API 规范 RESTfulGET /api/orders POST /api/orders PUT /api/orders/{id} DELETE /api/orders/{id}
统一响应体 R<T>{ code: 200, msg: "success", data: T }
分页响应 PageResult<T>{ total, page, size, list }
参数校验 @Validated + JSR-303 注解(@NotBlank/@NotNull/@Min
异常处理 @RestControllerAdvice 全局捕获 → 转 R.fail(code, msg)
JWT 设计 AccessToken(2h) + RefreshToken(7d) 双令牌
Redis 缓存 @Cacheable 查 / @CacheEvict 删,Key: customer:{id}
AOP 日志 @Log("新增客户") 注解驱动,记录 operator / IP / params
事务管理 Service 层 @TransactionalRuntimeException 自动回滚
SQL 审计 p6spy 打印完整 SQL + 参数

8.6 后端统一响应体示例

@Data
@NoArgsConstructor
@AllArgsConstructor
public class R<T> {
    private int code;
    private String msg;
    private T data;

    public static <T> R<T> ok(T data) {
        return new R<>(200, "success", data);
    }
    public static <T> R<T> fail(int code, String msg) {
        return new R<>(code, msg, null);
    }
}

九、前后端对接规范

前端 后端 说明
stores/ async actions @RestController Store 调用 API,组件调用 Store
.env 中的 VITE_API_BASE_URL application.yml server.port 开发/生产环境切换
import.meta.env.VITE_API_BASE_URL Vite 编译时注入
Authorization: Bearer {token} JwtAuthenticationFilter 无状态认证
page / size 查询参数 Pageable (Spring Data) 分页统一协议
{ code, msg, data } R<T> 统一响应解包

十、设计说明

10.1 布局约束

.page-wrapper (padding: 24px)     ← 侧边栏↔内容区间距
  └── .page-container             ← max-width: 1600px + margin: auto 居中
      └── .{page-specific}        ← 页面特有样式

10.2 响应式断点

断点 策略
≥ 1200px 双列 + 完整侧边栏
768-1199px 单列 + 表格横滚
480-767px 48px 触控区域
≤ 480px 紧凑布局

十一、总评分与行动建议

当前版本评分

评估维度 评分 评语
功能覆盖度 (4/5) 42页面覆盖全业务流程,部分占位需补全
前端架构 (3/5) 组件化良好,缺 HTTP 层和 TS
代码质量 (3/5) Composition API 使用正确,但缺规范约束
用户体验 (3/5) 响应式 + 统一布局不错,缺加载/错误/确认
可扩展性 (3/5) 模块化清晰,后端对接需重构 Store
生产就绪度 (2/5) 纯演示版,不可直接上线

🔥 立即行动(本周必做)

  1. 建立 src/api/:Axios 封装 + 拦截器 + 统一错误处理
  2. 重构 stores/async actions 调用 API,移除硬编码数据
  3. 添加 .env 配置:开发/生产环境 API 地址

📋 短期计划(两周内)

  1. 表单校验 + 操作确认弹窗
  2. 按钮级权限指令
  3. 全局 Loading/Skeleton
  4. ESLint + Prettier 配置
  5. 后端 Spring Boot 项目搭建

🎯 中期计划(一月内)

  1. TypeScript 渐进迁移
  2. ECharts 替换 Chart.js(分析模块)
  3. Excel 导入导出
  4. 后端全部模块 Controller/Service/Repository
  5. CI/CD Pipeline (GitHub Actions / Jenkins)