gin-vue-admin 前端代码示例指南:API 封装、Pinia Store、页面组件与工具函数复用规范
后端前端认证鉴权低代码任务调度【免费下载链接】gin-vue-adminViteVue3Gin拥有AI辅助的基础开发平台企业级业务AI开发解决方案内置mcp辅助服务内置skills管理支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器、表单生成器和可配置的导入导出等开发必备功能。项目地址https://gitcode.com/gh_mirrors/gi/gin-vue-admin点击查看免费下载本篇指南以 gin-vue-admin 仓库 aiDoc/examples/frontend 目录下的讲解型示例为核心面向「在新增或修改前端文件时需要遵循既有代码约定」的开发场景包括 AI 辅助编码场景系统梳理前端四类最常见文件的推荐写法接口封装API、全局状态Pinia、页面组件View与工具函数复用Utils。读完本文你将掌握 gin-vue-admin 前端分层边界、每一层的标准代码骨架、常见反模式以及可以直接对照的真实参考文件。一、目录定位这组示例解决什么问题aiDoc/examples/frontend/目录聚焦前端常见文件类型的讲解型示例它本身是一份索引指向四份独立的示例文档文档讲解主题相对路径API 示例前端接口封装aiDoc/examples/frontend/api-example.mdPinia 示例全局状态管理aiDoc/examples/frontend/pinia-example.mdView 示例页面组件aiDoc/examples/frontend/view-example.md工具函数示例通用能力复用aiDoc/examples/frontend/utils-usage-example.md按照 aiDoc/examples/frontend/README.md 的适用范围说明当需要新增或修改以下目录中的文件时应优先阅读本目录下的对应示例web/src/api/**—— 后端接口封装层web/src/pinia/**—— 全局状态层web/src/view/**—— 页面视图层web/src/plugin/**—— 插件前端代码这一约定把「前端分层规范」沉淀为可被检索、可被对照的示例文档核心目标只有一个新代码与既有代码保持同一套结构接口契约不漂移状态逻辑不散落通用能力不重复造轮子。二、API 层统一走/utils/request的接口封装2.1 这一层负责什么前端 API 文件负责把后端接口封装成可复用函数统一走/utils/request导出的service实例不在组件里直接拼 axios 请求。需要这样写的场景包括新增模块接口给页面提供列表、详情、创建、更新、删除方法为插件页面补接口封装。2.2 推荐写法以订单模块为例标准骨架如下引自 aiDoc/examples/frontend/api-example.mdimport service from /utils/request // Summary 分页获取订单列表 // Router /order/getOrderList [post] export const getOrderList (data) { return service({ url: /order/getOrderList, method: post, data }) } // Summary 创建订单 // Router /order/createOrder [post] export const createOrder (data) { return service({ url: /order/createOrder, method: post, data }) }2.3 为什么这样写源码佐证第一所有请求自动复用拦截器能力。仓库真实入口 web/src/utils/request.js 基于axios.create()创建service实例并在请求/响应拦截器中统一处理了config.baseURL默认取import.meta.env.VITE_BASE_API自动注入请求头x-token来自 userStore 的 token与x-user-id见 web/src/utils/request.js统一的全局 Loading 展示与并发计数、以及 30 秒强制关闭兜底响应中code 0判定业务成功new-token响应头自动续期 token401 自动清理登录态并跳转登录页、密码过期强制跳转改密页、错误消息去重最多同时展示 3 条见 web/src/utils/request.js。这些逻辑一旦在组件里直接用 axios 绕开service就会全部失效因此「统一走 service」不是风格偏好而是安全与体验基线。第二JSDoc 风格注释成为接口契约的一部分。真实参考文件 web/src/api/user.js 中每个函数都带Summary、Router、Param、Success等注释例如// Tags User // Summary 分页获取用户列表 // Security ApiKeyAuth // Param data body modelInterface.PageInfo true 分页获取用户列表 // Router /user/getUserList [post] export const getUserList (data) { return service({ url: /user/getUserList, method: post, data: data }) }这些注释能让 AI 和协作者在不翻后端代码的情况下快速理解每个接口的用途、路径与方法也便于与后端 Swagger 注解见 server/docs/docs.go形成对照。注意不同接口的传参位置POST/PUT 用dataDELETE/GET 查询参数用params可对照插件参考 web/src/plugin/announcement/api/info.js 中deleteInfo与findInfo的写法。2.4 常见错误在页面组件里直接写 axios绕过拦截器与 token 注入把页面状态逻辑混进 API 文件API 层只描述接口不管理 UI 状态URL、method、参数位置写错导致接口契约漂移前后端不同步时尤其隐蔽。三、Pinia 层ref computed async action的全局状态3.1 这一层负责什么Pinia store 负责全局状态、异步动作和跨页面共享数据不负责页面渲染细节。典型适用场景用户信息、路由、字典、系统参数等共享状态多页面都会用到的业务状态需要统一缓存或集中副作用的场景。3.2 推荐写法setup 风格Composition的 store 骨架引自 aiDoc/examples/frontend/pinia-example.mdimport { defineStore } from pinia import { ref, computed } from vue import { getOrderList } from /api/order export const useOrderStore defineStore(order, () { const list ref([]) const total ref(0) const loading ref(false) const hasData computed(() list.value.length 0) const fetchList async (params) { loading.value true try { const res await getOrderList(params) if (res.code 0) { list.value res.data.list total.value res.data.total } return res } finally { loading.value false } } const reset () { list.value [] total.value 0 } return { list, total, loading, hasData, fetchList, reset } })3.3 为什么这样写源码佐证ref computed async action是仓库内最自然的组织方式。真实用户 store web/src/pinia/modules/user.js 即完全采用 setup 风格用ref定义userInfo、token用async函数实现LoginIn、LoginOut、GetUserInfo、ClearStorage等动作并通过return { ... }统一暴露。登录动作内部完整展示了「store 承担副作用」的典型流程const LoginIn async (loginInfo) { const res await login(loginInfo) if (res.code ! 0) return false setUserInfo(res.data.user) setToken(res.data.token) // 密码过期强制跳转改密页 if (res.data.needChangePassword) { await router.push({ name: ForceChangePassword }) return true } // 初始化并注册异步路由 const routerStore useRouterStore() await routerStore.SetAsyncRouter() ... }可以看到登录、登出、清理缓存、拉取用户信息这些跨页面共享的副作用全部收进 store页面层只调用一个方法。字典 store web/src/pinia/modules/dictionary.js 则示范了「store 内做数据标准化与缓存」它把后端树形字典数据统一规范为label / value / extend / children结构并提供按深度过滤filterTreeByDepth与扁平化flattenTree等内部工具供 web/src/utils/dictionary.js 的getDict(type, { depth, value })复用。把 loading 和 reset 一并收进 store调用侧更干净。示例中的fetchList用try/finally保证 loading 复位reset提供状态清理入口——页面切换或组件卸载时不必再逐个字段手动归零。3.4 常见错误把所有局部页面状态都塞进全局 store局部状态应留在页面里用ref管理在 store 里写大量 DOM 操作store 不感知 DOM与渲染解耦不做 loading / reset 管理导致页面状态混乱。四、View 层查询区 表格区 弹窗区的页面骨架4.1 这一层负责什么页面组件负责查询表单、表格、弹窗、抽屉和交互流程是用户真正接触到的界面层。适用场景新增后台管理页面新增列表页 搜索 分页新增表单弹窗或抽屉流程。4.2 推荐写法一个最小的「搜索 列表」页面骨架引自 aiDoc/examples/frontend/view-example.mdtemplate div div classgva-search-box el-form :inlinetrue :modelsearchInfo el-form-item label名称 el-input v-modelsearchInfo.name placeholder请输入名称 / /el-form-item el-form-item el-button typeprimary clickonSubmit查询/el-button el-button clickonReset重置/el-button /el-form-item /el-form /div div classgva-table-box el-table :datatableData row-keyID el-table-column labelID propID width80 / el-table-column label名称 propname / /el-table /div /div /template script setup import { ref } from vue import { getOrderList } from /api/order const searchInfo ref({}) const tableData ref([]) const getTableData async () { const res await getOrderList(searchInfo.value) if (res.code 0) { tableData.value res.data.list } } const onSubmit () { getTableData() } const onReset () { searchInfo.value {} getTableData() } getTableData() /script4.3 为什么这样写源码佐证查询区和表格区结构清晰符合项目后台页面习惯。真实参考文件 web/src/view/systemTools/apiToken/index.vue 完整呈现了这套约定外层用gva-search-box包裹内联查询表单含gva前缀的语义化 class表格区用gva-table-box操作按钮区用gva-btn-list底部用gva-pagination挂载el-paginationlayouttotal, sizes, prev, pager, next, jumper。状态命名也保持一致searchInfo查询条件、tableData表格数据、form表单、page/pageSize/total分页。另一参考文件 web/src/view/superAdmin/api/api.vue 同样遵循该骨架。script setup下把「状态、请求、交互入口」放在一起易读。页面只处理展示和交互不在这里重写公共请求逻辑——数据获取一律调用 API 层封装的函数全局 loading 与错误提示由request.js的拦截器统一完成页面内无需重复实现。4.4 常见错误页面里直接写大量请求封装逻辑应下沉到 API 层组件过大不拆查询区、表格区、弹窗区弹窗/抽屉建议独立子组件或独立区块页面状态命名混乱不区分searchInfo、tableData、form。五、Utils 层先复用src/utils/不临时再造5.1 这一层负责什么当页面或组件需要通用能力时应先复用src/utils/下已有工具而不是临时再造一套。常见场景发送 HTTP 请求格式化日期获取字典数据处理按钮权限做命名转换跨组件通信。5.2 推荐写法组合复用多个工具引自 aiDoc/examples/frontend/utils-usage-example.mdimport service from /utils/request import { formatDate, CreateUUID } from /utils/format import { getDict } from /utils/dictionary import { useBtnAuth } from /utils/btnAuth const token CreateUUID() const createdAt formatDate(new Date()) const loadStatusDict async () { return await getDict(order_status) } const btnAuth useBtnAuth() export const fetchOrderList (data) { return service({ url: /order/getOrderList, method: post, data }) }5.3 为什么这样写源码佐证统一工具入口能减少重复实现且这些工具已被项目广泛使用。逐一对照源码请求/utils/request即 web/src/utils/request.js是全部接口的出口日期/命名web/src/utils/format.js 提供formatDate内部委托formatTimeToStr输出yyyy-MM-dd hh:mm:ss、CreateUUID基于时间戳 performance.now()生成 UUID 格式字符串、formatBoolean、filterDict等字典web/src/utils/dictionary.js 的getDict(type, { depth, value })在调用字典 store 的同时内置了generateCacheKey生成缓存键按「类型 深度 节点 value」维度缓存避免页面重复请求还包含参数校验type 必须为非空字符串、depth 必须为非负数与失败回退按钮权限web/src/utils/btnAuth.js 的useBtnAuth()直接读取当前路由的route.meta.btns一行代码即可拿到当前页面的按钮权限集合跨组件通信还可使用 web/src/utils/bus.js 的emitterrequest.js内部也在用emitter.emit(show-error)上报错误。复用已有工具比新造 helper 更利于 AI 和人协作——新代码与既有代码共享同一实现修复一处即可全局生效。5.4 常见错误手写日期格式化逻辑应使用 web/src/utils/format.js直接使用 axios 绕开request丢失 token 注入、loading、错误处理与 401 处理自己再实现一套按钮权限判断应使用 web/src/utils/btnAuth.js明明已有字典工具却在页面里重复请求和缓存应使用 web/src/utils/dictionary.js。六、分层边界速查与总结四层职责可以概括为一句话API 层只描述接口Store 层管全局状态与副作用View 层管展示与交互Utils 层提供通用能力。对应的「就近原则」是能力应该放在哪不应该放在哪接口请求API 层web/src/api/**、web/src/plugin/**/api/**View 层、Store 层全局共享状态与副作用Store 层web/src/pinia/modules/**View 层、API 层页面展示与交互View 层web/src/view/**Store 层通用能力日期、字典、权限、请求Utils 层web/src/utils/**各页面临时重写四份示例文档对应的真实参考文件汇总如下可作为新代码的「标准答案」直接对照API 封装web/src/api/user.js、web/src/plugin/announcement/api/info.jsPinia storeweb/src/pinia/modules/user.js、web/src/pinia/modules/router.js、web/src/pinia/modules/dictionary.js页面组件web/src/view/systemTools/apiToken/index.vue、web/src/view/superAdmin/api/api.vue工具函数web/src/utils/request.js、web/src/utils/format.js、web/src/utils/dictionary.js、web/src/utils/btnAuth.js按这套规范产出的前端代码接口契约清晰、状态逻辑集中、页面结构统一、通用能力零重复无论是人工协作还是 AI 辅助编码都能以最低的理解成本在 gin-vue-admin 前端中安全落地。赞分享后端前端认证鉴权低代码任务调度【免费下载链接】gin-vue-adminViteVue3Gin拥有AI辅助的基础开发平台企业级业务AI开发解决方案内置mcp辅助服务内置skills管理支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器、表单生成器和可配置的导入导出等开发必备功能。项目地址https://gitcode.com/gh_mirrors/gi/gin-vue-admin点击查看免费下载相关推荐gin-vue-admin前端组件可复用组件开发与封装gin vue admin前端组件可复用组件开发与封装 引言 在现代前端开发中组件化Componentization已成为构建复杂应用的核心范式。gin后端前端认证鉴权低代码任务调度告别重复代码gin-vue-admin前端分页组件开发指南告别重复代码gin vue admin前端分页组件开发指南 你是否还在每个页面重复编写分页逻辑是否厌倦了复制粘贴pageSize、currentPage这些后端前端认证鉴权低代码任务调度gin-vue-admin前端模块化开发组件封装与API设计gin vue admin前端模块化开发组件封装与API设计 在现代前端开发中模块化和组件化是提升代码复用性、可维护性的核心手段。gin vue admin后端前端认证鉴权低代码任务调度上一篇基于vis-three的全自定义Web3D场景编辑器如何打破传统3D编辑工具的限制下一篇CanvasBlocker未来路线图即将推出的7大隐私保护新功能预览创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

llvm-project 构建与自定义 Pass 开发实战指南

llvm-project 构建与自定义 Pass 开发实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 16:41:22 阅读更多 →
Tmux终端复用器实战:从会话管理到高效配置

Tmux终端复用器实战:从会话管理到高效配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 14:33:58 阅读更多 →
404 model_not_found 报错?TaoToken + Cline 这样验证

404 model_not_found 报错?TaoToken + Cline 这样验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 14:33:58 阅读更多 →

最新新闻

在 dva 应用中集成 redux-undo:基于 onReducer 增强器的撤销/重做实战

在 dva 应用中集成 redux-undo:基于 onReducer 增强器的撤销/重做实战

在 dva 应用中集成 redux-undo:基于 onReducer 增强器的撤销/重做实战 【免费下载链接】dva 🌱 React and redux based, lightweight and elm-style framework. (Inspired by elm and choo) 项目地址: https://gitcode.com/gh_mirrors/dv/dva 导读…

2026/9/21 16:41:42 阅读更多 →
VitePress 部署完全指南:从本地构建、路径配置到主流平台一键上线

VitePress 部署完全指南:从本地构建、路径配置到主流平台一键上线

前端文档 【免费下载链接】vitepress Vite & Vue powered static site generator. 项目地址: https://gitcode.com/gh_mirrors/vi/vitepress 点击查看 免费下载 VitePress 是一个基于 Vite 与 Vue 的静态站点生成器,它把 Markdown 文档编译为纯静态…

2026/9/21 16:41:42 阅读更多 →
金融模型审计技能 audit-xls 深度解析:从公式级检查到三表勾稽完整性校验

金融模型审计技能 audit-xls 深度解析:从公式级检查到三表勾稽完整性校验

人工智能AI 应用AI 技能/插件AI Agent金融科技 【免费下载链接】financial-services 项目地址: https://gitcode.com/GitHub_Trending/fi/financial-services 点击查看 免费下载 在 Claude for Financial Services 开源仓库中,audit-xls 是贯穿投资银行…

2026/9/21 16:41:42 阅读更多 →
Relay 缓存复用完全指南:fetchPolicy、数据可用性与部分渲染实战

Relay 缓存复用完全指南:fetchPolicy、数据可用性与部分渲染实战

Relay 缓存复用完全指南:fetchPolicy、数据可用性与部分渲染实战 【免费下载链接】relay Relay is a JavaScript framework for building data-driven React applications. 项目地址: https://gitcode.com/gh_mirrors/relay29/relay Relay 在应用运行过程中会…

2026/9/21 16:41:42 阅读更多 →
Ragas Improve RAG 实战:用真实评测数据对比朴素 RAG 与 Agentic RAG

Ragas Improve RAG 实战:用真实评测数据对比朴素 RAG 与 Agentic RAG

人工智能大模型模型评测RAG 【免费下载链接】ragas Supercharge Your LLM Application Evaluations 🚀 项目地址: https://gitcode.com/gh_mirrors/ra/ragas 点击查看 免费下载 ragas quickstart improve_rag 是 Ragas 提供的一个开箱即用的评测模板&am…

2026/9/21 16:41:42 阅读更多 →
SSM框架开发健身房会员管理系统实践

SSM框架开发健身房会员管理系统实践

1. 项目概述"java_ssm14健身房会员私教预约打卡管理系统"是一个基于SSM(SpringSpringMVCMyBatis)框架开发的健身房业务管理系统。这个系统主要解决传统健身房在会员管理、私教预约和考勤打卡等环节中存在的效率低下、数据混乱问题。我在实际开发这类系统时发现&#…

2026/9/21 16:40:37 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →