11. 企业后台管理系统(technical-architecture)

alt

1. 架构设计

alt

2. 技术栈说明

  • 前端: React@18 + Ant Design@5 + TypeScript + Vite
  • 初始化工具: vite-init
  • UI框架: Ant Design Pro (企业级UI组件库)
  • 后端: Supabase (BaaS服务)
  • 数据库: PostgreSQL (Supabase内置)
  • 认证: Supabase Auth
  • 文件存储: Supabase Storage
  • 状态管理: React Context + useReducer
  • 路由: React Router@6
  • HTTP客户端: Supabase Client SDK

3. 路由定义

路由 用途
/login 登录页面,用户身份验证
/register 注册页面,新用户注册
/dashboard 仪表盘页面,数据概览展示
/employees 员工管理页面,员工CRUD操作
/departments 部门管理页面,树形结构管理
/approvals 审批流程页面,流程发起和处理
/reports 数据报表页面,多维度数据分析
/settings 系统设置页面,权限和系统配置
/profile 个人中心页面,用户信息管理
/403 无权限页面,权限不足提示
/404 404页面,页面不存在提示

4. API 定义

4.1 认证 API

用户登录

POST /auth/v1/token?grant_type=password

Request:

参数名 参数类型 是否必填 描述
email string true 用户邮箱地址
password string true 用户密码

Response:

{
  "access_token": "eyJhbGc...",
  "token_type": "bearer",
  "expires_in": 3600,
  "refresh_token": "eyJhbGc...",
  "user": {
    "id": "user-id",
    "email": "xxxxxxx@example.com",
    "role": "admin"
  }
}

用户注册

POST /auth/v1/signup

4.2 员工管理 API

获取员工列表

GET /rest/v1/employees

Query Parameters:

参数名 参数类型 是否必填 描述
page number false 页码,默认1
pageSize number false 每页条数,默认20
search string false 搜索关键词
department string false 部门筛选
status string false 状态筛选

创建员工

POST /rest/v1/employees

Request Body:

{
  "name": "张三",
  "email": "zhangsan@example.com",
  "department_id": "dept-id",
  "position": "软件工程师",
  "phone": "xxxxxxx",
  "status": "active",
  "join_date": "2024-01-01"
}

4.3 部门管理 API

获取部门树

GET /rest/v1/departments?select=*&order=parent_id.asc.nullsfirst

创建部门

POST /rest/v1/departments

Request Body:

{
  "name": "技术部",
  "parent_id": "parent-dept-id",
  "manager_id": "manager-user-id",
  "description": "负责产品研发和技术创新"
}

4.4 审批 API

发起审批

POST /rest/v1/approvals

处理审批

PATCH /rest/v1/approvals?id=eq.approval-id

Request Body:

{
  "status": "approved",
  "comment": "同意申请",
  "processed_by": "user-id",
  "processed_at": "2024-01-15T10:00:00Z"
}

5. 服务器架构图

alt

6. 数据模型

6.1 数据模型定义

alt

6.2 数据定义语言 (DDL)

用户表 (users)

-- 创建用户表
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  email VARCHAR(255) UNIQUE NOT NULL,
  password_hash VARCHAR(255) NOT NULL,
  role VARCHAR(50) DEFAULT 'employee',
  status VARCHAR(20) DEFAULT 'active',
  last_login_at TIMESTAMP WITH TIME ZONE,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
  updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_role ON users(role);

员工表 (employees)

-- 创建员工表
CREATE TABLE employees (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name VARCHAR(100) NOT NULL,
  email VARCHAR(255) UNIQUE NOT NULL,
  department_id UUID REFERENCES departments(id),
  position VARCHAR(100),
  phone VARCHAR(20),
  status VARCHAR(20) DEFAULT 'active',
  join_date DATE,
  manager_id UUID REFERENCES employees(id),
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
  updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引
CREATE INDEX idx_employees_department ON employees(department_id);
CREATE INDEX idx_employees_status ON employees(status);
CREATE INDEX idx_employees_manager ON employees(manager_id);

部门表 (departments)

-- 创建部门表
CREATE TABLE departments (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name VARCHAR(100) NOT NULL,
  parent_id UUID REFERENCES departments(id),
  manager_id UUID REFERENCES employees(id),
  description TEXT,
  sort_order INTEGER DEFAULT 0,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
  updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引
CREATE INDEX idx_departments_parent ON departments(parent_id);
CREATE INDEX idx_departments_manager ON departments(manager_id);

审批表 (approvals)

-- 创建审批表
CREATE TABLE approvals (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  submitter_id UUID REFERENCES employees(id) NOT NULL,
  approver_id UUID REFERENCES employees(id),
  type VARCHAR(50) NOT NULL,
  title VARCHAR(200) NOT NULL,
  content TEXT,
  attachments JSONB,
  status VARCHAR(20) DEFAULT 'pending',
  comment TEXT,
  submit_time TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
  process_time TIMESTAMP WITH TIME ZONE,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引
CREATE INDEX idx_approvals_submitter ON approvals(submitter_id);
CREATE INDEX idx_approvals_approver ON approvals(approver_id);
CREATE INDEX idx_approvals_status ON approvals(status);
CREATE INDEX idx_approvals_type ON approvals(type);

权限配置表 (permissions)

-- 创建角色表
CREATE TABLE roles (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  name VARCHAR(50) UNIQUE NOT NULL,
  description TEXT,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建权限表
CREATE TABLE permissions (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  role_id UUID REFERENCES roles(id),
  resource VARCHAR(100) NOT NULL,
  action VARCHAR(50) NOT NULL,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建用户角色关联表
CREATE TABLE user_roles (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES users(id),
  role_id UUID REFERENCES roles(id),
  created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引
CREATE INDEX idx_permissions_role ON permissions(role_id);
CREATE INDEX idx_permissions_resource ON permissions(resource);
CREATE INDEX idx_user_roles_user ON user_roles(user_id);
CREATE INDEX idx_user_roles_role ON user_roles(role_id);

权限设置

-- 授权匿名用户基本访问权限
GRANT SELECT ON departments TO anon;
GRANT SELECT ON employees TO anon;

-- 授权认证用户完整权限
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO authenticated;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO authenticated;

-- 创建行级安全策略
ALTER TABLE employees ENABLE ROW LEVEL SECURITY;
ALTER TABLE departments ENABLE ROW LEVEL SECURITY;
ALTER TABLE approvals ENABLE ROW LEVEL SECURITY;

-- 员工数据访问策略
CREATE POLICY "Employees can view own data" ON employees
  FOR SELECT USING (auth.uid() = id);

CREATE POLICY "Managers can view department employees" ON employees
  FOR SELECT USING (
    EXISTS (
      SELECT 1 FROM departments 
      WHERE departments.id = employees.department_id 
      AND departments.manager_id = auth.uid()
    )
  );

7. 关键技术实现

7.1 RBAC权限控制

  • 基于角色的访问控制模型
  • 支持菜单级权限和数据级权限
  • 动态权限验证,支持运行时权限变更
  • 前端路由守卫和后端API权限双重验证

7.2 树形结构处理

  • 部门管理采用邻接表模型存储树形结构
  • 支持无限层级嵌套
  • 提供递归查询获取完整树结构
  • 支持拖拽调整部门层级关系

7.3 表格组件优化

  • 基于Ant Design Table组件二次封装
  • 支持虚拟滚动处理大数据量
  • 集成搜索、筛选、排序、分页功能
  • 支持列配置和自定义渲染

7.4 表单验证机制

  • 统一的表单验证规则配置
  • 支持同步和异步验证
  • 实时验证反馈
  • 错误信息国际化支持

7.5 数据缓存策略

  • React Query进行服务端状态管理
  • 智能缓存和失效策略
  • 增量数据更新
  • 离线数据支持

7.6 性能优化

  • 代码分割和懒加载
  • 图片和资源压缩
  • CDN加速静态资源
  • 接口请求合并和防抖处理
20大项目拆解:从PRD到架构 文章被收录于专栏

想独立做出一个完整的项目却不知从何下手?本专栏是你的终极路线图。我们由浅入深,通过20个经典项目案例,手把手带你走过产品构思、需求撰写、功能设计、技术选型、架构搭建的全过程。从“音乐播放器”到“企业后台”,你将逐步建立对软件系统的完整认知,完成从理论到实践、从单一技能到复合能力的飞跃。

全部评论

相关推荐

哈哈哈,你是老六:感觉算是正常价吧,不是劝退价吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务