成就
This commit is contained in:
parent
75dd8d7920
commit
dc26c48c0f
@ -560,6 +560,7 @@
|
||||
new URLSearchParams(window.location.search).get(
|
||||
'tab'
|
||||
) || 'honors',
|
||||
targetUserID: normalizedQueryUserID(),
|
||||
loading: false,
|
||||
toastTimer: 0,
|
||||
profile: null,
|
||||
@ -596,6 +597,30 @@
|
||||
function validTab(value) {
|
||||
return tabs[value] ? value : 'honors';
|
||||
}
|
||||
function normalizedQueryUserID() {
|
||||
var value = String(
|
||||
new URLSearchParams(window.location.search).get(
|
||||
'user_id'
|
||||
) || ''
|
||||
).trim();
|
||||
return /^\d+$/.test(value) && Number(value) > 0
|
||||
? value
|
||||
: '';
|
||||
}
|
||||
function hasAccessToken() {
|
||||
return !!(
|
||||
window.HyAppAPI &&
|
||||
window.HyAppAPI.getAccessToken &&
|
||||
window.HyAppAPI.getAccessToken()
|
||||
);
|
||||
}
|
||||
function canLoadAchievements() {
|
||||
return !!(
|
||||
window.HyAppAPI &&
|
||||
window.HyAppAPI.achievement &&
|
||||
(state.targetUserID || hasAccessToken())
|
||||
);
|
||||
}
|
||||
function showToast(message) {
|
||||
var toast = byId('toast');
|
||||
toast.textContent = message;
|
||||
@ -947,18 +972,22 @@
|
||||
}
|
||||
function achievementQuery(name, page) {
|
||||
var cfg = tabs[name] || tabs.honors;
|
||||
return {
|
||||
var query = {
|
||||
collection_type: cfg.collection_type,
|
||||
collection_id: cfg.collection_id || '',
|
||||
page: page,
|
||||
page_size: 60,
|
||||
};
|
||||
if (state.targetUserID) query.user_id = state.targetUserID;
|
||||
return query;
|
||||
}
|
||||
function fetchAchievementList(name, page, acc) {
|
||||
var nextPage = page || 1;
|
||||
var items = acc || [];
|
||||
return window.HyAppAPI.achievement
|
||||
.list(achievementQuery(name, nextPage))
|
||||
.list(achievementQuery(name, nextPage), {
|
||||
skipAuth: !!state.targetUserID,
|
||||
})
|
||||
.then(function (data) {
|
||||
var current = normalizeAchievements(data);
|
||||
var merged = items.concat(current);
|
||||
@ -985,11 +1014,7 @@
|
||||
}
|
||||
render();
|
||||
if (state.loaded[state.tab]) return Promise.resolve();
|
||||
if (
|
||||
!window.HyAppAPI ||
|
||||
!window.HyAppAPI.achievement ||
|
||||
!window.HyAppAPI.getAccessToken()
|
||||
) {
|
||||
if (!canLoadAchievements()) {
|
||||
state.loaded[state.tab] = true;
|
||||
render();
|
||||
return Promise.resolve();
|
||||
@ -1016,11 +1041,51 @@
|
||||
}
|
||||
function loadUserProfile() {
|
||||
var tasks = [];
|
||||
var hasToken =
|
||||
var hasToken = hasAccessToken();
|
||||
if (
|
||||
state.targetUserID &&
|
||||
window.HyAppAPI &&
|
||||
window.HyAppAPI.getAccessToken &&
|
||||
window.HyAppAPI.getAccessToken();
|
||||
if (window.HyAppParams && window.HyAppParams.loadUser) {
|
||||
window.HyAppAPI.user
|
||||
) {
|
||||
if (window.HyAppAPI.user.profile) {
|
||||
tasks.push(
|
||||
window.HyAppAPI.user
|
||||
.profile(state.targetUserID, {
|
||||
skipAuth: true,
|
||||
})
|
||||
.then(function (data) {
|
||||
state.profile = profileSource(data);
|
||||
renderHeader();
|
||||
return data;
|
||||
})
|
||||
.catch(function () {
|
||||
return null;
|
||||
})
|
||||
);
|
||||
}
|
||||
if (window.HyAppAPI.user.appearance) {
|
||||
tasks.push(
|
||||
window.HyAppAPI.user
|
||||
.appearance(state.targetUserID, {
|
||||
skipAuth: true,
|
||||
})
|
||||
.then(function (data) {
|
||||
state.appearance =
|
||||
normalizeAppearance(data);
|
||||
renderHeader();
|
||||
return data;
|
||||
})
|
||||
.catch(function () {
|
||||
state.appearance = {};
|
||||
renderHeader();
|
||||
return null;
|
||||
})
|
||||
);
|
||||
}
|
||||
} else if (
|
||||
window.HyAppParams &&
|
||||
window.HyAppParams.loadUser
|
||||
) {
|
||||
tasks.push(
|
||||
window.HyAppParams.loadUser()
|
||||
.then(function (current) {
|
||||
@ -1034,6 +1099,7 @@
|
||||
);
|
||||
}
|
||||
if (
|
||||
!state.targetUserID &&
|
||||
hasToken &&
|
||||
window.HyAppAPI.user &&
|
||||
window.HyAppAPI.user.appearance
|
||||
@ -1064,11 +1130,7 @@
|
||||
var active = state.tab;
|
||||
var other = active === 'honors' ? 'event' : 'honors';
|
||||
if (state.loaded[other]) return Promise.resolve();
|
||||
if (
|
||||
!window.HyAppAPI ||
|
||||
!window.HyAppAPI.achievement ||
|
||||
!window.HyAppAPI.getAccessToken()
|
||||
) {
|
||||
if (!canLoadAchievements()) {
|
||||
state.loaded[other] = true;
|
||||
renderHeader();
|
||||
return Promise.resolve();
|
||||
|
||||
@ -453,7 +453,7 @@ var default_api = 'https://api.global-interaction.com/';
|
||||
);
|
||||
var token = getAccessToken();
|
||||
var url = buildURL(path, opts.query);
|
||||
if (token) headers.Authorization = 'Bearer ' + token;
|
||||
if (token && !opts.skipAuth) headers.Authorization = 'Bearer ' + token;
|
||||
headers['X-App-Code'] = requestAppCode();
|
||||
if (!shouldPersist() && isSameOriginURL(url))
|
||||
headers['Cache-Control'] = 'no-cache';
|
||||
@ -501,8 +501,29 @@ var default_api = 'https://api.global-interaction.com/';
|
||||
overview: function () {
|
||||
return request('/api/v1/users/me/overview', { method: 'GET' });
|
||||
},
|
||||
appearance: function () {
|
||||
return request('/api/v1/users/me/appearance', { method: 'GET' });
|
||||
profile: function (userID, options) {
|
||||
var id = String(userID || '').trim();
|
||||
var opts = options || {};
|
||||
if (!id) return Promise.reject(new Error('user_id is required'));
|
||||
return request(
|
||||
'/api/v1/users/by-id/' + encodeURIComponent(id) + '/profile',
|
||||
{
|
||||
method: 'GET',
|
||||
skipAuth: !!opts.skipAuth,
|
||||
}
|
||||
);
|
||||
},
|
||||
appearance: function (userID, options) {
|
||||
var id = String(userID || '').trim();
|
||||
var opts = options || {};
|
||||
return request(
|
||||
id
|
||||
? '/api/v1/users/by-id/' +
|
||||
encodeURIComponent(id) +
|
||||
'/appearance'
|
||||
: '/api/v1/users/me/appearance',
|
||||
{ method: 'GET', skipAuth: !!opts.skipAuth }
|
||||
);
|
||||
},
|
||||
hostIdentity: function () {
|
||||
return request('/api/v1/users/me/host-identity', {
|
||||
@ -1060,14 +1081,18 @@ var default_api = 'https://api.global-interaction.com/';
|
||||
},
|
||||
options: function (displayUserID, extra) {
|
||||
if (isConfiguredWebPay()) {
|
||||
var query = Object.assign(aslanUserQuery(displayUserID, extra), {
|
||||
payCountryId:
|
||||
extra && (extra.pay_country_id || extra.payCountryId),
|
||||
countryCode:
|
||||
extra && (extra.country_code || extra.countryCode),
|
||||
regionId: extra && (extra.region_id || extra.regionId),
|
||||
userId: extra && (extra.user_id || extra.userId),
|
||||
});
|
||||
var query = Object.assign(
|
||||
aslanUserQuery(displayUserID, extra),
|
||||
{
|
||||
payCountryId:
|
||||
extra &&
|
||||
(extra.pay_country_id || extra.payCountryId),
|
||||
countryCode:
|
||||
extra && (extra.country_code || extra.countryCode),
|
||||
regionId: extra && (extra.region_id || extra.regionId),
|
||||
userId: extra && (extra.user_id || extra.userId),
|
||||
}
|
||||
);
|
||||
return request(
|
||||
appEndpoint('options', '/order/web/pay/h5/options'),
|
||||
{
|
||||
@ -1496,10 +1521,12 @@ var default_api = 'https://api.global-interaction.com/';
|
||||
// 成就页只读当前用户的 App 成就和徽章展示资料;认证、app_code、env、错误 envelope 仍由 request 统一处理。
|
||||
// collection_type 由页面按 tab 传入,避免 H5 自己拼接不同业务集合导致后端筛选语义漂移。
|
||||
var achievementAPI = {
|
||||
list: function (query) {
|
||||
list: function (query, options) {
|
||||
var opts = options || {};
|
||||
return request('/api/v1/achievements', {
|
||||
method: 'GET',
|
||||
query: query || {},
|
||||
skipAuth: !!opts.skipAuth,
|
||||
});
|
||||
},
|
||||
badges: function () {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user