162 lines
5.8 KiB
JavaScript
162 lines
5.8 KiB
JavaScript
(function () {
|
||
'use strict';
|
||
|
||
function params() {
|
||
return new URLSearchParams(window.location.search || '');
|
||
}
|
||
|
||
function normalizeOverview(payload) {
|
||
var profile = (payload && payload.profile) || {};
|
||
var role = (payload && payload.bd_profile) || {};
|
||
return {
|
||
profile: {
|
||
userId: String(profile.user_id || role.user_id || ''),
|
||
displayUserId: String(
|
||
profile.display_user_id ||
|
||
profile.user_id ||
|
||
role.user_id ||
|
||
''
|
||
),
|
||
name: String(profile.username || ''),
|
||
avatar: String(profile.avatar || ''),
|
||
contact: String(
|
||
profile.contact_info || profile.contactInfo || ''
|
||
),
|
||
},
|
||
};
|
||
}
|
||
|
||
function normalizeStats(payload, range) {
|
||
return {
|
||
range: (payload && payload.range) || range,
|
||
agencies: Array.isArray(payload && payload.items)
|
||
? payload.items.map(function (item) {
|
||
var agency = item.agency || {};
|
||
var owner = item.owner || {};
|
||
return {
|
||
id: String(agency.agency_id || ''),
|
||
shortId: String(
|
||
agency.short_id || agency.agency_id || ''
|
||
),
|
||
name: String(agency.name || ''),
|
||
avatar: String(agency.avatar || ''),
|
||
ownerId: String(
|
||
owner.display_user_id || owner.user_id || ''
|
||
),
|
||
ownerName: String(owner.username || ''),
|
||
country: String(item.country || owner.country || ''),
|
||
totalHosts: Number(item.total_hosts || 0),
|
||
giftedHostCount: Number(item.gifted_host_count || 0),
|
||
diamondEarnings: Number(item.diamond_earnings || 0),
|
||
joinedAtMS: Number(item.joined_at_ms || 0),
|
||
};
|
||
})
|
||
: [],
|
||
};
|
||
}
|
||
|
||
function mockData(range) {
|
||
return {
|
||
profile: {
|
||
userId: '163028',
|
||
displayUserId: '163028',
|
||
name: 'dada',
|
||
avatar: '',
|
||
contact: '1586668885',
|
||
},
|
||
stats: normalizeStats(
|
||
{
|
||
items: [
|
||
{
|
||
agency: {
|
||
agency_id: '343434',
|
||
short_id: '343434',
|
||
name: 'Fami Stars',
|
||
},
|
||
owner: {
|
||
display_user_id: '3534',
|
||
username: 'Agency owner',
|
||
},
|
||
country: 'Saudi Arabia',
|
||
total_hosts: 12,
|
||
gifted_host_count: 8,
|
||
diamond_earnings: 5152051,
|
||
joined_at_ms: new Date(
|
||
2025,
|
||
4,
|
||
31,
|
||
15,
|
||
0
|
||
).getTime(),
|
||
},
|
||
],
|
||
},
|
||
range
|
||
),
|
||
};
|
||
}
|
||
|
||
function load(range) {
|
||
if (params().get('mock') === '1')
|
||
return Promise.resolve(mockData(range));
|
||
var api = window.HyAppAPI || {};
|
||
if (!api.bdCenter || !api.user) {
|
||
return Promise.reject(new Error('guild_api_unavailable'));
|
||
}
|
||
return Promise.all([
|
||
api.bdCenter.overview(),
|
||
api.bdCenter.stats({
|
||
start_date: range.startDate,
|
||
end_date: range.endDate,
|
||
}),
|
||
]).then(function (results) {
|
||
var overview = normalizeOverview(results[0]);
|
||
return {
|
||
profile: overview.profile,
|
||
stats: normalizeStats(results[1], range),
|
||
};
|
||
});
|
||
}
|
||
|
||
function commandID() {
|
||
var random =
|
||
window.crypto && window.crypto.randomUUID
|
||
? window.crypto.randomUUID()
|
||
: Date.now() + '-' + Math.random().toString(16).slice(2);
|
||
return 'fami-bd-invite-agency:' + random;
|
||
}
|
||
|
||
function saveContact(value) {
|
||
if (params().get('mock') === '1') return Promise.resolve({});
|
||
return window.HyAppAPI.user.updateContact({ contact_info: value });
|
||
}
|
||
|
||
function inviteAgency(displayUserID, agencyName) {
|
||
if (params().get('mock') === '1') return Promise.resolve({});
|
||
var api = window.HyAppAPI;
|
||
// BD 写接口使用内部 user_id;展示 ID 解析由 gateway 完成,避免把短号误当主键。
|
||
return api.user
|
||
.resolveDisplayUserID(displayUserID)
|
||
.then(function (payload) {
|
||
var user =
|
||
(payload && (payload.user || payload.profile)) ||
|
||
payload ||
|
||
{};
|
||
var userID = user.user_id || user.userId;
|
||
if (!userID) throw new Error('agency_owner_not_found');
|
||
return api.bdCenter.inviteAgency({
|
||
command_id: commandID(),
|
||
target_user_id: String(userID),
|
||
agency_name: String(agencyName || '').trim(),
|
||
});
|
||
});
|
||
}
|
||
|
||
window.HyGuild = window.HyGuild || {};
|
||
window.HyGuild.bdCenter = {
|
||
load: load,
|
||
saveContact: saveContact,
|
||
inviteAgency: inviteAgency,
|
||
};
|
||
})();
|