从 PHP 到 AI + Golang,程序员自救转型手记(二十五):后台布局迁移尝试

71 阅读5分钟

这是一个系列 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