Yumi数据
This commit is contained in:
parent
b8b5182c67
commit
9dd69b2374
@ -2922,6 +2922,18 @@
|
|||||||
"x-permissions": ["payment-bill:view"]
|
"x-permissions": ["payment-bill:view"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/admin/payment/recharge-apps": {
|
||||||
|
"get": {
|
||||||
|
"operationId": "listRechargeApps",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"$ref": "#/components/responses/EmptyResponse"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-permission": "payment-bill:view",
|
||||||
|
"x-permissions": ["payment-bill:view"]
|
||||||
|
}
|
||||||
|
},
|
||||||
"/admin/payment/recharge-products": {
|
"/admin/payment/recharge-products": {
|
||||||
"get": {
|
"get": {
|
||||||
"operationId": "listRechargeProducts",
|
"operationId": "listRechargeProducts",
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import {
|
|||||||
approveFinanceWithdrawalApplication,
|
approveFinanceWithdrawalApplication,
|
||||||
createFinanceApplication,
|
createFinanceApplication,
|
||||||
fetchFinanceApplicationOptions,
|
fetchFinanceApplicationOptions,
|
||||||
|
fetchFinanceRechargeApps,
|
||||||
fetchFinanceRechargeSummary,
|
fetchFinanceRechargeSummary,
|
||||||
fetchFinanceSession,
|
fetchFinanceSession,
|
||||||
filterOperationsByPermissions,
|
filterOperationsByPermissions,
|
||||||
@ -40,6 +41,7 @@ export function FinanceApp() {
|
|||||||
const [rechargeDetailsState, setRechargeDetailsState] = useState({ data: { items: [], page: 1, pageSize, total: 0 }, error: "", loading: false });
|
const [rechargeDetailsState, setRechargeDetailsState] = useState({ data: { items: [], page: 1, pageSize, total: 0 }, error: "", loading: false });
|
||||||
const [rechargeSummaryState, setRechargeSummaryState] = useState({ data: EMPTY_RECHARGE_SUMMARY, error: "", loading: false });
|
const [rechargeSummaryState, setRechargeSummaryState] = useState({ data: EMPTY_RECHARGE_SUMMARY, error: "", loading: false });
|
||||||
const [rechargeRegionsState, setRechargeRegionsState] = useState({ appCode: "", items: [], loading: false });
|
const [rechargeRegionsState, setRechargeRegionsState] = useState({ appCode: "", items: [], loading: false });
|
||||||
|
const [rechargeAppsState, setRechargeAppsState] = useState({ items: [], loaded: false });
|
||||||
const [googlePaidRefreshing, setGooglePaidRefreshing] = useState(false);
|
const [googlePaidRefreshing, setGooglePaidRefreshing] = useState(false);
|
||||||
const [myApplicationsState, setMyApplicationsState] = useState({ data: { items: [], page: 1, pageSize, total: 0 }, error: "", loading: false });
|
const [myApplicationsState, setMyApplicationsState] = useState({ data: { items: [], page: 1, pageSize, total: 0 }, error: "", loading: false });
|
||||||
const [applicationsState, setApplicationsState] = useState({ data: { items: [], page: 1, pageSize, total: 0 }, error: "", loading: false });
|
const [applicationsState, setApplicationsState] = useState({ data: { items: [], page: 1, pageSize, total: 0 }, error: "", loading: false });
|
||||||
@ -159,18 +161,36 @@ export function FinanceApp() {
|
|||||||
}
|
}
|
||||||
}, [myApplicationQuery, session?.canCreateApplication]);
|
}, [myApplicationQuery, session?.canCreateApplication]);
|
||||||
|
|
||||||
|
// 充值详情的 App 目录来自 recharge-apps(含 Yumi 等 legacy 外部账单源);接口未就绪时回退到财务通用 App 列表。
|
||||||
|
const rechargeApps = useMemo(
|
||||||
|
() => (rechargeAppsState.loaded && rechargeAppsState.items.length ? rechargeAppsState.items : optionsState.data.apps),
|
||||||
|
[optionsState.data.apps, rechargeAppsState]
|
||||||
|
);
|
||||||
|
|
||||||
|
const loadRechargeApps = useCallback(async () => {
|
||||||
|
if (!session?.canViewAppRechargeDetails) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const items = await fetchFinanceRechargeApps();
|
||||||
|
setRechargeAppsState({ items, loaded: true });
|
||||||
|
} catch {
|
||||||
|
setRechargeAppsState({ items: [], loaded: false });
|
||||||
|
}
|
||||||
|
}, [session?.canViewAppRechargeDetails]);
|
||||||
|
|
||||||
const loadRechargeDetails = useCallback(async () => {
|
const loadRechargeDetails = useCallback(async () => {
|
||||||
if (!session?.canViewAppRechargeDetails) {
|
if (!session?.canViewAppRechargeDetails) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setRechargeDetailsState((current) => ({ ...current, error: "", loading: true }));
|
setRechargeDetailsState((current) => ({ ...current, error: "", loading: true }));
|
||||||
try {
|
try {
|
||||||
const data = await listFinanceRechargeDetails(rechargeDetailQuery, optionsState.data.apps);
|
const data = await listFinanceRechargeDetails(rechargeDetailQuery, rechargeApps);
|
||||||
setRechargeDetailsState({ data, error: "", loading: false });
|
setRechargeDetailsState({ data, error: "", loading: false });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setRechargeDetailsState((current) => ({ ...current, error: err.message || "加载 APP 充值详情失败", loading: false }));
|
setRechargeDetailsState((current) => ({ ...current, error: err.message || "加载 APP 充值详情失败", loading: false }));
|
||||||
}
|
}
|
||||||
}, [optionsState.data.apps, rechargeDetailQuery, session?.canViewAppRechargeDetails]);
|
}, [rechargeApps, rechargeDetailQuery, session?.canViewAppRechargeDetails]);
|
||||||
|
|
||||||
const loadRechargeSummary = useCallback(async () => {
|
const loadRechargeSummary = useCallback(async () => {
|
||||||
if (!session?.canViewAppRechargeDetails) {
|
if (!session?.canViewAppRechargeDetails) {
|
||||||
@ -178,12 +198,12 @@ export function FinanceApp() {
|
|||||||
}
|
}
|
||||||
setRechargeSummaryState((current) => ({ ...current, error: "", loading: true }));
|
setRechargeSummaryState((current) => ({ ...current, error: "", loading: true }));
|
||||||
try {
|
try {
|
||||||
const data = await fetchFinanceRechargeSummary(rechargeDetailQuery, optionsState.data.apps);
|
const data = await fetchFinanceRechargeSummary(rechargeDetailQuery, rechargeApps);
|
||||||
setRechargeSummaryState({ data, error: "", loading: false });
|
setRechargeSummaryState({ data, error: "", loading: false });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setRechargeSummaryState((current) => ({ ...current, error: err.message || "加载充值汇总失败", loading: false }));
|
setRechargeSummaryState((current) => ({ ...current, error: err.message || "加载充值汇总失败", loading: false }));
|
||||||
}
|
}
|
||||||
}, [optionsState.data.apps, rechargeDetailQuery, session?.canViewAppRechargeDetails]);
|
}, [rechargeApps, rechargeDetailQuery, session?.canViewAppRechargeDetails]);
|
||||||
|
|
||||||
const rechargeAppCode = rechargeDetailFilters.appCode;
|
const rechargeAppCode = rechargeDetailFilters.appCode;
|
||||||
const loadRechargeRegions = useCallback(async () => {
|
const loadRechargeRegions = useCallback(async () => {
|
||||||
@ -258,6 +278,10 @@ export function FinanceApp() {
|
|||||||
loadMyApplications();
|
loadMyApplications();
|
||||||
}, [loadMyApplications]);
|
}, [loadMyApplications]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
loadRechargeApps();
|
||||||
|
}, [loadRechargeApps]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadRechargeDetails();
|
loadRechargeDetails();
|
||||||
}, [loadRechargeDetails]);
|
}, [loadRechargeDetails]);
|
||||||
@ -403,7 +427,7 @@ export function FinanceApp() {
|
|||||||
filters={rechargeDetailFilters}
|
filters={rechargeDetailFilters}
|
||||||
googlePaidRefreshing={googlePaidRefreshing}
|
googlePaidRefreshing={googlePaidRefreshing}
|
||||||
loading={rechargeDetailsState.loading}
|
loading={rechargeDetailsState.loading}
|
||||||
options={optionsState.data}
|
options={{ ...optionsState.data, apps: rechargeApps }}
|
||||||
regions={rechargeRegionsState.items}
|
regions={rechargeRegionsState.items}
|
||||||
summary={rechargeSummaryState.data}
|
summary={rechargeSummaryState.data}
|
||||||
summaryLoading={rechargeSummaryState.loading}
|
summaryLoading={rechargeSummaryState.loading}
|
||||||
|
|||||||
@ -43,6 +43,15 @@ export async function fetchFinanceApplicationOptions() {
|
|||||||
return normalizeOptions({ apps: data });
|
return normalizeOptions({ apps: data });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 充值详情的 App 目录与其他财务页不同:包含 Yumi 这类 legacy 外部账单源,只用于账单查询。
|
||||||
|
export async function fetchFinanceRechargeApps() {
|
||||||
|
const endpoint = API_ENDPOINTS.listRechargeApps;
|
||||||
|
const data = await apiRequest(apiEndpointPath(API_OPERATIONS.listRechargeApps), {
|
||||||
|
method: endpoint.method
|
||||||
|
});
|
||||||
|
return normalizeApps(data);
|
||||||
|
}
|
||||||
|
|
||||||
export async function listFinanceApplications(query = {}) {
|
export async function listFinanceApplications(query = {}) {
|
||||||
const endpoint = API_ENDPOINTS.listFinanceApplications;
|
const endpoint = API_ENDPOINTS.listFinanceApplications;
|
||||||
const data = await apiRequest(apiEndpointPath(API_OPERATIONS.listFinanceApplications), {
|
const data = await apiRequest(apiEndpointPath(API_OPERATIONS.listFinanceApplications), {
|
||||||
|
|||||||
@ -269,6 +269,18 @@ export function rechargeTypeLabel(value) {
|
|||||||
if (value === "usdt_trc20") {
|
if (value === "usdt_trc20") {
|
||||||
return "三方充值 · USDT";
|
return "三方充值 · USDT";
|
||||||
}
|
}
|
||||||
|
if (value === "apple_recharge") {
|
||||||
|
return "苹果充值";
|
||||||
|
}
|
||||||
|
if (value === "huawei_recharge") {
|
||||||
|
return "华为充值";
|
||||||
|
}
|
||||||
|
if (value === "telegram_recharge") {
|
||||||
|
return "Telegram 充值";
|
||||||
|
}
|
||||||
|
if (value === "web_recharge") {
|
||||||
|
return "三方充值 · Web";
|
||||||
|
}
|
||||||
return value || "-";
|
return value || "-";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -192,6 +192,7 @@ export const API_OPERATIONS = {
|
|||||||
listPopups: "listPopups",
|
listPopups: "listPopups",
|
||||||
listPrettyIdPools: "listPrettyIdPools",
|
listPrettyIdPools: "listPrettyIdPools",
|
||||||
listPrettyIds: "listPrettyIds",
|
listPrettyIds: "listPrettyIds",
|
||||||
|
listRechargeApps: "listRechargeApps",
|
||||||
listRechargeBills: "listRechargeBills",
|
listRechargeBills: "listRechargeBills",
|
||||||
listRechargeProducts: "listRechargeProducts",
|
listRechargeProducts: "listRechargeProducts",
|
||||||
listRechargeRegions: "listRechargeRegions",
|
listRechargeRegions: "listRechargeRegions",
|
||||||
@ -1583,6 +1584,13 @@ export const API_ENDPOINTS: Record<ApiOperationId, ApiEndpoint> = {
|
|||||||
permission: "pretty-id:view",
|
permission: "pretty-id:view",
|
||||||
permissions: ["pretty-id:view"]
|
permissions: ["pretty-id:view"]
|
||||||
},
|
},
|
||||||
|
listRechargeApps: {
|
||||||
|
method: "GET",
|
||||||
|
operationId: API_OPERATIONS.listRechargeApps,
|
||||||
|
path: "/v1/admin/payment/recharge-apps",
|
||||||
|
permission: "payment-bill:view",
|
||||||
|
permissions: ["payment-bill:view"]
|
||||||
|
},
|
||||||
listRechargeBills: {
|
listRechargeBills: {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
operationId: API_OPERATIONS.listRechargeBills,
|
operationId: API_OPERATIONS.listRechargeBills,
|
||||||
|
|||||||
28
src/shared/api/generated/schema.d.ts
vendored
28
src/shared/api/generated/schema.d.ts
vendored
@ -1924,6 +1924,22 @@ export interface paths {
|
|||||||
patch?: never;
|
patch?: never;
|
||||||
trace?: never;
|
trace?: never;
|
||||||
};
|
};
|
||||||
|
"/admin/payment/recharge-apps": {
|
||||||
|
parameters: {
|
||||||
|
query?: never;
|
||||||
|
header?: never;
|
||||||
|
path?: never;
|
||||||
|
cookie?: never;
|
||||||
|
};
|
||||||
|
get: operations["listRechargeApps"];
|
||||||
|
put?: never;
|
||||||
|
post?: never;
|
||||||
|
delete?: never;
|
||||||
|
options?: never;
|
||||||
|
head?: never;
|
||||||
|
patch?: never;
|
||||||
|
trace?: never;
|
||||||
|
};
|
||||||
"/admin/payment/recharge-products": {
|
"/admin/payment/recharge-products": {
|
||||||
parameters: {
|
parameters: {
|
||||||
query?: never;
|
query?: never;
|
||||||
@ -6832,6 +6848,18 @@ export interface operations {
|
|||||||
200: components["responses"]["EmptyResponse"];
|
200: components["responses"]["EmptyResponse"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
listRechargeApps: {
|
||||||
|
parameters: {
|
||||||
|
query?: never;
|
||||||
|
header?: never;
|
||||||
|
path?: never;
|
||||||
|
cookie?: never;
|
||||||
|
};
|
||||||
|
requestBody?: never;
|
||||||
|
responses: {
|
||||||
|
200: components["responses"]["EmptyResponse"];
|
||||||
|
};
|
||||||
|
};
|
||||||
listRechargeProducts: {
|
listRechargeProducts: {
|
||||||
parameters: {
|
parameters: {
|
||||||
query?: never;
|
query?: never;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user