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

2 lines
13 KiB
JavaScript

(function(i,F){if(typeof module=="object"&&module.exports){module.exports=F(i);return}i.VideoPages=F(i),i.document&&i.document.addEventListener("DOMContentLoaded",function(){i.VideoPages.init()})})(typeof globalThis!="undefined"?globalThis:window,function(i){"use strict";function F(e){return i.ProfileUI&&typeof i.ProfileUI.confirmAction=="function"?i.ProfileUI.confirmAction(e):Promise.resolve(!i.confirm||i.confirm(e))}var O=i.MediaDisplay||(typeof require=="function"?require("./media-display.js"):null),l=i.document,D=Object.create(null),I=!1,P=!1;function C(){return i.GenealogyApi&&i.GenealogyApi.defaultClient}function o(e,r){return l?(r||l).querySelector(e):null}function B(e,r){return l?Array.prototype.slice.call((r||l).querySelectorAll(e)):[]}function H(e,r){var n=new URLSearchParams(String(e||"").replace(/^\?/,""));return n.get(r)||""}function v(e){return e==null||e===""||typeof e=="number"&&!Number.isSafeInteger(e)?"":/^[1-9][0-9]*$/.test(String(e))?String(e):""}function Q(e){var r=e===void 0&&i.location?i.location.search:e,n;return e===void 0&&i.ProfileUI&&i.ProfileUI.getGenealogyId&&(n=i.ProfileUI.getGenealogyId(),n)?v(n):v(H(r,"genealogyId"))}function R(e){var r=e===void 0&&i.location?i.location.search:e;return v(H(r,"videoId"))}function S(e){var r=String(e==null?"":e).trim();return r||void 0}function W(e){var r=S(e),n;if(r!==void 0)return n=Number(r),Number.isSafeInteger(n)?n:void 0}function $(e){var r=e||{},n={videoTitle:String(r.videoTitle||"").trim()},a=S(r.videoDesc),t=S(r.coverOssId),d=S(r.videoOssId),c=S(r.durationSeconds),m=S(r.sortOrder),u=S(r.status);return a!==void 0&&(n.videoDesc=a),t!==void 0&&(n.coverOssId=t),d!==void 0&&(n.videoOssId=d),c!==void 0&&(n.durationSeconds=W(c),n.durationSeconds===void 0&&(n.invalidDuration=!0)),m!==void 0&&(n.sortOrder=W(m),n.sortOrder===void 0&&(n.invalidSortOrder=!0)),u!==void 0&&(n.status=u),n}function J(e){return!e||!e.videoTitle?"请填写视频标题":e.videoOssId?v(e.videoOssId)?e.coverOssId!==void 0&&!v(e.coverOssId)?"封面上传结果无效":e.invalidDuration||e.durationSeconds!==void 0&&!Number.isSafeInteger(e.durationSeconds)?"视频时长必须是安全整数":e.durationSeconds!==void 0&&e.durationSeconds<0?"视频时长不能小于 0":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 k(e,r){var n;if(!(e==null||e==="")&&(n=Number(e),!(!Number.isSafeInteger(n)||r!==void 0&&n<r)))return n}function g(e){return e==null?"":String(e)}function T(e){var r=v(e&&e.videoId),n=v(e&&e.genealogyId),a=O&&O.normalizeFileAccess(e&&e.videoFile),t=O&&O.normalizeFileAccess(e&&e.coverFile),d=v(e&&e.publisherUserId),c=String(e&&e.videoTitle||"").trim(),m=g(e&&e.status),u,h,q,z;return!r||!n||!a||!c||m!=="0"&&m!=="1"||e.coverFile!==void 0&&e.coverFile!==null&&!t||e.publisherUserId!==void 0&&e.publisherUserId!==null&&e.publisherUserId!==""&&!d?null:(u={videoId:r,genealogyId:n,genealogyNo:g(e.genealogyNo),genealogyName:g(e.genealogyName),surname:g(e.surname),videoTitle:c,videoDesc:g(e.videoDesc),videoFile:a,publisherNickName:g(e.publisherNickName),publisherPhone:g(e.publisherPhone),publishTime:g(e.publishTime),status:m,remark:g(e.remark)},t&&(u.coverFile=t),d&&(u.publisherUserId=d),h=k(e.durationSeconds,0),q=k(e.viewCount,0),z=k(e.sortOrder),h!==void 0&&(u.durationSeconds=h),q!==void 0&&(u.viewCount=q),z!==void 0&&(u.sortOrder=z),u)}function K(e){var r=Number(e);return Number.isFinite(r)&&r>=0?Math.ceil(r):void 0}function s(e){return g(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function X(e){var r=k(e,0),n,a;return r===void 0?"未提供":(n=Math.floor(r/60),a=String(r%60).padStart(2,"0"),n+":"+a)}function ae(e,r){var n="profile-video.html?genealogyId="+encodeURIComponent(e);return r?n+"&videoId="+encodeURIComponent(r):n}function Y(e,r){var n="profile-video-edit.html?genealogyId="+encodeURIComponent(e);return r?n+"&videoId="+encodeURIComponent(r):n}function Z(e,r){var n='<button class="pill" type="button" data-video-detail-id="'+s(e.videoId)+'">查看详情</button>';return r&&(n+='<a class="pill" href="'+s(Y(e.genealogyId,e.videoId))+'">编辑</a><button class="pill is-danger" type="button" data-video-delete-id="'+s(e.videoId)+'">删除</button>'),'<article class="module-row video-row"><div><h3>'+s(e.videoTitle)+"</h3><p>"+s(e.publisherNickName||"未知发布人")+(e.publishTime?" · "+s(e.publishTime):"")+" · 时长 "+s(X(e.durationSeconds))+'</p></div><div class="row-actions">'+n+"</div></article>"}function f(e,r){return"<p><span>"+s(e)+"</span><b>"+s(r||"未提供")+"</b></p>"}function _(e,r){var n="";return e?(r&&(n='<div class="bottom-actions"><a class="btn ghost" href="'+s(Y(e.genealogyId,e.videoId))+'">编辑视频</a><button class="btn danger" type="button" data-video-delete-id="'+s(e.videoId)+'">删除视频</button></div>'),(O?O.renderVideo(e.videoFile,{posterFile:e.coverFile,title:e.videoTitle,className:"video-detail-media"}):"")+'<div class="form-like video-detail">'+f("视频标题",e.videoTitle)+f("视频说明",e.videoDesc)+f("所属家谱",e.genealogyName||e.genealogyNo)+f("发布人",e.publisherNickName)+f("发布时间",e.publishTime)+f("视频文件","已上传")+f("封面文件",e.coverFile?"已上传":"未上传")+f("视频时长",X(e.durationSeconds))+f("浏览量",e.viewCount===void 0?"":String(e.viewCount))+f("状态",e.status==="0"?"正常":"停用")+f("备注",e.remark)+"</div>"+n):""}function x(e){if(i.layui&&i.layui.layer){i.layui.layer.msg(e);return}i.alert&&i.alert(e)}function ee(e,r){var n=r&&(r.status||r.code);return!e||!e.getToken||!e.getToken()||Number(n)===401}function y(e){return Number(e&&(e.status||e.code))===403}function p(e,r){return ee(e,r)?(e&&e.clearToken&&e.clearToken(),i.NavigationUtil.open("login.html"),!0):!1}function re(){i.ProfileUI&&i.ProfileUI.syncGenealogyContextLinks&&i.ProfileUI.syncGenealogyContextLinks()}function M(e){return!!(e&&(e.canEditContent===!0||e.canManage===!0))}function de(){w("empty","请先选择家谱,再查看家族视频。"),U("empty","当前没有家谱上下文。"),L("empty","请先选择家谱,再发布视频。"),b("请先选择家谱,再发布视频。","forbidden"),A(!1)}function N(){var e=Q();return e||de(),e}function A(e){var r=o("[data-video-permission-placeholder]");I=!!e,B("[data-video-management]").forEach(function(n){n.hidden=!I}),r&&(r.hidden=I)}function E(e){return y(e)?"forbidden":"error"}function ne(e,r,n){var a=o(e);if(a){if(i.ProfileUI&&i.ProfileUI.setApiState){i.ProfileUI.setApiState(a,r,n);return}a.textContent=n}}function w(e,r){ne("[data-video-list]",e,r)}function U(e,r){ne("[data-video-detail]",e,r)}function L(e,r){var n=o("[data-video-permission-placeholder]");if(n){if(i.ProfileUI&&i.ProfileUI.setApiState){i.ProfileUI.setApiState(n,e,r);return}n.textContent=r}}function b(e,r){var n=o("[data-video-form-status]");if(n){if(!e){n.innerHTML="";return}if(r&&i.ProfileUI&&i.ProfileUI.setApiState){i.ProfileUI.setApiState(n,r,e);return}n.textContent=e}}function j(e,r){var n=o('[data-video-form] [type="submit"]');P=!!e,B("[data-video-form] input, [data-video-form] textarea, [data-video-form] button, [data-video-delete-id]").forEach(function(a){a.disabled=P}),n&&(n.dataset.defaultLabel||(n.dataset.defaultLabel=n.textContent),n.textContent=P&&r?r:n.dataset.defaultLabel,n.setAttribute("aria-busy",P?"true":"false"))}function oe(e){var r=o("[data-video-list]"),n=Array.isArray(e)?e.map(T):[],a=n.filter(function(d){return!d}).length,t=n.filter(Boolean);return D=Object.create(null),t.forEach(function(d){D[d.videoId]=d}),r?!Array.isArray(e)||a?(w("error","视频响应缺少稳定 VideoVo 字段,请联系后端核对。"),[]):t.length?(r.innerHTML=t.map(function(d){return Z(d,I)}).join(""),t):(w("empty","暂无家族视频"),[]):t}function ie(e){var r=o("[data-video-detail]");if(r){if(!e){U("empty","请选择一个视频查看详情");return}r.innerHTML=_(e,I)}}async function G(e){var r=C(),n=N(),a;if(!n||!v(e)||p(r))return null;U("loading","正在加载视频详情…");try{if(a=T(await r.videoDetail(n,e)),!a)throw new Error("视频详情响应缺少稳定 VideoVo 字段");return D[a.videoId]=a,ie(a),a}catch(t){return p(r,t)||(U(E(t),y(t)?"当前账号无权查看该视频。":t.message||"视频详情加载失败"),x(t.message||"视频详情加载失败")),null}}async function te(){var e=C(),r,n,a,t;if(!p(e)&&(r=N(),!!r)){re(),w("loading","正在加载视频…"),U("loading","正在加载视频详情…");try{n=await Promise.all([e.genealogyDetail(r),e.videos(r)]),A(M(n[0])),a=oe(n[1]),t=R(),t&&D[t]?await G(t):a.length?await G(a[0].videoId):ie(null)}catch(d){if(p(e,d))return;if(y(d)){A(!1),w("forbidden","当前账号无权查看该家谱视频。"),U("forbidden","当前账号无权查看该家谱视频。");return}w("error","视频加载失败,请稍后重试。"),U("error","视频详情加载失败,请稍后重试。"),x(d.message||"视频加载失败")}}}function ue(e){var r={};return B("[name]",e).forEach(function(n){r[n.name]=n.value}),r}function V(e,r){var n=o('[data-video-form] [name="'+e+'"]');n&&(n.value=r==null?"":String(r))}function le(e){V("videoTitle",e.videoTitle),V("videoDesc",e.videoDesc),V("coverOssId",e.coverOssId),V("videoOssId",e.videoOssId),V("durationSeconds",e.durationSeconds),V("sortOrder",e.sortOrder),V("status","0"),o("[data-video-file-status]")&&(o("[data-video-file-status]").textContent="已保留原视频文件,可重新选择替换"),o("[data-video-cover-status]")&&(o("[data-video-cover-status]").textContent=e.coverOssId?"已保留原封面,可重新选择替换":"未选择封面")}async function se(){var e=C(),r,n,a,t;if(!p(e)&&(r=N(),!!r)){n=R(),re(),b("正在读取家谱权限…","loading"),L("loading","正在核对视频维护权限…");try{if(a=await Promise.all([e.genealogyDetail(r),n?e.videoDetail(r,n):Promise.resolve(null)]),A(M(a[0])),!I){L("forbidden","当前账号没有视频维护权限。"),b("当前账号没有视频维护权限。","forbidden");return}if(n){if(t=T(a[1]),!t)throw new Error("视频详情响应缺少稳定 VideoVo 字段");le(t),o("[data-video-editor-title]")&&(o("[data-video-editor-title]").textContent="编辑视频")}b("")}catch(d){if(p(e,d))return;A(!1),L(E(d),y(d)?"当前账号没有视频维护权限。":d.message||"视频编辑信息加载失败"),b(y(d)?"当前账号没有视频维护权限。":d.message||"视频编辑信息加载失败",E(d))}}}async function fe(e){var r=C(),n=N(),a=R(),t=$(ue(e)),d=J(t),c,m,u;if(!(P||!I||!n||p(r))){if(d){b(d,"error");return}delete t.invalidDuration,delete t.invalidSortOrder,j(!0,"正在保存…"),b("正在保存视频…","loading");try{if(c=a?await r.updateVideo(n,a,t):await r.createVideo(n,t),m=T(c),u=a||m&&m.videoId,!u)throw new Error("保存响应缺少 videoId");await r.videoDetail(n,u),i.NavigationUtil.open(ae(n,u))}catch(h){if(p(r,h))return;b(y(h)?"当前账号没有视频维护权限。":h.message||"视频保存失败",E(h))}finally{j(!1)}}}async function ce(e){var r=C(),n=N(),a=D[e];if(!(P||!I||!n||!v(e)||p(r))&&await F("确认删除“"+(a?a.videoTitle:"该视频")+"”吗?删除会释放视频和封面文件引用。")){j(!0);try{await r.deleteVideo(n,e),await te(),x("视频已删除")}catch(t){if(p(r,t))return;x(y(t)?"当前账号没有视频维护权限。":t.message||"视频删除失败")}finally{j(!1)}}}function ve(e){var r=e&&e.files&&e.files[0],n=e&&e.getAttribute("data-video-duration-target"),a=n?o(n):null,t,d;!r||!a||!l||!i.URL||!i.URL.createObjectURL||(t=l.createElement("video"),d=i.URL.createObjectURL(r),t.preload="metadata",t.onloadedmetadata=function(){var c=K(t.duration);a.value=c===void 0?"":String(c),i.URL.revokeObjectURL(d)},t.onerror=function(){a.value="",i.URL.revokeObjectURL(d)},t.src=d)}function ge(){l&&(l.addEventListener("click",function(e){var r=e.target.closest("[data-video-detail-id]"),n=e.target.closest("[data-video-delete-id]");if(r){e.preventDefault(),G(r.getAttribute("data-video-detail-id"));return}n&&(e.preventDefault(),ce(n.getAttribute("data-video-delete-id")))}),l.addEventListener("submit",function(e){var r=e.target.closest("[data-video-form]");r&&(e.preventDefault(),fe(r))}),l.addEventListener("change",function(e){var r=e.target.closest("[data-video-duration-target]");r&&r.type==="file"&&ve(r)}))}function pe(){l&&(ge(),o("[data-video-page]")&&te(),o("[data-video-edit-page]")&&se())}return{getCurrentGenealogyId:Q,getCurrentVideoId:R,buildVideoBody:$,validateVideoBody:J,normalizeVideo:T,normalizeDurationSeconds:K,canEditVideos:M,renderVideoRow:Z,renderVideoDetail:_,setPermissionPlaceholder:L,shouldRedirectToLogin:ee,isForbidden:y,init:pe}});