Files
jiapu/dist/public/js/relative-pages.js
T

2 lines
14 KiB
JavaScript

(function(i,E){if(typeof module=="object"&&module.exports){module.exports=E(i);return}i.RelativePages=E(i),i.document&&i.document.addEventListener("DOMContentLoaded",function(){i.RelativePages.init()})})(typeof globalThis!="undefined"?globalThis:window,function(i){"use strict";function E(e){return i.ProfileUI&&typeof i.ProfileUI.confirmAction=="function"?i.ProfileUI.confirmAction(e):Promise.resolve(!i.confirm||i.confirm(e))}var x=i.MediaDisplay||(typeof require=="function"?require("./media-display.js"):null),R=i.document,O=Object.create(null),b=!1,S=!1;function T(){return i.GenealogyApi&&i.GenealogyApi.defaultClient}function l(e,t){return R?(t||R).querySelector(e):null}function D(e,t){return R?Array.prototype.slice.call((t||R).querySelectorAll(e)):[]}function p(e){var t=String(e==null?"":e).trim();return t||void 0}function q(e,t){return new URLSearchParams(String(e||"").replace(/^\?/,"")).get(t)||""}function I(e){return e==null||e===""||typeof e=="number"&&!Number.isSafeInteger(e)?"":/^[1-9][0-9]*$/.test(String(e))?String(e):""}function V(e){var t=e===void 0&&i.location?i.location.search:e,r;return e===void 0&&i.ProfileUI&&i.ProfileUI.getGenealogyId&&(r=i.ProfileUI.getGenealogyId(),r)?I(r):I(q(t,"genealogyId"))}function B(e){var t=e===void 0&&i.location?i.location.search:e;return I(q(t,"relativeId"))}function j(e){var t=p(e),r;if(t)return r=Number(t),Number.isFinite(r)?r:void 0}function ie(e){var t=j(e);return Number.isSafeInteger(t)?t:void 0}function $(e){var t=String(e).trim().replace(/^([+-]?)\./,"$10."),r=t.match(/^([+-]?)(\d+)(?:\.(\d*))?(?:[eE]([+-]?\d+))?$/),n,a;if(!r)return"";if(n=BigInt((r[2]+(r[3]||"")).replace(/^0+(?=\d)/,"")),a=(r[3]||"").length-Number(r[4]||0),n===BigInt(0))return"0:0";for(a<0&&(n*=BigInt(10)**BigInt(-a),a=0);a>0&&n%BigInt(10)===BigInt(0);)n/=BigInt(10),a-=1;return r[1]==="-"&&(n=-n),String(n)+":"+String(a)}function le(e,t){return Number.isFinite(t)&&$(e)===$(JSON.stringify(t))}function de(e){var t=p(e);if(t)return/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/.test(t)?t.replace("T"," ")+":00":/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/.test(t)?t.replace("T"," "):t}function ue(e){var t=String(e||"");return/^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}/.test(t)?t.slice(0,16).replace(" ","T"):""}function z(e){var t=e||{},r={relativeName:String(t.relativeName||"").trim()},n=p(t.relationName),a=p(t.eventName),d=de(t.eventTime),o=p(t.giftAmount),h=p(t.recordContent),f=p(t.mediaOssIds),s=p(t.sortOrder),U=p(t.status);return n!==void 0&&(r.relationName=n),a!==void 0&&(r.eventName=a),d!==void 0&&(r.eventTime=d),o!==void 0&&(r.giftAmount=j(o),r.giftAmount===void 0?r.invalidGiftAmount=!0:le(o,r.giftAmount)||(r.invalidGiftPrecision=!0)),h!==void 0&&(r.recordContent=h),f!==void 0&&(r.mediaOssIds=f),s!==void 0&&(r.sortOrder=ie(s),r.sortOrder===void 0&&(r.invalidSortOrder=!0)),U!==void 0&&(r.status=U),r}function H(e){return!e||!e.relativeName?"请填写亲友姓名":e.invalidGiftAmount||Object.prototype.hasOwnProperty.call(e,"giftAmount")&&!Number.isFinite(e.giftAmount)?"礼金金额必须是有限数字":e.invalidGiftPrecision?"礼金金额超出浏览器可安全提交的精度":e.eventTime!==void 0&&!fe(e.eventTime)?"事件时间格式无效":e.mediaOssIds!==void 0&&!/^[1-9][0-9]*(,[1-9][0-9]*)*$/.test(e.mediaOssIds)?"附件上传结果无效":e.invalidSortOrder||Object.prototype.hasOwnProperty.call(e,"sortOrder")&&!Number.isSafeInteger(e.sortOrder)?"排序值必须是安全整数":e.status==="1"?"当前 PC 无法重新读取停用记录,暂不开放停用":e.status!==void 0&&e.status!=="0"?"记录状态只能是 0":""}function fe(e){var t=String(e||"").match(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/),r,n,a,d;return!t||(r=Number(t[1]),n=Number(t[2]),a=Number(t[3]),n<1||n>12||Number(t[4])>23||Number(t[5])>59||Number(t[6])>59)?!1:(d=[31,r%4===0&&(r%100!==0||r%400===0)?29:28,31,30,31,30,31,31,30,31,30,31],a>=1&&a<=d[n-1])}function u(e){return e==null?"":String(e)}function oe(e){var t;return e==null||e===""?"":typeof e=="number"?Number.isFinite(e)?String(e):"":(t=String(e).trim(),/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(t)?t:"")}function se(e){var t;if(!(e==null||e===""))return t=Number(e),Number.isSafeInteger(t)?t:void 0}function w(e){var t=I(e&&e.relativeId),r=I(e&&e.genealogyId),n=I(e&&e.appUserId),a=String(e&&e.relativeName||"").trim(),d=u(e&&e.status),o=x?x.normalizeFileList(e&&e.mediaFiles):[],h=oe(e&&e.giftAmount),f=se(e&&e.sortOrder),s;return!t||!r||!a||d!=="0"&&d!=="1"||e.appUserId!==void 0&&e.appUserId!==null&&e.appUserId!==""&&!n||e.giftAmount!==void 0&&e.giftAmount!==null&&e.giftAmount!==""&&h===""||e.sortOrder!==void 0&&e.sortOrder!==null&&e.sortOrder!==""&&f===void 0?null:(s={relativeId:t,genealogyId:r,genealogyNo:u(e.genealogyNo),genealogyName:u(e.genealogyName),surname:u(e.surname),appUserNickName:u(e.appUserNickName),appUserPhone:u(e.appUserPhone),relativeName:a,relationName:u(e.relationName),eventName:u(e.eventName),eventTime:u(e.eventTime),giftAmount:h,recordContent:u(e.recordContent),status:d,remark:u(e.remark)},o.length&&(s.mediaFiles=o),n&&(s.appUserId=n),f!==void 0&&(s.sortOrder=f),s)}function J(e,t){var r=w(e);return!!(r&&r.relativeId===I(t))}function K(e){return!!(e&&e.status==="0")}function v(e){return u(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function W(e){return Array.isArray(e)?e.length:0}function Q(e,t){var r="profile-relative.html?genealogyId="+encodeURIComponent(e);return t?r+"&relativeId="+encodeURIComponent(t):r}function X(e,t){var r="profile-relative-edit.html?genealogyId="+encodeURIComponent(e);return t?r+"&relativeId="+encodeURIComponent(t):r}function Y(e){return!!(e&&(e.canEditContent===!0||e.canManage===!0))}function ve(e){var t=[],r='<button class="pill" type="button" data-relative-detail-id="'+v(e.relativeId)+'">查看详情</button>';return e.relationName&&t.push(e.relationName),e.eventName&&t.push(e.eventName),e.eventTime&&t.push(e.eventTime),t.length||t.push("未填写关系和事件"),b&&(r+='<a class="pill" href="'+v(X(e.genealogyId,e.relativeId))+'">编辑</a><button class="pill is-danger" type="button" data-relative-delete-id="'+v(e.relativeId)+'">删除</button>'),'<article class="module-row relative-row"><div><h3>'+v(e.relativeName)+"</h3><p>"+v(t.join(" · "))+'</p></div><div class="row-actions">'+r+"</div></article>"}function c(e,t){return"<p><span>"+v(e)+"</span><b>"+v(t||"未提供")+"</b></p>"}function Z(e){var t,r="";return e?(t=W(e.mediaFiles),b&&(r='<div class="bottom-actions"><a class="btn ghost" href="'+v(X(e.genealogyId,e.relativeId))+'">编辑记录</a><button class="btn danger" type="button" data-relative-delete-id="'+v(e.relativeId)+'">删除记录</button></div>'),(x?x.renderGallery(e.mediaFiles,{label:"亲友记录附件"}):"")+'<div class="form-like relative-detail">'+c("亲友姓名",e.relativeName)+c("关系名称",e.relationName)+c("事件名称",e.eventName)+c("事件时间",e.eventTime)+c("礼金金额",e.giftAmount)+c("记录内容",e.recordContent)+c("附件",t?t+" 个附件":"未上传")+c("记录人",e.appUserNickName)+c("状态",e.status==="0"?"正常":"停用")+c("备注",e.remark)+"</div>"+r):ee("empty","请选择一条亲友记录查看详情")}function L(e){i.layui&&i.layui.layer?i.layui.layer.msg(e):i.alert&&i.alert(e)}function _(e,t){var r=t&&(t.status||t.code);return!e||!e.getToken||!e.getToken()||Number(r)===401}function m(e){return Number(e&&(e.status||e.code))===403}function C(e){return m(e)?"forbidden":"error"}function g(e,t){return _(e,t)?(e&&e.clearToken&&e.clearToken(),i.NavigationUtil.open("login.html"),!0):!1}function ee(e,t){return i.ProfileUI&&i.ProfileUI.renderApiState?i.ProfileUI.renderApiState(e,t):'<div class="api-state api-state--'+e+'" role="'+(e==="error"||e==="forbidden"?"alert":"status")+'" aria-live="polite">'+v(t)+"</div>"}function y(e,t,r){if(e){if(i.ProfileUI&&i.ProfileUI.setApiState){i.ProfileUI.setApiState(e,t,r);return}e.innerHTML=ee(t,r)}}function A(e,t){var r=l("[data-relative-form-status]");if(r){if(!e){r.innerHTML="";return}if(t&&i.ProfileUI&&i.ProfileUI.setApiState){i.ProfileUI.setApiState(r,t,e);return}r.textContent=e}}function k(e,t,r){var n=l("[data-relative-editor-placeholder]");D("[data-relative-editor], [data-relative-editor-action]").forEach(function(a){a.hidden=!e}),n&&(n.hidden=!!e,!e&&t&&(r?y(n,r,t):n.textContent=t))}function G(e){b=!!e,D("[data-relative-create-link]").forEach(function(t){t.hidden=!b})}async function te(e,t){var r=await e.genealogyDetail(t);return G(Y(r)),r}function F(e,t){var r=l('[data-relative-form] [type="submit"]');S=!!e,D("[data-relative-form] button, [data-relative-form] input, [data-relative-form] textarea, [data-relative-delete-id]").forEach(function(n){n.disabled=S}),r&&(r.dataset.defaultLabel||(r.dataset.defaultLabel=r.textContent),r.textContent=S&&t?t:r.dataset.defaultLabel,r.setAttribute("aria-busy",S?"true":"false"))}function re(){i.ProfileUI&&i.ProfileUI.syncGenealogyContextLinks&&i.ProfileUI.syncGenealogyContextLinks()}function ce(){var e=l("[data-relative-list]"),t=l("[data-relative-detail]"),r="请先选择家谱,再查看或维护亲友记录。";y(e,"empty",r),y(t,"empty","当前没有家谱上下文。"),G(!1),k(!1,r,"empty"),A(r,"empty")}function P(){var e=V();return e||ce(),e}function me(e){var t=l("[data-relative-list]"),r=Array.isArray(e)?e.map(w):[],n=r.filter(function(d){return!d}).length,a=r.filter(Boolean);return O=Object.create(null),a.forEach(function(d){O[d.relativeId]=d}),t?!Array.isArray(e)||n?(y(t,"error","亲友记录响应缺少稳定 RelativeRecordVo 字段,请联系后端核对。"),[]):a.length?(t.innerHTML=a.map(ve).join(""),a):(y(t,"empty","暂无亲友往来记录"),[]):a}function ae(e){var t=l("[data-relative-detail]");t&&(t.innerHTML=Z(e))}async function M(e){var t=T(),r=P(),n;if(!r||!I(e)||g(t))return null;y(l("[data-relative-detail]"),"loading","正在加载亲友记录详情…");try{if(n=w(await t.relativeRecordDetail(r,e)),!n)throw new Error("亲友记录详情响应缺少稳定 RelativeRecordVo 字段");return O[n.relativeId]=n,ae(n),n}catch(a){return g(t,a)||(y(l("[data-relative-detail]"),C(a),m(a)?"当前账号无权查看该亲友记录。":"亲友记录详情加载失败,请稍后重试。"),L(m(a)?"当前账号无权查看该亲友记录。":a.message||"亲友记录详情加载失败")),null}}async function ne(){var e=T(),t,r,n;if(!g(e)&&(t=P(),!!t)){re(),y(l("[data-relative-list]"),"loading","正在加载亲友记录…");try{await te(e,t),r=me(await e.relativeRecords(t)),n=B(),n&&O[n]?await M(n):r.length?await M(r[0].relativeId):ae(null)}catch(a){if(g(e,a))return;G(!1),y(l("[data-relative-list]"),C(a),m(a)?"当前账号无权查看该家谱的亲友记录。":"亲友记录加载失败,请稍后重试。"),L(m(a)?"当前账号无权查看该家谱的亲友记录。":a.message||"亲友记录加载失败")}}}function ge(e){var t={};return D("[name]",e).forEach(function(r){t[r.name]=r.value}),t}function N(e,t){var r=l('[data-relative-form] [name="'+e+'"]');r&&(r.value=t==null?"":String(t))}function pe(e){if(!K(e))throw new Error("停用亲友记录无法通过当前 PC 接口重新读取或编辑");N("relativeName",e.relativeName),N("relationName",e.relationName),N("eventName",e.eventName),N("eventTime",ue(e.eventTime)),N("giftAmount",e.giftAmount),N("recordContent",e.recordContent),N("mediaOssIds",e.mediaOssIds),N("sortOrder",e.sortOrder),N("status","0"),l("[data-relative-media-status]")&&(l("[data-relative-media-status]").textContent=e.mediaOssIds?"已保留 "+W(e.mediaOssIds)+" 个附件,可继续选择追加":"未选择文件")}async function Ie(){var e=T(),t,r,n;if(!g(e)&&(t=P(),!!t)){r=B(),re(),k(!1,"正在加载亲友记录编辑信息…","loading"),A("正在读取家谱权限…","loading");try{if(await te(e,t),!b)throw{status:403,message:"当前账号无权维护该家谱的亲友记录。"};if(r){if(n=w(await e.relativeRecordDetail(t,r)),!n)throw new Error("亲友记录详情响应缺少稳定 RelativeRecordVo 字段");pe(n),l("[data-relative-editor-title]")&&(l("[data-relative-editor-title]").textContent="编辑亲友记录")}k(!0),A("")}catch(a){if(g(e,a))return;G(!1),k(!1,m(a)?"当前账号无权维护该家谱的亲友记录。":a.message||"亲友记录编辑信息加载失败",C(a)),A(m(a)?"当前账号无权维护该家谱的亲友记录。":a.message||"亲友记录编辑信息加载失败",C(a))}}}async function ye(e){var t=T(),r=P(),n=B(),a,d,o,h,f,s;if(!(S||!b||!r||g(t))){if(a=z(ge(e)),d=H(a),d){A(d,"error");return}delete a.invalidGiftAmount,delete a.invalidGiftPrecision,delete a.invalidSortOrder,F(!0,"正在保存…"),A("正在保存亲友记录…","loading");try{if(o=n?await t.updateRelativeRecord(r,n,a):await t.createRelativeRecord(r,a),h=w(o),f=n||h&&h.relativeId,!f)throw new Error("保存响应缺少 relativeId");if(s=await t.relativeRecordDetail(r,f),!J(s,f))throw new Error("保存后重读未返回同一条亲友记录");i.NavigationUtil.open(Q(r,f))}catch(U){if(g(t,U))return;A(m(U)?"当前账号无权保存该亲友记录。":U.message||"亲友记录保存失败",C(U))}finally{F(!1)}}}async function Ne(e){var t=T(),r=P(),n=O[e];if(!(S||!b||!r||!I(e)||g(t))&&await E("确认删除“"+(n?n.relativeName:"该亲友记录")+"”吗?删除后不可恢复,并会释放附件引用。")){F(!0);try{await t.deleteRelativeRecord(r,e),await ne(),L("亲友记录已删除")}catch(a){if(g(t,a))return;L(m(a)?"当前账号无权删除该亲友记录。":a.message||"亲友记录删除失败")}finally{F(!1)}}}function he(){var e=l('[data-relative-form] [name="mediaOssIds"]'),t=l("[data-relative-media-status]"),r=l("[data-relative-media-input]");e&&(e.value=""),r&&(r.value=""),t&&(t.textContent="未选择文件")}function Re(){R&&(R.addEventListener("click",function(e){var t=e.target.closest("[data-relative-detail-id]"),r=e.target.closest("[data-relative-delete-id]"),n=e.target.closest("[data-relative-clear-media]"),a,d;if(t){e.preventDefault(),a=t.getAttribute("data-relative-detail-id"),d=P(),i.history&&d&&i.history.replaceState(null,"",Q(d,a)),M(a).then(function(o){o&&i.ProfileUI&&i.ProfileUI.revealDetail&&i.ProfileUI.revealDetail(l("[data-relative-detail-heading]"))});return}if(r){e.preventDefault(),Ne(r.getAttribute("data-relative-delete-id"));return}n&&(e.preventDefault(),he())}),R.addEventListener("submit",function(e){var t=e.target.closest("[data-relative-form]");t&&(e.preventDefault(),ye(t))}))}function be(){R&&(Re(),l("[data-relative-page]")&&ne(),l("[data-relative-edit-page]")&&Ie())}return{getCurrentGenealogyId:V,getCurrentRelativeId:B,buildRelativeRecordBody:z,validateRelativeRecordBody:H,normalizeRelativeRecord:w,matchesSavedRecord:J,canEditRecords:Y,isEditableRecord:K,renderRelativeDetail:Z,shouldRedirectToLogin:_,isForbidden:m,init:be}});