2 lines
16 KiB
JavaScript
2 lines
16 KiB
JavaScript
(function(u,C){if(typeof module=="object"&&module.exports){module.exports=C(u);return}u.AlbumPages=C(u),u.document&&u.document.addEventListener("DOMContentLoaded",function(){u.AlbumPages.init()})})(typeof globalThis!="undefined"?globalThis:window,function(u){"use strict";function C(e){return u.ProfileUI&&typeof u.ProfileUI.confirmAction=="function"?u.ProfileUI.confirmAction(e):Promise.resolve(!u.confirm||u.confirm(e))}var v=u.MediaDisplay||(typeof require=="function"?require("./media-display.js"):null),I=u.document,R=Object.create(null),j=Object.create(null),D=null,h=!1,N=!1;function A(){return u.GenealogyApi&&u.GenealogyApi.defaultClient}function f(e,t){return I?(t||I).querySelector(e):null}function F(e,t){return I?Array.prototype.slice.call((t||I).querySelectorAll(e)):[]}function l(e){return e==null?"":String(e)}function U(e){var t=l(e).trim();return t||void 0}function $(e,t){return new URLSearchParams(l(e).replace(/^\?/,"")).get(t)||""}function p(e){return e==null||e===""||typeof e=="number"&&!Number.isSafeInteger(e)?"":/^[1-9][0-9]*$/.test(String(e))?String(e):""}function W(e){return e==null||e===""?"":p(e)}function E(e){var t;if(!(e==null||e===""))return t=Number(e),Number.isSafeInteger(t)?t:void 0}function J(e){var t=e===void 0&&u.location?u.location.search:e,r;return e===void 0&&u.ProfileUI&&u.ProfileUI.getGenealogyId&&(r=u.ProfileUI.getGenealogyId(),r)?p(r):p($(t,"genealogyId"))}function P(e){var t=e===void 0&&u.location?u.location.search:e;return p($(t,"albumId"))}function le(e){var t=U(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 we(e){var t=l(e);return/^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}/.test(t)?t.slice(0,16).replace(" ","T"):""}function de(e){var t=l(e).match(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/),r,n,a,o;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:(o=[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<=o[n-1])}function K(e){var t=e||{},r={albumName:l(t.albumName).trim(),status:"0"},n=U(t.albumDesc),a=W(t.coverOssId),o=E(t.sortOrder);return n!==void 0&&(r.albumDesc=n),t.coverOssId!==void 0&&t.coverOssId!==null&&t.coverOssId!==""&&(a?r.coverOssId=a:r.invalidCoverOssId=!0),t.sortOrder!==void 0&&t.sortOrder!==null&&t.sortOrder!==""&&(o!==void 0?r.sortOrder=o:r.invalidSortOrder=!0),r}function Q(e){return!e||!e.albumName?"请填写相册名称":e.invalidCoverOssId?"封面文件编号无效,请重新选择文件":e.invalidSortOrder?"排序值必须是安全整数":e.status==="1"?"当前 PC 无法重新读取停用相册,暂不开放停用":e.status!=="0"?"相册状态只能是 0":""}function X(e){var t=e||{},r={status:"0"},n=W(t.ossId),a=U(t.photoTitle),o=U(t.photoDesc),d=U(t.photographer),s=le(t.shootTime),b=E(t.sortOrder);return n?r.ossId=n:t.ossId!==void 0&&t.ossId!==null&&t.ossId!==""&&(r.invalidOssId=!0),a!==void 0&&(r.photoTitle=a),o!==void 0&&(r.photoDesc=o),d!==void 0&&(r.photographer=d),s!==void 0&&(r.shootTime=s),t.sortOrder!==void 0&&t.sortOrder!==null&&t.sortOrder!==""&&(b!==void 0?r.sortOrder=b:r.invalidSortOrder=!0),r}function Y(e){return!e||!e.ossId||e.invalidOssId?"请选择并上传照片":e.shootTime!==void 0&&!de(e.shootTime)?"拍摄时间格式无效":e.invalidSortOrder?"排序值必须是安全整数":e.status==="1"?"当前 PC 无法重新读取停用照片,暂不开放停用":e.status!=="0"?"照片状态只能是 0":""}function q(e){var t=p(e&&e.albumId),r=p(e&&e.genealogyId),n=v&&v.normalizeFileAccess(e&&e.coverFile),a=l(e&&e.albumName).trim(),o=E(e&&e.photoCount),d=E(e&&e.sortOrder),s=l(e&&e.status),b;return!t||!r||!a||e.coverFile!==void 0&&e.coverFile!==null&&!n||e.photoCount!==void 0&&e.photoCount!==null&&e.photoCount!==""&&o===void 0||e.sortOrder!==void 0&&e.sortOrder!==null&&e.sortOrder!==""&&d===void 0||s!=="0"&&s!=="1"?null:(b={albumId:t,genealogyId:r,genealogyNo:l(e.genealogyNo),genealogyName:l(e.genealogyName),surname:l(e.surname),albumName:a,albumDesc:l(e.albumDesc),status:s,remark:l(e.remark)},n&&(b.coverFile=n),o!==void 0&&(b.photoCount=o),d!==void 0&&(b.sortOrder=d),b)}function B(e){var t=p(e&&e.photoId),r=p(e&&e.genealogyId),n=p(e&&e.albumId),a=v&&v.normalizeFileAccess(e&&e.photoFile),o=E(e&&e.sortOrder),d=l(e&&e.status),s;return!t||!r||!n||!a||e.sortOrder!==void 0&&e.sortOrder!==null&&e.sortOrder!==""&&o===void 0||d!=="0"&&d!=="1"?null:(s={photoId:t,genealogyId:r,genealogyNo:l(e.genealogyNo),genealogyName:l(e.genealogyName),surname:l(e.surname),albumId:n,albumName:l(e.albumName),photoFile:a,photoTitle:l(e.photoTitle),photoDesc:l(e.photoDesc),photographer:l(e.photographer),shootTime:l(e.shootTime),status:d,remark:l(e.remark)},o!==void 0&&(s.sortOrder=o),s)}function G(e){var t;return Array.isArray(e)?(t=e.map(q),t.some(function(r){return!r})?[]:t):[]}function Z(e){var t;return Array.isArray(e)?(t=e.map(B),t.some(function(r){return!r})?[]:t):[]}function k(e,t){var r=G(e),n=p(t);return r.find(function(a){return a.albumId===n})||null}function g(e){return l(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function se(e){return"profile-album.html?genealogyId="+encodeURIComponent(e)}function _(e,t){var r="profile-album-edit.html?genealogyId="+encodeURIComponent(e);return t?r+"&albumId="+encodeURIComponent(t):r}function ee(e,t){return"profile-album-detail.html?genealogyId="+encodeURIComponent(e)+"&albumId="+encodeURIComponent(t)}function L(e,t){return"<p><span>"+g(e)+"</span><b>"+g(t||"未提供")+"</b></p>"}function te(e){var t="";return e?(h&&(t='<div class="bottom-actions"><a class="btn ghost" href="'+g(_(e.genealogyId,e.albumId))+'">编辑相册</a><button class="btn danger" type="button" data-album-delete-id="'+g(e.albumId)+'">删除相册</button></div>'),(v?v.renderImage(e.coverFile,{alt:e.albumName+"封面",className:"album-cover-media"}):"")+'<div class="form-like album-detail">'+L("相册名称",e.albumName)+L("相册说明",e.albumDesc)+L("照片数量",e.photoCount===void 0?"":e.photoCount)+L("备注",e.remark)+"</div>"+t):""}function fe(e){var t='<a class="pill" href="'+g(ee(e.genealogyId,e.albumId))+'">查看照片</a>';return h&&(t+='<a class="pill" href="'+g(_(e.genealogyId,e.albumId))+'">编辑</a><button class="pill is-danger" type="button" data-album-delete-id="'+g(e.albumId)+'">删除</button>'),'<article class="module-row album-row"><div><h3>'+g(e.albumName)+"</h3><p>"+g(e.albumDesc||"照片数量:"+(e.photoCount||0))+'</p></div><div class="row-actions">'+t+"</div></article>"}function re(e){var t=Array.isArray(e)?e.map(B):[];return t.some(function(r){return!r})||!t.length?"":t.map(function(r){var n=h?'<button class="pill is-danger" type="button" data-album-photo-delete-id="'+g(r.photoId)+'">删除</button>':"";return'<article class="module-row album-photo-row">'+(v?v.renderImage(r.photoFile,{alt:r.photoTitle||"家族照片",className:"album-photo-media"}):"")+"<div><h3>"+g(r.photoTitle||"未命名照片")+"</h3><p>"+g([r.photoDesc,r.photographer,r.shootTime].filter(Boolean).join(" · ")||"文件已上传")+'</p></div><div class="row-actions">'+n+"</div></article>"}).join("")}function ae(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,t){return ae(e,t)?(e&&e.clearToken&&e.clearToken(),u.NavigationUtil.open("login.html"),!0):!1}function T(e){u.layui&&u.layui.layer?u.layui.layer.msg(e):u.alert&&u.alert(e)}function M(){u.ProfileUI&&u.ProfileUI.syncGenealogyContextLinks&&u.ProfileUI.syncGenealogyContextLinks()}function O(e){return m(e)?"forbidden":"error"}function i(e,t,r){var n=f(e);if(n){if(!t){n.innerHTML="";return}if(r&&u.ProfileUI&&u.ProfileUI.setApiState){u.ProfileUI.setApiState(n,r,t);return}n.textContent=t}}function x(e,t){var r=f("[data-album-editor-placeholder]");F("[data-album-editor], [data-album-editor-action], [data-album-photo-editor]").forEach(function(n){n.hidden=!e}),r&&(r.hidden=!!e,t&&(r.textContent=t))}function y(e){N=!!e,F("[data-album-form] button, [data-album-form] input, [data-album-form] textarea, [data-album-photo-form] button, [data-album-photo-form] input, [data-album-photo-form] textarea, [data-album-delete-id], [data-album-photo-delete-id]").forEach(function(t){t.disabled=N})}function me(){var e="请先选择家谱,再查看或维护相册。";i("[data-album-list]",e,"empty"),i("[data-album-detail]","当前没有家谱上下文。","empty"),i("[data-album-photo-list]","当前没有家谱上下文。","empty"),x(!1,e),i("[data-album-form-status]",e,"forbidden"),i("[data-album-photo-status]",e,"forbidden")}function w(){var e=J();return e||me(),e}function ne(e){return!!(e&&(e.canEditContent===!0||e.canManage===!0))}async function V(e,t){var r=await e.genealogyDetail(t);return h=ne(r),F("[data-album-create-link], [data-album-editor-action], [data-album-photo-editor]").forEach(function(n){n.hidden=!h}),r}function ce(e){var t=f("[data-album-list]"),r=G(e);return R=Object.create(null),r.forEach(function(n){R[n.albumId]=n}),t?!Array.isArray(e)||e.length&&!r.length?(i("[data-album-list]","相册响应缺少稳定 AlbumVo 字段,请联系后端核对。","error"),[]):r.length?(t.innerHTML=r.map(fe).join(""),r):(i("[data-album-list]","暂无相册","empty"),[]):r}async function oe(){var e=A(),t;if(!c(e)&&(t=w(),!!t)){M(),i("[data-album-list]","正在加载相册…","loading");try{await V(e,t),ce(await e.albums(t))}catch(r){if(c(e,r))return;i("[data-album-list]",m(r)?"当前账号无权查看该家谱的相册。":"相册加载失败,请稍后重试。",O(r)),T(m(r)?"当前账号无权查看该家谱的相册。":r.message||"相册加载失败")}}}function ue(e){var t={};return F("[name]",e).forEach(function(r){t[r.name]=r.value}),t}function S(e,t,r){var n=f(e+' [name="'+t+'"]');n&&(n.value=r==null?"":String(r))}function be(e){if(!e||e.status!=="0")throw new Error("停用相册无法通过当前 PC 接口重新读取或编辑");S("[data-album-form]","albumName",e.albumName),S("[data-album-form]","albumDesc",e.albumDesc),S("[data-album-form]","coverOssId",e.coverOssId),S("[data-album-form]","sortOrder",e.sortOrder),S("[data-album-form]","status","0")}async function pe(){var e=A(),t,r,n,a;if(!c(e)&&(t=w(),!!t)){r=P(),M(),x(!1,"正在加载相册编辑信息…"),i("[data-album-form-status]","正在读取家谱权限…","loading");try{if(await V(e,t),!h)throw{status:403,message:"当前账号无权维护该家谱的相册。"};if(r){if(n=await e.albums(t),a=k(n,r),!a)throw new Error("相册列表未返回当前相册");be(a),f("[data-album-editor-title]")&&(f("[data-album-editor-title]").textContent="编辑相册")}x(!0),i("[data-album-form-status]","")}catch(o){if(c(e,o))return;x(!1,m(o)?"当前账号无权维护该家谱的相册。":o.message||"相册编辑信息加载失败"),i("[data-album-form-status]",m(o)?"当前账号无权维护该家谱的相册。":o.message||"相册编辑信息加载失败",O(o))}}}async function H(e,t,r){var n,a,o=f("[data-album-photo-list]");return i("[data-album-photo-list]","正在加载照片…","loading"),n=await e.albumPhotos(t,r),a=Z(n),j=Object.create(null),a.forEach(function(d){j[d.photoId]=d}),o?!Array.isArray(n)||n.length&&!a.length?(i("[data-album-photo-list]","照片响应缺少稳定 AlbumPhotoVo 字段,请联系后端核对。","error"),[]):a.length?(o.innerHTML=re(a),a):(i("[data-album-photo-list]","暂无照片","empty"),[]):a}async function ge(){var e=A(),t,r,n;if(!c(e)){if(t=w(),r=P(),!t||!r){t&&(i("[data-album-detail]","缺少有效相册编号。","error"),i("[data-album-photo-list]","缺少有效相册编号。","empty"));return}M(),i("[data-album-detail]","正在加载相册信息…","loading"),i("[data-album-photo-list]","正在加载照片…","loading");try{if(await V(e,t),n=await e.albums(t),D=k(n,r),!D)throw new Error("相册列表未返回当前相册");f("[data-album-detail]")&&(f("[data-album-detail]").innerHTML=te(D)),f("[data-album-detail-title]")&&(f("[data-album-detail-title]").textContent=D.albumName)}catch(a){if(c(e,a))return;i("[data-album-detail]",m(a)?"当前账号无权查看该相册。":a.message||"相册详情加载失败",O(a)),i("[data-album-photo-list]",m(a)?"当前账号无权查看该相册。":"照片加载失败,请稍后重试。",O(a)),T(m(a)?"当前账号无权查看该相册。":a.message||"相册详情加载失败");return}try{await H(e,t,r)}catch(a){if(c(e,a))return;i("[data-album-photo-list]",m(a)?"当前账号无权查看该相册照片。":a.message||"照片加载失败",O(a)),T(m(a)?"当前账号无权查看该相册照片。":a.message||"照片加载失败")}}}async function he(e){var t=A(),r=w(),n=P(),a,o,d,s,b,ie;if(!(N||!h||!r||c(t))){if(a=K(ue(e)),o=Q(a),o){i("[data-album-form-status]",o,"error");return}delete a.invalidCoverOssId,delete a.invalidSortOrder,y(!0),i("[data-album-form-status]","正在保存相册…","loading");try{if(d=n?await t.updateAlbum(r,n,a):await t.createAlbum(r,a),s=q(d),b=n||s&&s.albumId,!b)throw new Error("保存响应缺少 albumId");if(ie=k(await t.albums(r),b),!ie)throw new Error("保存后相册列表未返回同一相册");u.NavigationUtil.open(ee(r,b))}catch(z){if(c(t,z))return;i("[data-album-form-status]",m(z)?"当前账号无权保存该相册。":z.message||"相册保存失败",O(z))}finally{y(!1)}}}async function ve(e){var t=A(),r=w(),n=P(),a,o,d;if(!(N||!h||!r||!n||c(t))){if(a=X(ue(e)),o=Y(a),o){i("[data-album-photo-status]",o,"error");return}delete a.invalidOssId,delete a.invalidSortOrder,y(!0),i("[data-album-photo-status]","正在添加照片…","loading");try{if(d=B(await t.createAlbumPhoto(r,n,a)),!d||d.albumId!==n)throw new Error("添加照片响应缺少稳定 photoId");if(!(await H(t,r,n)).some(function(s){return s.photoId===d.photoId}))throw new Error("添加后照片列表未返回同一照片");e.reset(),i("[data-album-photo-status]","照片已添加")}catch(s){if(c(t,s))return;i("[data-album-photo-status]",m(s)?"当前账号无权添加照片。":s.message||"照片添加失败",O(s))}finally{y(!1)}}}async function Ie(e){var t=A(),r=w(),n=R[e]||D;if(!(N||!h||!r||!p(e)||c(t))&&await C("确认删除“"+(n?n.albumName:"该相册")+"”及其中全部照片吗?删除后不可恢复。")){y(!0);try{await t.deleteAlbum(r,e),f("[data-album-page]")?await oe():u.NavigationUtil.open(se(r))}catch(a){if(c(t,a))return;T(m(a)?"当前账号无权删除该相册。":a.message||"相册删除失败")}finally{y(!1)}}}async function ye(e){var t=A(),r=w(),n=P(),a=j[e];if(!(N||!h||!r||!n||!p(e)||c(t))&&await C("确认删除“"+(a&&a.photoTitle||"该照片")+"”吗?删除后不可恢复。")){y(!0);try{await t.deleteAlbumPhoto(r,n,e),await H(t,r,n),T("照片已删除")}catch(o){if(c(t,o))return;T(m(o)?"当前账号无权删除该照片。":o.message||"照片删除失败")}finally{y(!1)}}}function Ae(){I&&(I.addEventListener("click",function(e){var t=e.target.closest("[data-album-delete-id]"),r=e.target.closest("[data-album-photo-delete-id]");if(t){e.preventDefault(),Ie(t.getAttribute("data-album-delete-id"));return}r&&(e.preventDefault(),ye(r.getAttribute("data-album-photo-delete-id")))}),I.addEventListener("submit",function(e){var t=e.target.closest("[data-album-form]"),r=e.target.closest("[data-album-photo-form]");t?(e.preventDefault(),he(t)):r&&(e.preventDefault(),ve(r))}))}function Oe(){I&&(Ae(),f("[data-album-page]")&&oe(),f("[data-album-edit-page]")&&pe(),f("[data-album-detail-page]")&&ge())}return{getCurrentGenealogyId:J,getCurrentAlbumId:P,buildAlbumBody:K,validateAlbumBody:Q,buildAlbumPhotoBody:X,validateAlbumPhotoBody:Y,canEditAlbums:ne,normalizeAlbum:q,normalizeAlbumPhoto:B,normalizeAlbums:G,normalizeAlbumPhotos:Z,findAlbumById:k,renderAlbumDetail:te,renderPhotoList:re,shouldRedirectToLogin:ae,isForbidden:m,init:Oe}});
|