2 lines
7.8 KiB
JavaScript
2 lines
7.8 KiB
JavaScript
(function(a,f){if(typeof module=="object"&&module.exports){module.exports=f(a);return}a.NotificationPages=f(a),a.document&&a.document.addEventListener("DOMContentLoaded",function(){a.NotificationPages.init()})})(typeof globalThis!="undefined"?globalThis:window,function(a){"use strict";var f=a.document,m=Object.create(null),p="",v=!1;function S(){return a.GenealogyApi&&a.GenealogyApi.defaultClient}function r(t,n){return f?(n||f).querySelector(t):null}function M(t,n){return f?Array.prototype.slice.call((n||f).querySelectorAll(t)):[]}function h(t){return t==null||t===""||typeof t=="number"&&!Number.isSafeInteger(t)?"":/^[1-9][0-9]*$/.test(String(t))?String(t):""}function A(t){var n;return t==null||t===""?null:(n=h(t),n||void 0)}function d(t){return t==null?"":String(t)}function z(t){return t==="0"||t==="1"?{readStatus:t}:{}}function T(t){var n=h(t&&t.notificationId),i=A(t&&t.genealogyId),e=A(t&&t.senderUserId),l=A(t&&t.bizId),o=d(t&&t.readStatus),w=d(t&&t.status);return!n||i===void 0||e===void 0||l===void 0||o!=="0"&&o!=="1"||w!=="0"&&w!=="1"?null:{notificationId:n,genealogyId:i,genealogyNo:d(t.genealogyNo),genealogyName:d(t.genealogyName),senderUserId:e,senderNickName:d(t.senderNickName),senderPhone:d(t.senderPhone),noticeType:d(t.noticeType),noticeTitle:d(t.noticeTitle),noticeContent:d(t.noticeContent),bizType:d(t.bizType),bizId:l,bizSummary:d(t.bizSummary),publishTime:d(t.publishTime),readStatus:o,readTime:t.readTime===void 0||t.readTime===null?null:String(t.readTime),status:w,remark:d(t.remark)}}function j(t){var n;return Array.isArray(t)?(n=t.map(T),n.some(function(i){return!i})?[]:n):[]}function C(t){var n=Number(t);return Number.isSafeInteger(n)&&n>=0?n:0}function R(t,n){var i=T(t);return!!(i&&i.notificationId===h(n))}function k(t){return!!(t&&t.status==="0"&&t.readStatus==="0")}function y(t){return d(t).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function L(t){var n=t.readStatus==="0"?"未读":"已读",i=k(t)?'<button class="pill" type="button" data-notification-read-id="'+y(t.notificationId)+'">标记已读</button>':"";return'<article class="module-row notification-row'+(t.readStatus==="0"?" is-unread":"")+'"><div><h3>'+y(t.noticeTitle||"通知")+"</h3><p>"+y(t.noticeContent||"暂无通知内容")+"</p><p>"+y([t.publishTime,n].filter(Boolean).join(" · "))+'</p></div><div class="row-actions"><button class="pill" type="button" data-notification-detail-id="'+y(t.notificationId)+'">查看详情</button>'+i+"</div></article>"}function c(t,n){return"<p><span>"+y(t)+"</span><b>"+y(n||"未提供")+"</b></p>"}function P(t){var n;return t?(n=k(t)?'<div class="bottom-actions"><button class="btn ghost" type="button" data-notification-read-id="'+y(t.notificationId)+'">标记为已读</button></div>':"",'<div class="form-like notification-detail">'+c("通知标题",t.noticeTitle)+c("通知内容",t.noticeContent)+c("通知类型",t.noticeType)+c("家谱",t.genealogyName)+c("发送人",t.senderNickName)+c("业务类型",t.bizType)+c("业务摘要",t.bizSummary)+c("发布时间",t.publishTime)+c("阅读状态",t.readStatus==="0"?"未读":"已读")+c("阅读时间",t.readTime)+c("备注",t.remark)+"</div>"+n):'<div class="api-empty">请选择一条通知查看详情</div>'}function U(t){a.layui&&a.layui.layer?a.layui.layer.msg(t):a.alert&&a.alert(t)}function D(t,n){var i=n&&(n.status||n.code);return!t||!t.getToken||!t.getToken()||Number(i)===401}function b(t,n){return D(t,n)?(t&&t.clearToken&&t.clearToken(),a.NavigationUtil.open("login.html"),!0):!1}function u(t){return Number(t&&(t.status||t.code))===403}function g(t,n,i){if(t){if(a.ProfileUI&&a.ProfileUI.setApiState&&n){a.ProfileUI.setApiState(t,n,i);return}t.textContent=i||""}}function s(t,n){var i=r("[data-notification-status]");g(i,t,n)}function I(t){v=!!t,M("[data-notification-read-id], [data-notification-read-all], [data-notification-refresh], [data-notification-filter]").forEach(function(n){n.disabled=v})}function B(t){var n=r("[data-notification-list]"),i=Array.isArray(t)?t.map(T):[],e=i.filter(function(o){return!o}).length,l=i.filter(Boolean);return m=Object.create(null),l.forEach(function(o){m[o.notificationId]=o}),n?!Array.isArray(t)||e?(g(n,"error","通知列表响应无效,请稍后重试。"),[]):l.length?(n.innerHTML=l.map(L).join(""),v&&I(!0),l):(g(n,"empty","当前暂无通知。"),[]):l}function E(t){var n=r("[data-notification-detail]");if(n){if(!t){g(n,"empty","请选择一条通知查看详情。");return}n.innerHTML=P(t)}}async function x(t){var n=S(),i;if(!h(t)||b(n))return null;g(r("[data-notification-detail]"),"loading","正在读取通知详情…");try{if(i=T(await n.notificationDetail(t)),!i||!R(i,t))throw new Error("通知详情未返回同一条稳定 NotificationView");return p=i.notificationId,m[i.notificationId]=i,E(i),i}catch(e){return b(n,e)||(g(r("[data-notification-detail]"),u(e)?"forbidden":"error",u(e)?"暂无权限查看该通知详情。":"通知详情加载失败,请稍后重试。"),s(u(e)?"forbidden":"error",u(e)?"暂无权限查看该通知详情。":e.message||"通知详情加载失败,请稍后重试。")),null}}function q(){var t=r("[data-notification-filter]");return t?t.value:""}async function N(){var t=S(),n=r("[data-notification-unread-count]"),i,e,l;if(!b(t)){if(!t.notifications||!t.notificationDetail||!t.unreadNotificationCount){g(r("[data-notification-list]"),"error","消息服务初始化失败,请刷新后重试。"),s("error","消息服务初始化失败,请刷新后重试。");return}g(r("[data-notification-list]"),"loading","正在同步消息…"),s("loading","正在同步消息…");try{i=await Promise.all([t.notifications(z(q())),t.unreadNotificationCount()]),e=B(i[0]),n&&(n.textContent=String(C(i[1]))),l=p&&m[p]?p:e[0]&&e[0].notificationId,l?await x(l):E(null),s("","消息已同步")}catch(o){if(b(t,o))return;B(null),g(r("[data-notification-detail]"),u(o)?"forbidden":"error",u(o)?"暂无权限查看通知详情。":"消息同步失败,请稍后重试。"),s(u(o)?"forbidden":"error",u(o)?"暂无权限查看通知列表。":o.message||"消息同步失败,请稍后重试。")}}}async function F(t){var n=S(),i=m[t];if(!(v||!h(t)||!k(i)||b(n))){I(!0),s("loading","正在标记通知为已读…");try{await n.markNotificationRead(t),p=t,U("通知已标记为已读"),await N()}catch(e){if(b(n,e))return;s(u(e)?"forbidden":"error",u(e)?"暂无权限标记该通知为已读。":e.message||"标记通知已读失败,请稍后重试。")}finally{I(!1)}}}async function H(){var t=S();if(!(v||b(t))){if(!t.markAllNotificationsRead){s("error","消息服务初始化失败,请刷新后重试。");return}I(!0),s("loading","正在将全部通知标记为已读…");try{await t.markAllNotificationsRead(),U("已全部标记为已读"),await N()}catch(n){if(b(t,n))return;s(u(n)?"forbidden":"error",u(n)?"暂无权限标记全部通知为已读。":n.message||"全部标记已读失败,请稍后重试。")}finally{I(!1)}}}function O(){f&&(f.addEventListener("click",function(t){var n=t.target.closest("[data-notification-detail-id]"),i=t.target.closest("[data-notification-read-id]");if(n){t.preventDefault(),x(n.getAttribute("data-notification-detail-id"));return}i&&(t.preventDefault(),F(i.getAttribute("data-notification-read-id")))}),r("[data-notification-read-all]")&&r("[data-notification-read-all]").addEventListener("click",H),r("[data-notification-refresh]")&&r("[data-notification-refresh]").addEventListener("click",N),r("[data-notification-filter]")&&r("[data-notification-filter]").addEventListener("change",function(){p="",N()}))}function V(){!f||!r("[data-notification-list]")||(O(),N())}return{buildNotificationQuery:z,normalizeNotification:T,normalizeNotifications:j,getUnreadCount:C,matchesNotification:R,canMarkRead:k,renderNotificationRow:L,renderNotificationDetail:P,shouldRedirectToLogin:D,isForbidden:u,loadNotifications:N,init:V}});
|