(function (root, factory) { if (typeof module === 'object' && module.exports) { module.exports = factory(root); return; } root.GenealogyLifecyclePages = factory(root); if (root.document) root.document.addEventListener('DOMContentLoaded', root.GenealogyLifecyclePages.init); })(typeof globalThis !== 'undefined' ? globalThis : window, function (root) { 'use strict'; function confirmAction(message) { if (root.ProfileUI && typeof root.ProfileUI.confirmAction === 'function') { return root.ProfileUI.confirmAction(message); } return Promise.resolve(!root['confirm'] || root['confirm'](message)); } var DISABLED_REASON_TEXT = { NOT_OWNER: '只有谱主可以永久删除家谱', NO_VERIFIED_MOBILE: '谱主账号尚未绑定已验证手机号', ACTIVE_PAYMENT: '当前家谱存在未完成的支付单', DELETION_IN_PROGRESS: '永久删除任务正在处理中' }; function normalizeCapability(value) { var source = value || {}; return { canDeletePermanently: source.canDeletePermanently === true, verifiedMobileMasked: String(source.verifiedMobileMasked || '').trim(), disabledReasons: Array.isArray(source.disabledReasons) ? source.disabledReasons.map(String) : [] }; } function capabilityMessage(capability) { var data = normalizeCapability(capability); if (data.canDeletePermanently) { return data.verifiedMobileMasked ? '验证码将发送至 ' + data.verifiedMobileMasked : '当前账号具备永久删除资格'; } return data.disabledReasons.map(function (code) { return DISABLED_REASON_TEXT[code] || code; }).join(';') || '当前家谱不允许永久删除'; } async function init() { var page = root.document && root.document.querySelector('[data-genealogy-lifecycle-page]'); var api = root.GenealogyApi && root.GenealogyApi.defaultClient; var genealogyId = root.ProfileUI && root.ProfileUI.getGenealogyId ? root.ProfileUI.getGenealogyId() : ''; var status = page && page.querySelector('[data-lifecycle-status]'); var archive = page && page.querySelector('[data-genealogy-archive]'); var restore = page && page.querySelector('[data-genealogy-restore]'); var deleteForm = page && page.querySelector('[data-genealogy-delete-form]'); var sendCode = page && page.querySelector('[data-genealogy-delete-code]'); var submitDelete = page && page.querySelector('[data-genealogy-delete-submit]'); var nameInput = page && page.querySelector('[data-genealogy-delete-name]'); var codeInput = page && page.querySelector('[data-genealogy-delete-sms]'); var capability; var pending = false; if (!page) return; if (!api || !api.getToken || !api.getToken()) { if (root.location) root.location.href = 'login.html'; return; } if (!genealogyId) { root.ProfileUI.setApiState(status, 'error', '缺少家谱上下文,请从“我的家谱”重新进入。'); return; } function setStatus(type, message) { if (type) root.ProfileUI.setApiState(status, type, message); else status.textContent = message || ''; } function setPending(value) { pending = value; [archive, restore, sendCode, submitDelete].forEach(function (button) { if (button) button.disabled = value || ((button === submitDelete || button === sendCode) && capability && !capability.canDeletePermanently); }); } try { var initial = await Promise.all([api.genealogyDetail(genealogyId), api.genealogyDeletionCapability(genealogyId)]); capability = normalizeCapability(initial[1]); nameInput.placeholder = '请输入“' + String(initial[0] && initial[0].genealogyName || '家谱全名') + '”确认'; submitDelete.disabled = !capability.canDeletePermanently; sendCode.disabled = !capability.canDeletePermanently; setStatus(capability.canDeletePermanently ? '' : 'forbidden', capabilityMessage(capability)); } catch (error) { setStatus('error', error.message || '家谱维护能力读取失败'); return; } archive.addEventListener('click', async function () { if (pending || !await confirmAction('归档后家谱将停止日常维护,确认归档吗?')) return; setPending(true); setStatus('loading', '正在归档家谱…'); try { await api.archiveGenealogy(genealogyId); setStatus('', '家谱已归档,需要时可在此恢复。'); } catch (error) { setStatus('error', error.message || '归档失败'); } finally { setPending(false); } }); restore.addEventListener('click', async function () { if (pending) return; setPending(true); setStatus('loading', '正在恢复家谱…'); try { await api.restoreGenealogy(genealogyId); setStatus('', '家谱已恢复。'); } catch (error) { setStatus('error', error.message || '恢复失败'); } finally { setPending(false); } }); sendCode.addEventListener('click', async function () { if (pending || !capability.canDeletePermanently) return; setPending(true); setStatus('loading', '正在发送验证码…'); try { await api.sendGenealogyDeletionCode(genealogyId, {}); setStatus('', '验证码已发送至谱主手机号。'); } catch (error) { setStatus('error', error.message || '验证码发送失败'); } finally { setPending(false); } }); deleteForm.addEventListener('submit', async function (event) { event.preventDefault(); if (pending || !capability.canDeletePermanently) return; if (!nameInput.value.trim() || !codeInput.value.trim()) { setStatus('error', '请填写家谱全名和短信验证码'); return; } if (!await confirmAction('永久删除不可恢复,确认继续吗?')) return; setPending(true); setStatus('loading', '正在提交永久删除任务…'); try { await api.permanentlyDeleteGenealogy(genealogyId, { genealogyName: nameInput.value.trim(), smsCode: codeInput.value.trim() }); if (root.ProfileUI && root.ProfileUI.clearCurrentGenealogyContext) root.ProfileUI.clearCurrentGenealogyContext(); if (root.location) root.location.href = 'profile-families.html'; } catch (error) { setStatus('error', error.message || '永久删除提交失败'); } finally { setPending(false); } }); } return { normalizeCapability: normalizeCapability, capabilityMessage: capabilityMessage, init: init }; });