2 lines
14 KiB
JavaScript
2 lines
14 KiB
JavaScript
(function(o,B){if(typeof module=="object"&&module.exports){module.exports=B(o);return}o.GenerationPages=B(o),o.document&&o.document.addEventListener("DOMContentLoaded",function(){o.GenerationPages.init()})})(typeof globalThis!="undefined"?globalThis:window,function(o){"use strict";function B(e){return o.ProfileUI&&typeof o.ProfileUI.confirmAction=="function"?o.ProfileUI.confirmAction(e):Promise.resolve(!o.confirm||o.confirm(e))}var m=o.document,S=Object.create(null),P="",s=!1,y=!1;function N(){return o.GenealogyApi&&o.GenealogyApi.defaultClient}function q(e,n){var t=n&&(n.status||n.code);return!e||!e.getToken||!e.getToken()||Number(t)===401}function w(e){return Number(e&&(e.status||e.code))===403}function v(e,n){return q(e,n)?(e&&e.clearToken&&e.clearToken(),o.NavigationUtil.open("login.html"),!0):!1}function d(e,n){return m?(n||m).querySelector(e):null}function b(e,n){return m?Array.prototype.slice.call((n||m).querySelectorAll(e)):[]}function C(e){if(o.layui&&o.layui.layer){o.layui.layer.msg(e);return}o.alert&&o.alert(e)}function I(e,n,t){var r=d(e);if(r){if(o.ProfileUI&&o.ProfileUI.setApiState){o.ProfileUI.setApiState(r,n,t);return}r.innerHTML='<div class="api-state api-state--'+c(n)+'" data-api-state="'+c(n)+'">'+c(t)+"</div>"}}function p(e,n){var t=d("[data-generation-form-status]");if(t){if(!e){t.innerHTML="";return}if(o.ProfileUI&&o.ProfileUI.setApiState){o.ProfileUI.setApiState(t,n||"error",e);return}t.textContent=e}}function ie(e,n){var t=new URLSearchParams(String(e||"").replace(/^\?/,""));return t.get(n)||""}function F(e){var n=d("[data-generation-page]"),t=e===void 0&&o.location?o.location.search:e,r;return e===void 0&&o.ProfileUI&&o.ProfileUI.getGenealogyId&&(r=o.ProfileUI.getGenealogyId(),r)?r:ie(t,"genealogyId")||n&&n.getAttribute("data-genealogy-id")||""}function l(e){var n=String(e==null?"":e).trim();return n||void 0}function T(e){var n=l(e),t;if(n)return t=Number(n),Number.isInteger(t)&&Number.isSafeInteger(t)?t:void 0}function M(e){var n=e||{},t={generationNo:T(n.generationNo),generationText:l(n.generationText)},r=l(n.description),a=l(n.sortOrder),i=l(n.status);return r!==void 0&&(t.description=r),a!==void 0&&(t.sortOrder=Number(a)),i!==void 0&&(t.status=i),t}function z(e){var n=e||{};return{poemText:String(n.poemText||"").trim(),disableMissing:!!n.disableMissing}}function H(e){return!e||!Number.isInteger(e.generationNo)||e.generationNo<1||e.generationNo>2147483647?"世代序号必须是 1 到 2147483647 之间的整数":e.generationText?e.generationText.length>50?"字辈文字不能超过 50 个字符":e.description&&e.description.length>500?"说明不能超过 500 个字符":e.sortOrder!==void 0&&(!Number.isInteger(e.sortOrder)||!Number.isSafeInteger(e.sortOrder))?"排序值必须是整数":e.sortOrder!==void 0&&(e.sortOrder<-2147483648||e.sortOrder>2147483647)?"排序值必须在 -2147483648 到 2147483647 之间":e.status!==void 0&&e.status!=="0"&&e.status!=="1"?"字辈状态只能是 0 或 1":"":"请填写字辈文字"}function D(e){var n;return!e||!e.poemText?"请填写批量字辈内容":e.poemText.length>26e3?"批量字辈内容不能超过 26000 个字符":(n=R(e.poemText),n.length>500?"一次最多导入 500 个世代":n.some(function(t){return t.length>50})?"单个字辈不能超过 50 个字符":"")}function R(e){var n=String(e||"").trim();return n?/[\s,,;;、//||]/.test(n)?n.split(/[\s,,;;、//||]+/).filter(Boolean):Array.from(n):[]}function j(e){var n;return e==null||e===""||typeof e=="number"&&!Number.isSafeInteger(e)?"":(n=String(e),/^\d+$/.test(n)?n:"")}function J(e){return j(e&&e.poemId)}function V(e){var n=J(e),t=j(e&&e.genealogyId),r=T(e&&e.generationNo),a=l(e&&e.generationText),i=l(e&&e.status),u;return!n||r===void 0||!a||i!=="0"&&i!=="1"?null:(u={poemId:n,generationNo:r,generationText:a,status:i},t&&(u.genealogyId=t),e.genealogyNo!==void 0&&e.genealogyNo!==null&&(u.genealogyNo=String(e.genealogyNo)),e.genealogyName!==void 0&&e.genealogyName!==null&&(u.genealogyName=String(e.genealogyName)),e.description!==void 0&&e.description!==null&&(u.description=String(e.description)),T(e.sortOrder)!==void 0&&(u.sortOrder=T(e.sortOrder)),e.remark!==void 0&&e.remark!==null&&(u.remark=String(e.remark)),u)}function Q(e){return!!(e&&(e.canEditContent===!0||e.canManage===!0))}function W(e){var n=Q(e);return{canEditContent:n,listMethod:n?"generationPoemsManagement":"generationPoems"}}function $(e){return Array.isArray(e)?e:e&&Array.isArray(e.rows)?e.rows:[]}function c(e){return String(e==null?"":e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function oe(e){var n=[],t=e.status==="1"?"已停用":"正常",r="";return e.description&&n.push("说明:"+e.description),e.sortOrder!==void 0&&n.push("排序:"+e.sortOrder),n.push("状态:"+t),s&&(r='<div class="row-actions"><button class="pill" type="button" data-generation-edit="'+c(e.poemId)+'">编辑</button><button class="pill" type="button" data-generation-status="'+c(e.poemId)+'">'+(e.status==="1"?"恢复":"停用")+"</button></div>"),'<div class="module-row" data-generation-poem-id="'+c(e.poemId)+'"><div><h3>第 '+c(e.generationNo)+" 代:"+c(e.generationText)+"</h3><p>"+c(n.join(" · "))+"</p></div>"+r+"</div>"}function ue(e){var n=d("[data-generation-list]"),t=$(e).map(V),r=t.filter(function(i){return!i}).length,a=t.filter(Boolean);if(S=Object.create(null),a.forEach(function(i){S[i.poemId]=i}),!!n){if(r){I("[data-generation-list]","error","字辈响应缺少 poemId、generationNo、generationText 或 status,请联系后端补充 DTO。");return}if(!a.length){I("[data-generation-list]","empty","暂无字辈记录");return}n.innerHTML=a.map(oe).join("")}}function k(e){var n=T(e);return n!==void 0&&n>=0?n:void 0}function de(e){var n=e&&e.action,t=T(e&&e.generationNo),r=J(e),a=l(e&&e.oldGenerationText),i=l(e&&e.newGenerationText),u=l(e&&e.oldStatus),x=l(e&&e.newStatus),f;return!t||["create","update","keep","disable"].indexOf(n)===-1||x!=="0"&&x!=="1"||n==="create"&&!i||n!=="create"&&(!r||!a||u!=="0"&&u!=="1")||(n==="update"||n==="keep")&&!i?null:(f={generationNo:t},r&&(f.poemId=r),a&&(f.oldGenerationText=a),i&&(f.newGenerationText=i),u!==void 0&&(f.oldStatus=u),f.newStatus=x,f.action=n,e.warning!==void 0&&e.warning!==null&&(f.warning=String(e.warning)),f)}function K(e){var n,t,r={create:0,update:0,keep:0,disable:0};return!e||!Array.isArray(e.items)||!e.items.length||(n={createCount:k(e.createCount),updateCount:k(e.updateCount),keepCount:k(e.keepCount),disableCount:k(e.disableCount)},Object.keys(n).some(function(a){return n[a]===void 0}))||(t=e.items.map(de),t.some(function(a){return!a}))||(t.forEach(function(a){r[a.action]+=1}),n.createCount!==r.create||n.updateCount!==r.update||n.keepCount!==r.keep||n.disableCount!==r.disable)?null:(n.items=t,n)}function X(e){return e?"确认按当前预览保存字辈,并停用未出现在文本中的后续世代吗?历史记录不会删除。":"确认按当前预览保存字辈吗?"}function fe(e){var n=d("[data-generation-batch-preview]"),t=K(e),r;return n?t?(r="新增 "+(t.createCount===void 0?"-":t.createCount)+" 条 · 更新 "+(t.updateCount===void 0?"-":t.updateCount)+" 条 · 保留 "+(t.keepCount===void 0?"-":t.keepCount)+" 条 · 停用 "+(t.disableCount===void 0?"-":t.disableCount)+" 条",n.innerHTML='<div class="module-row"><div><h3>变更预览</h3><p>'+c(r)+"</p></div></div>"+t.items.map(function(a){var i=a&&a.generationNo,u=a&&a.action,x=a&&a.oldGenerationText,f=a&&a.newGenerationText,te=a&&a.warning,re=a&&a.oldStatus,ae=a&&a.newStatus,L="第 "+(i==null?"-":i)+" 代:"+(x==null?"(新增)":x)+" → "+(f==null?"(无)":f);return u&&(L+=" · "+u),(re!==void 0||ae!==void 0)&&(L+=" · 状态:"+Y(re)+" → "+Y(ae)),te&&(L+=" · 警告:"+te),'<div class="module-row"><p>'+c(L)+"</p></div>"}).join(""),!0):(I("[data-generation-batch-preview]","error","批量预览响应缺少 items,请联系后端补充 DTO。"),!1):!1}function Y(e){return String(e)==="0"?"正常":String(e)==="1"?"停用":e==null?"未提供":String(e)}function G(e){var n={};return b("[name]",e).forEach(function(t){n[t.name]=t.type==="checkbox"?t.checked:t.value}),n}function g(e){var n=d("[data-generation-batch-status]");n&&(n.textContent=e||"")}function E(e){var n=d("[data-generation-editor]");n&&(n.hidden=!e)}function se(e){b("[data-generation-editor-submit]").forEach(function(n){n.dataset.defaultLabel||(n.dataset.defaultLabel=n.textContent),n.disabled=!!e||!s,n.textContent=e?"正在保存…":n.dataset.defaultLabel,n.setAttribute("aria-busy",e?"true":"false")})}function Z(){var e=!s||y;b("[data-generation-management]").forEach(function(n){n.hidden=!s}),s||E(!1),b("[data-generation-add], [data-generation-batch-action], [data-generation-edit], [data-generation-status]").forEach(function(n){n.disabled=e}),b("[data-generation-management] textarea, [data-generation-management] input, [data-generation-editor] textarea, [data-generation-editor] input, [data-generation-editor] select, [data-generation-editor] button").forEach(function(n){n.disabled=e}),se(y)}function _(e){s=!!e,Z()}function h(e){y=!!e,Z()}function A(){I("[data-generation-list]","forbidden","当前账号没有字辈维护权限"),P="",_(!1),g("当前账号没有字辈维护权限"),p("当前账号没有字辈维护权限","forbidden")}function le(e){if(o.ProfileUI&&o.ProfileUI.syncGenealogyContextLinks){o.ProfileUI.syncGenealogyContextLinks();return}b("[data-genealogy-context-link]").forEach(function(n){var t=n.getAttribute("href"),r;!t||t==="#"||(r=t.split("?")[0],n.href=r+"?genealogyId="+encodeURIComponent(e))})}function O(){var e=F(),n;return e||(n=d("[data-generation-list]"),n&&I("[data-generation-list]","error","请从具体家谱进入字辈管理"),E(!1),p("请从具体家谱进入字辈管理","error"),C("请从具体家谱进入字辈管理")),e}function ee(e){var n=d("[data-generation-form]"),t=e?S[e]:null,r=d("[data-generation-editor-title]");!s||y||!n||e&&!t||(n.reset(),b("[name]",n).forEach(function(a){var i;a.name==="poemId"&&(i=e||""),a.name==="generationNo"&&(i=t?t.generationNo:""),a.name==="generationText"&&(i=t?t.generationText:""),a.name==="description"&&(i=t&&t.description?t.description:""),a.name==="sortOrder"&&(i=t&&t.sortOrder!==void 0?t.sortOrder:""),a.name==="status"&&(i=t?t.status:""),i!==void 0&&(a.value=i)}),r&&(r.textContent=t?"编辑字辈":"新增字辈"),p(""),E(!0),o.location&&o.location.hash!=="#generation-editor"&&(o.location.hash="generation-editor"),d('[name="generationNo"]',n)&&d('[name="generationNo"]',n).focus&&d('[name="generationNo"]',n).focus())}function ne(){var e=d("[data-generation-form]");e&&e.reset(),p(""),E(!1)}async function U(){var e=N(),n,t;if(!v(e)&&(n=O(),!!n)){le(n),I("[data-generation-list]","loading","正在加载字辈记录…");try{t=W(await e.genealogyDetail(n)),_(t.canEditContent),ue(await e[t.listMethod](n))}catch(r){if(v(e,r))return;if(w(r)){A();return}I("[data-generation-list]","error","字辈列表加载失败,请稍后重试。"),C(r.message||"字辈列表加载失败")}}}async function ce(e){var n=N(),t,r,a,i;if(!(y||!s||v(n)||!e)&&(t=O(),!!t)){if(r=j(G(e).poemId),G(e).poemId&&!r){p("字辈编号无效,请返回列表重新编辑。","error");return}if(r&&!S[r]){p("当前字辈不存在或已更新,请返回列表刷新后重试。","error");return}if(a=M(G(e)),i=H(a),i){p(i,"error");return}p("正在保存字辈…","loading"),h(!0);try{r?await n.updateGenerationPoem(t,r,a):await n.createGenerationPoem(t,a),C("字辈已保存"),ne(),await U()}catch(u){if(v(n,u))return;if(w(u)){A();return}p(u.message||"字辈保存失败","error")}finally{h(!1)}}}async function ge(e){var n=N(),t,r=S[e],a;if(!(y||!s||v(n))&&(t=O(),!(!t||!r))){a=M({generationNo:r.generationNo,generationText:r.generationText,description:r.description,sortOrder:r.sortOrder,status:r.status==="1"?"0":"1"}),h(!0);try{await n.updateGenerationPoem(t,e,a),C(r.status==="1"?"字辈已恢复":"字辈已停用"),await U()}catch(i){if(v(n,i))return;if(w(i)){A();return}C(i.message||"字辈状态更新失败")}finally{h(!1)}}}async function ve(){var e=N(),n,t=d("[data-generation-batch-form]"),r,a;if(!(y||!s||v(e)||!t)&&(n=O(),!!n)){if(r=z(G(t)),a=D(r),a){g(a);return}g("正在预览…"),h(!0);try{fe(await e.previewGenerationPoems(n,r))?(P=JSON.stringify(r),g("预览完成,请确认后保存")):(P="",g("预览响应不完整"))}catch(i){if(v(e,i))return;if(w(i)){A();return}P="",g(i.message||"批量预览失败")}finally{h(!1)}}}async function pe(){var e=N(),n,t=d("[data-generation-batch-form]"),r,a;if(!(y||!s||v(e)||!t)&&(n=O(),!!n)){if(r=z(G(t)),a=D(r),a){g(a);return}if(P!==JSON.stringify(r)){g("请先预览当前内容,再保存");return}if(await B(X(r.disableMissing))){g("正在保存…"),h(!0);try{await e.saveGenerationPoems(n,r),P="",g("批量字辈已保存"),await U()}catch(i){if(v(e,i))return;if(w(i)){A();return}g(i.message||"批量保存失败")}finally{h(!1)}}}}function me(){m&&(m.addEventListener("submit",function(e){var n=e.target.closest("[data-generation-form]");n&&(e.preventDefault(),ce(n))}),m.addEventListener("click",function(e){var n=e.target,t=n.closest("[data-generation-batch-action]"),r=n.closest("[data-generation-edit], [data-generation-status]");if(t){e.preventDefault(),t.getAttribute("data-generation-batch-action")==="preview"&&ve(),t.getAttribute("data-generation-batch-action")==="save"&&pe();return}if(n.closest("[data-generation-add]")){e.preventDefault(),ee("");return}if(n.closest("[data-generation-editor-cancel]")){e.preventDefault(),ne();return}r&&(e.preventDefault(),r.hasAttribute("data-generation-edit")&&ee(r.getAttribute("data-generation-edit")),r.hasAttribute("data-generation-status")&&ge(r.getAttribute("data-generation-status")))}))}function ye(){m&&(me(),d("[data-generation-page]")&&U())}return{getCurrentGenealogyId:F,buildGenerationPoemBody:M,buildBatchBody:z,validateGenerationPoemBody:H,validateBatchBody:D,canEditGenerations:Q,splitPoemText:R,normalizeGenerationPoem:V,normalizeGenerationAccess:W,normalizePreview:K,buildBatchConfirmMessage:X,normalizeList:$,shouldRedirectToLogin:q,isForbidden:w,init:ye}});
|