# 8-校园点餐系统 - 功能说明

# 项目概述

本项目是"校园点餐系统"的 Django 3.2 + Vue 3 前后端分离工程,目前处于基础框架搭建阶段。项目已落地一套通用的后台管理框架:后端按功能拆分为多个独立 Django App(admin 管理员、user 普通用户、pet 示例宠物信息、test 代码生成器测试模块),提供账号体系、统一响应格式、自定义 JWT 认证、Token 拦截中间件、文件上传与 Swagger 接口文档;前端提供登录、注册、找回密码、个人信息维护以及后台的首页、管理员管理、用户管理、宠物分类管理页面,前台与后台使用两套独立布局。点餐相关的业务模块(档口、菜品、购物车、订单等)尚未在代码中实现,CodeGenerator 代码生成器已接入,用于后续依据点餐业务数据表批量生成对应模块的前后端代码。


# 项目概览

# ✨ 创新点

# 1. 模块化独立 App 架构

  • 要点:apps/ 下每个功能模块独立为一个 Django App,各自持有 models.py、Serializer、views.py、urls.py,当前包含 admin、user、pet、test 四个业务模块与仅存放工具类的 common。
  • 要点:项目级 project/urls.py 以 include 方式挂载各模块前缀(common/、admin/、user/、pet/、test/),模块之间互不耦合,新增业务只需新增 App 并挂载路由。
  • 要点:管理员模块使用自定义 AppConfig(apps/admin/apps.py,label = 'custom_admin'),规避与 django.contrib.admin 的 App label 冲突(settings.py 中已注释说明该处理方式)。

# 2. 自定义 JWT 认证体系

  • 要点:基于 PyJWT 2.7.0 实现(utils/jwt_auth.py),采用 HS256 算法,签名密钥直接复用 Django 的 SECRET_KEY。
  • 要点:Token 有效期默认 60*24*30 分钟(30 天),载荷中写入 id、username、type(type 为用户类型标识:ADMIN 或 USER)。
  • 要点:不使用标准的 Authorization 请求头,而是通过自定义的 token 请求头传递,并在 settings.py 的 CORS_ALLOW_HEADERS 中显式放行 token。

# 3. 中间件统一鉴权与用户上下文注入

  • 要点:middleware/TokenInterceptorMiddleware.py 对所有请求做统一拦截,白名单包括精确匹配的 /common/login、/common/register、/common/retrievePassword 与前缀匹配的 /uploads/、/static/、/swagger/、/django-admin/。
  • 要点:Token 解析成功后把 id、username、type 注入 request 对象,视图通过 request.id、request.type 识别当前登录用户与角色。
  • 要点:缺少 Token 或 Token 校验失败时,直接返回 ResponseMessage.jump(401, "访问接口未授权,请重新登录")。

# 4. Java 代码生成器一键生成 CRUD

  • 要点:CodeGenerator 提供 DjangoCodeGenerator、VueCodeGenerator、BatchCodeGenerator 三个生成器与 Velocity 模板(templates/page.vue.vm),可依据数据库表结构一次性生成后端与前端代码。
  • 要点:CodeGeneratorMain 中集中配置数据库连接与待生成的表清单(当前配置为生成 test 表到 test 模块),路径由 DjangoProjectPathConfig 统一计算(Django 的 apps 目录与 Vue 的 views 目录)。
  • 要点:现有 pet 模块即为生成产物,其文件形态具有典型的生成器特征——PetSerializer.py(fields = "__all__" + read_only_fields)、views.py 中 Page/Add/Update/Delete/Detail/List 六个标准视图、urls.py 中 page/list/add/update/delete/detail 六个标准路由。

# 5. 统一响应格式与业务异常体系

  • 要点:apps/common/ResponseMessage.py 统一封装 {"code": ..., "msg": ..., "data": ...} 响应体,提供 success、failed、other、jump 四个静态方法。
  • 要点:utils/custom_exception.py 定义了 CustomException 基类及 NotFoundException、PermissionDeniedException、UnauthorizedException、ValidationException、BusinessException 五类业务异常(分别对应 404/403/401/400/409)。
  • 要点:utils/exception_handler.py 提供全局异常处理器,按"自定义异常 → Django 内置异常 → DRF 异常 → 未知异常"四级顺序统一转换为标准响应体(当前 settings.py 的 REST_FRAMEWORK 中尚未配置 EXCEPTION_HANDLER,该处理器已实现但未启用)。

# ✨ 项目亮点

# 一、 业务功能亮点

  1. 账号体系:注册(用户名重复校验)、登录(按角色分别查询管理员表与用户表)、找回密码(按手机号重置密码)、完善的支持角色区分与 Token 下发。
  2. 个人信息与密码维护:EditCurrentUser.vue 修改头像、邮箱、电话;EditPassword.vue 校验旧密码后修改新密码,修改成功后清空本地登录状态并要求重新登录。
  3. 管理员与用户管理:后台提供管理员管理与普通用户管理两个列表页,均支持分页查询、按用户名/手机号搜索、新增、编辑、单条删除与批量删除(带确认弹窗),并提供"重置密码"高级操作。
  4. 示例业务模块:以"宠物分类/宠物信息"作为示例模块,提供完整的增删改查、分页、名称模糊搜索能力,可作为后续点餐业务模块的代码模板。

# 二、 技术实现亮点

  1. 现代化前端技术栈:采用 Vue ^3.4.29 + Element Plus ^2.8.4 + Vite ^5.3.1 + Axios ^1.7.5 + Pinia ^2.2.2 + Vue Router ^4.4.3,另在 package.json 中声明 ECharts ^5.5.1、@wangeditor/editor ^5.1.14、crypto-js ^4.1.1、dayjs ^1.11.13、swiper ^11.1.14、@element-plus/icons-vue ^2.3.1 等依赖。
  2. 稳定可靠的后端架构:Django ~=3.2(settings.py 文件头显示由 Django 3.2.20 生成)+ Django REST Framework ~=3.14.0,认证使用 PyJWT ~=2.7.0,接口文档使用 drf-yasg 1.21.7,跨域使用 django-cors-headers 4.2.0,数据库驱动为 PyMySQL 1.1.0 与 mysqlclient 2.1.1。
  3. 完善的数据库设计:3 张核心数据表(admin、user、pet),采用逻辑外键设计(pet.category_id、pet.user_id 只存关联 ID,无物理外键约束),主键统一为 bigint 自增,所有模型均为 managed = False(由 SQL 脚本建表),Pet 表的 create_time 由 pre_save 信号在新增时自动写入。
  4. 代码生成器支持:集成 Java 版代码生成器(CodeGenerator),配置数据库连接与表清单后即可批量生成 Django 的 models.py/Serializer/views.py/urls.py 与 Vue3 管理页面,显著降低新增业务模块的重复编码量。
  5. 安全性设计:密码在数据库中为明文存储(admin、user 表字段及初始化 SQL 均为明文,apps/user/views.py 中保留的 md5 加密代码处于注释状态、未启用),登录时直接比对;Token 采用 HS256 签名并设置 30 天有效期;TokenInterceptorMiddleware 对非白名单接口统一拦截;涉及他人数据的操作做了二次校验(updatePassword、updateCurrentUser 校验只能操作本人,resetPassword 校验操作者必须为 ADMIN);跨域仅放行 token 与 content-type 请求头。

# 三、 用户体验亮点

  1. 双界面设计:前台 FrontLayout.vue 采用顶部横向导航(首页、个人中心),面向普通用户;后台 AdminLayout.vue 采用左侧深色侧边栏导航(首页、管理员管理、用户管理、宠物分类管理),面向管理员;两者均带右上角用户下拉菜单(个人信息、修改密码、退出登录)。
  2. 响应式布局:前台布局使用 el-row/el-col 栅格,并通过 @media (max-width: 768px) 媒体查询在小屏下隐藏用户名文字、菜单文字并调整搜索框宽度;个人中心页面按 :xs/:sm/:md 断点自适应。
  3. 交互优化:
    • 错误提示:utils/http.js 响应拦截器按业务 code(200/401/409/500)与 HTTP 状态码(401/404/500/502/503)分别弹出 ElMessage 提示,网络异常单独提示"网络连接失败,请检查网络";请求超时时间设置为 5000ms(源码中未使用 loading 遮罩,无 v-loading)。
    • 重要操作的确认弹窗:删除与批量删除均使用 ElMessageBox.confirm 二次确认,提示"此操作将永久删除 ID 为 [...] 的数据, 是否继续?",取消时提示"已取消删除"并清空表格选中项。
    • 及时的全局消息提示:新增、修改、删除、登录、注册、重置密码等操作成功后统一使用 ElMessage 反馈(如"操作成功"、"登录成功,正在跳转"),新增账号时提示"新增用户密码默认为:123456"。
    • 严谨的前后端表单验证:前端表单通过 el-form 的 rules 与 prop 做必填校验(用户名、昵称、分类名称、分类描述等),校验失败弹出"验证失败,请检查必填项!";后端由 DRF ModelSerializer 做反序列化校验,校验不通过返回统一失败响应。
  4. 文件上传体验:统一使用 components/MyUpload.vue 组件,支持 imageCard/image/video/audio/file 五种类型;limit = 1 时再次上传自动替换(提示"点击替换");图片点击可放大预览(表格中使用 :preview-teleported="true"),视频/音频弹窗播放,普通文件直接下载;上传请求自动携带 token 请求头。

# 管理员

# 系统管理

首页:/admin/home,对应 views/admin/Home.vue,当前为占位页面(页面内容仅为"首页"文本)。

管理员管理:对应 views/admin/Admin.vue,页面菜单名为"管理员管理";支持按用户名、手机号条件搜索与分页浏览(分页参数 pageNum),可新增账号(不填密码时后端默认写入 123456,前端提示"新增用户密码默认为:123456")、编辑账号(编辑时用户名输入框禁用)、单条删除、勾选后批量删除,并可通过"重置密码"按钮将该账号密码重置为 123456。对应后端接口 /admin/page、/admin/list、/admin/add、/admin/update、/admin/delete(批量)、/admin/detail(apps/admin/views.py,接口内部使用 User 模型读写账号数据)。

普通用户管理:对应 views/admin/User.vue,页面菜单名为"用户管理";功能与管理员管理一致——条件搜索、分页、新增、编辑、单条删除、批量删除、重置密码(重置时请求参数为 type=USER)。前端调用的接口路径为 /user/page、/user/add、/user/update、/user/delete(后端 apps/user/urls.py 提供的实际路由为 page、list、save、delete、register、login)。

# 示例模块

宠物类型:后台菜单"宠物分类管理"指向 /admin/pet 路由,加载 views/admin/PetCategory.vue;页面提供分类的名称模糊搜索、分页、新增、编辑、单条删除与批量删除(带确认弹窗),表格列为 ID、分类名称、分类描述,表单项为分类名称、分类描述(均必填)。该页面调用的接口为 /pet/page、/pet/add、/pet/update、/pet/delBatch。

宠物信息:对应 views/admin/Pet.vue 与后端 apps/pet 模块,字段涵盖宠物名称、分类 ID、年龄(月)、性别、品种、毛色、健康状况、宠物照片、详细描述、来源类型、发布用户 ID、创建时间;提供按宠物名称模糊搜索、分页查询、新增、编辑、单条删除与批量删除。后端提供 /pet/page(分页 + name 模糊查询)、/pet/list(不分页全量)、/pet/add、/pet/update、/pet/delete(批量,请求体为 ID 数组)、/pet/detail 六个接口。

# 普通用户

# 账号功能

注册/登录:views/Register.vue 提供注册页面,表单包含头像上传(MyUpload 组件)、用户类型(管理员/用户下拉选择)、用户名、密码、昵称,提交至 PUT /common/register,后端先校验用户名是否重复(重复返回"用户名重复"),再经 UserSerializer 校验保存并返回用户数据;views/Login.vue 提供登录页面,表单为用户名、密码与用户类型下拉(选项为"管理员"ADMIN、"用户"USER),提交至 POST /common/login,登录成功后把 token 与用户信息写入 localStorage,普通用户跳转前台 /,管理员跳转后台 /admin;登录页同时提供"没有账号?去注册"与"忘记密码?"入口。

找回密码:views/RetrievePassword.vue,表单为用户类型、手机号、验证码、新密码,提交至 POST /common/retrievePassword;后端按手机号(contact 字段)查找用户,未注册时返回"该手机号未注册",否则更新密码(源码中验证码校验为待办项,未实际校验)。

# 个人中心

个人信息:前台菜单"个人中心"(/personalCenter,默认跳转 /personalCenter/profile)下的 views/front/personalCenter/Profile.vue 只读展示用户名、昵称、邮箱、联系方式(数据取自本地登录信息);views/EditCurrentUser.vue 为可编辑页面,支持更换头像(MyUpload 组件)并修改邮箱、电话,提交至 POST /common/updateCurrentUser,成功后重新拉取 GET /common/currentUser 并刷新本地缓存的当前用户信息。

修改密码:views/EditPassword.vue,表单为旧密码与新密码,提交至 POST /common/updatePassword;后端校验是否本人操作(user_id != request.id 时返回"无权修改其他用户密码")并比对旧密码(不一致返回"原密码错误"),修改成功后前端清空本地登录状态并跳转登录页。


# 功能权限对照表

功能模块 管理员 普通用户
登录 / 注册 ✓ ✓
找回密码 ✓ ✓
个人信息查看与修改 ✓(仅自己的) ✓(仅自己的)
修改密码 ✓(仅自己的) ✓(仅自己的)
重置密码(重置他人密码) ✓ -
后台首页 ✓ -
管理员管理 ✓ -
普通用户管理 ✓ -
宠物分类管理 ✓ -
宠物信息(后台页面文件存在) 页面文件存在但未注册路由 -
前台首页 - ✓
个人中心 - ✓

说明:角色差异由前端布局控制——AdminLayout.vue 中若当前用户 type === 'USER' 则跳转前台 /,FrontLayout.vue 中若当前用户 type !== 'USER' 则跳转后台 /admin;后端接口未逐接口做角色校验,仅 resetPassword 校验操作者必须为 ADMIN。


# 默认账号

初始化数据来自 project/sql/sql.sql(密码在该脚本中为明文)。

# 管理员

用户名: admin
密码: 123456
1
2

(昵称:系统管理员;联系方式:13800000000;邮箱:admin@example.com)

# 测试用户

用户名: user
密码: 123456
1
2

(昵称:管理员;联系方式:13800000000;邮箱:user@qqq.com)


# 核心业务流程

# 用户注册流程

1. 在注册页填写头像、用户类型(ADMIN / USER)、用户名、密码、昵称,前端做必填校验。
2. 前端调用 PUT /common/register 提交表单。
3. 后端 RegisterAPIView 按 username 查询 user 表,已存在则返回"用户名重复"。
4. 移除请求中的 type 字段后交给 UserSerializer 反序列化校验(校验失败抛异常)。
5. 校验通过写入 user 表,返回注册成功的用户数据。
6. 前端提示"注册成功,正在跳转"并跳转到 /login。
1
2
3
4
5
6

# 登录与 Token 认证流程

1. 登录页选择用户类型(ADMIN / USER),提交 POST /common/login。
2. 后端 LoginAPIView 校验 type 必须为 "ADMIN" 或 "USER"(否则返回"无效的用户类型")。
3. ADMIN 查询 admin 表、USER 查询 user 表,比对明文密码,不一致返回"用户名或者是密码错误"。
4. 调用 utils.jwt_auth.create_token 生成 JWT(HS256,载荷含 id、username、type,有效期 30 天)。
5. 前端把 token 与用户信息写入 localStorage,并按 type 跳转前台 / 或后台 /admin。
6. 后续请求由 utils/http.js 请求拦截器自动在请求头追加 token。
7. TokenInterceptorMiddleware 校验 token:白名单直接放行;校验失败或未携带 token 返回 code = 401,前端拦截器清除 token 并跳回登录页;校验成功则注入 request.id / username / type。
1
2
3
4
5
6
7

# 找回密码与重置密码流程

1. 用户在找回密码页填写用户类型、手机号、验证码、新密码,提交 POST /common/retrievePassword。
2. 后端按 contact(手机号)查询用户,未注册返回"该手机号未注册"。
3. 命中则直接更新该用户的 password 字段并返回成功(验证码校验为待办,未实现)。
4. 管理员在后台列表页点击"重置密码",前端请求 POST /common/resetPassword?type=ADMIN&id={id}(用户页为 type=USER)。
5. 后端 ResetPasswordAPIView 校验操作者 request.type 必须为 "ADMIN",否则返回"无权执行此操作"。
6. 校验通过后把目标账号密码重置为 123456,返回"密码重置成功,新密码为:123456"。
1
2
3
4
5
6

# 代码生成器生成业务模块流程

1. 在数据库中建好业务表(字段 COMMENT 会作为中文显示名)。
2. 修改 CodeGeneratorMain 中的数据库连接信息与待生成表清单(表名、中文名、目标 App 名)。
3. 确认 DjangoProjectPathConfig 的 PROJECT_ROOT 指向本项目 project 目录。
4. 运行 CodeGeneratorMain 的 main 方法,由 BatchCodeGenerator 读取表结构并渲染生成代码。
5. 生成后端 apps/{app}/ 下的 models.py、{Model}Serializer.py、views.py(Page/Add/Update/Delete/Detail/List)、urls.py。
6. 生成前端 views/admin/{Model}.vue 管理页面(搜索 + 表格 + 分页 + 新增/编辑弹窗)。
7. 手动完成收尾:注册 INSTALLED_APPS、在 project/urls.py 挂载路由、在 frontend/src/router/index.js 与 AdminLayout.vue 中添加路由与菜单。
1
2
3
4
5
6
7

# 技术说明

# 系统架构

  • 前端:Vue 3.4.29 + Element Plus 2.8.4 + Vite 5.3.1
  • 后端:Django 3.2(~=3.2,settings 由 Django 3.2.20 生成)+ Django REST Framework 3.14(~=3.14.0)
  • 数据库:MySQL(django.db.backends.mysql,当前配置库名 django_template,字符集 utf8mb4,settings.py 未声明服务器版本;sql/sql.sql 导出信息显示来源服务器为 MySQL 5.7.26)
  • 认证:自定义 JWT Token(PyJWT 2.7.0,HS256,通过自定义 token 请求头传递)
  • 接口文档:drf-yasg 1.21.7(Swagger)

# 访问地址

  • 后端 API:http://localhost:8000(frontend/.env.development 中 VITE_APP_API_URL='http://127.0.0.1:8000',settings.py 中 HTTP_PICTURE = "http://127.0.0.1:8000/uploads/")
  • 前端页面:http://localhost:5173(开发环境;vite.config.js 未自定义 server.port,使用 Vite 默认端口)
  • 接口文档:http://localhost:8000/swagger/(另有 Django 自带后台 /django-admin/)
  • 生产环境:frontend/.env.production 中 VITE_APP_API_URL='/api',前端目录附带 Dockerfile 与 nginx.conf

# 数据库

  • 数据库名:django_template(沿用模板默认值,尚未按项目重命名;HOST: 118.89.93.2,PORT: 3306,USER: root)
  • 字符集:utf8mb4(sql/sql.sql 中 SET NAMES utf8mb4,建表语句为 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci)
  • 总表数:3 张表(按 apps/*/models.py 中显式 db_table 统计)
    • admin —— 管理员表(apps/admin/models.py → Admin:username、password、nickname、email、contact、avatar)
    • user —— 用户表(apps/user/models.py → User:username、password、nickname、email、contact、avatar)
    • pet —— 宠物信息表(apps/pet/models.py → Pet:name、category_id、age、gender、breed、color、health_status、image、description、source_type、user_id、create_time)
  • 补充说明:sql/sql.sql 中只包含 admin、user 两张表的建表语句与初始化数据,未包含 pet 表;apps/common/models.py 中的 Test、A、B、C 为字段类型学习示例(未声明 db_table,且 common 未注册到 INSTALLED_APPS),不计入表清单。

# 系统特色

# 统一响应格式

所有业务接口通过 apps/common/ResponseMessage.py 返回统一结构,前端 utils/http.js 依据 code 做统一分发(200 直接返回数据、401 清除 token 并跳登录、409/500 及其他弹出错误提示):

{
    "code": 200,
    "msg": "操作成功",
    "data": {...}
}
1
2
3
4
5

# 接口风格

各模块遵循同一套 CRUD 约定(以 pet 模块为例):GET /pet/page(分页查询,参数 pageNum,分页大小取自 settings.PAGE_SIZE = 10)、GET /pet/list(不分页全量)、POST /pet/add(新增)、PUT /pet/update(更新,partial=True)、DELETE /pet/delete(批量删除,请求体为 ID 数组)、GET /pet/detail?id={id}(详情)。

# 全局异常处理

utils/exception_handler.py 实现了自定义全局异常处理器(按"自定义异常 → Django 内置异常 → DRF 异常 → 未知异常"顺序转换为标准响应体),配合 utils/custom_exception.py 中的六类异常使用;当前 settings.py 的 REST_FRAMEWORK 配置中未设置 EXCEPTION_HANDLER,需配置后生效。

# 工具函数库

  • utils/jwt_auth.py:create_token(签发 Token)与 get_payload(解析 Token,区分 DecodeError / ExpiredSignatureError / InvalidTokenError 三类失败),另提供 JwtQueryParamAuthentication、JwtHeaderAuthentication 两个 DRF 认证类。
  • utils/current_user.py:基于 threading.local() 实现的当前用户工具(set_current_user、get_current_user、get_current_user_id、get_current_username、clear_current_user),配套中间件 middleware/CurrentUserMiddleware.py(当前 settings.MIDDLEWARE 中未注册)。
  • apps/common/UserThreadLocal.py:另一份线程局部存储实现(set/get/clear)。
  • utils/DateUtil.py:get_date / get_last_seven_days,返回最近七天的日期字符串列表,供统计类需求使用。

# 文件上传

  • 上传接口:POST /file/upload(字段名 file),由 apps/common/views.py 的 FileUploadAPIView 处理,上传目录不存在时自动创建。
  • 存储方式:使用 uuid4 重命名并保留原扩展名,保存到 settings.UPLOAD_PATH = "uploads\\"(相对项目根目录);MEDIA_URL = '/uploads/'、MEDIA_ROOT = BASE_DIR/uploads,开发环境通过 static() 提供访问。
  • 访问格式:settings.HTTP_PICTURE = "http://127.0.0.1:8000/uploads/",返回结果为 {"name": 原文件名, "url": 完整访问地址}。
  • 限制说明:后端源码中未对上传文件的大小与扩展名做校验;前端 MyUpload.vue 按组件 type 限定 accept(image/*、video/*、audio/*),@wangeditor 编辑器的视频上传配置中设置了 maxFileSize: 100 * 1024 * 1024(注释写为 10M)。

# 富文本编辑器

  • 组件:components/MyEditor.vue,基于 @wangeditor/editor ^5.1.14 与 @wangeditor/editor-for-vue ^5.1.12。
  • 能力:提供工具栏 + 编辑区,通过 content 属性传入初始内容、content-change 事件回传 HTML,图片与视频上传均指向 /file/upload 并自动携带 token 请求头。
  • 现状:该组件已在 views/admin/Admin.vue、views/admin/User.vue 中导入,但当前表单中并未实际使用(现有业务表也没有富文本字段)。

# 代码生成器

  • 位置:CodeGenerator/(Java + Velocity),核心类为 CodeGeneratorMain、BatchCodeGenerator、DjangoCodeGenerator、VueCodeGenerator、DjangoProjectPathConfig。
  • 能力:读取数据库表结构,批量生成 Django 的 models.py、{Model}Serializer.py、views.py、urls.py 与 Vue3 的 views/admin/{Model}.vue 管理页面。
  • 使用:修改 CodeGeneratorMain 中的数据库配置与表清单后运行其 main 方法;DjangoProjectPathConfig.PROJECT_ROOT 当前仍指向模板来源目录(G:\自研版本\4-Django+Vue3-代码生成器-多表多角色\project),用于本项目时需先改成本项目 project 目录。

# 项目当前状态说明

重要提示:本项目目前为基础框架版本,校园点餐相关的业务模块(如菜品/档口/购物车/订单等)尚未在代码中实现。 框架已具备:账号体系(注册/登录/找回密码/修改密码)、管理员管理、普通用户管理、示例模块(宠物分类、宠物信息)、JWT 认证与 Token 拦截中间件、文件上传、统一响应格式、Swagger 接口文档、Java 代码生成器。 后续可基于 CodeGenerator 依据点餐业务数据表批量生成对应模块的 Django + Vue3 代码,并按既有代码风格补充业务页面与路由菜单。

# 现状补充说明(供二次开发参考)

  • 数据库配置:settings.py 中库名仍为模板默认值 django_template,尚未按本项目重命名。
  • 预置页面:后台首页 views/admin/Home.vue 与前台首页 views/front/Index.vue 目前均为占位页面(内容仅为"首页"文本),尚未实现统计或数据展示;package.json 中虽已声明 ECharts 依赖,但 frontend/src 中未检索到任何 ECharts 引用。
  • 未注册的页面:views/admin/Pet.vue(宠物信息管理页)文件存在,但 router/index.js 中未注册路由、AdminLayout.vue 中也没有对应菜单;菜单"宠物分类管理"实际加载的是 views/admin/PetCategory.vue。
  • 未使用的文件:apps/pet/PetCategorySerializer.py 引用了并不存在的 PetCategory 模型(该文件未被任何代码导入);apps/test 目录下仅有编译产物(__pycache__ 中的 .pyc),对应源码文件已不存在,但 apps/test 仍注册在 INSTALLED_APPS 中且 project/urls.py 仍挂载了 test/ 路由。
  • 前后端字段与路径尚未完全对齐:多个页面使用 avatarUrl、tel 字段名,而模型字段为 avatar、contact;Pet.vue/PetCategory.vue 调用的删除接口为 /pet/delBatch(后端实际路由为 /pet/delete),User.vue 调用的 /user/add、/user/update 在后端对应的是 /user/save。
Java导航网   |