v3.1.0
✨ 新功能
- 新增
@/mixins/crud—— 列表页的分页查询、搜索重置、多选、新增/修改弹窗、
删除确认此前在每个页面各写一遍,实现完全相同。收敛后页面只需通过
crudOptions()声明接口与主键字段的差异。附 11 项测试锁定关键约定 - 新增
src/views/demo/—— 标准列表页参照,与后端app/demo一一对应 - 新增
AGENTS.md—— 给 AI 编码工具与新贡献者的约定
现有页面未做改动,可按需逐个迁移到 crud mixin。
🐛 修复
keep-alive 缓存
此前多级菜单的页面缓存实际处于失效状态,四处原因均已修复:
router-view作为transition/keep-alive直接子元素在 Vue Router 4 中
不生效,改用v-slot+<component :is>- 二级及更深层菜单的容器组件断开了缓存链,新增
RouterViewKeepAlive统一承载 include按组件 name 匹配而缓存名单存的是路由 name,两者不一致时静默
失效 —— 现由loadView在运行时对齐- 统一页面组件 name 与路由 name
侧边栏
- 折叠后菜单文字被裁切、图标消失 —— Element Plus 的折叠选择器要求
span为
直接子元素,此前被包了一层div;折叠态样式此前一直写在 Element UI 的
.el-tooltip上,从未匹配到 - 菜单外链失效
- 折叠时 logo 错位,改用首字母标记替代完整应用名
上传
- FormData 被序列化为 JSON 导致文件丢失 —— 拦截器无条件设置
Content-Type: application/json,axios 据此把 FormData 转成了 JSON - 头像上传后回显地址缺少路径分隔符
其他
el-tag非法type值导致开发环境刷新卡顿 —— 空字符串会在每次渲染触发 prop
校验告警,Vite 8 将其连同整棵组件树转发到终端,单次刷新耗时 22 秒parseTime对非字符串入参抛 TypeError- 目录型路由缺少
redirect导致内容区空白 - 字典标签作为显示值创建后可以编辑
- 移除错绑变量的用户导入对话框及其死接口
- 全局注册 Element Plus 图标组件
- 消除 TagsView 顶部贯穿的多余横线
- 限制部署步骤仅在 master 收到 push 时执行 —— 此前 PR 可触发生产部署
- 移除刷新 token 的客户端死代码(配合 go-admin v2.4.0 移除该接口)
💄 界面
- 重新设计登录页,引入 Go Gopher 形象
- 重做首屏加载层
- 统一残留的紫色为品牌蓝
🔧 依赖
- 显式声明
fast-glob——vite-plugin-svg-icons引用它却未声明,此前靠其他包
的扁平结构偶然满足,CI 全新安装时构建失败 - 升级 svgo 至 4.0.2 并迁移配置格式,以 svgo 4 重新处理图标源文件
- 升级 plop 至 4.0.5,放开
@babel/core版本约束 - 移除 autoprefixer 与
postcss.config.js - 删除零引用的 SingleImage 上传组件
配套后端版本:go-admin v2.4.0