yangg vor 1 Monat
Ursprung
Commit
b6c829720c
14 geänderte Dateien mit 3274 neuen und 9 gelöschten Zeilen
  1. 502 0
      API_DOCUMENTATION.md
  2. 70 0
      CHANGELOG.md
  3. 528 0
      DEPLOYMENT.md
  4. 568 0
      DEVELOPER_GUIDE.md
  5. 267 0
      PROJECT_README.md
  6. 136 0
      QUICKSTART.md
  7. 25 0
      README.md
  8. 91 0
      deploy/.htaccess
  9. 630 0
      deploy/DEPLOYMENT_GUIDE.md
  10. 121 0
      deploy/README.md
  11. 140 0
      deploy/deploy.sh
  12. 106 0
      deploy/nginx.conf
  13. 89 0
      docs/INDEX.md
  14. 1 9
      index.html

+ 502 - 0
API_DOCUMENTATION.md

@@ -0,0 +1,502 @@
+# API 接口文档
+
+## 📡 接口基础信息
+
+### 基础配置
+- **基础路径**:`/api`
+- **请求方法**:支持 GET, POST, PUT, DELETE, PATCH
+- **认证方式**:JWT Token
+- **数据格式**:JSON
+
+### 请求头
+```http
+Content-Type: application/json
+Authorization: Bearer {token}
+```
+
+### 响应格式
+```json
+{
+  "code": 2000,
+  "message": "操作成功",
+  "data": {},
+  "total": 0
+}
+```
+
+## 🔐 认证接口
+
+### 用户登录
+- **路径**:`/api/system/auth/login/`
+- **方法**:POST
+- **请求体**:
+```json
+{
+  "username": "string",
+  "password": "string"
+}
+```
+- **响应**:
+```json
+{
+  "code": 2000,
+  "data": {
+    "token": "string",
+    "refresh_token": "string",
+    "user_info": {}
+  }
+}
+```
+
+## 👤 用户管理接口
+
+### 用户列表
+- **路径**:`/api/system/user/`
+- **方法**:GET
+- **参数**:
+  - `page`: 页码
+  - `limit`: 每页数量
+  - `username`: 用户名(可选)
+  - `dept_id`: 部门ID(可选)
+
+### 用户详情
+- **路径**:`/api/system/user/{id}/`
+- **方法**:GET
+
+### 创建用户
+- **路径**:`/api/system/user/`
+- **方法**:POST
+- **请求体**:
+```json
+{
+  "username": "string",
+  "password": "string",
+  "name": "string",
+  "email": "string",
+  "mobile": "string",
+  "dept_id": "integer",
+  "roles": ["integer"]
+}
+```
+
+### 更新用户
+- **路径**:`/api/system/user/{id}/`
+- **方法**:PUT/PATCH
+
+### 删除用户
+- **路径**:`/api/system/user/{id}/`
+- **方法**:DELETE
+
+## 🏢 职位管理接口
+
+### 职位列表
+- **路径**:`/api/position/list/`
+- **方法**:GET
+- **参数**:
+  - `page`: 页码
+  - `limit`: 每页数量
+  - `status`: 状态(可选)
+  - `keyword`: 关键词(可选)
+
+### 职位详情
+- **路径**:`/api/position/detail/{id}/`
+- **方法**:GET
+
+### 创建职位
+- **路径**:`/api/position/create/`
+- **方法**:POST
+
+### 更新职位
+- **路径**:`/api/position/update/{id}/`
+- **方法**:PUT
+
+### 职位配置
+- **路径**:`/api/position/config/{id}/`
+- **方法**:GET/POST/PUT
+- **说明**:获取/创建/更新职位面试配置
+
+### 职位能力关联
+- **路径**:`/api/position/competency/{id}/`
+- **方法**:POST/GET
+- **说明**:职位与能力模型的关联管理
+
+## 📚 题库管理接口
+
+### 题目列表
+- **路径**:`/api/question_bank/list/`
+- **方法**:GET
+- **参数**:
+  - `page`: 页码
+  - `limit`: 每页数量
+  - `category_id`: 分类ID(可选)
+  - `tag_id`: 标签ID(可选)
+  - `difficulty`: 难度(可选)
+  - `type`: 题型(可选)
+
+### 题目详情
+- **路径**:`/api/question_bank/{id}/`
+- **方法**:GET
+
+### 创建题目
+- **路径**:`/api/question_bank/create/`
+- **方法**:POST
+- **请求体**:
+```json
+{
+  "type": "choice",
+  "title": "string",
+  "options": [],
+  "answer": "string",
+  "difficulty": "easy",
+  "score": 10,
+  "category_id": "integer",
+  "tags": ["integer"]
+}
+```
+
+### 批量操作
+- **路径**:`/api/question_bank/batch/`
+- **方法**:POST
+- **说明**:批量修改分类、标签等
+
+### 题目分类列表
+- **路径**:`/api/question_bank/class/`
+- **方法**:GET
+
+### 题目标签列表
+- **路径**:`/api/question_bank/tag/`
+- **方法**:GET
+
+## 💼 求职申请接口
+
+### 申请列表
+- **路径**:`/api/job_application/list/`
+- **方法**:GET
+- **参数**:
+  - `page`: 页码
+  - `limit`: 每页数量
+  - `position_id`: 职位ID(可选)
+  - `status`: 状态(可选)
+
+### 申请详情
+- **路径**:`/api/job_application/{id}/`
+- **方法**:GET
+
+### 更新申请状态
+- **路径**:`/api/job_application/status/{id}/`
+- **方法**:PATCH
+- **请求体**:
+```json
+{
+  "status": "interviewed",
+  "remark": "string"
+}
+```
+
+### 批量更新状态
+- **路径**:`/api/job_application/batch_status/`
+- **方法**:POST
+
+## 👥 人才管理接口
+
+### 人才列表
+- **路径**:`/api/talent/list/`
+- **方法**:GET
+
+### 人才详情
+- **路径**:`/api/talent/{id}/`
+- **方法**:GET
+
+### 海外人才列表
+- **路径**:`/api/talent/overseas/`
+- **方法**:GET
+
+## 🤖 数字人面试接口
+
+### 数字人列表
+- **路径**:`/api/digital_human/list/`
+- **方法**:GET
+
+### 数字人详情
+- **路径**:`/api/digital_human/{id}/`
+- **方法**:GET
+
+### 面试记录
+- **路径**:`/api/digital_human/interview/{id}/`
+- **方法**:GET
+
+## 🔧 系统管理接口
+
+### 菜单管理
+- **路径**:`/api/system/menu/`
+- **方法**:GET/POST/PUT/DELETE
+
+### 角色管理
+- **路径**:`/api/system/role/`
+- **方法**:GET/POST/PUT/DELETE
+
+### 部门管理
+- **路径**:`/api/system/dept/`
+- **方法**:GET/POST/PUT/DELETE
+
+### 字典管理
+- **路径**:`/api/system/dict/`
+- **方法**:GET/POST/PUT/DELETE
+
+### 地区管理
+- **路径**:`/api/system/area/`
+- **方法**:GET
+
+### 文件上传
+- **路径**:`/api/system/file/`
+- **方法**:POST
+- **Content-Type**:multipart/form-data
+- **字段名**:`file`
+
+### 文件列表
+- **路径**:`/api/system/file/list/`
+- **方法**:GET
+
+### 操作日志
+- **路径**:`/api/system/log/operation/`
+- **方法**:GET
+
+### 登录日志
+- **路径**:`/api/system/log/login/`
+- **方法**:GET
+
+## 🎯 错误码说明
+
+| 错误码 | 说明 |
+|--------|------|
+| 2000 | 操作成功 |
+| 4000 | 参数错误 |
+| 4001 | 认证失败 |
+| 4003 | 权限不足 |
+| 4040 | 资源不存在 |
+| 5000 | 服务器错误 |
+
+## 📝 接口调用示例
+
+### 使用 Axios 调用
+```typescript
+import { request } from '@/utils/service'
+
+// GET 请求
+const getList = async () => {
+  const res = await request({
+    url: '/api/position/list/',
+    method: 'get',
+    params: {
+      page: 1,
+      limit: 20
+    }
+  })
+  return res.data
+}
+
+// POST 请求
+const createItem = async (data: any) => {
+  const res = await request({
+    url: '/api/position/create/',
+    method: 'post',
+    data: data
+  })
+  return res.data
+}
+
+// PUT 请求
+const updateItem = async (id: number, data: any) => {
+  const res = await request({
+    url: `/api/position/update/${id}/`,
+    method: 'put',
+    data: data
+  })
+  return res.data
+}
+
+// DELETE 请求
+const deleteItem = async (id: number) => {
+  const res = await request({
+    url: `/api/position/delete/${id}/`,
+    method: 'delete'
+  })
+  return res.data
+}
+```
+
+## 🔒 权限说明
+
+### 接口权限
+- 所有接口默认需要登录认证
+- 部分接口需要特定角色权限
+- 可以在系统菜单管理中配置接口权限
+
+### 数据权限
+- 支持按部门过滤数据
+- 支持按角色过滤数据
+- 管理员可以查看所有数据
+
+## 📊 数据结构说明
+
+### 职位数据结构
+```typescript
+interface Position {
+  id: number
+  name: string                    // 职位名称
+  department: string               // 部门
+  location: string                 // 地点
+  type: string                     // 类型(全职/兼职/实习)
+  status: 'published' | 'draft'   // 状态
+  description: string              // 职位描述
+  requirements: string             // 职位要求
+  salary_min: number              // 最低薪资
+  salary_max: number              // 最高薪资
+  created_at: string               // 创建时间
+  updated_at: string               // 更新时间
+}
+```
+
+### 题目数据结构
+```typescript
+interface Question {
+  id: number
+  type: 'choice' | 'blank' | 'essay'  // 题型
+  title: string                        // 题目
+  options?: string[]                   // 选项(选择题)
+  answer: string                        // 答案
+  difficulty: 'easy' | 'medium' | 'hard' // 难度
+  score: number                         // 分值
+  category_id: number                   // 分类ID
+  tags: number[]                        // 标签ID数组
+  created_at: string
+  updated_at: string
+}
+```
+
+### 求职申请数据结构
+```typescript
+interface JobApplication {
+  id: number
+  position_id: number
+  talent_id: number
+  status: 'pending' | 'reviewing' | 'interviewed' | 'rejected' | 'hired'
+  resume_url: string
+  interview_time?: string
+  interview_location?: string
+  remark?: string
+  created_at: string
+  updated_at: string
+}
+```
+
+### 用户数据结构
+```typescript
+interface User {
+  id: number
+  username: string
+  name: string
+  email: string
+  mobile: string
+  avatar: string
+  dept_id: number
+  roles: number[]
+  is_active: boolean
+  created_at: string
+  updated_at: string
+}
+```
+
+## 🔄 数据流转示例
+
+### 完整面试流程
+1. **创建职位** → POST `/api/position/create/`
+2. **发布职位** → PUT `/api/position/{id}/` (status: published)
+3. **候选人申请** → POST `/api/job_application/`
+4. **HR 筛选** → PATCH `/api/job_application/status/{id}/`
+5. **安排面试** → PUT `/api/job_application/{id}/`
+6. **完成面试** → PATCH `/api/job_application/{id}/`
+7. **发送通知** → POST `/api/job_application/notify/{id}/`
+
+## 🔔 WebSocket 接口(如支持)
+
+### 实时通知
+```typescript
+// 连接 WebSocket
+const ws = new WebSocket('wss://example.com/ws/')
+
+// 监听消息
+ws.onmessage = (event) => {
+  const data = JSON.parse(event.data)
+  console.log('收到通知:', data)
+}
+
+// 订阅频道
+ws.send(JSON.stringify({
+  action: 'subscribe',
+  channel: 'job_application',
+  user_id: currentUserId
+}))
+```
+
+## 📝 错误处理最佳实践
+
+### 统一错误处理
+```typescript
+import { ElMessage } from 'element-plus'
+
+try {
+  const res = await request({
+    url: '/api/some-endpoint/',
+    method: 'post',
+    data: formData
+  })
+  
+  if (res.code === 2000) {
+    ElMessage.success(res.message || '操作成功')
+  } else {
+    ElMessage.error(res.message || '操作失败')
+  }
+} catch (error) {
+  console.error('请求错误:', error)
+  ElMessage.error('网络错误,请稍后重试')
+}
+```
+
+### 处理特定错误码
+```typescript
+function handleApiError(error: any) {
+  switch (error.response?.status) {
+    case 400:
+      ElMessage.error('参数错误')
+      break
+    case 401:
+      ElMessage.error('登录已过期,请重新登录')
+      // 跳转到登录页
+      router.push('/login')
+      break
+    case 403:
+      ElMessage.error('权限不足')
+      break
+    case 404:
+      ElMessage.error('资源不存在')
+      break
+    case 500:
+      ElMessage.error('服务器错误')
+      break
+    default:
+      ElMessage.error('未知错误')
+  }
+}
+```
+
+---
+
+**注意**:本接口文档基于当前项目结构编写,实际接口路径和数据格式可能因后端实现而有所不同。建议查看后端 API 文档获取准确信息。
+
+**API 测试工具推荐**:
+- Postman
+- Insomnia
+- HTTPie
+- Chrome DevTools Network 面板
+

+ 70 - 0
CHANGELOG.md

@@ -0,0 +1,70 @@
+# 更新日志
+
+本文档记录了项目的所有重要变更。
+
+## [未发布]
+
+### 待添加功能
+- [ ] 批量导入导出功能
+- [ ] 数据统计分析
+- [ ] 移动端适配
+- [ ] 多语言完整支持
+
+## [v3.0.4] - 2024
+
+### 新增
+- ✨ 职位配置自动创建功能
+- ✨ 字段配置本地缓存功能
+- ✨ 数字人面试支持
+- ✨ AI 面试功能
+- ✨ 批量操作功能
+
+### 优化
+- ⚡ 页面加载性能优化
+- ⚡ 表格渲染性能优化
+- ⚡ API 请求优化
+- ⚡ 图片懒加载
+
+### 修复
+- 🐛 修复职位配置创建失败的问题
+- 🐛 修复字段缓存过期问题
+- 🐛 修复权限控制失效问题
+- 🐛 修复文件上传失败问题
+
+### 文档
+- 📝 添加项目说明文档
+- 📝 添加部署文档
+- 📝 添加开发者指南
+- 📝 添加 API 接口文档
+- 📝 更新 README
+
+## [v3.0.0] - 初始版本
+
+### 新增
+- ✨ 基于 Django-Vue3-Admin 框架
+- ✨ 完整的前后端分离架构
+- ✨ RBAC 权限管理系统
+- ✨ 职位管理系统
+- ✨ 题库管理系统
+- ✨ 人才管理系统
+- ✨ 求职申请管理
+- ✨ 系统管理模块
+
+### 技术栈
+- Vue 3 + TypeScript
+- Element Plus
+- Pinia
+- FastCRUD
+- Vite
+
+---
+
+**变更类型说明**:
+- `✨` 新增功能
+- `⚡` 性能优化
+- `🐛` Bug 修复
+- `📝` 文档更新
+- `♻️` 代码重构
+- `💄` UI 优化
+- `🔒` 安全修复
+

+ 528 - 0
DEPLOYMENT.md

@@ -0,0 +1,528 @@
+# 部署文档
+
+## 📦 部署准备
+
+### 环境要求
+- **Node.js**: >= 16.0.0
+- **npm**: >= 7.0.0
+- **Web服务器**: Nginx / Apache
+- **后端API**: Django (参考后端部署文档)
+
+### 构建产物
+```bash
+npm run build
+```
+构建完成后,生成的文件在 `dist/` 目录下。
+
+## 🚀 部署方式
+
+### 方式一:静态文件部署
+
+#### 1. 构建项目
+```bash
+# 安装依赖
+npm install
+
+# 构建生产版本
+npm run build
+```
+
+#### 2. 部署到 Nginx
+```nginx
+server {
+    listen 80;
+    server_name example.com;
+    
+    root /path/to/dist;
+    index index.html;
+    
+    # Vue Router 历史模式支持
+    location / {
+        try_files $uri $uri/ /index.html;
+    }
+    
+    # API 代理
+    location /api {
+        proxy_pass http://backend:8000;
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    }
+    
+    # 静态资源缓存
+    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+        expires 1y;
+        add_header Cache-Control "public, immutable";
+    }
+    
+    # Gzip 压缩
+    gzip on;
+    gzip_vary on;
+    gzip_min_length 1024;
+    gzip_types text/plain text/css text/xml text/javascript 
+               application/x-javascript application/xml+rss 
+               application/javascript application/json;
+}
+```
+
+#### 3. 配置生产环境变量
+创建 `.env.production` 文件:
+```env
+# 生产环境配置
+VITE_API_URL=https://api.example.com
+VITE_PUBLIC_PATH=/
+VITE_PORT=443
+VITE_OUTPUT_DIR=dist
+```
+
+### 方式二:Docker 部署
+
+#### 1. 创建 Dockerfile
+```dockerfile
+FROM node:16-alpine AS builder
+
+WORKDIR /app
+
+# 复制依赖文件
+COPY package*.json ./
+
+# 安装依赖
+RUN npm ci
+
+# 复制源代码
+COPY . .
+
+# 构建
+RUN npm run build
+
+# 生产环境
+FROM nginx:alpine
+
+# 复制构建产物
+COPY --from=builder /app/dist /usr/share/nginx/html
+
+# 复制 nginx 配置
+COPY nginx.conf /etc/nginx/conf.d/default.conf
+
+EXPOSE 80
+
+CMD ["nginx", "-g", "daemon off;"]
+```
+
+#### 2. 创建 docker-compose.yml
+```yaml
+version: '3.8'
+
+services:
+  web:
+    build: .
+    ports:
+      - "80:80"
+    volumes:
+      - ./nginx.conf:/etc/nginx/conf.d/default.conf
+    depends_on:
+      - backend
+    restart: unless-stopped
+
+  backend:
+    image: django-backend:latest
+    ports:
+      - "8000:8000"
+    environment:
+      - DATABASE_URL=mysql://user:password@db:3306/dbname
+    depends_on:
+      - db
+    restart: unless-stopped
+
+  db:
+    image: mysql:8.0
+    environment:
+      - MYSQL_ROOT_PASSWORD=password
+      - MYSQL_DATABASE=dbname
+    volumes:
+      - mysql_data:/var/lib/mysql
+    restart: unless-stopped
+
+volumes:
+  mysql_data:
+```
+
+#### 3. 启动服务
+```bash
+docker-compose up -d
+```
+
+### 方式三:CDN 部署
+
+#### 1. 使用对象存储
+支持阿里云 OSS、腾讯云 COS、AWS S3 等。
+
+#### 2. 配置要点
+- 开启静态网站托管
+- 配置 HTTPS
+- 配置自定义域名
+- 配置缓存策略
+- 开启 CDN 加速
+
+#### 3. 上传文件
+```bash
+# 安装工具(以阿里云 OSS 为例)
+npm install -g ossutil
+
+# 同步文件
+ossutil cp -r dist/ oss://bucket-name/
+```
+
+## ⚙️ 环境变量配置
+
+### 开发环境
+`.env.development`
+```env
+VITE_API_URL=http://localhost:8000
+VITE_PUBLIC_PATH=/
+VITE_PORT=8080
+```
+
+### 生产环境
+`.env.production`
+```env
+VITE_API_URL=https://api.example.com
+VITE_PUBLIC_PATH=/
+VITE_PORT=443
+```
+
+### 本地生产环境
+`.env.local_prod`
+```env
+VITE_API_URL=http://localhost:8000
+VITE_PUBLIC_PATH=/
+VITE_PORT=8080
+```
+
+## 🔧 Nginx 详细配置
+
+### 完整配置示例
+```nginx
+# 用户
+user nginx;
+
+# 工作进程数
+worker_processes auto;
+
+# 错误日志
+error_log /var/log/nginx/error.log warn;
+pid /var/run/nginx.pid;
+
+events {
+    worker_connections 1024;
+}
+
+http {
+    include /etc/nginx/mime.types;
+    default_type application/octet-stream;
+
+    # 日志格式
+    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+                    '$status $body_bytes_sent "$http_referer" '
+                    '"$http_user_agent" "$http_x_forwarded_for"';
+
+    access_log /var/log/nginx/access.log main;
+
+    # 基本设置
+    sendfile on;
+    tcp_nopush on;
+    tcp_nodelay on;
+    keepalive_timeout 65;
+    types_hash_max_size 2048;
+
+    # Gzip 压缩
+    gzip on;
+    gzip_vary on;
+    gzip_proxied any;
+    gzip_comp_level 6;
+    gzip_types text/plain text/css text/xml text/javascript
+               application/json application/javascript application/xml+rss
+               application/rss+xml font/truetype font/opentype
+               application/vnd.ms-fontobject image/svg+xml;
+
+    # 服务器配置
+    server {
+        listen 80;
+        server_name example.com;
+        root /usr/share/nginx/html;
+        index index.html;
+
+        # 网站根目录
+        location / {
+            try_files $uri $uri/ /index.html;
+        }
+
+        # API 代理
+        location /api {
+            proxy_pass http://127.0.0.1:8000;
+            proxy_http_version 1.1;
+            proxy_set_header Upgrade $http_upgrade;
+            proxy_set_header Connection 'upgrade';
+            proxy_set_header Host $host;
+            proxy_cache_bypass $http_upgrade;
+            proxy_set_header X-Real-IP $remote_addr;
+            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+
+        # 静态资源
+        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+            expires 1y;
+            add_header Cache-Control "public, immutable";
+        }
+
+        # 禁止访问隐藏文件
+        location ~ /\. {
+            deny all;
+            access_log off;
+            log_not_found off;
+        }
+    }
+
+    # HTTPS 配置
+    server {
+        listen 443 ssl http2;
+        server_name example.com;
+
+        ssl_certificate /path/to/cert.pem;
+        ssl_certificate_key /path/to/key.pem;
+        ssl_protocols TLSv1.2 TLSv1.3;
+        ssl_ciphers HIGH:!aNULL:!MD5;
+        ssl_prefer_server_ciphers on;
+
+        # 其他配置同 HTTP
+    }
+}
+```
+
+## 🔒 HTTPS 配置
+
+### 使用 Let's Encrypt
+```bash
+# 安装 certbot
+sudo apt-get install certbot python3-certbot-nginx
+
+# 获取证书
+sudo certbot --nginx -d example.com
+
+# 自动续期
+sudo certbot renew --dry-run
+```
+
+### 使用阿里云 SSL 证书
+1. 在阿里云控制台申请免费证书
+2. 下载证书文件
+3. 配置 Nginx
+
+## 📊 性能优化
+
+### 1. 开启 HTTP/2
+```nginx
+listen 443 ssl http2;
+```
+
+### 2. 启用 Gzip 压缩
+见 Nginx 配置示例
+
+### 3. 静态资源缓存
+```nginx
+location ~* \.(js|css)$ {
+    expires 1y;
+    add_header Cache-Control "public, immutable";
+}
+```
+
+### 4. 代码分割
+Vite 已自动配置代码分割,生产环境会自动生成多个 chunk。
+
+### 5. CDN 加速
+- 将静态资源上传到 CDN
+- 修改 `vite.config.ts` 中的 `base` 配置
+- 配置 CDN 域名
+
+## 🐛 故障排查
+
+### 1. 页面白屏
+- 检查控制台错误信息
+- 检查路由配置
+- 检查 API 地址配置
+
+### 2. API 请求失败
+- 检查后端服务是否正常运行
+- 检查 Nginx 代理配置
+- 检查跨域配置
+
+### 3. 静态资源 404
+- 检查 `VITE_PUBLIC_PATH` 配置
+- 检查 Nginx root 配置
+- 检查文件权限
+
+### 4. 路由刷新 404
+- 确保 Nginx 配置了 `try_files $uri $uri/ /index.html;`
+
+## 📝 监控和维护
+
+### 1. 日志查看
+```bash
+# Nginx 访问日志
+tail -f /var/log/nginx/access.log
+
+# Nginx 错误日志
+tail -f /var/log/nginx/error.log
+
+# 系统日志
+journalctl -u nginx -f
+```
+
+### 2. 性能监控
+- 使用 Google Analytics
+- 使用 APM 工具
+- 监控服务器资源使用
+
+### 3. 定期维护
+- 定期更新依赖
+- 定期备份数据
+- 监控错误日志
+- 优化性能
+
+## 🔄 更新部署
+
+### 1. 更新前端
+```bash
+# 拉取最新代码
+git pull origin master
+
+# 安装新依赖
+npm install
+
+# 重新构建
+npm run build
+
+# 重启服务
+sudo systemctl restart nginx
+```
+
+### 2. 回滚版本
+```bash
+# 切换到旧版本
+git checkout v1.0.0
+
+# 重新构建
+npm run build
+
+# 重启服务
+sudo systemctl restart nginx
+```
+
+## ✅ 部署检查清单
+
+### 部署前检查
+- [ ] 环境变量已配置正确
+- [ ] 后端 API 服务正常运行
+- [ ] 数据库连接正常
+- [ ] 静态资源已构建完成
+- [ ] 域名解析已配置
+- [ ] SSL 证书已安装(如需 HTTPS)
+
+### 部署后检查
+- [ ] 前端页面可以正常访问
+- [ ] API 请求可以正常响应
+- [ ] 静态资源加载正常
+- [ ] 路由跳转正常
+- [ ] 登录功能正常
+- [ ] 文件上传功能正常
+- [ ] 跨域配置正确
+
+### 性能检查
+- [ ] 页面加载速度 < 3 秒
+- [ ] API 响应时间 < 1 秒
+- [ ] Gzip 压缩已启用
+- [ ] 静态资源已缓存
+- [ ] CDN 加速已配置(如使用)
+
+### 安全检查
+- [ ] HTTPS 已启用
+- [ ] 敏感信息不暴露在客户端
+- [ ] 接口权限验证正常
+- [ ] SQL 注入防护已配置
+- [ ] XSS 攻击防护已配置
+
+## 🔍 部署故障排查表
+
+| 问题现象 | 可能原因 | 解决方案 |
+|---------|---------|---------|
+| 页面白屏 | JS 文件路径错误 | 检查 VITE_PUBLIC_PATH 配置 |
+| API 404 | 后端服务未启动 | 启动后端服务 |
+| 静态资源 404 | 文件权限问题 | chmod 755 静态文件 |
+| 路由刷新 404 | Nginx 配置错误 | 检查 try_files 配置 |
+| CORS 错误 | 跨域配置错误 | 配置后端 CORS |
+| 登录失败 | Token 验证失败 | 检查 JWT 配置 |
+
+## 📊 监控指标
+
+### 性能监控
+- **页面加载时间**:应 < 3 秒
+- **API 响应时间**:应 < 1 秒
+- **首屏渲染时间**:应 < 2 秒
+- **资源加载时间**:应 < 5 秒
+
+### 业务监控
+- **每日访问量**:UV/PV 统计
+- **API 调用次数**:接口监控
+- **错误率**:异常统计
+- **用户活跃度**:DAU/MAU
+
+### 服务器监控
+- **CPU 使用率**:应 < 80%
+- **内存使用率**:应 < 85%
+- **磁盘使用率**:应 < 90%
+- **网络流量**:监控带宽使用
+
+## 🔄 自动化部署示例
+
+### GitHub Actions 部署
+```yaml
+name: Deploy
+
+on:
+  push:
+    branches: [ master ]
+
+jobs:
+  deploy:
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v2
+    - name: Setup Node.js
+      uses: actions/setup-node@v2
+      with:
+        node-version: '16'
+    - name: Install dependencies
+      run: npm install
+    - name: Build
+      run: npm run build
+    - name: Deploy to server
+      uses: easingthemes/ssh-deploy@v2
+      with:
+        SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
+        ARGS: "-rltgoDzvO"
+        SOURCE: "dist/"
+        REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
+        REMOTE_USER: ${{ secrets.REMOTE_USER }}
+        TARGET: "/var/www/html/"
+```
+
+---
+
+**部署注意事项**:
+1. 确保后端 API 服务正常运行
+2. 配置正确的环境变量
+3. 确保 HTTPS 配置正确
+4. 定期备份重要数据
+5. 监控服务器资源使用情况
+6. 建立完整的监控告警机制
+

+ 568 - 0
DEVELOPER_GUIDE.md

@@ -0,0 +1,568 @@
+# 开发者指南
+
+## 📖 目录
+- [开发环境搭建](#开发环境搭建)
+- [项目结构说明](#项目结构说明)
+- [代码规范](#代码规范)
+- [开发流程](#开发流程)
+- [常用功能示例](#常用功能示例)
+- [调试技巧](#调试技巧)
+- [常见问题](#常见问题)
+
+## 🛠️ 开发环境搭建
+
+### 1. 安装必要工具
+```bash
+# 安装 Node.js (推荐使用 nvm)
+nvm install 16
+nvm use 16
+
+# 安装 pnpm (可选,替代 npm)
+npm install -g pnpm
+
+# 安装依赖
+npm install
+# 或
+pnpm install
+```
+
+### 2. 配置开发环境
+```bash
+# 复制环境变量文件
+cp .env.development.example .env.development
+
+# 编辑 .env.development
+# 配置后端 API 地址
+VITE_API_URL=http://localhost:8000
+```
+
+### 3. 启动开发服务器
+```bash
+npm run dev
+```
+
+## 📁 项目结构说明
+
+### 核心目录
+
+#### `/src/api/` - API 接口
+```typescript
+// 示例:src/api/login/index.ts
+import request from '/@/utils/service'
+
+export function login(data: any) {
+  return request({
+    url: '/api/system/auth/login/',
+    method: 'post',
+    data
+  })
+}
+```
+
+#### `/src/views/` - 页面视图
+```
+views/
+├── position/        # 职位管理页面
+│   ├── list/       # 职位列表
+│   ├── detail/     # 职位详情
+│   └── crud.tsx    # CRUD 配置
+├── questionBank/   # 题库管理
+├── talent/         # 人才管理
+└── system/         # 系统管理
+```
+
+#### `/src/components/` - 公共组件
+- `auth/` - 权限控制组件
+- `editor/` - 富文本编辑器
+- `fileSelector/` - 文件选择器
+- `table/` - 表格组件
+
+#### `/src/utils/` - 工具函数
+- `request.ts` - 请求封装
+- `message.ts` - 消息提示
+- `storage.ts` - 本地存储
+- `formatTime.ts` - 时间格式化
+
+#### `/src/stores/` - 状态管理
+```typescript
+// 示例:src/stores/userInfo.ts
+import { defineStore } from 'pinia'
+
+export const useUserInfo = defineStore('userInfo', {
+  state: () => ({
+    userName: '',
+    avatar: ''
+  }),
+  persist: {
+    enabled: true
+  }
+})
+```
+
+## 📝 代码规范
+
+### 1. TypeScript 规范
+```typescript
+// ✅ 正确:明确的类型定义
+interface UserInfo {
+  id: number
+  name: string
+  email: string
+}
+
+function getUserInfo(id: number): Promise<UserInfo> {
+  return request({
+    url: `/api/user/${id}/`,
+    method: 'get'
+  })
+}
+
+// ❌ 错误:使用 any
+function getUserInfo(id: any): any {
+  // ...
+}
+```
+
+### 2. Vue 3 规范
+```vue
+<template>
+  <div class="container">
+    <el-table :data="tableData">
+      <el-table-column prop="name" label="名称" />
+    </el-table>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+
+interface TableItem {
+  name: string
+}
+
+const tableData = ref<TableItem[]>([])
+
+const getData = async () => {
+  // 获取数据逻辑
+}
+</script>
+
+<style scoped lang="scss">
+.container {
+  padding: 20px;
+}
+</style>
+```
+
+### 3. 命名规范
+- **组件名**:PascalCase - `UserManagement.vue`
+- **文件名**:kebab-case - `user-info.vue`
+- **变量/函数**:camelCase - `getUserInfo`
+- **常量**:UPPER_SNAKE_CASE - `API_BASE_URL`
+- **类型/接口**:PascalCase - `UserInfo`
+
+### 4. 文件组织
+```
+component/
+  ├── index.vue        # 主组件
+  ├── components/      # 子组件
+  │   ├── Form.vue
+  │   └── List.vue
+  ├── api.ts           # API 接口
+  ├── types.ts         # 类型定义
+  └── crud.tsx         # CRUD 配置(如需要)
+```
+
+## 🔄 开发流程
+
+### 1. 创建新功能模块
+
+#### 步骤一:创建目录结构
+```bash
+src/views/newFeature/
+  ├── index.vue    # 主页面
+  ├── api.ts       # API 接口
+  ├── types.ts     # 类型定义
+  └── components/  # 子组件
+      └── Dialog.vue
+```
+
+#### 步骤二:定义类型
+```typescript
+// src/views/newFeature/types.ts
+export interface FeatureItem {
+  id: number
+  name: string
+  description: string
+  status: 'active' | 'inactive'
+}
+```
+
+#### 步骤三:定义 API
+```typescript
+// src/views/newFeature/api.ts
+import request from '/@/utils/service'
+
+export function getFeatureList(params: any) {
+  return request({
+    url: '/api/feature/',
+    method: 'get',
+    params
+  })
+}
+
+export function createFeature(data: any) {
+  return request({
+    url: '/api/feature/',
+    method: 'post',
+    data
+  })
+}
+```
+
+#### 步骤四:创建页面
+```vue
+<!-- src/views/newFeature/index.vue -->
+<template>
+  <div class="feature-page">
+    <el-table :data="tableData">
+      <el-table-column prop="name" label="名称" />
+    </el-table>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref, onMounted } from 'vue'
+import { getFeatureList } from './api'
+import type { FeatureItem } from './types'
+
+const tableData = ref<FeatureItem[]>([])
+
+const loadData = async () => {
+  const res = await getFeatureList({})
+  tableData.value = res.data
+}
+
+onMounted(() => {
+  loadData()
+})
+</script>
+```
+
+### 2. 使用 FastCRUD
+```typescript
+// src/views/feature/crud.tsx
+import { useCrud } from '@fast-crud/fast-crud'
+import { createFeature, updateFeature, deleteFeature } from './api'
+
+export default useCrud({
+  async doAdd({ form }) {
+    await createFeature(form)
+  },
+  async doEdit({ form }) {
+    await updateFeature(form.id, form)
+  },
+  async doDel({ row }) {
+    await deleteFeature(row.id)
+  }
+})
+```
+
+## 💡 常用功能示例
+
+### 0. 项目中的实际示例
+查看现有业务模块代码以了解项目风格:
+- **职位管理**:`src/views/position/` - 复杂的职位详情编辑
+- **题库管理**:`src/views/questionBank/` - 题目CRUD和管理
+- **系统管理**:`src/views/system/account/` - 用户管理示例
+- **求职申请**:`src/views/JobApplication/` - 申请状态管理
+
+### 1. 权限控制
+```vue
+<template>
+  <!-- 按钮权限 -->
+  <auths value="system:user:add">
+    <el-button @click="handleAdd">新增</el-button>
+  </auths>
+  
+  <!-- 字段权限 -->
+  <auth value="system:user:name:view">
+    <span>{{ userInfo.name }}</span>
+  </auth>
+</template>
+```
+
+### 2. 消息提示
+```typescript
+import { successMessage, warningMessage, errorMessage } from '/@/utils/message'
+
+// 成功提示
+successMessage('操作成功')
+
+// 警告提示
+warningMessage('请填写完整信息')
+
+// 错误提示
+errorMessage('操作失败')
+```
+
+### 3. 表格操作
+```vue
+<template>
+  <fs-table>
+    <fs-table-column prop="name" label="名称" />
+    <template #action="{ row }">
+      <el-button @click="handleEdit(row)">编辑</el-button>
+      <el-button @click="handleDelete(row)">删除</el-button>
+    </template>
+  </fs-table>
+</template>
+```
+
+### 4. 表单验证
+```vue
+<script setup lang="ts">
+import { ref } from 'vue'
+import { ElMessage } from 'element-plus'
+
+const form = ref({
+  name: '',
+  email: ''
+})
+
+const rules = {
+  name: [
+    { required: true, message: '请输入名称', trigger: 'blur' }
+  ],
+  email: [
+    { required: true, message: '请输入邮箱', trigger: 'blur' },
+    { type: 'email', message: '请输入正确的邮箱', trigger: 'blur' }
+  ]
+}
+</script>
+
+<template>
+  <el-form :model="form" :rules="rules" ref="formRef">
+    <el-form-item label="名称" prop="name">
+      <el-input v-model="form.name" />
+    </el-form-item>
+    <el-form-item label="邮箱" prop="email">
+      <el-input v-model="form.email" />
+    </el-form-item>
+  </el-form>
+</template>
+```
+
+### 5. 文件上传
+```vue
+<template>
+  <fs-uploader v-model="fileList" />
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+
+const fileList = ref([])
+</script>
+```
+
+### 6. 富文本编辑器
+```vue
+<template>
+  <fs-editor v-model="content" />
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+
+const content = ref('')
+</script>
+```
+
+### 7. 字典数据获取
+```vue
+<template>
+  <el-select v-model="value" dict="status">
+    <el-option label="启用" value="1" />
+    <el-option label="禁用" value="0" />
+  </el-select>
+</template>
+```
+
+### 8. 本地存储
+```typescript
+import { Local } from '/@/utils/storage'
+
+// 保存数据
+Local.set('key', { data: 'value' })
+
+// 获取数据
+const data = Local.get('key')
+
+// 删除数据
+Local.remove('key')
+```
+
+### 9. 路由跳转
+```typescript
+import { useRouter } from 'vue-router'
+
+const router = useRouter()
+
+// 普通跳转
+router.push('/position/list')
+
+// 带参数跳转
+router.push({
+  path: '/position/detail',
+  query: { id: 123 }
+})
+
+// 在新标签页打开
+window.open(`/position/detail?id=123`)
+```
+
+### 10. 表格数据操作
+```vue
+<script setup lang="ts">
+const tableData = ref([])
+const loading = ref(false)
+
+const loadData = async () => {
+  loading.value = true
+  try {
+    const res = await request({
+      url: '/api/position/list/',
+      method: 'get',
+      params: { page: 1, limit: 20 }
+    })
+    tableData.value = res.data
+  } finally {
+    loading.value = false
+  }
+}
+
+// 刷新数据
+const refresh = () => {
+  loadData()
+}
+</script>
+
+<template>
+  <el-table :data="tableData" v-loading="loading">
+    <el-table-column prop="name" label="职位名称" />
+    <el-table-column prop="status" label="状态" />
+  </el-table>
+</template>
+```
+
+## 🐛 调试技巧
+
+### 1. Vue DevTools
+安装 Vue DevTools 浏览器插件,用于:
+- 查看组件树
+- 检查组件状态
+- 追踪组件更新
+- 性能分析
+
+### 2. 控制台调试
+```typescript
+// 打印日志
+console.log('Data:', data)
+
+// 打印表格
+console.table(dataList)
+
+// 断点调试
+debugger
+
+// 打印组件实例
+console.log(this.$refs.myComponent)
+```
+
+### 3. Vite HMR
+修改代码后,Vite 会自动热更新,无需手动刷新页面。
+
+### 4. 网络请求调试
+使用浏览器开发者工具的 Network 面板:
+- 查看请求/响应
+- 检查请求头
+- 查看响应数据
+
+## ❓ 常见问题
+
+### 1. 依赖安装失败
+```bash
+# 清除缓存
+npm cache clean --force
+
+# 删除 node_modules
+rm -rf node_modules
+
+# 重新安装
+npm install
+```
+
+### 2. 端口被占用
+```bash
+# 修改 vite.config.ts 中的端口
+server: {
+  port: 3000  // 改为其他端口
+}
+```
+
+### 3. TypeScript 类型错误
+```bash
+# 重新生成类型声明
+npm run type-check
+```
+
+### 4. 样式不生效
+- 检查样式文件导入
+- 检查 scoped 属性
+- 检查 Tailwind CSS 配置
+
+### 5. 路由跳转失败
+```typescript
+// 使用 router.push
+import { useRouter } from 'vue-router'
+const router = useRouter()
+router.push('/path')
+```
+
+## 📚 参考资料
+
+- [Vue 3 官方文档](https://cn.vuejs.org/)
+- [Element Plus 文档](https://element-plus.org/)
+- [FastCRUD 文档](http://fast-crud.docmirror.cn/)
+- [Pinia 文档](https://pinia.vuejs.org/)
+- [TypeScript 文档](https://www.typescriptlang.org/)
+
+## 🎯 最佳实践
+
+### 1. 组件拆分
+保持组件精简,单一职责。
+
+### 2. 代码复用
+提取公共逻辑到 hooks 或 utils。
+
+### 3. 性能优化
+- 使用 v-if 替代 v-show
+- 使用 computed 缓存计算
+- 大列表使用虚拟滚动
+
+### 4. 错误处理
+```typescript
+try {
+  await saveData()
+  successMessage('保存成功')
+} catch (error) {
+  errorMessage('保存失败')
+  console.error(error)
+}
+```
+
+---
+
+**提示**:遇到问题时,先查阅文档,然后查看已有代码实现,最后在团队中讨论。
+

+ 267 - 0
PROJECT_README.md

@@ -0,0 +1,267 @@
+# 面试管理系统 - 项目说明文档
+
+## 📋 项目概述
+
+本系统是一个基于 **Django-Vue3-Admin** 框架开发的面试管理系统,旨在为企业提供完整的在线面试解决方案。系统支持职位管理、简历筛选、在线面试、AI面试、数字人面试等多种功能。
+
+## 🎯 核心功能模块
+
+### 1. 职位管理模块 (`/src/views/position/`)
+- **职位列表管理**:职位信息CRUD、批量状态管理、标签管理
+- **职位详情管理**:职位完整信息配置
+- **职位能力匹配**:职位与能力的关联管理
+- **职位创建向导**:引导式职位创建流程
+
+### 2. 题库管理模块 (`/src/views/questionBank/`)
+- **题库分类管理**:题目分类维护
+- **标签管理**:题目标签体系
+- **题目管理**:支持多种题型(选择题、填空题、问答题等)
+- **批量操作**:批量分类、标签管理
+- **评分标准**:自定义评分规则
+
+### 3. 人才管理模块 (`/src/views/talent/`)
+- **人才库**:候选人信息管理
+- **海外人才管理**:国际化人才管理
+- **标签管理**:人才标签体系
+- **简历筛选**:智能简历筛选功能
+
+### 4. 求职申请管理 (`/src/views/JobApplication/`)
+- **申请列表**:所有求职申请记录
+- **申请状态跟踪**:申请流程状态管理
+- **批量状态修改**:批量处理申请
+- **短信通知**:申请状态变更通知
+- **报告查看**:面试报告查看
+
+### 5. 数字人面试模块 (`/src/views/digitalHuman/`)
+- **数字人面试**:基于AI的数字人面试功能
+- **面试配置**:数字人面试参数设置
+- **详情查看**:面试过程记录
+
+### 6. 系统管理模块 (`/src/views/system/`)
+- **用户管理**:系统用户管理
+- **角色权限**:RBAC权限管理
+- **菜单管理**:动态菜单配置
+- **部门管理**:组织架构管理
+- **字典管理**:系统字典维护
+- **地区管理**:省市县数据管理
+- **文件管理**:文件上传管理
+- **操作日志**:系统操作日志记录
+- **登录日志**:用户登录记录
+
+## 🏗️ 技术架构
+
+### 前端技术栈
+- **框架**:Vue 3.4.38 + TypeScript
+- **UI组件库**:Element Plus 2.8.0
+- **状态管理**:Pinia 2.0.28
+- **路由**:Vue Router 4.4.3
+- **构建工具**:Vite 5.4.1
+- **CRUD组件**:FastCRUD 1.21.2
+- **国际化**:Vue I18n 9.14.0
+- **富文本编辑器**:WangEditor 5.1.23
+- **图表**:ECharts 5.6.0
+- **表格**:VXE Table 4.6.18
+
+### 项目结构
+```
+src/
+├── api/                 # API接口定义
+├── assets/              # 静态资源
+│   ├── iconfont/        # 图标字体
+│   ├── img/             # 图片资源
+│   └── style/           # 样式文件
+├── components/           # 公共组件
+│   ├── auth/            # 权限组件
+│   ├── editor/          # 富文本编辑器
+│   ├── fileSelector/    # 文件选择器
+│   ├── iconSelector/    # 图标选择器
+│   ├── table/           # 表格组件
+│   └── ...
+├── stores/              # Pinia状态管理
+├── views/               # 页面视图
+│   ├── position/        # 职位管理
+│   ├── questionBank/    # 题库管理
+│   ├── talent/          # 人才管理
+│   ├── JobApplication/  # 求职申请
+│   ├── digitalHuman/    # 数字人面试
+│   └── system/          # 系统管理
+├── router/              # 路由配置
+├── utils/               # 工具函数
+├── i18n/                # 国际化
+└── plugin/              # 插件
+```
+
+## 🚀 快速开始
+
+### 环境要求
+- Node.js >= 16.0.0
+- npm >= 7.0.0
+- 现代浏览器(Chrome, Firefox, Safari, Edge)
+
+### 安装步骤
+
+1. **安装依赖**
+```bash
+npm install
+```
+
+2. **开发模式启动**
+```bash
+npm run dev
+```
+
+3. **生产环境构建**
+```bash
+npm run build
+```
+
+### 配置说明
+
+- **开发环境配置**:`.env.development` 文件
+- **生产环境配置**:`.env.production` 文件
+- **本地生产配置**:`.env.local_prod` 文件
+
+主要配置项:
+- `VITE_PORT`:开发服务器端口(默认:8080)
+- `VITE_PUBLIC_PATH`:生产环境公共路径
+- `VITE_API_URL`:后端API地址
+
+## 📁 核心业务说明
+
+### 1. 职位配置自动创建功能
+系统会自动为职位创建默认配置,无需手动操作。详情见 [CONFIG_AUTO_CREATE_SUMMARY.md](./CONFIG_AUTO_CREATE_SUMMARY.md)
+
+**使用场景**:
+- 创建新职位时,系统自动初始化面试配置
+- 心理测试、色盲测试等开关默认关闭
+- 数字人面试功能可单独配置
+
+### 2. 字段配置本地缓存功能
+职位详情页的字段配置会自动缓存在本地,有效期7天。详情见 [FIELD_CONFIG_CACHE_README.md](./FIELD_CONFIG_CACHE_README.md)
+
+**使用场景**:
+- 用户自定义字段显示偏好
+- 提高操作效率,减少重复配置
+- 跨浏览器数据隔离
+
+### 3. 权限管理
+- **按钮权限**:精确到按钮级别的权限控制
+- **字段权限**:精确到字段级别的权限控制
+- **数据权限**:支持按部门、角色划分数据访问范围
+
+**权限体系**:
+- 菜单权限:控制页面访问
+- 按钮权限:控制操作按钮显示
+- 接口权限:控制API调用
+- 字段权限:控制字段可见性
+- 数据权限:控制数据范围
+
+### 4. 文件上传
+- 支持多种文件格式(图片、文档、视频等)
+- 自动压缩和预览
+- 文件管理后台
+- 支持断点续传(大文件)
+
+### 5. 智能筛选功能
+- **人才筛选**:根据条件自动筛选匹配人才
+- **简历分析**:AI智能解析简历内容
+- **能力匹配**:职位与人才能力自动匹配
+
+### 6. 面试流程管理
+- **多轮面试**:支持多轮次面试流程
+- **状态跟踪**:实时跟踪申请状态
+- **自动通知**:邮件、短信自动通知
+- **面试报告**:自动生成面试报告
+
+## 🛠️ 开发规范
+
+### 代码规范
+- 使用 TypeScript 进行类型检查
+- 遵循 Vue 3 Composition API 规范
+- 使用 ESLint 进行代码检查
+
+### 提交规范
+```bash
+git commit -m "feat: 添加新功能"
+git commit -m "fix: 修复bug"
+git commit -m "docs: 更新文档"
+git commit -m "style: 代码格式调整"
+git commit -m "refactor: 代码重构"
+```
+
+### 命名规范
+- **组件名**:使用 PascalCase(如 `UserManagement.vue`)
+- **文件名**:使用 kebab-case(如 `user-info.vue`)
+- **变量/函数名**:使用 camelCase(如 `getUserInfo`)
+- **常量**:使用 UPPER_SNAKE_CASE(如 `API_BASE_URL`)
+
+## 📝 常用功能
+
+### FastCRUD 配置
+系统使用 FastCRUD 作为表格组件,统一配置在 `src/settings.ts` 文件中,包括:
+- 接口请求/响应转换
+- 文件上传配置
+- 富文本编辑器配置
+- 字典数据获取
+
+### 国际化
+系统支持多语言切换,语言文件在 `src/i18n/lang/` 目录下:
+- 中文简体(zh-cn.ts)
+- 中文繁体(zh-tw.ts)
+- 英文(en.ts)
+
+### 主题配置
+- 支持亮色/暗色主题切换
+- 主题配置在 `src/stores/themeConfig.ts` 中
+
+## 🔧 故障排查
+
+### 常见问题
+
+1. **启动报错**
+   - 检查 Node.js 版本是否符合要求
+   - 删除 `node_modules` 和 `package-lock.json`,重新安装
+
+2. **接口请求失败**
+   - 检查后端服务是否启动
+   - 检查 `VITE_API_URL` 配置是否正确
+
+3. **页面空白**
+   - 检查浏览器控制台错误信息
+   - 清除浏览器缓存
+   - 检查路由配置
+
+4. **样式不生效**
+   - 检查 Tailwind CSS 配置
+   - 检查 Element Plus 样式导入
+
+## 📚 相关文档
+
+- [FastCRUD 官方文档](http://fast-crud.docmirror.cn/)
+- [Vue 3 官方文档](https://cn.vuejs.org/)
+- [Element Plus 官方文档](https://element-plus.org/zh-CN/)
+- [Django-Vue3-Admin 官方文档](https://www.django-vue-admin.com)
+
+## 📄 许可证
+
+MIT License
+
+## 👥 贡献指南
+
+1. Fork 本仓库
+2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
+3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
+4. 推送到分支 (`git push origin feature/AmazingFeature`)
+5. 开启 Pull Request
+
+## 📞 联系方式
+
+- 项目地址:[Gitee](https://gitee.com/huge-dream/django-vue3-admin)
+- 在线演示:[https://demo.dvadmin.com](https://demo.dvadmin.com)
+- 官方文档:[https://www.django-vue-admin.com](https://www.django-vue-admin.com)
+
+---
+
+**版本信息**:v3.0.4  
+**更新日期**:2024
+

+ 136 - 0
QUICKSTART.md

@@ -0,0 +1,136 @@
+# 快速开始指南
+
+本指南帮助您在 5 分钟内快速启动项目。
+
+## 🚀 快速启动
+
+### 第一步:克隆项目
+```bash
+git clone https://your-repo-url.git
+cd interview_web
+```
+
+### 第二步:安装依赖
+```bash
+npm install
+```
+
+### 第三步:启动项目
+```bash
+npm run dev
+```
+
+访问 http://localhost:8080
+
+## 📋 前置条件检查
+
+确保您已安装:
+- ✅ Node.js >= 16.0.0
+- ✅ npm >= 7.0.0
+
+检查版本:
+```bash
+node -v
+npm -v
+```
+
+## ⚙️ 快速配置
+
+### 1. 配置后端 API 地址
+
+创建或编辑 `.env.development` 文件:
+```env
+VITE_API_URL=http://localhost:8000
+VITE_PUBLIC_PATH=/
+VITE_PORT=8080
+```
+
+### 2. 登录系统
+
+默认账号:`superadmin`  
+默认密码:`admin123456`
+
+## 🎯 常用命令
+
+### 开发环境
+```bash
+npm run dev          # 启动开发服务器
+```
+
+### 生产构建
+```bash
+npm run build        # 构建生产版本
+npm run build:local  # 本地生产构建
+```
+
+### 代码检查
+```bash
+npm run lint-fix     # ESLint 自动修复
+```
+
+## 📖 下一步
+
+### 学习项目结构
+- 阅读 [项目说明文档](./PROJECT_README.md)
+- 查看 [开发者指南](./DEVELOPER_GUIDE.md)
+
+### 开始开发
+- 阅读 [API 接口文档](./API_DOCUMENTATION.md)
+- 查看现有模块代码示例
+
+### 部署上线
+- 阅读 [部署文档](./DEPLOYMENT.md)
+- 配置生产环境
+
+## 🆘 遇到问题?
+
+### 常见问题
+1. **端口被占用**
+   ```bash
+   # 修改 vite.config.ts 中的端口号
+   server: { port: 3000 }
+   ```
+
+2. **依赖安装失败**
+   ```bash
+   # 清除缓存后重新安装
+   npm cache clean --force
+   npm install
+   ```
+
+3. **API 请求失败**
+   - 检查后端服务是否启动
+   - 检查 `.env.development` 配置
+
+### 获取帮助
+- 📖 查看项目文档
+- 🐛 提交 Issue
+- 💬 联系团队
+
+## ✅ 验证安装
+
+运行以下命令验证环境:
+```bash
+# 检查 Node.js 版本
+node -v
+
+# 检查依赖安装
+ls node_modules
+
+# 启动开发服务器
+npm run dev
+
+# 访问 http://localhost:8080
+# 应该能看到登录页面
+```
+
+## 🎉 完成!
+
+现在您已经成功启动了项目,可以开始开发了!
+
+查看项目文档了解更多:
+- [项目说明](./PROJECT_README.md)
+- [开发指南](./DEVELOPER_GUIDE.md)
+- [部署文档](./DEPLOYMENT.md)
+- [API 文档](./API_DOCUMENTATION.md)
+

+ 25 - 0
README.md

@@ -4,6 +4,31 @@
 
 [预 览](https://demo.dvadmin.com) | [官网文档](https://www.django-vue-admin.com) | [群聊](https://qm.qq.com/cgi-bin/qm/qr?k=fOdnHhC8DJlRHGYSnyhoB8P5rgogA6Vs&jump_from=webapi) | [社区](https://bbs.django-vue-admin.com) | [插件市场](https://bbs.django-vue-admin.com/plugMarket.html) | [Github](https://github.com/liqianglog/django-vue-admin)
 
+---
+
+## 📚 项目文档
+
+本项目是基于 Django-Vue3-Admin 框架开发的面试管理系统。更详细的项目说明请查看以下文档:
+
+### 📋 快速开始
+- 🚀 [快速开始指南](./QUICKSTART.md) - 5分钟快速启动项目
+- 📖 [项目说明文档](./PROJECT_README.md) - 项目概述、功能模块、技术架构
+
+### 📘 开发文档
+- 🔧 [开发者指南](./DEVELOPER_GUIDE.md) - 开发者必读指南
+- 📡 [API接口文档](./API_DOCUMENTATION.md) - 接口调用说明
+- 📝 [更新日志](./CHANGELOG.md) - 版本更新记录
+
+### 🚀 部署文档
+- 🐳 [部署文档](./DEPLOYMENT.md) - 生产环境部署指南
+- 📘 [详细部署指南](./deploy/DEPLOYMENT_GUIDE.md) - 完整部署步骤和故障排查
+
+### ⚙️ 功能说明
+- 💼 [职位配置自动创建说明](./CONFIG_AUTO_CREATE_SUMMARY.md) - 职位配置功能说明
+- 💾 [字段配置缓存说明](./FIELD_CONFIG_CACHE_README.md) - 本地缓存功能说明
+
+---
+
 
 
 💡 **「关于」**

+ 91 - 0
deploy/.htaccess

@@ -0,0 +1,91 @@
+# 面试管理系统 Apache 配置
+
+# 启用 Rewrite 引擎
+<IfModule mod_rewrite.c>
+  RewriteEngine On
+  RewriteBase /
+  
+  # 如果请求文件不存在,重定向到 index.html
+  RewriteRule ^index\.html$ - [L]
+  RewriteCond %{REQUEST_FILENAME} !-f
+  RewriteCond %{REQUEST_FILENAME} !-d
+  RewriteRule . /index.html [L]
+</IfModule>
+
+# MIME 类型设置
+<IfModule mod_mime.c>
+  # JavaScript
+  AddType application/javascript js
+  AddType application/json json
+  
+  # Fonts
+  AddType font/woff woff
+  AddType font/woff2 woff2
+  AddType font/ttf ttf
+  AddType application/vnd.ms-fontobject eot
+  
+  # Images
+  AddType image/svg+xml svg svgz
+</IfModule>
+
+# 启用 Gzip 压缩
+<IfModule mod_deflate.c>
+  # HTML, CSS, JavaScript, Text, XML
+  AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json application/xml
+</IfModule>
+
+# 设置缓存
+<IfModule mod_expires.c>
+  ExpiresActive On
+  
+  # 图片缓存 1 年
+  ExpiresByType image/jpeg "access plus 1 year"
+  ExpiresByType image/png "access plus 1 year"
+  ExpiresByType image/gif "access plus 1 year"
+  ExpiresByType image/svg+xml "access plus 1 year"
+  
+  # CSS 和 JavaScript 缓存 1 年
+  ExpiresByType text/css "access plus 1 year"
+  ExpiresByType application/javascript "access plus 1 year"
+  ExpiresByType application/json "access plus 1 year"
+  
+  # 字体文件缓存 1 年
+  ExpiresByType font/woff "access plus 1 year"
+  ExpiresByType font/woff2 "access plus 1 year"
+  ExpiresByType font/ttf "access plus 1 year"
+  ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
+  
+  # HTML 不缓存
+  ExpiresByType text/html "access plus 0 seconds"
+</IfModule>
+
+# 安全头设置
+<IfModule mod_headers.c>
+  # X-Frame-Options
+  Header always set X-Frame-Options "SAMEORIGIN"
+  
+  # X-Content-Type-Options
+  Header always set X-Content-Type-Options "nosniff"
+  
+  # X-XSS-Protection
+  Header always set X-XSS-Protection "1; mode=block"
+  
+  # Content-Security-Policy(根据实际情况调整)
+  Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:"
+</IfModule>
+
+# 禁止访问隐藏文件
+<FilesMatch "^\.">
+  Order allow,deny
+  Deny from all
+</FilesMatch>
+
+# 禁止访问特定文件
+<FilesMatch "(\.git|\.svn)">
+  Order allow,deny
+  Deny from all
+</FilesMatch>
+
+# 错误页面(可选)
+ErrorDocument 404 /index.html
+

+ 630 - 0
deploy/DEPLOYMENT_GUIDE.md

@@ -0,0 +1,630 @@
+# 面试管理系统 - 部署指南
+
+## 📋 目录
+
+- [前置准备](#前置准备)
+- [环境配置](#环境配置)
+- [构建打包](#构建打包)
+- [部署方式](#部署方式)
+- [验证测试](#验证测试)
+- [维护更新](#维护更新)
+- [常见问题](#常见问题)
+
+---
+
+## 前置准备
+
+### 1. 环境检查清单
+
+**服务器环境要求**
+- ✅ Linux/Windows Server
+- ✅ Node.js >= 16.0.0
+- ✅ Nginx >= 1.18
+- ✅ 后端服务正常运行
+- ✅ 数据库配置正确
+
+**开发环境(本地构建)**
+```bash
+# 检查 Node.js 版本
+node -v
+
+# 检查 npm 版本  
+npm -v
+
+# 检查项目依赖
+npm list --depth=0
+```
+
+### 2. 获取代码
+
+```bash
+# 从仓库克隆代码
+git clone https://your-repo-url.git
+cd interview_web
+
+# 或使用已有代码
+cd /path/to/interview_web
+```
+
+### 3. 准备部署目录
+
+```bash
+# 创建部署目录
+mkdir -p /var/www/interview_web
+chmod 755 /var/www/interview_web
+```
+
+---
+
+## 环境配置
+
+### 1. 安装依赖
+
+```bash
+# 进入项目目录
+cd interview_web
+
+# 安装依赖(推荐使用 npm ci 保证版本一致)
+npm ci
+
+# 或手动安装
+npm install
+```
+
+**注意**:
+- 首次安装可能需要 3-5 分钟
+- 如果安装失败,尝试清除缓存:`npm cache clean --force`
+
+### 2. 配置环境变量
+
+#### 开发环境(.env.development)
+```env
+# API 地址
+VITE_API_URL=http://localhost:8000
+
+# 公共路径
+VITE_PUBLIC_PATH=/
+
+# 端口号
+VITE_PORT=8080
+
+# 构建输出目录
+VITE_OUTPUT_DIR=dist
+```
+
+#### 生产环境(.env.production)
+```env
+# API 地址(替换为实际后端地址)
+VITE_API_URL=https://api.yourdomain.com
+
+# 公共路径
+VITE_PUBLIC_PATH=/
+
+# 端口号(一般不需要,用于本地预览)
+VITE_PORT=443
+```
+
+#### 本地生产环境(.env.local_prod)
+```env
+# 本地测试用生产环境
+VITE_API_URL=http://localhost:8000
+VITE_PUBLIC_PATH=/
+```
+
+**配置步骤**:
+1. 复制环境变量模板
+2. 根据实际情况修改配置
+3. 确保后端 API 地址正确
+4. 检查跨域配置
+
+---
+
+## 构建打包
+
+### 1. 构建生产版本
+
+```bash
+# 标准生产构建
+npm run build
+
+# 本地生产构建(用于本地验证)
+npm run build:local
+```
+
+### 2. 构建输出
+
+构建完成后,在 `dist/` 目录下会生成以下文件:
+
+```
+dist/
+├── index.html              # 入口文件
+├── assets/                 # 静态资源
+│   ├── *.js               # JavaScript 文件
+│   ├── *.css              # 样式文件
+│   └── *.png              # 图片资源
+└── favicon.ico            # 网站图标
+```
+
+**构建信息**:
+- 总文件大小:约 5-10 MB
+- JS 文件:已压缩和代码分割
+- CSS 文件:已压缩和合并
+- 图片:已优化
+
+### 3. 本地验证
+
+```bash
+# 安装 http-server 用于测试
+npm install -g http-server
+
+# 在 dist 目录启动测试服务器
+cd dist
+http-server -p 8080
+
+# 访问 http://localhost:8080 进行测试
+```
+
+**验证项目**:
+- ✅ 页面正常加载
+- ✅ 路由跳转正常
+- ✅ API 请求正常
+- ✅ 样式显示正常
+- ✅ 无控制台错误
+
+---
+
+## 部署方式
+
+### 方式一:Nginx 静态部署(推荐)
+
+#### 1. 复制文件到服务器
+
+```bash
+# 方法一:使用 SCP
+scp -r dist/* user@server:/var/www/interview_web/
+
+# 方法二:使用 rsync
+rsync -avz dist/ user@server:/var/www/interview_web/
+
+# 方法三:在服务器上使用 Git
+git pull origin master
+npm run build
+cp -r dist/* /var/www/interview_web/
+```
+
+#### 2. 配置 Nginx
+
+创建或编辑配置文件 `/etc/nginx/sites-available/interview_web`:
+
+```nginx
+server {
+    listen 80;
+    server_name yourdomain.com www.yourdomain.com;
+    root /var/www/interview_web;
+    index index.html;
+
+    # 字符集设置
+    charset utf-8;
+
+    # 日志设置
+    access_log /var/log/nginx/interview_web.access.log;
+    error_log /var/log/nginx/interview_web.error.log;
+
+    # Vue Router 历史模式支持
+    location / {
+        try_files $uri $uri/ /index.html;
+    }
+
+    # API 代理
+    location /api {
+        proxy_pass http://127.0.0.1:8000;
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto $scheme;
+        
+        # 超时设置
+        proxy_connect_timeout 300;
+        proxy_send_timeout 300;
+        proxy_read_timeout 300;
+    }
+
+    # 静态资源缓存
+    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+        expires 1y;
+        add_header Cache-Control "public, immutable";
+    }
+
+    # Gzip 压缩
+    gzip on;
+    gzip_vary on;
+    gzip_min_length 1024;
+    gzip_types text/plain text/css text/xml text/javascript 
+               application/json application/javascript application/xml+rss 
+               application/rss+xml font/truetype font/opentype 
+               application/vnd.ms-fontobject image/svg+xml;
+
+    # 禁止访问隐藏文件
+    location ~ /\. {
+        deny all;
+        access_log off;
+        log_not_found off;
+    }
+}
+```
+
+#### 3. 启用站点
+
+```bash
+# 创建软链接
+sudo ln -s /etc/nginx/sites-available/interview_web /etc/nginx/sites-enabled/
+
+# 测试配置
+sudo nginx -t
+
+# 重启 Nginx
+sudo systemctl reload nginx
+
+# 或
+sudo service nginx restart
+```
+
+#### 4. 配置 HTTPS(可选但推荐)
+
+```bash
+# 使用 Let's Encrypt 免费证书
+sudo apt-get install certbot python3-certbot-nginx
+
+# 获取证书
+sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
+
+# 证书会自动续期,也可以手动测试
+sudo certbot renew --dry-run
+```
+
+### 方式二:Docker 部署
+
+#### 1. 创建 Dockerfile
+
+```dockerfile
+# 构建阶段
+FROM node:16-alpine AS builder
+
+WORKDIR /app
+
+# 复制依赖文件
+COPY package*.json ./
+
+# 安装依赖
+RUN npm ci --only=production
+
+# 复制源代码
+COPY . .
+
+# 构建
+RUN npm run build
+
+# 生产阶段
+FROM nginx:alpine
+
+# 复制构建产物
+COPY --from=builder /app/dist /usr/share/nginx/html
+
+# 复制 Nginx 配置
+COPY deploy/nginx.conf /etc/nginx/conf.d/default.conf
+
+# 暴露端口
+EXPOSE 80
+
+# 启动 Nginx
+CMD ["nginx", "-g", "daemon off;"]
+```
+
+#### 2. 创建 docker-compose.yml
+
+```yaml
+version: '3.8'
+
+services:
+  frontend:
+    build: .
+    ports:
+      - "80:80"
+    volumes:
+      - ./nginx.conf:/etc/nginx/conf.d/default.conf
+    restart: unless-stopped
+    depends_on:
+      - backend
+
+  backend:
+    image: django-backend:latest
+    ports:
+      - "8000:8000"
+    environment:
+      - DATABASE_URL=mysql://user:password@db:3306/dbname
+    restart: unless-stopped
+
+  db:
+    image: mysql:8.0
+    environment:
+      - MYSQL_ROOT_PASSWORD=password
+      - MYSQL_DATABASE=dbname
+    volumes:
+      - mysql_data:/var/lib/mysql
+    restart: unless-stopped
+
+volumes:
+  mysql_data:
+```
+
+#### 3. 启动容器
+
+```bash
+# 构建并启动
+docker-compose up -d
+
+# 查看日志
+docker-compose logs -f frontend
+
+# 停止服务
+docker-compose down
+```
+
+### 方式三:Apache 部署
+
+#### 1. 配置 .htaccess
+
+在 `dist` 目录下创建 `.htaccess` 文件:
+
+```apache
+<IfModule mod_rewrite.c>
+  RewriteEngine On
+  RewriteBase /
+  RewriteRule ^index\.html$ - [L]
+  RewriteCond %{REQUEST_FILENAME} !-f
+  RewriteCond %{REQUEST_FILENAME} !-d
+  RewriteRule . /index.html [L]
+</IfModule>
+```
+
+#### 2. 配置虚拟主机
+
+```apache
+<VirtualHost *:80>
+    ServerName yourdomain.com
+    DocumentRoot /var/www/interview_web
+    
+    <Directory /var/www/interview_web>
+        AllowOverride All
+        Require all granted
+    </Directory>
+    
+    ProxyPass /api http://127.0.0.1:8000/api
+    ProxyPassReverse /api http://127.0.0.1:8000/api
+</VirtualHost>
+```
+
+---
+
+## 验证测试
+
+### 1. 功能测试清单
+
+#### 基础功能
+- [ ] 页面正常加载
+- [ ] 登录功能正常
+- [ ] 路由跳转正常
+- [ ] 菜单显示正常
+
+#### 权限功能
+- [ ] 权限验证正常
+- [ ] 无权限操作被阻止
+- [ ] 按钮权限控制正确
+
+#### API 功能
+- [ ] API 请求正常
+- [ ] 数据获取正常
+- [ ] 数据提交正常
+- [ ] 文件上传正常
+
+#### 界面功能
+- [ ] 样式显示正常
+- [ ] 响应式布局正常
+- [ ] 图表显示正常
+- [ ] 动画效果正常
+
+### 2. 性能测试
+
+```bash
+# 使用 Chrome DevTools
+# 1. 打开开发者工具
+# 2. Network 面板查看加载时间
+# 3. Performance 面板查看性能指标
+
+# 期望指标:
+# - 首屏加载时间 < 3秒
+# - 页面交互响应 < 100ms
+# - 资源文件已压缩
+```
+
+### 3. 安全检查
+
+- [ ] HTTPS 已启用
+- [ ] 敏感信息未暴露
+- [ ] CORS 配置正确
+- [ ] XSS 防护已开启
+- [ ] CSRF 防护已开启
+
+---
+
+## 维护更新
+
+### 1. 更新流程
+
+```bash
+# 1. 备份当前版本
+cp -r /var/www/interview_web /var/www/interview_web.backup
+
+# 2. 拉取最新代码
+cd /path/to/interview_web
+git pull origin master
+
+# 3. 安装新依赖(如有)
+npm install
+
+# 4. 重新构建
+npm run build
+
+# 5. 更新文件
+cp -r dist/* /var/www/interview_web/
+
+# 6. 清除缓存
+sudo nginx -s reload
+```
+
+### 2. 回滚版本
+
+```bash
+# 如果需要回滚
+rm -rf /var/www/interview_web/*
+cp -r /var/www/interview_web.backup/* /var/www/interview_web/
+sudo nginx -s reload
+```
+
+### 3. 监控与日志
+
+```bash
+# 查看 Nginx 访问日志
+tail -f /var/log/nginx/interview_web.access.log
+
+# 查看错误日志
+tail -f /var/log/nginx/interview_web.error.log
+
+# 查看服务器资源
+htop
+# 或
+top
+```
+
+### 4. 定期维护
+
+- **每周**:检查日志,查看错误信息
+- **每月**:更新依赖,安全补丁
+- **每季度**:性能优化,代码审查
+
+---
+
+## 常见问题
+
+### Q1: 页面白屏怎么办?
+
+**可能原因**:
+- JS 文件路径错误
+- 环境变量配置错误
+- 浏览器缓存问题
+
+**解决方案**:
+```bash
+# 1. 检查构建输出
+ls -la dist/assets/
+
+# 2. 检查 Nginx 配置
+sudo nginx -t
+
+# 3. 清除浏览器缓存
+# Ctrl + Shift + Delete
+
+# 4. 检查控制台错误
+# F12 打开开发者工具查看错误信息
+```
+
+### Q2: API 请求 404
+
+**可能原因**:
+- 后端服务未启动
+- 代理配置错误
+- API 地址配置错误
+
+**解决方案**:
+```bash
+# 1. 检查后端服务
+curl http://127.0.0.1:8000/api/test/
+
+# 2. 检查代理配置
+sudo cat /etc/nginx/sites-available/interview_web | grep proxy_pass
+
+# 3. 检查环境变量
+cat .env.production
+```
+
+### Q3: 静态资源加载失败
+
+**可能原因**:
+- 文件权限问题
+- Nginx 配置错误
+- 文件路径错误
+
+**解决方案**:
+```bash
+# 1. 检查文件权限
+ls -la /var/www/interview_web/assets/
+
+# 2. 修改文件权限
+sudo chmod -R 755 /var/www/interview_web/
+
+# 3. 修改文件所有者
+sudo chown -R www-data:www-data /var/www/interview_web/
+```
+
+### Q4: 路由刷新 404
+
+**可能原因**:
+- Nginx 未配置 try_files
+- Apache 未启用 mod_rewrite
+
+**解决方案**:
+```nginx
+# 确保 Nginx 配置中有:
+location / {
+    try_files $uri $uri/ /index.html;
+}
+```
+
+### Q5: 构建时间过长
+
+**解决方案**:
+```bash
+# 1. 使用缓存加速
+npm ci
+
+# 2. 使用并行构建
+export NODE_OPTIONS="--max-old-space-size=4096"
+
+# 3. 减少不必要的依赖
+npm prune
+```
+
+### Q6: 跨域问题
+
+**解决方案**:
+```nginx
+# 在 Nginx 配置中添加:
+add_header 'Access-Control-Allow-Origin' '*';
+add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
+add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
+```
+
+---
+
+## 📞 技术支持
+
+如有其他问题,请联系:
+- 📧 邮箱:support@example.com
+- 💬 社区:[社区地址]
+- 📖 文档:[文档地址]
+
+---
+
+**最后更新**:2024年  
+**文档版本**:v1.0
+

+ 121 - 0
deploy/README.md

@@ -0,0 +1,121 @@
+# 部署文件目录
+
+本目录包含项目部署所需的所有配置文件和脚本。
+
+## 📁 文件说明
+
+### 配置文件
+- `nginx.conf` - Nginx 配置文件模板
+- `.htaccess` - Apache 配置文件
+- `DEPLOYMENT_GUIDE.md` - 详细部署指南
+
+### 脚本文件
+- `deploy.sh` - 快速部署脚本
+
+## 🚀 快速使用
+
+### 方法一:使用部署脚本
+
+```bash
+# 1. 给脚本添加执行权限
+chmod +x deploy.sh
+
+# 2. 运行部署脚本
+./deploy.sh
+```
+
+### 方法二:手动部署
+
+#### 1. 构建项目
+```bash
+npm install
+npm run build
+```
+
+#### 2. 配置 Nginx
+```bash
+# 复制配置文件
+sudo cp nginx.conf /etc/nginx/sites-available/interview_web
+
+# 修改配置(替换域名和路径)
+sudo nano /etc/nginx/sites-available/interview_web
+
+# 启用站点
+sudo ln -s /etc/nginx/sites-available/interview_web /etc/nginx/sites-enabled/
+
+# 测试配置
+sudo nginx -t
+
+# 重载 Nginx
+sudo systemctl reload nginx
+```
+
+#### 3. 复制文件
+```bash
+# 复制构建文件到服务器
+sudo cp -r dist/* /var/www/interview_web/
+
+# 设置权限
+sudo chown -R www-data:www-data /var/www/interview_web/
+```
+
+## 📖 详细说明
+
+请参考 [DEPLOYMENT_GUIDE.md](./DEPLOYMENT_GUIDE.md) 获取完整的部署步骤和故障排查指南。
+
+## 🔧 配置说明
+
+### Nginx 配置要点
+
+1. **域名配置**
+   - 修改 `server_name` 为您的域名
+   - 确保域名 DNS 解析正确
+
+2. **API 代理**
+   - 修改 `proxy_pass` 为后端服务地址
+   - 确保后端服务正常运行
+
+3. **HTTPS 配置**
+   - 取消 SSL 相关注释
+   - 配置证书路径
+
+### Apache 配置要点
+
+1. **启用 mod_rewrite**
+   ```bash
+   sudo a2enmod rewrite
+   sudo systemctl restart apache2
+   ```
+
+2. **复制 .htaccess**
+   ```bash
+   cp .htaccess dist/
+   ```
+
+## ⚠️ 注意事项
+
+1. 部署前确保:
+   - ✅ Node.js >= 16.0.0
+   - ✅ 后端服务正常运行
+   - ✅ 数据库配置正确
+   - ✅ 域名解析正确
+
+2. 部署后验证:
+   - ✅ 页面正常加载
+   - ✅ API 请求正常
+   - ✅ 登录功能正常
+   - ✅ 无控制台错误
+
+3. 安全建议:
+   - ✅ 使用 HTTPS
+   - ✅ 配置防火墙
+   - ✅ 定期更新依赖
+   - ✅ 监控日志
+
+## 📞 技术支持
+
+如有问题,请查看:
+- [项目部署指南](./DEPLOYMENT_GUIDE.md)
+- [项目 README](../README.md)
+- [开发者指南](../DEVELOPER_GUIDE.md)
+

+ 140 - 0
deploy/deploy.sh

@@ -0,0 +1,140 @@
+#!/bin/bash
+
+# 面试管理系统 - 快速部署脚本
+# 使用方法: ./deploy.sh
+
+set -e  # 遇到错误立即退出
+
+# 颜色输出
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+NC='\033[0m' # No Color
+
+# 打印带颜色的消息
+print_info() {
+    echo -e "${GREEN}[INFO]${NC} $1"
+}
+
+print_warn() {
+    echo -e "${YELLOW}[WARN]${NC} $1"
+}
+
+print_error() {
+    echo -e "${RED}[ERROR]${NC} $1"
+}
+
+# 检查命令是否存在
+check_command() {
+    if ! command -v $1 &> /dev/null; then
+        print_error "$1 未安装,请先安装"
+        exit 1
+    fi
+}
+
+# 检查环境
+print_info "检查环境..."
+check_command node
+check_command npm
+check_command nginx
+
+# 获取 Node.js 版本
+NODE_VERSION=$(node -v)
+print_info "Node.js 版本: $NODE_VERSION"
+
+# 检查 Node.js 版本
+if [[ $(echo $NODE_VERSION | cut -d'.' -f1 | sed 's/v//') -lt 16 ]]; then
+    print_error "Node.js 版本需要 >= 16.0.0"
+    exit 1
+fi
+
+# 获取当前目录
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+PROJECT_DIR="$( cd "$SCRIPT_DIR/.." && pwd )"
+
+print_info "项目目录: $PROJECT_DIR"
+
+# 询问是否继续
+read -p "是否继续部署? (y/n): " -n 1 -r
+echo
+if [[ ! $REPLY =~ ^[Yy]$ ]]; then
+    print_info "部署已取消"
+    exit 0
+fi
+
+# 进入项目目录
+cd "$PROJECT_DIR"
+
+# 备份现有构建
+if [ -d "dist" ]; then
+    print_info "备份现有构建..."
+    if [ -d "dist.backup" ]; then
+        rm -rf dist.backup
+    fi
+    cp -r dist dist.backup
+    print_info "备份完成"
+fi
+
+# 安装依赖
+print_info "安装依赖..."
+npm ci
+
+# 构建项目
+print_info "构建项目..."
+npm run build
+
+# 检查构建结果
+if [ ! -d "dist" ] || [ -z "$(ls -A dist)" ]; then
+    print_error "构建失败,dist 目录为空"
+    exit 1
+fi
+
+print_info "构建完成"
+
+# 询问是否部署到服务器
+read -p "是否部署到服务器? (y/n): " -n 1 -r
+echo
+if [[ $REPLY =~ ^[Yy]$ ]]; then
+    # 部署路径
+    DEPLOY_PATH="/var/www/interview_web"
+    
+    # 检查部署路径
+    if [ ! -d "$DEPLOY_PATH" ]; then
+        print_warn "部署路径不存在,创建中..."
+        sudo mkdir -p "$DEPLOY_PATH"
+        sudo chown -R $USER:www-data "$DEPLOY_PATH"
+    fi
+    
+    # 备份服务器文件
+    if [ -d "$DEPLOY_PATH" ] && [ "$(ls -A $DEPLOY_PATH)" ]; then
+        print_info "备份服务器文件..."
+        sudo cp -r "$DEPLOY_PATH" "${DEPLOY_PATH}.backup.$(date +%Y%m%d_%H%M%S)"
+    fi
+    
+    # 复制文件
+    print_info "复制文件到 $DEPLOY_PATH ..."
+    sudo rm -rf "$DEPLOY_PATH"/*
+    sudo cp -r dist/* "$DEPLOY_PATH"/
+    sudo chown -R www-data:www-data "$DEPLOY_PATH"
+    
+    print_info "文件复制完成"
+    
+    # 重载 Nginx
+    print_info "重载 Nginx..."
+    sudo nginx -t && sudo systemctl reload nginx
+    
+    print_info "部署完成!"
+    print_info "访问地址: http://yourdomain.com"
+else
+    print_info "跳过服务器部署"
+fi
+
+# 显示构建信息
+print_info "构建信息:"
+echo "  构建目录: dist/"
+echo "  构建时间: $(date)"
+echo "  Node.js 版本: $NODE_VERSION"
+echo "  项目版本: $(cat package.json | grep '"version"' | cut -d'"' -f4)"
+
+print_info "部署脚本执行完成!"
+

+ 106 - 0
deploy/nginx.conf

@@ -0,0 +1,106 @@
+# 面试管理系统 Nginx 配置模板
+
+server {
+    # 监听端口
+    listen 80;
+    # 域名配置(请替换为您的域名)
+    server_name yourdomain.com www.yourdomain.com;
+    
+    # 网站根目录(请替换为实际路径)
+    root /var/www/interview_web;
+    index index.html;
+
+    # 字符集设置
+    charset utf-8;
+
+    # 日志设置
+    access_log /var/log/nginx/interview_web.access.log;
+    error_log /var/log/nginx/interview_web.error.log;
+
+    # Gzip 压缩配置
+    gzip on;
+    gzip_vary on;
+    gzip_min_length 1024;
+    gzip_comp_level 6;
+    gzip_types text/plain text/css text/xml text/javascript 
+               application/json application/javascript application/xml+rss 
+               application/rss+xml font/truetype font/opentype 
+               application/vnd.ms-fontobject image/svg+xml;
+
+    # Vue Router 历史模式支持
+    location / {
+        try_files $uri $uri/ /index.html;
+    }
+
+    # API 代理配置
+    location /api {
+        # 后端服务地址(请修改为实际后端地址)
+        proxy_pass http://127.0.0.1:8000;
+        
+        # 代理头设置
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header X-Forwarded-Proto $scheme;
+        
+        # 超时设置
+        proxy_connect_timeout 300;
+        proxy_send_timeout 300;
+        proxy_read_timeout 300;
+        
+        # 缓冲设置
+        proxy_buffering on;
+        proxy_buffer_size 4k;
+        proxy_buffers 8 4k;
+        proxy_busy_buffers_size 8k;
+        
+        # 不代理错误到客户端
+        proxy_intercept_errors on;
+    }
+
+    # 静态资源缓存配置
+    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+        expires 1y;
+        add_header Cache-Control "public, immutable";
+        
+        # 启用 CORS(如果需要)
+        add_header 'Access-Control-Allow-Origin' '*' always;
+        add_header 'Access-Control-Allow-Methods' 'GET, HEAD, OPTIONS' always;
+        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always;
+    }
+
+    # 禁止访问隐藏文件
+    location ~ /\. {
+        deny all;
+        access_log off;
+        log_not_found off;
+    }
+
+    # 禁止访问特定文件
+    location ~* \.(git|svn|htaccess|htpasswd) {
+        deny all;
+    }
+
+    # 安全头设置
+    add_header X-Frame-Options "SAMEORIGIN" always;
+    add_header X-Content-Type-Options "nosniff" always;
+    add_header X-XSS-Protection "1; mode=block" always;
+
+    # SSL 配置(启用 HTTPS 时取消注释)
+    # listen 443 ssl http2;
+    # ssl_certificate /path/to/cert.pem;
+    # ssl_certificate_key /path/to/key.pem;
+    # ssl_protocols TLSv1.2 TLSv1.3;
+    # ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
+    # ssl_prefer_server_ciphers on;
+    # ssl_session_cache shared:SSL:10m;
+    # ssl_session_timeout 10m;
+}
+
+# HTTP 重定向到 HTTPS(启用 HTTPS 时取消注释)
+# server {
+#     listen 80;
+#     server_name yourdomain.com www.yourdomain.com;
+#     return 301 https://$server_name$request_uri;
+# }
+

+ 89 - 0
docs/INDEX.md

@@ -0,0 +1,89 @@
+# 文档索引
+
+本文档提供所有项目文档的索引和导航。
+
+## 📚 文档概览
+
+### 核心文档
+| 文档 | 描述 | 适用人员 |
+|-----|------|---------|
+| [README.md](../README.md) | 项目总览和快速导航 | 所有人 |
+| [QUICKSTART.md](../QUICKSTART.md) | 快速开始指南 | 新开发者 |
+| [PROJECT_README.md](../PROJECT_README.md) | 项目详细说明 | 所有人 |
+
+### 开发文档
+| 文档 | 描述 | 适用人员 |
+|-----|------|---------|
+| [DEVELOPER_GUIDE.md](../DEVELOPER_GUIDE.md) | 开发者开发指南 | 开发者 |
+| [API_DOCUMENTATION.md](../API_DOCUMENTATION.md) | API 接口文档 | 前后端开发者 |
+
+### 部署文档
+| 文档 | 描述 | 适用人员 |
+|-----|------|---------|
+| [DEPLOYMENT.md](../DEPLOYMENT.md) | 部署指南 | 运维人员 |
+
+### 更新日志
+| 文档 | 描述 | 适用人员 |
+|-----|------|---------|
+| [CHANGELOG.md](../CHANGELOG.md) | 版本更新记录 | 所有人 |
+
+### 功能说明
+| 文档 | 描述 | 适用人员 |
+|-----|------|---------|
+| [CONFIG_AUTO_CREATE_SUMMARY.md](../CONFIG_AUTO_CREATE_SUMMARY.md) | 职位配置功能说明 | 开发者、使用者 |
+| [FIELD_CONFIG_CACHE_README.md](../FIELD_CONFIG_CACHE_README.md) | 缓存功能说明 | 开发者 |
+
+## 🗺️ 阅读路径
+
+### 对于新开发者
+1. 阅读 [QUICKSTART.md](../QUICKSTART.md) - 快速启动
+2. 阅读 [PROJECT_README.md](../PROJECT_README.md) - 了解项目
+3. 阅读 [DEVELOPER_GUIDE.md](../DEVELOPER_GUIDE.md) - 学习开发
+4. 阅读 [API_DOCUMENTATION.md](../API_DOCUMENTATION.md) - 了解接口
+
+### 对于运维人员
+1. 阅读 [PROJECT_README.md](../PROJECT_README.md) - 了解项目
+2. 阅读 [DEPLOYMENT.md](../DEPLOYMENT.md) - 部署指南
+
+### 对于使用者
+1. 阅读 [README.md](../README.md) - 项目总览
+2. 阅读 [PROJECT_README.md](../PROJECT_README.md) - 功能说明
+3. 阅读功能说明文档 - 了解特性
+
+## 📝 文档维护
+
+### 文档更新原则
+- 代码更新时同步更新文档
+- 功能变更时更新相关文档
+- 定期检查文档准确性
+- 删除过时内容
+
+### 文档格式规范
+- 使用 Markdown 格式
+- 标题层级清晰
+- 代码示例完整
+- 截图清晰
+
+## 🔍 快速查找
+
+### 按主题查找
+- **安装配置**:[QUICKSTART.md](../QUICKSTART.md)
+- **开发规范**:[DEVELOPER_GUIDE.md](../DEVELOPER_GUIDE.md)
+- **API 调用**:[API_DOCUMENTATION.md](../API_DOCUMENTATION.md)
+- **部署上线**:[DEPLOYMENT.md](../DEPLOYMENT.md)
+- **版本更新**:[CHANGELOG.md](../CHANGELOG.md)
+
+### 按问题查找
+- **如何快速启动?** → [QUICKSTART.md](../QUICKSTART.md)
+- **如何开发新功能?** → [DEVELOPER_GUIDE.md](../DEVELOPER_GUIDE.md)
+- **如何调用 API?** → [API_DOCUMENTATION.md](../API_DOCUMENTATION.md)
+- **如何部署?** → [DEPLOYMENT.md](../DEPLOYMENT.md)
+- **功能如何实现?** → 功能说明文档
+
+## 📞 反馈与贡献
+
+文档问题请提交 Issue 或联系维护团队。
+
+**文档版本**:v1.0  
+**最后更新**:2024
+

+ 1 - 9
index.html

@@ -17,15 +17,7 @@
 	</head>
 	<body>
     <div id="app"></div>
-    <script>
-        var _hmt = _hmt || [];
-        (function() {
-          var hm = document.createElement("script");
-          hm.src = "https://hm.baidu.com/hm.js?9ba8fc809b5584167a2fb9b31bb3970c";
-          var s = document.getElementsByTagName("script")[0];
-          s.parentNode.insertBefore(hm, s);
-        })();
-    </script>
+  
     <script type="module" src="/src/main.ts"></script>
 	</body>
 </html>