Files
wordpress-theme-aksrt/assets/js/routes/user-center-auth.js
T

123 lines
5.3 KiB
JavaScript

(function (window, document) {
'use strict';
function configFor(root) {
try { return JSON.parse(root.getAttribute('data-identity-config') || '{}'); } catch (_) { return {}; }
}
function parseResponse(response) {
var payload = response && (response.data !== undefined ? response.data : response.json);
return payload && payload.data !== undefined ? payload.data : payload;
}
function errorMessage(error, fallback) {
if (error && error.json) return error.json.message || fallback;
return error && error.message ? error.message : fallback;
}
function init(root) {
if (!root || root.dataset.identityBound === '1') return;
root.dataset.identityBound = '1';
var config = configFor(root);
var template = root.querySelector('[data-auth-modal-template]');
var runtime = window.AksrtModalRuntime;
if (!template || !runtime || !window.AksrtRequest) return;
function open() {
runtime.open({
html: template.innerHTML,
kind: 'identity',
className: 'aksrt-identity-modal-shell',
mobileBottom: true,
onContent: function (_, session) {
var shell = session && session.shell;
var form = shell && shell.querySelector('[data-auth-create]');
if (!form) return;
form.addEventListener('submit', function (event) {
event.preventDefault();
var input = form.querySelector('[name="evidence[]"]');
var message = form.querySelector('[data-auth-message]');
var button = form.querySelector('[type="submit"]');
var files = input ? Array.prototype.slice.call(input.files || []) : [];
if (files.length > 3) {
if (message) message.textContent = '证明材料最多上传 3 张';
return;
}
if (files.some(function (file) { return file.size > 2 * 1024 * 1024; })) {
if (message) message.textContent = '单张证明材料不能超过 2MB';
return;
}
if (button) button.disabled = true;
if (message) message.textContent = '';
window.AksrtRequest.request(config.restBase, {
method: 'POST',
credentials: 'same-origin',
headers: { 'X-WP-Nonce': config.nonce || '' },
body: new FormData(form),
}).then(function (response) {
var result = parseResponse(response);
if (!result || result.success === false) throw new Error((result && result.message) || '申请提交失败,请稍后重试');
if (message) message.textContent = '申请已提交,请耐心等待管理员审核。';
var summary = root.querySelector('[data-auth-summary]');
if (summary) {
summary.replaceChildren();
var pending = document.createElement('div');
pending.className = 'c-red mb10';
pending.textContent = '您的申请正在审核中,请耐心等待';
var name = document.createElement('div');
name.textContent = result.name || '';
summary.appendChild(pending);
summary.appendChild(name);
if (result.description) {
var description = document.createElement('div');
description.className = 'muted-2-color mt10';
description.textContent = result.description;
summary.appendChild(description);
}
if (result.message) {
var applicationMessage = document.createElement('div');
applicationMessage.className = 'muted-2-color mt10';
applicationMessage.textContent = '申请说明:' + result.message;
summary.appendChild(applicationMessage);
}
(Array.isArray(result.evidence) ? result.evidence : []).forEach(function (item) {
if (!item || !item.url || !item.thumbnail_url) return;
var link = document.createElement('a');
link.href = item.url;
link.target = '_blank';
link.rel = 'noopener noreferrer';
var image = document.createElement('img');
image.src = item.thumbnail_url;
image.alt = '身份认证证明材料';
image.width = 64;
image.height = 64;
image.style.objectFit = 'cover';
image.style.borderRadius = '4px';
link.appendChild(image);
summary.appendChild(link);
});
}
if (runtime.getActive && runtime.getActive() === shell) runtime.close('submit');
}).catch(function (error) {
if (message) message.textContent = errorMessage(error, '申请提交失败,请稍后重试');
}).finally(function () {
if (button) button.disabled = false;
});
});
},
});
}
root.querySelectorAll('[data-auth-modal-open]').forEach(function (button) {
button.addEventListener('click', function (event) {
event.preventDefault();
open();
});
});
}
window.AKSRTUserCenterAuth = { init: init };
})(window, document);