更换金币图
This commit is contained in:
parent
536d61d7b0
commit
fe1a44afba
@ -26,7 +26,7 @@
|
|||||||
--gold-650: #a84e16;
|
--gold-650: #a84e16;
|
||||||
--line: rgba(255, 230, 173, 0.9);
|
--line: rgba(255, 230, 173, 0.9);
|
||||||
--hero-image: url("../../assets/room-turnover-reward/hero.png");
|
--hero-image: url("../../assets/room-turnover-reward/hero.png");
|
||||||
--coin-image: url("../../assets/coin-lz3Tp0nX-1776148661447.png");
|
--coin-image: url("../../assets/coin-lz3Tp0nX-177614866144.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
|
|||||||
@ -572,7 +572,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
const DEFAULT_AVATAR = "../../assets/defaultAvatar-CdxWBK1k.png";
|
const DEFAULT_AVATAR = "../../assets/defaultAvatar-CdxWBK1k.png";
|
||||||
const FALLBACK_IMAGE = "../../assets/coin-lz3Tp0nX-1776148661447.png";
|
const FALLBACK_IMAGE = "../../assets/coin-lz3Tp0nX-177614866144.png";
|
||||||
const DEFAULT_WEEK_STAR_API_BASE = "https://jvapi.haiyihy.com/";
|
const DEFAULT_WEEK_STAR_API_BASE = "https://jvapi.haiyihy.com/";
|
||||||
const TOP_RANK_ICONS = {
|
const TOP_RANK_ICONS = {
|
||||||
1: "../../assets/yumi-week-star/rank-top1.png",
|
1: "../../assets/yumi-week-star/rank-top1.png",
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 27 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 27 KiB |
BIN
h5/assets/coin-lz3Tp0nX-177614866144.png
Normal file
BIN
h5/assets/coin-lz3Tp0nX-177614866144.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 884 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 24 KiB |
@ -1 +1 @@
|
|||||||
const s="/assets/coin-lz3Tp0nX-1776148661447.png";export{s as _};
|
const s="/assets/coin-lz3Tp0nX-177614866144.png";export{s as _};
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
const e=r=>{console.log("头像资源出错"),r.target.onerror=null,r.target.src=new URL("/assets/defaultAvatar-CdxWBK1k.png",import.meta.url).href},t=(r,a)=>{console.log("图片资源出错"),r.target.onerror=null,a=="GOLD"?r.target.src=new URL("/assets/coin-lz3Tp0nX-1776148661447.png",import.meta.url).href:a=="DOLLARS"&&(r.target.src=new URL("/assets/dollar-fhua8OJo-1776148661448.png",import.meta.url).href)};export{t as a,e as h};
|
const e=r=>{console.log("头像资源出错"),r.target.onerror=null,r.target.src=new URL("/assets/defaultAvatar-CdxWBK1k.png",import.meta.url).href},t=(r,a)=>{console.log("图片资源出错"),r.target.onerror=null,a=="GOLD"?r.target.src=new URL("/assets/coin-lz3Tp0nX-177614866144.png",import.meta.url).href:a=="DOLLARS"&&(r.target.src=new URL("/assets/dollar-fhua8OJo-1776148661448.png",import.meta.url).href)};export{t as a,e as h};
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,7 +1,20 @@
|
|||||||
const query = new URLSearchParams(window.location.search);
|
const query = readURLParams();
|
||||||
const storedAppId = window.localStorage.getItem("mifa-pay-application-id") || "";
|
const storedAppId = window.localStorage.getItem("mifa-pay-application-id") || "";
|
||||||
|
const API_BASE_URL = "https://jvapi.haiyihy.com";
|
||||||
const LOGO_SRC = "./mifapay-logo.png";
|
const LOGO_SRC = "./mifapay-logo.png";
|
||||||
|
|
||||||
|
function readURLParams() {
|
||||||
|
const result = new URLSearchParams(window.location.search);
|
||||||
|
const hashQuery = window.location.hash.includes("?") ? window.location.hash.split("?")[1] : "";
|
||||||
|
const hashParams = new URLSearchParams(hashQuery);
|
||||||
|
hashParams.forEach((value, key) => {
|
||||||
|
if (!result.has(key)) {
|
||||||
|
result.set(key, value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
function getPathApplicationId() {
|
function getPathApplicationId() {
|
||||||
const segments = window.location.pathname.split("/").filter(Boolean);
|
const segments = window.location.pathname.split("/").filter(Boolean);
|
||||||
const pageIndex = segments.lastIndexOf("mifa-pay");
|
const pageIndex = segments.lastIndexOf("mifa-pay");
|
||||||
@ -9,7 +22,8 @@ function getPathApplicationId() {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
return segments[pageIndex + 1] || "";
|
const candidate = segments[pageIndex + 1] || "";
|
||||||
|
return /^\d+$/.test(candidate) ? candidate : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
@ -22,14 +36,6 @@ const defaults = {
|
|||||||
productType: query.get("type") || "GOLD",
|
productType: query.get("type") || "GOLD",
|
||||||
};
|
};
|
||||||
|
|
||||||
const deps = {
|
|
||||||
getApi: null,
|
|
||||||
postApi: null,
|
|
||||||
fetchCurrentUser: null,
|
|
||||||
getCachedUserProfile: null,
|
|
||||||
connectApp: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
const state = {
|
const state = {
|
||||||
applicationId: defaults.applicationId,
|
applicationId: defaults.applicationId,
|
||||||
productType: defaults.productType,
|
productType: defaults.productType,
|
||||||
@ -42,7 +48,6 @@ const state = {
|
|||||||
selectedGoodsId: "",
|
selectedGoodsId: "",
|
||||||
selectedGoods: null,
|
selectedGoods: null,
|
||||||
pendingChannelCode: "",
|
pendingChannelCode: "",
|
||||||
dependencyPromise: null,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const els = {
|
const els = {
|
||||||
@ -67,6 +72,133 @@ function persistSettings() {
|
|||||||
window.localStorage.setItem("mifa-pay-application-id", state.applicationId);
|
window.localStorage.setItem("mifa-pay-application-id", state.applicationId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function readRawParam(name) {
|
||||||
|
const queries = [window.location.search.replace(/^\?/, "")];
|
||||||
|
if (window.location.hash.includes("?")) {
|
||||||
|
queries.push(window.location.hash.split("?")[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const item of queries) {
|
||||||
|
for (const part of item.split("&")) {
|
||||||
|
if (!part) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const equalIndex = part.indexOf("=");
|
||||||
|
const rawKey = equalIndex >= 0 ? part.slice(0, equalIndex) : part;
|
||||||
|
const rawValue = equalIndex >= 0 ? part.slice(equalIndex + 1) : "";
|
||||||
|
let decodedKey = "";
|
||||||
|
try {
|
||||||
|
decodedKey = decodeURIComponent(rawKey);
|
||||||
|
} catch (error) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (decodedKey !== name) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return decodeURIComponent(rawValue.replace(/\+/g, "%2B"));
|
||||||
|
} catch (error) {
|
||||||
|
return rawValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function apiBaseURL() {
|
||||||
|
const override = window.MIFAPAY_API_BASE_URL || query.get("apiBase");
|
||||||
|
return String(override || API_BASE_URL).replace(/\/+$/, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeAuthorization(value) {
|
||||||
|
const token = String(value || "").trim();
|
||||||
|
if (!token) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return /^bearer\s+/i.test(token) ? token : `Bearer ${token}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function currentToken() {
|
||||||
|
return (
|
||||||
|
readRawParam("token") ||
|
||||||
|
readRawParam("Authorization") ||
|
||||||
|
readRawParam("authorization") ||
|
||||||
|
readRawParam("accessToken")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function currentLanguage() {
|
||||||
|
return query.get("lang") || document.documentElement.lang || navigator.language || "en";
|
||||||
|
}
|
||||||
|
|
||||||
|
function authHeadersFromToken(token) {
|
||||||
|
return {
|
||||||
|
Accept: "application/json, text/plain, */*",
|
||||||
|
Authorization: normalizeAuthorization(token),
|
||||||
|
"req-lang": currentLanguage(),
|
||||||
|
"req-client": "H5",
|
||||||
|
"req-version": "V2",
|
||||||
|
"req-zone": Intl.DateTimeFormat().resolvedOptions().timeZone || "Asia/Shanghai",
|
||||||
|
"req-app-intel": "version=1.0.0;build=1;model=H5;sysVersion=Web;channel=Web",
|
||||||
|
"req-sys-origin": "origin=ATYOU;originChild=ATYOU",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function requestHeaders(hasBody = false) {
|
||||||
|
const token = currentToken();
|
||||||
|
if (!token) {
|
||||||
|
throw new Error("Missing token");
|
||||||
|
}
|
||||||
|
|
||||||
|
const headers = authHeadersFromToken(token);
|
||||||
|
|
||||||
|
if (hasBody) {
|
||||||
|
headers["Content-Type"] = "application/json";
|
||||||
|
}
|
||||||
|
|
||||||
|
return headers;
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildRequestURL(path) {
|
||||||
|
const base = `${apiBaseURL()}/`;
|
||||||
|
const target = String(path || "").replace(/^\/+/, "");
|
||||||
|
return new URL(target, base).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function requestJSON(path, options = {}) {
|
||||||
|
const hasBody = options.body !== undefined;
|
||||||
|
const request = {
|
||||||
|
method: options.method || "GET",
|
||||||
|
cache: "no-store",
|
||||||
|
headers: requestHeaders(hasBody),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (hasBody) {
|
||||||
|
request.body = JSON.stringify(options.body);
|
||||||
|
}
|
||||||
|
|
||||||
|
const response = await fetch(buildRequestURL(path), request);
|
||||||
|
const data = await response.json().catch(() => ({}));
|
||||||
|
if (!response.ok || data.status === false) {
|
||||||
|
const error = new Error(data.errorMsg || data.message || `Request failed: ${response.status}`);
|
||||||
|
error.response = data;
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function apiGet(path) {
|
||||||
|
return requestJSON(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
function apiPost(path, body) {
|
||||||
|
return requestJSON(path, {
|
||||||
|
method: "POST",
|
||||||
|
body,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function extractErrorMessage(error) {
|
function extractErrorMessage(error) {
|
||||||
return (
|
return (
|
||||||
error?.response?.errorMsg ||
|
error?.response?.errorMsg ||
|
||||||
@ -96,13 +228,6 @@ function resolveUserProfile(response = null) {
|
|||||||
return response.body;
|
return response.body;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof deps.getCachedUserProfile === "function") {
|
|
||||||
const cached = deps.getCachedUserProfile();
|
|
||||||
if (cached && typeof cached === "object") {
|
|
||||||
return cached;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return readStoredUserProfile();
|
return readStoredUserProfile();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,42 +403,11 @@ function selectCountryByProfile() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function ensureDependencies() {
|
|
||||||
if (!state.dependencyPromise) {
|
|
||||||
state.dependencyPromise = Promise.all([
|
|
||||||
import("../js/index-CIAVq8iD-1776148658686.js"),
|
|
||||||
import("../js/appConnector-B5Pbaops-1776148658686.js"),
|
|
||||||
]).then(([indexModule, connectorModule]) => {
|
|
||||||
deps.getApi = indexModule.L;
|
|
||||||
deps.postApi = indexModule.W;
|
|
||||||
deps.fetchCurrentUser = indexModule.au;
|
|
||||||
deps.getCachedUserProfile = indexModule.at;
|
|
||||||
deps.connectApp = connectorModule.c;
|
|
||||||
return deps;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return state.dependencyPromise;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function connectSession() {
|
async function connectSession() {
|
||||||
await ensureDependencies();
|
const response = await apiGet("/team/member/profile");
|
||||||
|
|
||||||
const connection = await deps.connectApp();
|
|
||||||
if (!connection?.success) {
|
|
||||||
throw new Error(connection?.error || "Failed to initialize app session");
|
|
||||||
}
|
|
||||||
|
|
||||||
const cachedUserProfile = resolveUserProfile();
|
|
||||||
if (cachedUserProfile?.id) {
|
|
||||||
state.userProfile = cachedUserProfile;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const response = await deps.fetchCurrentUser();
|
|
||||||
const userProfile = resolveUserProfile(response);
|
const userProfile = resolveUserProfile(response);
|
||||||
if (!userProfile?.id) {
|
if (!userProfile?.id) {
|
||||||
throw new Error("Please open this page inside the app");
|
throw new Error("Account not available");
|
||||||
}
|
}
|
||||||
|
|
||||||
state.userProfile = userProfile;
|
state.userProfile = userProfile;
|
||||||
@ -327,7 +421,7 @@ async function refreshMeta() {
|
|||||||
persistSettings();
|
persistSettings();
|
||||||
els.applicationId.value = state.applicationId;
|
els.applicationId.value = state.applicationId;
|
||||||
|
|
||||||
const applicationResp = await deps.getApi(
|
const applicationResp = await apiGet(
|
||||||
`/order/web/pay/application/${encodeURIComponent(state.applicationId)}`
|
`/order/web/pay/application/${encodeURIComponent(state.applicationId)}`
|
||||||
);
|
);
|
||||||
state.application = applicationResp?.body || {};
|
state.application = applicationResp?.body || {};
|
||||||
@ -344,7 +438,7 @@ async function refreshMeta() {
|
|||||||
profileQuery.set("userId", currentUserId());
|
profileQuery.set("userId", currentUserId());
|
||||||
}
|
}
|
||||||
|
|
||||||
const profileResp = await deps.getApi(
|
const profileResp = await apiGet(
|
||||||
`/order/web/pay/user-profile?${profileQuery.toString()}`
|
`/order/web/pay/user-profile?${profileQuery.toString()}`
|
||||||
);
|
);
|
||||||
const payProfile = profileResp?.body || {};
|
const payProfile = profileResp?.body || {};
|
||||||
@ -374,7 +468,7 @@ async function refreshMeta() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const commodityResp = await deps.getApi(
|
const commodityResp = await apiGet(
|
||||||
`/order/web/pay/commodity?applicationId=${encodeURIComponent(
|
`/order/web/pay/commodity?applicationId=${encodeURIComponent(
|
||||||
state.applicationId
|
state.applicationId
|
||||||
)}&payCountryId=${encodeURIComponent(currentCountryId())}&type=${encodeURIComponent(
|
)}&payCountryId=${encodeURIComponent(currentCountryId())}&type=${encodeURIComponent(
|
||||||
@ -414,15 +508,15 @@ async function createOrder(channelCode) {
|
|||||||
renderChannels();
|
renderChannels();
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
applicationId: Number(state.applicationId),
|
applicationId: state.applicationId,
|
||||||
goodsId: Number(state.selectedGoodsId),
|
goodsId: state.selectedGoodsId,
|
||||||
payCountryId: Number(currentCountryId()),
|
payCountryId: currentCountryId(),
|
||||||
userId: Number(currentUserId()),
|
userId: currentUserId(),
|
||||||
channelCode,
|
channelCode,
|
||||||
newVersion: true,
|
newVersion: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
const response = await deps.postApi("/order/web/pay/recharge", payload);
|
const response = await apiPost("/order/web/pay/recharge", payload);
|
||||||
const requestUrl = safeDecodeUrl(response?.body?.requestUrl || "");
|
const requestUrl = safeDecodeUrl(response?.body?.requestUrl || "");
|
||||||
if (!requestUrl) {
|
if (!requestUrl) {
|
||||||
throw new Error("Missing payment url");
|
throw new Error("Missing payment url");
|
||||||
@ -432,7 +526,6 @@ async function createOrder(channelCode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function reloadPageData() {
|
async function reloadPageData() {
|
||||||
await ensureDependencies();
|
|
||||||
await connectSession();
|
await connectSession();
|
||||||
await refreshMeta();
|
await refreshMeta();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user