feat(sqszx202): configure integral mall deployment
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
BIN
single_uniapp22miao/static/sign_contract_sqszx202.pdf
Normal file
BIN
single_uniapp22miao/static/sign_contract_sqszx202.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user