ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

后台管理系统模板配 TaoToken:Vue2 + Vuex + Vue Router + Ant Design Vue 的 settings.json 骨架

后台管理系统模板配 TaoToken:Vue2 + Vuex + Vue Router + Ant Design Vue 的 settings.json 骨架 1. 后台管理系统模板接入统一 Key 通道的真实场景后台管理系统模板这类项目前端技术栈基本固定vue2.x vuex vue-router ant-design-vue再配 axios 做请求层、token 做鉴权。项目跑起来之后菜单权限、按钮权限、界面权限都靠一套 token 认证链路串起来。问题往往不出在模板本身而是出在「模型能力怎么接进来」这一步。我见过太多中后台项目权限体系做得很完整但一到要调用大模型能力比如智能客服、内容审核、报表摘要、代码辅助就开始各写各的有人把 Key 硬编码在.env有人直接塞进组件里有人每个页面单独封装一份 axios 实例。结果就是 Key 散落各处、换一次通道要改十几个文件、鉴权链路和模型调用链路完全脱节。这篇要解决的就是这件事在 Vue2 后台管理系统模板里用一份可复制的settings.json骨架把统一 Key / API 通道的配置收敛到一处再配合请求层封装让 vuex、vue-router、ant-design-vue 这套体系下的模型调用走同一条鉴权链路。适合正在用后台管理系统模板做中后台、又想把模型能力接进来的前端同学。下面直接给配置骨架和验证动作照着改就能跑。2. TaoToken 前置统一 Key 通道在后台模板里的位置TaoToken 在这里扮演的角色是「统一 Key / API 通道」——你可以把它理解成后台管理系统模板里的一个「网关配置层」。模板本身管的是菜单、角色、按钮权限TaoToken 管的是模型调用的入口地址和 Key 的集中管理。两者不冲突前者管「谁能看哪个页面」后者管「页面里的模型请求发到哪、用哪个 Key」。官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 地址不带 UTMhttps://taotoken.net/api在后台模板里我建议把 TaoToken 相关配置放在src/config/settings.json和主题配置、菜单配置平级。这样 vuex 里读配置、axios 拦截器读配置、ant-design-vue 表单里做模型选择都从同一个源取不会出现「这个页面用 A Key、那个页面用 B Key」的混乱。需要提前准备的东西一个 TaoToken 账号、一个 API Key、后台模板项目能正常npm run serve。Key 的创建入口在控制台的 API Keys 页面模型对话能力可以在模型对话页先验证通不通长期做编码或 Agent 场景的可以看 Coding Plan。这几个入口后面 CTA 会分流这里先记住位置。注意Key 不要写进会被提交到 git 的文件。settings.json里只放「引用名」真实 Key 走环境变量或本地覆盖文件。3. 可复制配置settings.json 骨架与请求层封装3.1 settings.json 骨架在src/config/settings.json里放这样一份骨架。字段名我按后台模板常见习惯命名你可以直接复制{ appName: admin-template, apiChannel: { provider: taotoken, baseURL: https://taotoken.net/api, keyRef: TAOTOKEN_API_KEY, timeout: 30000, models: { chat: gpt-4o-mini, coding: claude-3-5-sonnet, embedding: text-embedding-3-small } }, request: { withCredentials: false, retry: 1, retryDelay: 800 }, auth: { tokenHeader: Authorization, tokenPrefix: Bearer , whiteList: [/login, /404] } }几个关键点说明。baseURL指向 TaoToken 的 API 地址所有模型请求都从这里走。keyRef不是 Key 本身而是环境变量名运行时从process.env读。models里按场景分模型chat 用于对话、coding 用于代码辅助、embedding 用于向量。auth段是给后台模板自己的登录 token 用的和模型 Key 分开别混。3.2 环境变量与本地覆盖在项目根目录建.env.local记得加进.gitignoreTAOTOKEN_API_KEYsk-你的真实key VUE_APP_API_BASEhttps://taotoken.net/api然后在vue.config.js里确认环境变量能注入。Vue2 默认只暴露VUE_APP_前缀的变量所以如果要用TAOTOKEN_API_KEY这个名字需要在vue.config.js的chainWebpack里补一下或者干脆改成VUE_APP_TAOTOKEN_API_KEY。我实测下来直接改成VUE_APP_前缀最省事不用动构建配置。3.3 请求层封装在src/utils/request.js里封装一个 axios 实例读 settings.json 的配置import axios from axios import settings from /config/settings.json import store from /store import { Message } from ant-design-vue const channel settings.apiChannel const service axios.create({ baseURL: channel.baseURL, timeout: channel.timeout, withCredentials: settings.request.withCredentials }) service.interceptors.request.use( config { const apiKey process.env.VUE_APP_TAOTOKEN_API_KEY if (apiKey) { config.headers[Authorization] Bearer ${apiKey} } const userToken store.getters.token if (userToken !settings.auth.whiteList.includes(config.url)) { config.headers[settings.auth.tokenHeader] settings.auth.tokenPrefix userToken } return config }, error Promise.reject(error) ) service.interceptors.response.use( response response.data, error { const status error.response error.response.status if (status 401) { store.dispatch(user/resetToken) Message.error(鉴权失效请重新登录) } else if (status 429) { Message.warning(请求过于频繁稍后重试) } else { Message.error((error.response error.response.data error.response.data.message) || 请求失败) } return Promise.reject(error) } ) export default service这里有个容易踩的坑模型请求和后台业务请求的鉴权头都是Authorization但一个是 TaoToken 的 Key一个是后台自己的登录 token。如果两者都往同一个 header 塞会互相覆盖。我的做法是模型请求单独走一个实例或者用不同的 header 名。上面这段为了演示放在一起了实际项目里建议拆成request.js业务和aiRequest.js模型两个实例共用 settings.json 的配置。3.4 vuex 里挂载配置在src/store/modules/app.js里把 settings 挂进 state方便组件里读import settings from /config/settings.json const state { settings, apiChannel: settings.apiChannel } const mutations { SET_CHANNEL(state, payload) { state.apiChannel { ...state.apiChannel, ...payload } } } export default { namespaced: true, state, mutations }这样 ant-design-vue 的组件里就能通过this.$store.state.app.apiChannel.models.chat拿到当前模型名做下拉选择或者展示。4. 验证请求启动后确认鉴权链路生效配置写完跑npm run serve然后按下面几步验证。第一步在浏览器控制台确认环境变量注入成功console.log(process.env.VUE_APP_TAOTOKEN_API_KEY ? key loaded : key missing)输出key loaded说明环境变量读到了。如果是key missing检查.env.local是否在项目根目录、变量名是否带VUE_APP_前缀、改完是否重启了 dev server。第二步在任意页面挂一个测试按钮调用模型对话接口import aiRequest from /utils/aiRequest async function testChannel() { try { const res await aiRequest.post(/v1/chat/completions, { model: this.$store.state.app.apiChannel.models.chat, messages: [{ role: user, content: ping }] }) console.log(channel ok, res) } catch (e) { console.error(channel fail, e) } }第三步看 Network 面板。请求 URL 应该是https://taotoken.net/api/v1/chat/completions请求头里Authorization是Bearer sk-...。响应 200 且返回内容里有模型回复说明整条链路通了。第四步验证后台自身的鉴权没被影响。退出登录访问一个需要权限的页面应该被 vue-router 的守卫拦到登录页登录后再访问菜单和按钮权限正常。这一步是确认模型通道的接入没有破坏原有的 token 认证链路。如果第四步出问题大概率是拦截器里Authorization头把后台 token 覆盖了。回到 3.3 节把模型请求和业务请求拆成两个 axios 实例。5. 本篇常见错排查5.1 401 但 Key 明明是对的先看请求头里Authorization的值。如果出现两个Bearer或者后台 token 和模型 Key 拼在一起就是拦截器重复设置。检查aiRequest.js和request.js是否都往Authorization写值。解决方式是模型实例用独立 header或者干脆用X-Api-Key这类自定义头需确认通道支持。5.2 环境变量读不到Vue2 的process.env在构建时静态替换只有VUE_APP_前缀的才会注入客户端。如果你用了TAOTOKEN_API_KEY这种名字浏览器里永远是 undefined。改成VUE_APP_TAOTOKEN_API_KEY重启 dev server。另外.env.local默认被 git 忽略别误以为文件丢了。5.3 settings.json 改了不生效import settings from /config/settings.json是静态导入改完 json 需要重启 dev server。如果想让配置热更新得改成运行时请求 json 文件但后台模板一般不需要重启就行。5.4 模型名写错导致 404models里的模型名要和通道支持的名称一致。写错会返回 404 或 model not found。先在模型对话页确认可用模型名再填进 settings.json。5.5 跨域报错如果控制台出现 CORS 相关报错检查baseURL是否写成了带尾斜杠的地址以及请求是否走了 devServer 代理。后台模板一般配了proxy把/api代理到目标地址。用 TaoToken 的完整地址时确认代理规则没有把它再转发一次。6. 接入后的下一步与入口分流配置骨架跑通之后后台管理系统模板里的模型调用就有了统一入口。接下来按你的场景选下一步排障和接入细节没搞定的去 API Keys 页面确认 Key 状态再看接入文档对照参数API Keys 入口 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。想先验证模型通不通、对比不同模型返回效果的去模型对话页直接试https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。长期在后台模板里做编码辅助、Agent 类功能的看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。控制台总入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。Claude Code 相关场景https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。最后补一个我踩过的坑后台模板的权限守卫和模型请求拦截器最好分文件维护别图省事塞一个文件里。模板迭代时权限逻辑改动频繁模型通道相对稳定混在一起改一次动全身。拆开之后settings.json 作为唯一配置源两边都读它改配置不用碰业务代码。
返回列表