diff --git a/apps/.env.development b/apps/.env.development index 05c9893..61ffdad 100644 --- a/apps/.env.development +++ b/apps/.env.development @@ -4,7 +4,7 @@ VITE_PORT=5999 VITE_BASE=/ # 接口地址 -VITE_GLOB_API_URL=http://127.0.0.1:2700/console +VITE_GLOB_API_URL=/console # OSS VITE_GLOB_OSS_BUCKET=tkm-likei diff --git a/apps/src/api/legacy/resident-activity.ts b/apps/src/api/legacy/resident-activity.ts index 49d43d6..6ca74b4 100644 --- a/apps/src/api/legacy/resident-activity.ts +++ b/apps/src/api/legacy/resident-activity.ts @@ -2,6 +2,9 @@ import type { LegacyPageResult } from '#/api/legacy/system'; import { requestClient } from '#/api/request'; +const SPECIFIED_GIFT_WEEKLY_RANK_BASE = + '/go/resident-activity/specified-gift-weekly-rank'; + export async function getResidentInviteConfig(sysOrigin: string) { return requestClient.get>('/resident-activity/invite/config', { params: { sysOrigin }, @@ -41,3 +44,68 @@ export async function resetResidentRegisterRewardConfig(sysOrigin: string) { params: { sysOrigin }, }); } + +export async function pageSpecifiedGiftWeeklyRankConfigs(params: Record) { + return requestClient.get>>( + `${SPECIFIED_GIFT_WEEKLY_RANK_BASE}/config/page`, + { params }, + ); +} + +export async function getSpecifiedGiftWeeklyRankConfig(params: Record) { + return requestClient.get>( + `${SPECIFIED_GIFT_WEEKLY_RANK_BASE}/config`, + { params }, + ); +} + +export async function saveSpecifiedGiftWeeklyRankConfig(data: Record) { + return requestClient.post(`${SPECIFIED_GIFT_WEEKLY_RANK_BASE}/config/save`, data); +} + +export async function pageSpecifiedGiftWeeklyRankSnapshots(params: Record) { + return requestClient.get>>( + `${SPECIFIED_GIFT_WEEKLY_RANK_BASE}/snapshot/page`, + { params }, + ); +} + +export async function pageSpecifiedGiftWeeklyRankRewardRecords( + params: Record, +) { + return requestClient.get>>( + `${SPECIFIED_GIFT_WEEKLY_RANK_BASE}/reward-record/page`, + { params }, + ); +} + +export async function retrySpecifiedGiftWeeklyRankRewardRecord(id: number | string) { + return requestClient.post>( + `${SPECIFIED_GIFT_WEEKLY_RANK_BASE}/reward-record/retry`, + { id }, + ); +} + +export async function getWeekStarConfig(params: Record) { + return getSpecifiedGiftWeeklyRankConfig(params); +} + +export async function saveWeekStarConfig(data: Record) { + return saveSpecifiedGiftWeeklyRankConfig(data); +} + +export async function pageWeekStarConfigs(params: Record) { + return pageSpecifiedGiftWeeklyRankConfigs(params); +} + +export async function pageWeekStarSnapshots(params: Record) { + return pageSpecifiedGiftWeeklyRankSnapshots(params); +} + +export async function pageWeekStarRewardRecords(params: Record) { + return pageSpecifiedGiftWeeklyRankRewardRecords(params); +} + +export async function retryWeekStarRewardRecord(id: number | string) { + return retrySpecifiedGiftWeeklyRankRewardRecord(id); +} diff --git a/apps/src/api/request.ts b/apps/src/api/request.ts index 49e61b4..27e3cdb 100644 --- a/apps/src/api/request.ts +++ b/apps/src/api/request.ts @@ -15,11 +15,7 @@ import { message } from 'antdv-next'; import { useAuthStore } from '#/store'; -const { apiURL: rawApiURL } = useAppConfig(import.meta.env, import.meta.env.PROD); -const apiURL = - import.meta.env.DEV && rawApiURL === '/console' - ? 'http://127.0.0.1:2700/console' - : rawApiURL; +const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD); function createRequestClient(baseURL: string, options?: RequestClientOptions) { const client = new RequestClient({ diff --git a/apps/src/router/routes/modules/resident-activity.ts b/apps/src/router/routes/modules/resident-activity.ts index a75f3ad..50e762e 100644 --- a/apps/src/router/routes/modules/resident-activity.ts +++ b/apps/src/router/routes/modules/resident-activity.ts @@ -29,6 +29,13 @@ const routes: RouteRecordRaw[] = [ component: () => import('#/views/resident-activity/invite-list.vue'), meta: { title: '邀请活动列表' }, }, + { + name: 'ResidentSpecifiedGiftWeeklyRank', + path: 'specified-gift-weekly-rank', + alias: 'week-star', + component: () => import('#/views/resident-activity/week-star.vue'), + meta: { title: '指定礼物周榜' }, + }, ], }, ]; diff --git a/apps/src/views/resident-activity/week-star.vue b/apps/src/views/resident-activity/week-star.vue new file mode 100644 index 0000000..7777ed3 --- /dev/null +++ b/apps/src/views/resident-activity/week-star.vue @@ -0,0 +1,1141 @@ + + + + + diff --git a/apps/src/views/system/region-config.vue b/apps/src/views/system/region-config.vue index b6e4a02..9882052 100644 --- a/apps/src/views/system/region-config.vue +++ b/apps/src/views/system/region-config.vue @@ -11,6 +11,7 @@ import { addRegionAssistConfig, addRegionConfig, deleteRegionAssistConfig, + getCountryAlls, regionAssistConfigTable, regionConfigTable, resetRegionWithdrawal, @@ -18,6 +19,7 @@ import { updateRegionConfig, } from '#/api/legacy/system'; import { + ACTUAL_LANGUAGE_OPTIONS, BANK_CARD_TYPES, formatDate, getAllowedSysOrigins, @@ -207,11 +209,11 @@ function createDiamondMetadata(): RegionMetadataField[] { function createRegionForm() { return { - countryCodes: '', + countryCodes: [] as string[], diamondMetadata: {}, diamondMetadatas: createDiamondMetadata(), id: '', - langeCodes: '', + langeCodes: [] as string[], metadata: {}, metadatas: createRegionMetadata(), regionCode: '', @@ -247,6 +249,7 @@ const assistDrawerOpen = ref(false); const regionList = ref>>([]); const assistList = ref>>([]); const regionOptions = ref>>([]); +const countries = ref>>([]); const regionQuery = reactive({ sysOrigin: '', @@ -299,6 +302,25 @@ const specialAssistTypes = new Set([ 'WITHDRAW_PROPORTION_DIAMOND_USD_TIPS', ]); +const countrySelectOptions = computed(() => + countries.value + .filter((item) => Boolean(item.alphaTwo)) + .map((item) => ({ + label: `${item.aliasName || item.countryName || item.alphaTwo} (${item.alphaTwo})`, + value: String(item.alphaTwo), + })), +); + +const languageSelectOptions = ACTUAL_LANGUAGE_OPTIONS.map((item) => ({ + label: `${item.name} (${item.value})`, + value: item.value, +})); + +const withdrawalWaysSelectOptions = BANK_CARD_TYPES.map((item) => ({ + label: item.name, + value: item.value, +})); + watch( sysOriginOptions, (options) => { @@ -329,6 +351,13 @@ function assignAssistForm(target: ReturnType) { Object.assign(assistForm, cloneValue(target)); } +function splitCommaValues(value: unknown) { + return String(value || '') + .split(',') + .map((item) => item.trim()) + .filter(Boolean); +} + function getRegionSubmitPayload() { const metadata = Object.fromEntries( regionForm.metadatas.map((item) => [ @@ -343,10 +372,10 @@ function getRegionSubmitPayload() { ]), ); return { - countryCodes: regionForm.countryCodes?.trim(), + countryCodes: regionForm.countryCodes.join(','), diamondMetadata, id: regionForm.id, - langeCodes: regionForm.langeCodes?.trim(), + langeCodes: regionForm.langeCodes.join(','), metadata, regionCode: regionForm.regionCode?.trim(), regionName: regionForm.regionName?.trim(), @@ -365,14 +394,12 @@ function fillRegionForm(row?: Record) { nextForm.id = row.id || ''; nextForm.regionCode = row.regionCode || ''; nextForm.regionName = row.regionName || ''; - nextForm.countryCodes = row.countryCodes || ''; - nextForm.langeCodes = row.langeCodes || ''; + nextForm.countryCodes = splitCommaValues(row.countryCodes); + nextForm.langeCodes = splitCommaValues(row.langeCodes); nextForm.remarks = row.remarks || ''; nextForm.withdrawalWaysList = Array.isArray(row.withdrawalWaysList) ? [...row.withdrawalWaysList] - : String(row.withdrawalWays || '') - .split(',') - .filter(Boolean); + : splitCommaValues(row.withdrawalWays); const metadata = row.metadata || {}; nextForm.metadatas = createRegionMetadata().map((item) => ({ @@ -464,6 +491,10 @@ async function loadAssistList() { } } +async function loadCountryOptions() { + countries.value = (await getCountryAlls()) || []; +} + async function handleSaveRegion() { if (!regionForm.regionCode?.trim()) { message.warning('请输入区域编码'); @@ -585,6 +616,7 @@ function handleDeleteAssist(row: Record) { loadRegionList(); loadAssistList(); +loadCountryOptions();