| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import axios from 'axios'
- import { ElMessage } from 'element-plus'
- import { useUserStore } from '@/pinia/modules/user'
- import { UDE_SERVER } from '@/config'
- // UDE 后端(数据库透明加密 udeServer,go-zero)统一接口封装:
- // 所有接口带 /api/v1 前缀、直连返回「裸 JSON」(无 code 包裹),
- // 列表接口为分页结构 {list, total}(pageSize 上限 100)。
- // 成功由 httpx.OkJsonCtx 返回业务数据,错误由后端 errorHandler 以非 2xx 状态码 +
- // {code, msg} 返回。后端地址读 window.APP_CONFIG.UDE_SERVER / VITE_UDE_SERVER。
- const service = axios.create({
- baseURL: UDE_SERVER,
- timeout: 30000
- })
- // 透传登录态(udeServer 当前未启用 JWT,透传无副作用,便于后续统一鉴权)
- service.interceptors.request.use(
- config => {
- const userStore = useUserStore()
- if (userStore.token) {
- config.headers['Authorization'] = `Bearer ${userStore.token}`
- }
- return config
- },
- error => Promise.reject(error)
- )
- service.interceptors.response.use(
- response => {
- // udeServer 当前以 {code, message, data} 嵌套返回(go-zero 默认 SuccessHandler),
- // 早期约定 "裸 JSON"(直接 {list,total}/实体),两种都接受:有 code 字段就解一层。
- const body = response.data
- if (body && typeof body === 'object' && 'code' in body && 'data' in body) {
- return body.data
- }
- return body
- },
- error => {
- const status = error.response?.status
- if (status === 401) {
- const userStore = useUserStore()
- userStore.token = ''
- localStorage.clear()
- ElMessage({ showClose: true, type: 'error', message: '登录已过期,请重新登录' })
- return Promise.reject(error)
- }
- ElMessage({
- showClose: true,
- type: 'error',
- message: error.response?.data?.msg || error.response?.data?.message || error.message || '网络错误'
- })
- return Promise.reject(error)
- }
- )
- const BASE = '/api/v1'
- const MAX_PAGE_SIZE = 100 // 后端 pagination.go 限制 pageSize 上限
- // 分页列表接口拉全量(前端需完整数据做客户端过滤/分页)
- async function fetchAll(getPage) {
- const out = []
- let page = 1
- let total = 0
- do {
- const res = await getPage(page, MAX_PAGE_SIZE)
- total = res?.total || 0
- out.push(...(res?.list || []))
- page++
- } while (out.length < total)
- return out
- }
- // ---- 接入服务(t_service)----
- export const getServiceList = (page = 1, pageSize = MAX_PAGE_SIZE) =>
- service.get(`${BASE}/services`, { params: { page, pageSize }}) // -> {list, total}
- export const getAllServices = () => fetchAll(getServiceList) // -> ServiceResp[]
- export const createService = data => service.post(`${BASE}/services`, data) // data 无需 id(表自增)
- export const updateService = (id, data) => service.put(`${BASE}/services/${id}`, data)
- export const deleteService = id => service.delete(`${BASE}/services/${id}`)
- // 一键刷库:下发刷库指令,外挂程序启动并同步配置后对保护目录内全量数据做加密处理
- export const brushService = id => service.post(`${BASE}/services/${id}/brush`)
- // ---- 密钥(t_key,用于「密钥标识」下拉)----
- export const getKeyList = (page = 1, pageSize = MAX_PAGE_SIZE) =>
- service.post(`${BASE}/keys/list`, { params: { page, pageSize }}) // -> {list, total}
- export const getAllKeys = () => fetchAll(getKeyList) // -> KeyResp[]
- // ---- 保护目录(t_directory)----
- export const getDirectoryList = (page = 1, pageSize = MAX_PAGE_SIZE) =>
- service.get(`${BASE}/directories`, { params: { page, pageSize }}) // -> {list, total}
- export const getAllDirectories = () => fetchAll(getDirectoryList) // -> DirectoryResp[]
- export const createDirectory = data => service.post(`${BASE}/directories`, data) // data 无需 id(表自增),仅 serviceId/directory
- export const deleteDirectory = id => service.delete(`${BASE}/directories/${id}`)
- // ---- UKey 兼容桩(身份鉴别模板残留,UDE 项目不实际使用) ----
- // src/utils/ukey/driver.js 仍被 login / user 页面引用,
- // udeServer 不暴露 UKey 配置接口,统一兜底为 longmai,使 driver.js 至少能实例化。
- export const getProxyUkey = () => Promise.resolve({ model: 'longmai' })
- // 本地目录懒加载(udeServer 所在 Linux 主机文件系统,从根目录 / 开始,只列目录不列文件)
- export const getDirChildren = (ip,port,path,iden) =>
- service.get(`${BASE}/dirs/children`, { params: { ip: ip,port: port, path: path || '/', iden: iden } })
- // 返回: { nodes: [{name, path, isDir, hasChildren}] }
|