🎨 chore(web): apply ESLint and Prettier auto-fixes (baseline)

- Ran: bun run eslint:fix && bun run lint:fix
- Inserted AGPL license header via eslint-plugin-header
- Enforced no-multiple-empty-lines and other lint rules
- Formatted code using Prettier v3 (@so1ve/prettier-config)
- No functional changes; formatting-only baseline across JS/JSX files
This commit is contained in:
t0ng7u
2025-08-30 21:15:10 +08:00
parent 41cf516ec5
commit 0d57b1acd4
274 changed files with 11025 additions and 7659 deletions

View File

@@ -56,48 +56,57 @@ export const useModelPricingData = () => {
const [userState] = useContext(UserContext);
// 充值汇率price与美元兑人民币汇率usd_exchange_rate
const priceRate = useMemo(() => statusState?.status?.price ?? 1, [statusState]);
const usdExchangeRate = useMemo(() => statusState?.status?.usd_exchange_rate ?? priceRate, [statusState, priceRate]);
const priceRate = useMemo(
() => statusState?.status?.price ?? 1,
[statusState],
);
const usdExchangeRate = useMemo(
() => statusState?.status?.usd_exchange_rate ?? priceRate,
[statusState, priceRate],
);
const filteredModels = useMemo(() => {
let result = models;
// 分组筛选
if (filterGroup !== 'all') {
result = result.filter(model => model.enable_groups.includes(filterGroup));
result = result.filter((model) =>
model.enable_groups.includes(filterGroup),
);
}
// 计费类型筛选
if (filterQuotaType !== 'all') {
result = result.filter(model => model.quota_type === filterQuotaType);
result = result.filter((model) => model.quota_type === filterQuotaType);
}
// 端点类型筛选
if (filterEndpointType !== 'all') {
result = result.filter(model =>
model.supported_endpoint_types &&
model.supported_endpoint_types.includes(filterEndpointType)
result = result.filter(
(model) =>
model.supported_endpoint_types &&
model.supported_endpoint_types.includes(filterEndpointType),
);
}
// 供应商筛选
if (filterVendor !== 'all') {
if (filterVendor === 'unknown') {
result = result.filter(model => !model.vendor_name);
result = result.filter((model) => !model.vendor_name);
} else {
result = result.filter(model => model.vendor_name === filterVendor);
result = result.filter((model) => model.vendor_name === filterVendor);
}
}
// 标签筛选
if (filterTag !== 'all') {
const tagLower = filterTag.toLowerCase();
result = result.filter(model => {
result = result.filter((model) => {
if (!model.tags) return false;
const tagsArr = model.tags
.toLowerCase()
.split(/[,;|\s]+/)
.map(tag => tag.trim())
.map((tag) => tag.trim())
.filter(Boolean);
return tagsArr.includes(tagLower);
});
@@ -106,16 +115,28 @@ export const useModelPricingData = () => {
// 搜索筛选
if (searchValue.length > 0) {
const searchTerm = searchValue.toLowerCase();
result = result.filter(model =>
(model.model_name && model.model_name.toLowerCase().includes(searchTerm)) ||
(model.description && model.description.toLowerCase().includes(searchTerm)) ||
(model.tags && model.tags.toLowerCase().includes(searchTerm)) ||
(model.vendor_name && model.vendor_name.toLowerCase().includes(searchTerm))
result = result.filter(
(model) =>
(model.model_name &&
model.model_name.toLowerCase().includes(searchTerm)) ||
(model.description &&
model.description.toLowerCase().includes(searchTerm)) ||
(model.tags && model.tags.toLowerCase().includes(searchTerm)) ||
(model.vendor_name &&
model.vendor_name.toLowerCase().includes(searchTerm)),
);
}
return result;
}, [models, searchValue, filterGroup, filterQuotaType, filterEndpointType, filterVendor, filterTag]);
}, [
models,
searchValue,
filterGroup,
filterQuotaType,
filterEndpointType,
filterVendor,
filterTag,
]);
const rowSelection = useMemo(
() => ({
@@ -130,7 +151,7 @@ export const useModelPricingData = () => {
const displayPrice = (usdPrice) => {
let priceInUSD = usdPrice;
if (showWithRecharge) {
priceInUSD = usdPrice * priceRate / usdExchangeRate;
priceInUSD = (usdPrice * priceRate) / usdExchangeRate;
}
if (currency === 'CNY') {
@@ -176,7 +197,16 @@ export const useModelPricingData = () => {
setLoading(true);
let url = '/api/pricing';
const res = await API.get(url);
const { success, message, data, vendors, group_ratio, usable_group, supported_endpoint, auto_groups } = res.data;
const {
success,
message,
data,
vendors,
group_ratio,
usable_group,
supported_endpoint,
auto_groups,
} = res.data;
if (success) {
setGroupRatio(group_ratio);
setUsableGroup(usable_group);
@@ -184,7 +214,7 @@ export const useModelPricingData = () => {
// 构建供应商 Map 方便查找
const vendorMap = {};
if (Array.isArray(vendors)) {
vendors.forEach(v => {
vendors.forEach((v) => {
vendorMap[v.id] = v;
});
}
@@ -260,7 +290,14 @@ export const useModelPricingData = () => {
// 当筛选条件变化时重置到第一页
useEffect(() => {
setCurrentPage(1);
}, [filterGroup, filterQuotaType, filterEndpointType, filterVendor, filterTag, searchValue]);
}, [
filterGroup,
filterQuotaType,
filterEndpointType,
filterVendor,
filterTag,
searchValue,
]);
return {
// 状态
@@ -335,4 +372,4 @@ export const useModelPricingData = () => {
// 国际化
t,
};
};
};

View File

@@ -51,7 +51,8 @@ export const usePricingFilterCounts = ({
const matchesFilters = (model, ignore = []) => {
// 分组
if (!ignore.includes('group') && filterGroup !== 'all') {
if (!model.enable_groups || !model.enable_groups.includes(filterGroup)) return false;
if (!model.enable_groups || !model.enable_groups.includes(filterGroup))
return false;
}
// 计费类型
@@ -90,7 +91,8 @@ export const usePricingFilterCounts = ({
if (
!(
model.model_name.toLowerCase().includes(term) ||
(model.description && model.description.toLowerCase().includes(term)) ||
(model.description &&
model.description.toLowerCase().includes(term)) ||
tags.includes(term) ||
(model.vendor_name && model.vendor_name.toLowerCase().includes(term))
)
@@ -104,27 +106,62 @@ export const usePricingFilterCounts = ({
// 生成不同视图所需的模型集合
const quotaTypeModels = useMemo(
() => allModels.filter((m) => matchesFilters(m, ['quota'])),
[allModels, filterGroup, filterEndpointType, filterVendor, filterTag, searchValue]
[
allModels,
filterGroup,
filterEndpointType,
filterVendor,
filterTag,
searchValue,
],
);
const endpointTypeModels = useMemo(
() => allModels.filter((m) => matchesFilters(m, ['endpoint'])),
[allModels, filterGroup, filterQuotaType, filterVendor, filterTag, searchValue]
[
allModels,
filterGroup,
filterQuotaType,
filterVendor,
filterTag,
searchValue,
],
);
const vendorModels = useMemo(
() => allModels.filter((m) => matchesFilters(m, ['vendor'])),
[allModels, filterGroup, filterQuotaType, filterEndpointType, filterTag, searchValue]
[
allModels,
filterGroup,
filterQuotaType,
filterEndpointType,
filterTag,
searchValue,
],
);
const tagModels = useMemo(
() => allModels.filter((m) => matchesFilters(m, ['tag'])),
[allModels, filterGroup, filterQuotaType, filterEndpointType, filterVendor, searchValue]
[
allModels,
filterGroup,
filterQuotaType,
filterEndpointType,
filterVendor,
searchValue,
],
);
const groupCountModels = useMemo(
() => allModels.filter((m) => matchesFilters(m, ['group'])),
[allModels, filterQuotaType, filterEndpointType, filterVendor, filterTag, searchValue]
[
allModels,
filterQuotaType,
filterEndpointType,
filterVendor,
filterTag,
searchValue,
],
);
return {
@@ -134,4 +171,4 @@ export const usePricingFilterCounts = ({
groupCountModels,
tagModels,
};
};
};