这是一个系列 Blog,作者将以一个 PHP 全栈工程师的身份,利用 AI 工具(claude code、codex、deepseek、豆包等):从零开始学习 golang 语言,并最终完成 ai-go-admin(github | gitee)开源项目的制作,全程记录分享。
在上一期,我们已经完成 “一行提示词抽出完美网站首页”,本期将完成:后台布局迁移
后台布局迁移尝试
为什么叫迁移呢?因为这次打算整波大的,直接让 CC 一次性将 BuildAdmin/web 的后台五种布局(默认、经典、左分双栏、顶侧双栏、单栏)全部 迁移 过来。
BuildAdmin 是作者的另外一个项目,有兴趣的可以看看后台布局在线演示站:demo.buildadmin.com/#/admin
我直接把 BuildAdmin 代码拉下来,让 CC 参考,并完成布局相关代码和样式的迁移:
参考 @badmin-v2.3.7-full/web/src 的代码,为当前项目实现后台布局功能,主要是 layouts 文件夹的内容:
1. 涉及从服务端获取的数据时,提供示例数据即可,无需整合或撰写实际服务端接口,只做前端布局相关
2. 新增文件与目录时,命名应尽可能合理,契合当前项目
工程量虽然大,但是提示词也少啊😂,主要是上次做首页惊艳到我了,这次同属前端领域,飘一下试试看,打完这行字,那边已经消耗 25k token 了😂。
● Type check 和 Build 全部通过。以下是完整的实现总结:
---
后台布局实现总结
参考 badmin-v2.3.7-full/web/src 的代码,为当前项目实现了完整的后台布局功能。
📁 新增/修改的文件
Stores(状态管理)
┌─────────────────────────────┬──────┬─────────────────────────────────────────────────────────────┐
│ 文件 │ 操作 │ 说明 │
├─────────────────────────────┼──────┼─────────────────────────────────────────────────────────────┤
│ stores/interface/index.ts │ 修改 │ 新增 Layout、NavTabs、SiteConfig 接口 │
├─────────────────────────────┼──────┼─────────────────────────────────────────────────────────────┤
│ stores/config.ts │ 修改 │ 新增 layout 配置(菜单、顶栏、暗黑模式等全部颜色/尺寸配置) │
├─────────────────────────────┼──────┼─────────────────────────────────────────────────────────────┤
│ stores/constant/cacheKey.ts │ 修改 │ 新增 TAB_VIEW_CONFIG、BEFORE_RESIZE_LAYOUT 键 │
├─────────────────────────────┼──────┼─────────────────────────────────────────────────────────────┤
│ stores/navTabs.ts │ 新增 │ 标签页导航状态管理(标签增删/激活/搜索) │
├─────────────────────────────┼──────┼─────────────────────────────────────────────────────────────┤
│ stores/siteConfig.ts │ 新增 │ 站点配置状态(站点名、版本、初始化状态) │
├─────────────────────────────┼──────┼─────────────────────────────────────────────────────────────┤
│ stores/refs.ts │ 新增 │ 全局组件引用句柄(tabsRef、scrollbarRef、menuRef) │
└─────────────────────────────┴──────┴─────────────────────────────────────────────────────────────┘
Utilities(工具函数)
┌─────────────────┬──────┬───────────────────────────────────────────────────────┐
│ 文件 │ 操作 │ 说明 │
├─────────────────┼──────┼───────────────────────────────────────────────────────┤
│ utils/router.ts │ 新增 │ 路由工具:routePush(安全导航)、getFirstRoute(首个菜单)、onClickMenu(菜单点击)、handleAdminRoute(动态路由注入)、getMenuKey(菜单唯一键)等 │
├─────────────────┼──────┼───────────────────────────────────────────────────────┤
│ utils/layout.ts │ 新增 │ 布局工具:mainHeight(内容区高度计算)、setNavTabsWidth(标签栏宽度自适应) │
└─────────────────┴──────┴──────────────────────────────────────────────────────┘
Layouts(布局组件)
layouts/
admin/
index.vue # 后台布局入口(含示例菜单数据、自适应逻辑)
container/
default.vue # 默认布局容器(Aside + Header + Main)
components/
aside.vue # 侧边栏(Logo + 垂直菜单 + 底部工具栏)
header.vue # 顶栏容器
logo.vue # Logo + 站点名
navMenus.vue # 顶部右侧菜单(首页/语言/全屏/用户信息/配置)
config.vue # 布局配置抽屉(暗黑模式/颜色/动画等)
closeFullScreen.vue # 全屏退出按钮
menus/
menuTree.vue # 递归菜单树(支持多级嵌套)
menuVertical.vue # 垂直菜单(Element Plus el-menu)
navBar/
default.vue # 默认导航栏(Tabs + NavMenus)
tabs.vue # 标签页(含右键菜单:刷新/关闭/全屏等)
router-view/
main.vue # 主内容区(keep-alive + 路由动画过渡)
asideToolbar/
footer.vue # 侧边栏底部工具栏(折叠/搜索)
menuSearch/
dialog.vue # 菜单搜索弹窗
common/
loading.vue # 加载页面(超时显示重新加载按钮)
components/
darkSwitch.vue # 暗黑模式切换开关
router-view/
iframe.vue # iframe 内嵌页面
组件
┌─────────────────────────────┬──────┬─────────────────────────────────────────────────────────┐
│ 文件 │ 操作 │ 说明 │
├─────────────────────────────┼──────┼─────────────────────────────────────────────────────────┤
│ components/baIcon/index.vue │ 新增 │ 动态图标组件,从 @element-plus/icons-vue 按名称解析图标 │
└─────────────────────────────┴──────┴─────────────────────────────────────────────────────────┘
视图占位
┌───────────────────────────────────────┬──────────────────┐
│ 文件 │ 说明 │
├───────────────────────────────────────┼──────────────────┤
│ views/backend/dashboard/workplace.vue │ 工作台占位页 │
├───────────────────────────────────────┼──────────────────┤
│ views/backend/content/category.vue │ 分类管理占位页 │
├───────────────────────────────────────┼──────────────────┤
│ views/backend/content/article.vue │ 文章管理占位页 │
├───────────────────────────────────────┼──────────────────┤
│ views/backend/system/config.vue │ 系统配置占位页 │
├───────────────────────────────────────┼──────────────────┤
│ views/backend/system/admin.vue │ 管理员管理占位页 │
└───────────────────────────────────────┴──────────────────┘
语言包
┌─────────────────────────┬────────────────────────────┐
│ 文件 │ 说明 │
├─────────────────────────┼────────────────────────────┤
│ lang/zh-cn/layouts.yaml │ 布局相关中文翻译(50+ 键) │
├─────────────────────────┼────────────────────────────┤
│ lang/en/layouts.yaml │ 布局相关英文翻译 │
├─────────────────────────┼────────────────────────────┤
│ lang/zh-cn/utils.yaml │ 工具提示翻译 │
├─────────────────────────┼────────────────────────────┤
│ lang/en/utils.yaml │ 工具提示英文翻译 │
└─────────────────────────┴────────────────────────────┘
样式
┌─────────────────┬───────────────────────────────────────────────────────────────────────┐
│ 文件 │ 说明 │
├─────────────────┼───────────────────────────────────────────────────────────────────────┤
│ styles/app.scss │ 新增 CSS 变量(--ba-main-space、--ba-bg-color-overlay)和暗黑模式支持 │
└─────────────────┴───────────────────────────────────────────────────────────────────────┘
🔧 核心设计特点
├─────────────────┼───────────────────────────────────────────────────────────────────────┤
│ styles/app.scss │ 新增 CSS 变量(--ba-main-space、--ba-bg-color-overlay)和暗黑模式支持 │
└─────────────────┴───────────────────────────────────────────────────────────────────────┘
🔧 核心设计特点
1. 示例数据驱动:layouts/admin/index.vue 内置了完整的示例菜单数据(仪表盘、内容管理、系统设置),无需后端接口即可展示完整布局
2. 自适应布局:屏幕宽度 < 1024px 时自动折叠菜单为小屏模式
3. 标签页系统:支持多标签、右键菜单(刷新/关闭/关闭其他/关闭全部/全屏)
4. 暗黑模式:完整的亮色/暗色双主题支持,所有颜色通过 getColorVal() 动态切换
5. 布局配置面板:抽屉式配置界面,支持自定义菜单颜色、顶栏颜色、动画效果等
6. keep-alive 缓存:支持路由组件缓存,标签刷新时重建缓存
✻ Sautéed for 11m 36s
花费 11 分钟,37 个文件新增/修改,说实话,还可以了,虽然只迁移了一种布局,但能打开,效果也不错:
可惜我最终还是决定丢弃全部修改,初步 review 时就发现,很多文件相对原来的做过修改,然后各个文件散布着未使用的导入、代码格式错误等,同时大量的文件又导致全面 review 非常困难,还是人工慢慢迁移吧,中途确定性高的重复性工作,再让 AI 帮我完成。
博主将人工迁移布局相关代码,由于主要是复制工作,不重要的就不往本手记上面写了,想了解过程的朋友,可以查阅开源仓库的提交记录:开源于:github | gitee