From f5ab55c4bcf6266b865ee44169c6e403b2b9cba2 Mon Sep 17 00:00:00 2001 From: cc Date: Sat, 10 May 2025 22:25:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B0=81=E8=A3=85js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-ele/src/cdcm/api/api.js | 17 +++ apps/web-ele/src/cdcm/api/api.ts | 69 ++++++++++++ apps/web-ele/src/{ => cdcm}/api/req.toml | 0 apps/web-ele/src/cdcm/api/req_code.ts | 129 +++++++++++++++++++++++ apps/web-ele/src/cdcm/api/request.js | 60 +++++++++++ apps/web-ele/src/views/driver/index.vue | 14 +++ 6 files changed, 289 insertions(+) create mode 100644 apps/web-ele/src/cdcm/api/api.js create mode 100644 apps/web-ele/src/cdcm/api/api.ts rename apps/web-ele/src/{ => cdcm}/api/req.toml (100%) create mode 100644 apps/web-ele/src/cdcm/api/req_code.ts create mode 100644 apps/web-ele/src/cdcm/api/request.js diff --git a/apps/web-ele/src/cdcm/api/api.js b/apps/web-ele/src/cdcm/api/api.js new file mode 100644 index 0000000..ead4666 --- /dev/null +++ b/apps/web-ele/src/cdcm/api/api.js @@ -0,0 +1,17 @@ +import { cdcmRequestClient } from './request'; + +export async function cdcmTemplateAPI(params, key) { + return cdcmRequestClient.post('/template', params, { + headers: { + action: key.code, + }, + }); +} + +export async function cdcmDriverAPI(params, key) { + return cdcmRequestClient.post('/driver', params, { + headers: { + action: key.code, + }, + }); +} diff --git a/apps/web-ele/src/cdcm/api/api.ts b/apps/web-ele/src/cdcm/api/api.ts new file mode 100644 index 0000000..d29fa09 --- /dev/null +++ b/apps/web-ele/src/cdcm/api/api.ts @@ -0,0 +1,69 @@ +import type { RequestClientOptions } from '@vben/request'; + +import { useAppConfig } from '@vben/hooks'; +import { defaultResponseInterceptor, RequestClient } from '@vben/request'; + +import { useTokenStore } from '#/store'; // cc:增加token存储 + +const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD); + +function createCDCMRequestClient( + baseURL: string, + options?: RequestClientOptions, +) { + const client = new RequestClient({ + ...options, + baseURL, + }); + + client.addResponseInterceptor( + defaultResponseInterceptor({ + codeField: 'code', + dataField: 'data', + successCode: 0, + }), + ); + + // 响应拦截器:自动更新 token + client.addResponseInterceptor({ + fulfilled: (response) => { + const token = response.headers?.token; + if (token) { + // 如果响应头中有新 token,自动更新 store + useTokenStore().setToken(token); + } + return response; + }, + rejected: (error) => { + // 统一错误处理(如 token 过期) + if (error.response?.status === 401) { + useTokenStore().deleteToken(); + // 这里要跳登录页面 + } + return Promise.reject(error); + }, + }); + + // 请求拦截器:自动添加 token + client.addRequestInterceptor({ + fulfilled: (config) => { + const token = useTokenStore().token; + if (token) { + // 添加 CDCM 自定义头部 + config.headers.set('cdcm', token, true); + } + return config; + }, + rejected: (error) => { + // 请求错误处理 + return Promise.reject(error); + }, + }); + return client; +} + +export const cdcmRequestClient = createCDCMRequestClient(apiURL); + +export async function cdcmTemplateAPI(params: any) { + return cdcmRequestClient.post('/api/v1/cdcm', params); +} diff --git a/apps/web-ele/src/api/req.toml b/apps/web-ele/src/cdcm/api/req.toml similarity index 100% rename from apps/web-ele/src/api/req.toml rename to apps/web-ele/src/cdcm/api/req.toml diff --git a/apps/web-ele/src/cdcm/api/req_code.ts b/apps/web-ele/src/cdcm/api/req_code.ts new file mode 100644 index 0000000..016c88b --- /dev/null +++ b/apps/web-ele/src/cdcm/api/req_code.ts @@ -0,0 +1,129 @@ +// 请求码 +export interface TemplateQuerySupportType { + code: number; + desc: string; +} +export const DeviceCreate: TemplateQuerySupportType = { + code: 52_302, + desc: '创建设备', +}; +export const DeviceDelete: TemplateQuerySupportType = { + code: 52_304, + desc: '删除设备', +}; +export const DeviceQueryAll: TemplateQuerySupportType = { + code: 52_301, + desc: '查询所有设备', +}; +export const DeviceUpdate: TemplateQuerySupportType = { + code: 52_303, + desc: '更新设备', +}; +export const DriverCreate: TemplateQuerySupportType = { + code: 52_202, + desc: '创建驱动', +}; +export const DriverDelete: TemplateQuerySupportType = { + code: 52_204, + desc: '删除驱动', +}; +export const DriverQuery: TemplateQuerySupportType = { + code: 52_205, + desc: '查询驱动', +}; +export const DriverQueryPage: TemplateQuerySupportType = { + code: 52_201, + desc: '查询模板点位', +}; +export const DriverQueryStatus: TemplateQuerySupportType = { + code: 52_206, + desc: '查询驱动状态', +}; +export const DriverQuerySupportType: TemplateQuerySupportType = { + code: 52_004, + desc: '查询驱动支持的类型', +}; +export const DriverStart: TemplateQuerySupportType = { + code: 52_207, + desc: '启动驱动', +}; +export const DriverStop: TemplateQuerySupportType = { + code: 52_208, + desc: '停止驱动', +}; +export const DriverTemplateQuery: TemplateQuerySupportType = { + code: 52_209, + desc: '查询驱动模板', +}; +export const DriverUpdate: TemplateQuerySupportType = { + code: 52_203, + desc: '更新驱动', +}; +export const HistoryClear: TemplateQuerySupportType = { + code: 52_404, + desc: '清除历史记录', +}; +export const HistoryExport: TemplateQuerySupportType = { + code: 52_405, + desc: '导出历史记录', +}; +export const HistoryQuery: TemplateQuerySupportType = { + code: 52_403, + desc: '查询历史记录', +}; +export const HistoryQueryConfig: TemplateQuerySupportType = { + code: 52_401, + desc: '查询历史记录配置', +}; +export const HistoryUpdateConfig: TemplateQuerySupportType = { + code: 52_402, + desc: '更新历史记录配置', +}; +export const PointCreate: TemplateQuerySupportType = { + code: 52_022, + desc: '创建模板点位', +}; +export const PointDelete: TemplateQuerySupportType = { + code: 52_024, + desc: '删除模板点位', +}; +export const PointQueryAll: TemplateQuerySupportType = { + code: 52_021, + desc: '查询所有模板点位', +}; +export const PointUpdate: TemplateQuerySupportType = { + code: 52_023, + desc: '更新模板点位', +}; +export const TemplateCreate: TemplateQuerySupportType = { + code: 52_012, + desc: '创建模板', +}; +export const TemplateDelete: TemplateQuerySupportType = { + code: 52_014, + desc: '删除模板', +}; +export const TemplatePointQuerySupportAccess: TemplateQuerySupportType = { + code: 52_003, + desc: '查询模板点位支持的权限类型', +}; +export const TemplatePointQuerySupportType: TemplateQuerySupportType = { + code: 52_002, + desc: '查询模板点位支持的数据类型', +}; +export const TemplateQuery: TemplateQuerySupportType = { + code: 52_015, + desc: '查询模板', +}; +export const TemplateQueryPage: TemplateQuerySupportType = { + code: 52_011, + desc: '查询所有模板', +}; +export const TemplateQuerySupportType: TemplateQuerySupportType = { + code: 52_001, + desc: '查询模板支持的类型', +}; +export const TemplateUpdate: TemplateQuerySupportType = { + code: 52_013, + desc: '更新模板', +}; diff --git a/apps/web-ele/src/cdcm/api/request.js b/apps/web-ele/src/cdcm/api/request.js new file mode 100644 index 0000000..8f1c246 --- /dev/null +++ b/apps/web-ele/src/cdcm/api/request.js @@ -0,0 +1,60 @@ +import { useAppConfig } from '@vben/hooks'; +import { defaultResponseInterceptor, RequestClient } from '@vben/request'; + +import { useTokenStore } from '#/store'; + +const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD); + +function createCDCMRequestClient(baseURL, options) { + const client = new RequestClient({ + ...options, + baseURL, + }); + + client.addResponseInterceptor( + defaultResponseInterceptor({ + codeField: 'code', + dataField: 'data', + successCode: 0, + }), + ); + + // 响应拦截器:自动更新 token + client.addResponseInterceptor({ + fulfilled: (response) => { + const token = response.headers?.token; + if (token) { + // 如果响应头中有新 token,自动更新 store + useTokenStore().setToken(token); + } + return response; + }, + rejected: (error) => { + // 统一错误处理(如 token 过期) + if (error.response?.status === 401) { + useTokenStore().deleteToken(); + // 这里要跳登录页面 + } + return Promise.reject(error); + }, + }); + + // 请求拦截器:自动添加 token + client.addRequestInterceptor({ + fulfilled: (config) => { + const token = useTokenStore().token; + if (token) { + // 添加 CDCM 自定义头部 + config.headers.set('cdcm', token, true); + } + return config; + }, + rejected: (error) => { + // 请求错误处理 + return Promise.reject(error); + }, + }); + return client; +} + +export const cdcmRequestClient = createCDCMRequestClient(apiURL); diff --git a/apps/web-ele/src/views/driver/index.vue b/apps/web-ele/src/views/driver/index.vue index c50cf4e..f20cc1a 100644 --- a/apps/web-ele/src/views/driver/index.vue +++ b/apps/web-ele/src/views/driver/index.vue @@ -1,3 +1,17 @@ + +