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 @@
+
+
采集驱动