hookehuyr

refactor: 统一响应格式和成功状态码

将接口响应格式中的 message 字段统一改为 msg
将成功状态码从 0 改为 1
更新相关文档和测试用例
禁用百度统计脚本
添加主题模式默认配置
/*
* @Date: 2025-11-17 19:45:50
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2026-01-06 17:26:59
* @FilePath: /vben-admin/apps/backend-mock/utils/response.ts
* @Description: 文件描述
*/
import type { EventHandlerRequest, H3Event } from 'h3';
import { setResponseStatus } from 'h3';
export function useResponseSuccess<T = any>(data: T) {
return {
code: 0,
code: 1,
data,
error: null,
message: 'ok',
msg: 'ok',
};
}
......@@ -15,8 +22,9 @@ export function usePageResponseSuccess<T = any>(
page: number | string,
pageSize: number | string,
list: T[],
{ message = 'ok' } = {},
{ msg, message } = {} as { message?: string; msg?: string },
) {
const finalMessage = msg ?? message ?? 'ok';
const pageData = pagination(
Number.parseInt(`${page}`),
Number.parseInt(`${pageSize}`),
......@@ -28,7 +36,7 @@ export function usePageResponseSuccess<T = any>(
items: pageData,
total: list.length,
}),
message,
msg: finalMessage,
};
}
......@@ -37,7 +45,7 @@ export function useResponseError(message: string, error: any = null) {
code: -1,
data: null,
error,
message,
msg: message,
};
}
......
# 应用标题
VITE_APP_TITLE=Vben Admin Ele
VITE_APP_TITLE=Itomix Admin
# 应用命名空间,用于缓存、store等功能的前缀,确保隔离
VITE_APP_NAMESPACE=vben-web-ele
VITE_APP_NAMESPACE=itomix-web-ele
# 对store进行加密的密钥,在将store持久化到localStorage时会使用该密钥进行加密
VITE_APP_STORE_SECURE_KEY=please-replace-me-with-your-own-key
......
......@@ -17,14 +17,14 @@
<script>
// 生产环境下注入百度统计
if (window._VBEN_ADMIN_PRO_APP_CONF_) {
var _hmt = _hmt || [];
(function () {
var hm = document.createElement('script');
hm.src =
'https://hm.baidu.com/hm.js?97352b16ed2df8c3860cf5a1a65fb4dd';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(hm, s);
})();
// var _hmt = _hmt || [];
// (function () {
// var hm = document.createElement('script');
// hm.src =
// 'https://hm.baidu.com/hm.js?97352b16ed2df8c3860cf5a1a65fb4dd';
// var s = document.getElementsByTagName('script')[0];
// s.parentNode.insertBefore(hm, s);
// })();
}
</script>
</head>
......
......@@ -76,7 +76,7 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
defaultResponseInterceptor({
codeField: 'code',
dataField: 'data',
successCode: 0,
successCode: 1,
}),
);
......@@ -95,9 +95,9 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
client.addResponseInterceptor(
errorMessageResponseInterceptor((msg: string, error) => {
// 这里可以根据业务进行定制,你可以拿到 error 内的信息进行定制化处理,根据不同的 code 做不同的提示,而不是直接使用 message.error 提示 msg
// 当前mock接口返回的错误字段是 error 或者 message
// 当前接口返回的错误字段是 error 或者 msg
const responseData = error?.response?.data ?? {};
const errorMessage = responseData?.error ?? responseData?.message ?? '';
const errorMessage = responseData?.error ?? responseData?.msg ?? '';
// 如果没有错误信息,则会根据状态码进行提示
ElMessage.error(errorMessage || msg);
}),
......
/*
* @Date: 2025-11-17 19:45:50
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2026-01-06 17:14:40
* @FilePath: /vben-admin/apps/web-ele/src/preferences.ts
* @Description: 文件描述
*/
import { defineOverridesPreferences } from '@vben/preferences';
/**
......@@ -10,4 +17,7 @@ export const overridesPreferences = defineOverridesPreferences({
app: {
name: import.meta.env.VITE_APP_TITLE,
},
theme: {
mode: 'light',
},
});
......
......@@ -235,7 +235,7 @@ function createRequestClient(baseURL: string) {
const { code, data } = responseData;
if (status >= 200 && status < 400 && code === 0) {
if (status >= 200 && status < 400 && code === 1) {
return data;
}
throw Object.assign({}, response, { response });
......@@ -257,9 +257,9 @@ function createRequestClient(baseURL: string) {
client.addResponseInterceptor(
errorMessageResponseInterceptor((msg: string, error) => {
// 这里可以根据业务进行定制,你可以拿到 error 内的信息进行定制化处理,根据不同的 code 做不同的提示,而不是直接使用 message.error 提示 msg
// 当前mock接口返回的错误字段是 error 或者 message
// 当前接口返回的错误字段是 error 或者 msg
const responseData = error?.response?.data ?? {};
const errorMessage = responseData?.error ?? responseData?.message ?? '';
const errorMessage = responseData?.error ?? responseData?.msg ?? '';
// 如果没有错误信息,则会根据状态码进行提示
message.error(errorMessage || msg);
}),
......
......@@ -269,7 +269,7 @@ function createRequestClient(baseURL: string) {
// 指定接口返回的数据中装载了主要数据的字段名
dataField: 'data',
// 请求成功的 code 值,如果接口返回的 code 等于 successCode 则会认为是成功的请求
successCode: 0,
successCode: 1,
}),
);
......@@ -288,9 +288,9 @@ function createRequestClient(baseURL: string) {
client.addResponseInterceptor(
errorMessageResponseInterceptor((msg: string, error) => {
// 这里可以根据业务进行定制,你可以拿到 error 内的信息进行定制化处理,根据不同的 code 做不同的提示,而不是直接使用 message.error 提示 msg
// 当前mock接口返回的错误字段是 error 或者 message
// 当前接口返回的错误字段是 error 或者 msg
const responseData = error?.response?.data ?? {};
const errorMessage = responseData?.error ?? responseData?.message ?? '';
const errorMessage = responseData?.error ?? responseData?.msg ?? '';
// 如果没有错误信息,则会根据状态码进行提示
message.error(errorMessage || msg);
}),
......
......@@ -127,12 +127,12 @@ outline: deep
```ts
interface HttpResponse<T = any> {
/**
* 0 表示成功 其他表示失败
* 0 means success, others means fail
* 1 表示成功 其他表示失败
* 1 means success, others means fail
*/
code: number;
data: T;
message: string;
msg: string;
}
```
......
......@@ -9,7 +9,7 @@ import axios from 'axios';
export const defaultResponseInterceptor = ({
codeField = 'code',
dataField = 'data',
successCode = 0,
successCode = 1,
}: {
/** 响应数据中代表访问结果的字段名 */
codeField: string;
......
......@@ -69,12 +69,12 @@ type MakeErrorMessageFn = (message: string, error: any) => void;
interface HttpResponse<T = any> {
/**
* 0 表示成功 其他表示失败
* 0 means success, others means fail
* 1 表示成功 其他表示失败
* 1 means success, others means fail
*/
code: number;
data: T;
message: string;
msg: string;
}
export type {
......
......@@ -90,7 +90,7 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
defaultResponseInterceptor({
codeField: 'code',
dataField: 'data',
successCode: 0,
successCode: 1,
}),
);
......@@ -109,9 +109,9 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
client.addResponseInterceptor(
errorMessageResponseInterceptor((msg: string, error) => {
// 这里可以根据业务进行定制,你可以拿到 error 内的信息进行定制化处理,根据不同的 code 做不同的提示,而不是直接使用 message.error 提示 msg
// 当前mock接口返回的错误字段是 error 或者 message
// 当前接口返回的错误字段是 error 或者 msg
const responseData = error?.response?.data ?? {};
const errorMessage = responseData?.error ?? responseData?.message ?? '';
const errorMessage = responseData?.error ?? responseData?.msg ?? '';
// 如果没有错误信息,则会根据状态码进行提示
message.error(errorMessage || msg);
}),
......