chore: unify code formatting and remove unused code
- Apply cargo fmt to Rust code with multiline error handling - Apply Prettier formatting to TypeScript code with trailing commas - Unify #[allow(non_snake_case)] attribute formatting - Remove unused ProviderNotFound error variant from error.rs - Add vitest-report.json to .gitignore to exclude test artifacts - Optimize readability of error handling chains with vertical alignment All tests passing: 22 Rust tests + 126 frontend tests
This commit is contained in:
@@ -333,7 +333,7 @@ const UsagePlanItem: React.FC<{ data: UsageData }> = ({ data }) => {
|
||||
function formatRelativeTime(
|
||||
timestamp: number,
|
||||
now: number,
|
||||
t: (key: string, options?: { count?: number }) => string
|
||||
t: (key: string, options?: { count?: number }) => string,
|
||||
): string {
|
||||
const diff = Math.floor((now - timestamp) / 1000); // 秒
|
||||
|
||||
|
||||
@@ -33,7 +33,9 @@ const TEMPLATE_KEYS = {
|
||||
} as const;
|
||||
|
||||
// 生成预设模板的函数(支持国际化)
|
||||
const generatePresetTemplates = (t: (key: string) => string): Record<string, string> => ({
|
||||
const generatePresetTemplates = (
|
||||
t: (key: string) => string,
|
||||
): Record<string, string> => ({
|
||||
[TEMPLATE_KEYS.CUSTOM]: `({
|
||||
request: {
|
||||
url: "",
|
||||
@@ -135,7 +137,7 @@ const UsageScriptModal: React.FC<UsageScriptModalProps> = ({
|
||||
return TEMPLATE_KEYS.NEW_API;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const handleSave = () => {
|
||||
@@ -165,7 +167,7 @@ const UsageScriptModal: React.FC<UsageScriptModalProps> = ({
|
||||
script.code,
|
||||
script.timeout,
|
||||
script.accessToken,
|
||||
script.userId
|
||||
script.userId,
|
||||
);
|
||||
if (result.success && result.data && result.data.length > 0) {
|
||||
// 显示所有套餐数据
|
||||
@@ -183,7 +185,7 @@ const UsageScriptModal: React.FC<UsageScriptModalProps> = ({
|
||||
`${t("usageScript.testFailed")}: ${result.error || t("endpointTest.noResult")}`,
|
||||
{
|
||||
duration: 5000,
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
} catch (error: any) {
|
||||
@@ -191,7 +193,7 @@ const UsageScriptModal: React.FC<UsageScriptModalProps> = ({
|
||||
`${t("usageScript.testFailed")}: ${error?.message || t("common.unknown")}`,
|
||||
{
|
||||
duration: 5000,
|
||||
}
|
||||
},
|
||||
);
|
||||
} finally {
|
||||
setTesting(false);
|
||||
@@ -215,7 +217,7 @@ const UsageScriptModal: React.FC<UsageScriptModalProps> = ({
|
||||
`${t("usageScript.formatFailed")}: ${error?.message || t("jsonEditor.invalidJson")}`,
|
||||
{
|
||||
duration: 3000,
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -331,26 +331,34 @@ export function ProviderForm({
|
||||
// 处理 meta 字段:基于 draftCustomEndpoints 生成 custom_endpoints
|
||||
// 注意:不使用 customEndpointsMap,因为它包含了候选端点(预设、Base URL 等)
|
||||
// 而我们只需要保存用户真正添加的自定义端点
|
||||
const customEndpointsToSave: Record<string, import("@/types").CustomEndpoint> | null =
|
||||
const customEndpointsToSave: Record<
|
||||
string,
|
||||
import("@/types").CustomEndpoint
|
||||
> | null =
|
||||
draftCustomEndpoints.length > 0
|
||||
? draftCustomEndpoints.reduce((acc, url) => {
|
||||
// 尝试从 initialData.meta 中获取原有的端点元数据(保留 addedAt 和 lastUsed)
|
||||
const existing = initialData?.meta?.custom_endpoints?.[url];
|
||||
if (existing) {
|
||||
acc[url] = existing;
|
||||
} else {
|
||||
// 新端点:使用当前时间戳
|
||||
const now = Date.now();
|
||||
acc[url] = { url, addedAt: now, lastUsed: undefined };
|
||||
}
|
||||
return acc;
|
||||
}, {} as Record<string, import("@/types").CustomEndpoint>)
|
||||
? draftCustomEndpoints.reduce(
|
||||
(acc, url) => {
|
||||
// 尝试从 initialData.meta 中获取原有的端点元数据(保留 addedAt 和 lastUsed)
|
||||
const existing = initialData?.meta?.custom_endpoints?.[url];
|
||||
if (existing) {
|
||||
acc[url] = existing;
|
||||
} else {
|
||||
// 新端点:使用当前时间戳
|
||||
const now = Date.now();
|
||||
acc[url] = { url, addedAt: now, lastUsed: undefined };
|
||||
}
|
||||
return acc;
|
||||
},
|
||||
{} as Record<string, import("@/types").CustomEndpoint>,
|
||||
)
|
||||
: null;
|
||||
|
||||
// 检测是否需要清空端点(重要:区分"用户清空端点"和"用户没有修改端点")
|
||||
const hadEndpoints = initialData?.meta?.custom_endpoints &&
|
||||
Object.keys(initialData.meta.custom_endpoints).length > 0;
|
||||
const needsClearEndpoints = hadEndpoints && draftCustomEndpoints.length === 0;
|
||||
const hadEndpoints =
|
||||
initialData?.meta?.custom_endpoints &&
|
||||
Object.keys(initialData.meta.custom_endpoints).length > 0;
|
||||
const needsClearEndpoints =
|
||||
hadEndpoints && draftCustomEndpoints.length === 0;
|
||||
|
||||
// 如果用户明确清空了端点,传递空对象(而不是 null)让后端知道要删除
|
||||
const mergedMeta = needsClearEndpoints
|
||||
|
||||
Reference in New Issue
Block a user