123 lines
5.3 KiB
JavaScript
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);
|