feat(sqszx202): configure integral mall deployment

This commit is contained in:
danaisuiyuan
2026-06-14 18:57:01 +08:00
parent c3f2494243
commit 4d12a49f7c
31 changed files with 21405 additions and 6472 deletions

View File

@@ -1,10 +1,10 @@
@font-face {
font-family: 'dinProSemiBold';
src: url('static/fonts/D-DIN-PRO-600-SemiBold.otf');
src: url('./D-DIN-PRO-600-SemiBold.otf');
}
@font-face {
font-family: 'dinProRegular';
src: url('static/fonts/D-DIN-PRO-400-Regular.otf');
src: url('./D-DIN-PRO-400-Regular.otf');
}
.semiBold{
@@ -16,4 +16,4 @@
.pingFang{
font-family: 'PingFang SC, PingFang SC';
font-weight: 500;
}
}

View File

@@ -43,6 +43,56 @@
(function() {
var iframe = document.getElementById('iframe');
function safeDecode(value) {
try {
return decodeURIComponent((value || '').replace(/\+/g, ' '));
} catch (e) {
return value || '';
}
}
function buildQuery(params) {
var pairs = [];
for (var key in params) {
if (!Object.prototype.hasOwnProperty.call(params, key)) {
continue;
}
if (params[key] === undefined || params[key] === null || params[key] === '') {
continue;
}
pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]));
}
return pairs.join('&');
}
function parseQuery(query, ignoredKey) {
var result = {
params: {},
ignoredValue: ''
};
if (!query) {
return result;
}
var pairs = query.split('&');
for (var i = 0; i < pairs.length; i++) {
if (!pairs[i]) {
continue;
}
var pair = pairs[i].split('=');
var key = safeDecode(pair[0]);
var value = pair.length > 1 ? safeDecode(pair.slice(1).join('=')) : '';
if (!key) {
continue;
}
if (key === ignoredKey) {
result.ignoredValue = result.ignoredValue || value;
continue;
}
result.params[key] = value;
}
return result;
}
// 获取URL参数
function getUrlParams() {
var params = {};
@@ -51,35 +101,79 @@
var pairs = search.split('&');
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=');
params[decodeURIComponent(pair[0])] = pair[1] ? decodeURIComponent(pair[1]) : '';
var key = safeDecode(pair[0]);
if (!key) {
continue;
}
params[key] = pair.length > 1 ? safeDecode(pair.slice(1).join('=')) : '';
}
}
return params;
}
function normalizeHash(rawHash, username) {
var hash = rawHash || '';
if (hash.charAt(0) === '#') {
hash = hash.substring(1);
}
if (!hash && !username) {
return '';
}
var questionIndex = hash.indexOf('?');
var path = questionIndex >= 0 ? hash.substring(0, questionIndex) : hash;
var query = questionIndex >= 0 ? hash.substring(questionIndex + 1) : '';
var parsed = parseQuery(query, 'username');
var finalUsername = username || parsed.ignoredValue;
if (!path) {
path = '/pages/integral/index';
}
if (finalUsername) {
parsed.params.username = finalUsername;
}
var queryString = buildQuery(parsed.params);
return '#' + path + (queryString ? '?' + queryString : '');
}
function removeHashParam(rawHash, key) {
var hash = rawHash || '';
if (hash.charAt(0) === '#') {
hash = hash.substring(1);
}
if (!hash) {
return '';
}
var questionIndex = hash.indexOf('?');
var path = questionIndex >= 0 ? hash.substring(0, questionIndex) : hash;
var query = questionIndex >= 0 ? hash.substring(questionIndex + 1) : '';
var parsed = parseQuery(query, key);
var queryString = buildQuery(parsed.params);
return '#' + path + (queryString ? '?' + queryString : '');
}
function getParentHashFromIframe(iframeHash) {
var params = getUrlParams();
if (params.username) {
return removeHashParam(iframeHash, 'username');
}
return normalizeHash(iframeHash, '');
}
function updateParentUrl(iframeHash) {
var parentHash = getParentHashFromIframe(iframeHash);
if (parentHash && window.location.hash !== parentHash) {
history.replaceState(null, '', window.location.search + parentHash);
}
}
// 初始化根据父页面URL设置iframe的src
function initIframeSrc() {
var params = getUrlParams();
var hash = window.location.hash;
var iframeSrc = '/';
// 如果父页面有hash传递给iframe
if (hash) {
iframeSrc = '/' + hash;
}
// 如果有username参数附加到iframe URL
if (params.username) {
var separator = iframeSrc.includes('?') ? '&' : (iframeSrc.includes('#') ? (iframeSrc.includes('?') ? '&' : '?') : '?');
// 对于hash模式参数需要放在hash后面
if (hash) {
iframeSrc = iframeSrc + (iframeSrc.includes('?') ? '&' : '?') + 'username=' + encodeURIComponent(params.username);
} else {
iframeSrc = '/#/pages/integral/index?username=' + encodeURIComponent(params.username);
}
}
iframe.src = iframeSrc;
var iframeHash = normalizeHash(window.location.hash, params.username);
iframe.src = iframeHash ? '/' + iframeHash : '/';
}
// 监听iframe内部路由变化同步到父页面URL
@@ -90,19 +184,12 @@
// 监听iframe的hashchange事件
iframeWindow.addEventListener('hashchange', function() {
var iframeHash = iframeWindow.location.hash;
if (iframeHash && window.location.hash !== iframeHash) {
// 保留原有的search参数
var currentSearch = window.location.search;
history.replaceState(null, '', currentSearch + iframeHash);
}
updateParentUrl(iframeHash);
});
// 初始同步
var iframeHash = iframeWindow.location.hash;
if (iframeHash && window.location.hash !== iframeHash) {
var currentSearch = window.location.search;
history.replaceState(null, '', currentSearch + iframeHash);
}
updateParentUrl(iframeHash);
} catch (e) {
console.log('无法访问iframe内容可能跨域:', e);
}
@@ -111,11 +198,12 @@
// 监听父页面hash变化同步到iframe
window.addEventListener('hashchange', function() {
try {
var parentHash = window.location.hash;
var params = getUrlParams();
var parentHash = normalizeHash(window.location.hash, params.username);
var iframeHash = iframe.contentWindow.location.hash;
if (parentHash !== iframeHash) {
iframe.contentWindow.location.hash = parentHash;
iframe.contentWindow.location.hash = parentHash || '#/pages/integral/index';
}
} catch (e) {
console.log('无法同步hash到iframe:', e);
@@ -130,10 +218,7 @@
setInterval(function() {
try {
var iframeHash = iframe.contentWindow.location.hash;
if (iframeHash && window.location.hash !== iframeHash) {
var currentSearch = window.location.search;
history.replaceState(null, '', currentSearch + iframeHash);
}
updateParentUrl(iframeHash);
} catch (e) {}
}, 500);
};
@@ -143,12 +228,8 @@
if (window.innerWidth <= 420) {
// 小屏幕直接跳转到应用
var params = getUrlParams();
var targetUrl = '/';
if (params.username) {
targetUrl = '/#/pages/integral/index?username=' + encodeURIComponent(params.username);
} else if (window.location.hash) {
targetUrl = '/' + window.location.hash;
}
var targetHash = normalizeHash(window.location.hash, params.username);
var targetUrl = targetHash ? '/' + targetHash : '/';
window.location.href = targetUrl;
}
};

Binary file not shown.