Files
wordpress-theme-aksrt/assets/admin/build/FooterTabbarSettings.pU_E4Hmw.js
T
kate522 39bafb65c4 fix(icons): render FA glyphs in the SPA picker grid and harden item clicks
The server catalog ships bare glyph names, but the SPA grid preview
composed "fas home" instead of "fas fa-home" — every FA icon rendered
blank (the old curated lists carried the fa- prefix, so the regression
appeared with the catalog switch).

Item clicks move from per-element @click to a delegated panel handler
reading data-icon (immunity to DOM-replacing extensions/userscripts,
matching the PHP picker's pattern), and selecting now closes the
popover so the choice is visible in the field immediately.
2026-09-06 15:48:52 +08:00

2 lines
18 KiB
JavaScript

import{d as E}from"./vendor-draggable.BooRVfGb.js";import{a as D}from"./shared-api.DnsQ5cxS.js";import{P as pe}from"./PageHeader.CtT29f8Y.js";import{I as j,F as L}from"./FaIconPicker.C_p6xA0k.js";import{_ as _e}from"./index.js";import{u as ce,a as be,B as m,b as z}from"./vendor-naive.CKYCZmXD.js";import{o as me,X as y,a4 as o,a3 as s,r as C,a1 as _,e as W,W as i,N as p,f as u,Y as n,Z as w,a2 as c,a5 as v,F as $,R as ye,c as ve}from"./vendor-vue.BxZIRU0_.js";import"./FaIcon.NZ6TDkNu.js";import"./vendor-misc.bELTaXdf.js";const ge={class:"aksrt-page-container content-page"},ke={class:"aksrt-card-header-row"},we={class:"aksrt-card-header-row__left"},he={class:"aksrt-card-header-row__title"},xe={class:"section-desc section-desc--tight"},Te={class:"tabbar-sort__item"},Ue={class:"tabbar-sort__main"},Ce={class:"tabbar-sort__icon"},$e={class:"tabbar-sort__meta"},Ie={class:"tabbar-sort__title-row"},ze={class:"tabbar-sort__desc"},Fe={class:"tabbar-sort__actions"},Ve={class:"aksrt-form-actions"},Ae={class:"icon-preview-row"},De={key:1,class:"muted-text"},Se={key:5,class:"add-items-editor"},Ne={class:"add-items-editor__head"},Pe={class:"add-items-editor__presets"},Be={key:0,class:"add-items-editor__list"},Oe={class:"add-items-editor__row"},Me={key:1,class:"muted-text"},qe={class:"aksrt-modal-footer"},Ee={__name:"FooterTabbarSettings",setup(je){const b=ce(),G=be(),F=C(!0),I=C(!1),x=C(!1),h=C(-1),V=C([]),d=W({enabled:!0,scroll_hide:!1,scroll_down_hide:!0,footer_tabbar_single:"default",items:[]}),a=W({id:"",type:"link",icon:"",text:"",link:"",badge:"",badge_mode:"static",category_id:null,search_default_type:"post",new_window:!1,add_items:[],enabled:!0,sort_order:0,ontop:!1}),H=[{label:"首页",value:"home"},{label:"分类页",value:"category"},{label:"链接",value:"link"},{label:"中央发布按钮",value:"add"},{label:"用户中心",value:"user"},{label:"登录/我的",value:"auth"},{label:"搜索",value:"search"},{label:"消息中心",value:"msg"},{label:"开通会员",value:"pay_vip"}],R={home:"首页",category:"分类页",link:"链接",add:"中央发布按钮",user:"用户中心",auth:"登录/我的",search:"搜索",msg:"消息中心",pay_vip:"开通会员"},S={home:{icon:"fa fas fa-home",text:"首页"},category:{icon:"fa fas fa-th-large",text:"分类"},link:{icon:"fa fas fa-link",text:"链接"},add:{icon:"fa fas fa-plus",text:"发布"},user:{icon:"fa fas fa-user",text:"用户中心"},auth:{icon:"fa fas fa-user",text:"我的"},search:{icon:"fa fas fa-search",text:"搜索"},msg:{icon:"fa fas fa-bell",text:"消息"},pay_vip:{icon:"fa fas fa-gem",text:"会员"}},X=ve(()=>d.items.filter(t=>t.enabled));function Y(t){var e;if(t.type==="home")return t.ontop?"首页按钮,滚动后切换返回顶部":"首页按钮";if(t.type==="category"){if(t.category_id){const r=V.value.find(f=>f.value===t.category_id);return r?`跳转到分类: ${r.label}`:`跳转到分类 ID ${t.category_id}`}return"跳转到分类聚合页"}return t.type==="add"?(e=t.add_items)!=null&&e.length?`展开 ${t.add_items.length} 个发布入口`:"点击后打开默认发布入口":t.type==="search"?`打开顶部搜索面板,默认搜索${t.search_default_type==="category"?"分类":t.search_default_type==="tag"?"标签":"文章"}`:t.type==="user"?"自动跳转到用户中心或登录页":t.type==="auth"?"登录用户显示我的,游客显示登录":t.type==="msg"?"跳转到消息中心页面":t.type==="pay_vip"?t.link||"跳转到会员开通页":t.link||"自定义链接按钮"}const Z=[{label:"写文章",icon:"fa fas fa-pen",url:"/submit"},{label:"投稿页",icon:"fa fas fa-file-alt",url:"/submit"},{label:"发布资源",icon:"fa fas fa-cloud-upload-alt",url:"/resource-new"},{label:"创作中心",icon:"fa fas fa-paint-brush",url:"/creator"}];function J(t){a.add_items.some(e=>e.url===t.url)||a.add_items.push({id:`add_${Date.now()}_${a.add_items.length}`,label:t.label,icon:t.icon,url:t.url})}function K(){a.add_items.push({id:`add_${Date.now()}_${a.add_items.length}`,label:"",icon:"fa fas fa-pen",url:""})}function Q(t){a.add_items.splice(t,1)}function N(){d.items=d.items.map((t,e)=>({...t,sort_order:e}))}function ee(t,e=!1){const r=S[t]||S.link;(e||!a.icon)&&(a.icon=r.icon),(e||!a.text)&&(a.text=r.text),["link","msg","pay_vip"].includes(t)||(a.link=""),t!=="category"&&(a.category_id=null),t!=="search"&&(a.search_default_type="post"),t!=="add"&&(a.add_items=[]),t!=="home"&&(a.ontop=!1)}function ae(t){ee(t,!1)}function te(){if(d.items.length>=5){b.warning("底部Tab最多只能配置 5 个按钮");return}Object.assign(a,{id:`tab_${Date.now()}`,type:"link",icon:"fa fas fa-link",text:"链接",link:"",badge:"",badge_mode:"static",category_id:null,search_default_type:"post",new_window:!1,add_items:[],enabled:!0,sort_order:d.items.length,ontop:!1}),h.value=-1,x.value=!0}function le(t){const e=d.items[t];Object.assign(a,{id:e.id,type:e.type||"link",icon:e.icon||"",text:e.text||"",link:e.link||"",badge:e.badge||"",badge_mode:e.badge_mode||"static",category_id:e.category_id||null,search_default_type:e.search_default_type||"post",new_window:!!e.new_window,add_items:Array.isArray(e.add_items)?e.add_items.map(r=>({...r})):[],enabled:e.enabled!==!1,sort_order:e.sort_order??t,ontop:e.ontop||!1}),h.value=t,x.value=!0}function se(){if(h.value<0&&d.items.length>=5){b.warning("底部Tab最多只能配置 5 个按钮");return}if(!a.icon){b.warning("请填写图标");return}if(!a.text){b.warning("请填写显示文字");return}const t={id:a.id||`tab_${Date.now()}`,type:a.type,icon:a.icon,text:a.text,link:["link","msg","pay_vip"].includes(a.type)?a.link:"",badge:(a.badge||"").trim(),badge_mode:a.badge_mode,category_id:a.type==="category"&&a.category_id||0,search_default_type:a.type==="search"?a.search_default_type:"post",new_window:a.type==="link"?!!a.new_window:!1,add_items:a.type==="add"?a.add_items.filter(e=>e.label&&e.url).map(e=>({id:e.id||`add_${Date.now()}`,label:e.label,icon:e.icon||"fa fas fa-pen",url:e.url})):[],enabled:a.enabled,sort_order:a.sort_order,ontop:a.type==="home"?a.ontop:!1};h.value>=0?d.items[h.value]=t:d.items.push(t),x.value=!1,b.success(h.value>=0?"已更新":"已添加")}async function oe(){try{const t=await D.getCategories();t.code==="success"&&Array.isArray(t.data)&&(V.value=t.data.map(e=>({label:e.name,value:Number(e.id)})))}catch(t){console.error("[FooterTabbar] load categories failed:",t)}}function ne(t){G.warning({title:"确认删除",content:`确定删除「${d.items[t].text}」按钮吗?`,positiveText:"删除",negativeText:"取消",onPositiveClick:()=>{d.items.splice(t,1),N(),b.success("已删除")}})}async function de(){F.value=!0;try{const[t]=await Promise.all([D.getFooterTabbarSettings(),oe()]);if(t.code==="success"&&t.data){const e=t.data;d.enabled=e.enabled!==!1,d.scroll_hide=e.scroll_hide||!1,d.scroll_down_hide=e.scroll_down_hide!==!1,d.footer_tabbar_single=e.footer_tabbar_single||"default",d.items=(e.items||[]).map((r,f)=>({...r,badge:r.badge||"",badge_mode:r.badge_mode||"static",category_id:r.category_id||0,search_default_type:r.search_default_type||"post",new_window:!!r.new_window,add_items:Array.isArray(r.add_items)?r.add_items:[],sort_order:r.sort_order??f}))}}catch(t){console.error("[FooterTabbar] load failed:",t),b.error("加载配置失败")}finally{F.value=!1}}async function P(){if(d.items.length>5){b.warning("底部Tab最多只能配置 5 个按钮");return}I.value=!0;try{const t={enabled:d.enabled,scroll_hide:d.scroll_hide,scroll_down_hide:d.scroll_down_hide,footer_tabbar_single:d.footer_tabbar_single,items:d.items.map((r,f)=>({...r,sort_order:f}))},e=await D.saveFooterTabbarSettings(t);e.code==="success"?b.success(e.message||"保存成功"):b.error(e.message||"保存失败")}catch(t){console.error("[FooterTabbar] save failed:",t),b.error("保存失败")}finally{I.value=!1}}return me(de),(t,e)=>{const r=_("n-switch"),f=_("n-form-item"),A=_("n-select"),B=_("n-form"),O=_("n-card"),re=_("n-empty"),ie=_("n-spin"),T=_("n-input"),U=_("n-radio"),M=_("n-space"),q=_("n-radio-group"),ue=_("n-alert"),fe=_("n-modal");return i(),y("div",ge,[o(pe,{title:"底部Tab配置",desc:"自定义移动端底部导航栏的按钮,支持排序、图标配置和返回顶部功能。"},{actions:s(()=>[o(p(m),{type:"primary",loading:I.value,onClick:P},{default:s(()=>[...e[18]||(e[18]=[u("保存",-1)])]),_:1},8,["loading"])]),_:1}),o(ie,{show:F.value,style:{width:"100%","min-height":"200px"}},{default:s(()=>[o(O,{class:"aksrt-section-card"},{header:s(()=>[...e[19]||(e[19]=[n("div",{class:"aksrt-card-header-row"},[n("div",{class:"aksrt-card-header-row__left"},[n("span",{class:"header-icon"},[n("i",{class:"fa fas fa-cog"})]),n("strong",{class:"aksrt-card-header-row__title"},"基础设置")])],-1)])]),default:s(()=>[o(B,{model:d,"label-placement":"left","label-width":"140",class:"aksrt-form"},{default:s(()=>[o(f,{label:"启用底部Tab"},{default:s(()=>[o(r,{value:d.enabled,"onUpdate:value":e[0]||(e[0]=l=>d.enabled=l)},null,8,["value"]),e[20]||(e[20]=n("span",{class:"aksrt-hint-text",style:{"margin-left":"12px"}},"移动端底部导航栏总开关",-1))]),_:1}),o(f,{label:"向下滚动隐藏"},{default:s(()=>[o(r,{value:d.scroll_down_hide,"onUpdate:value":e[1]||(e[1]=l=>d.scroll_down_hide=l)},null,8,["value"]),e[21]||(e[21]=n("span",{class:"aksrt-hint-text",style:{"margin-left":"12px"}},"页面向下滚动时隐藏,向上滚动时显示",-1))]),_:1}),o(f,{label:"文章页专属Tab"},{default:s(()=>[o(A,{value:d.footer_tabbar_single,"onUpdate:value":e[2]||(e[2]=l=>d.footer_tabbar_single=l),options:[{label:"默认按钮",value:"default"},{label:"文章扩展按钮(评论/收藏/分享)",value:"extend"}],style:{width:"240px"}},null,8,["value"]),e[22]||(e[22]=n("span",{class:"aksrt-hint-text",style:{"margin-left":"12px"}},"文章详情页底部显示的Tab按钮类型",-1))]),_:1})]),_:1},8,["model"])]),_:1}),o(O,{class:"aksrt-section-card"},{header:s(()=>[n("div",ke,[n("div",we,[e[23]||(e[23]=n("span",{class:"header-icon"},[n("i",{class:"fa fas fa-list-ul"})],-1)),n("strong",he,"Tab按钮配置 ("+w(d.items.length)+")",1)]),o(p(m),{type:"primary",size:"small",onClick:te},{icon:s(()=>[...e[24]||(e[24]=[n("i",{class:"fa fas fa-plus"},null,-1)])]),default:s(()=>[e[25]||(e[25]=u(" 添加按钮 ",-1))]),_:1})])]),default:s(()=>[e[32]||(e[32]=n("p",{class:"section-desc"},"配置移动端底部导航栏显示的按钮,支持拖拽排序。建议按钮数量不超过5个。",-1)),n("div",xe,"当前已启用 "+w(X.value.length)+" 个按钮,最多允许 5 个。",1),d.items.length?(i(),c(p(E),{key:0,modelValue:d.items,"onUpdate:modelValue":e[3]||(e[3]=l=>d.items=l),"item-key":"id",handle:".tabbar-sort__handle","ghost-class":"tabbar-sort__ghost",animation:"180",class:"tabbar-sort",onEnd:N},{item:s(({element:l,index:g})=>[n("div",Te,[n("div",Ue,[e[27]||(e[27]=n("button",{type:"button",class:"tabbar-sort__handle","aria-label":"拖拽排序"},[n("i",{class:"fa fas fa-bars"})],-1)),n("span",Ce,[l.icon?(i(),c(j,{key:0,value:l.icon},null,8,["value"])):v("",!0)]),n("div",$e,[n("div",Ie,[n("strong",null,w(l.text||"按钮"),1),o(p(z),{size:"small",bordered:!1},{default:s(()=>[u(w(R[l.type]||l.type),1)]),_:2},1024),l.badge?(i(),c(p(z),{key:0,size:"small",type:"error",bordered:!1},{default:s(()=>[u("徽标 "+w(l.badge),1)]),_:2},1024)):v("",!0),l.type==="home"&&l.ontop?(i(),c(p(z),{key:1,size:"small",type:"success",bordered:!1},{default:s(()=>[...e[26]||(e[26]=[u("返回顶部",-1)])]),_:1})):v("",!0),o(p(z),{size:"small",type:l.enabled?"success":"default",bordered:!1},{default:s(()=>[u(w(l.enabled?"启用":"禁用"),1)]),_:2},1032,["type"])]),n("div",ze,w(Y(l)),1)])]),n("div",Fe,[o(p(m),{size:"tiny",quaternary:"",type:"primary",onClick:k=>le(g)},{icon:s(()=>[...e[28]||(e[28]=[n("i",{class:"fa fas fa-edit",style:{"font-size":"12px"}},null,-1)])]),default:s(()=>[e[29]||(e[29]=u(" 编辑 ",-1))]),_:1},8,["onClick"]),o(p(m),{size:"tiny",quaternary:"",type:"error",onClick:k=>ne(g)},{icon:s(()=>[...e[30]||(e[30]=[n("i",{class:"fa fas fa-trash-alt",style:{"font-size":"12px"}},null,-1)])]),default:s(()=>[e[31]||(e[31]=u(" 删除 ",-1))]),_:1},8,["onClick"])])])]),_:1},8,["modelValue"])):(i(),c(re,{key:1,description:"暂无Tab按钮,请点击上方按钮添加"}))]),_:1}),n("div",Ve,[o(p(m),{type:"primary",loading:I.value,onClick:P},{default:s(()=>[...e[33]||(e[33]=[u("保存底部Tab配置",-1)])]),_:1},8,["loading"])])]),_:1},8,["show"]),o(fe,{show:x.value,"onUpdate:show":e[17]||(e[17]=l=>x.value=l),"mask-closable":!1,preset:"card",title:h.value>=0?"编辑Tab按钮":"添加Tab按钮",class:"aksrt-modal-card",style:{"max-width":"520px"}},{footer:s(()=>[n("div",qe,[o(p(m),{onClick:e[16]||(e[16]=l=>x.value=!1)},{default:s(()=>[...e[47]||(e[47]=[u("取消",-1)])]),_:1}),o(p(m),{type:"primary",onClick:se},{default:s(()=>[...e[48]||(e[48]=[u("保存",-1)])]),_:1})])]),default:s(()=>[o(B,{model:a,"label-placement":"top",class:"aksrt-form"},{default:s(()=>[o(f,{label:"按钮类型"},{default:s(()=>[o(A,{value:a.type,"onUpdate:value":[e[4]||(e[4]=l=>a.type=l),ae],options:H,placeholder:"选择按钮类型"},null,8,["value"])]),_:1}),o(f,{label:"图标 (Font Awesome / 内置 SVG)"},{feedback:s(()=>[n("div",Ae,[e[34]||(e[34]=n("span",null,"预览:",-1)),a.icon?(i(),c(j,{key:0,value:a.icon,style:{"font-size":"20px"}},null,8,["value"])):(i(),y("span",De,"无图标"))])]),default:s(()=>[o(L,{value:a.icon,"onUpdate:value":e[5]||(e[5]=l=>a.icon=l),placeholder:"选择图标"},null,8,["value"])]),_:1}),o(f,{label:"显示文字"},{default:s(()=>[o(T,{value:a.text,"onUpdate:value":e[6]||(e[6]=l=>a.text=l),placeholder:"例如: 首页"},null,8,["value"])]),_:1}),o(f,{label:"徽标文本"},{default:s(()=>[o(T,{value:a.badge,"onUpdate:value":e[7]||(e[7]=l=>a.badge=l),placeholder:"例如: NEW, 9+,留空不显示",maxlength:"4"},null,8,["value"])]),_:1}),o(f,{label:"徽标模式"},{default:s(()=>[o(q,{value:a.badge_mode,"onUpdate:value":e[8]||(e[8]=l=>a.badge_mode=l)},{default:s(()=>[o(M,null,{default:s(()=>[o(U,{value:"static"},{default:s(()=>[...e[35]||(e[35]=[u("静态文本",-1)])]),_:1}),o(U,{value:"dynamic"},{default:s(()=>[...e[36]||(e[36]=[u("动态徽标",-1)])]),_:1})]),_:1})]),_:1},8,["value"])]),_:1}),a.badge_mode==="dynamic"?(i(),c(ue,{key:0,type:"info","show-icon":!1,style:{"margin-bottom":"16px"}},{default:s(()=>[a.type==="auth"?(i(),y($,{key:0},[u("未登录时显示提醒徽标,登录后自动隐藏。")],64)):a.type==="user"?(i(),y($,{key:1},[u("登录用户显示评论数徽标,游客不显示。")],64)):a.type==="search"?(i(),y($,{key:2},[u("搜索结果页显示 ON 徽标,其它页面隐藏。")],64)):(i(),y($,{key:3},[u("当前类型不提供动态徽标,前端将回退为静态徽标。")],64))]),_:1})):v("",!0),a.type==="category"?(i(),c(f,{key:1,label:"指定分类"},{default:s(()=>[o(A,{value:a.category_id,"onUpdate:value":e[9]||(e[9]=l=>a.category_id=l),options:V.value,placeholder:"留空则跳转分类聚合页",clearable:"",filterable:""},null,8,["value","options"])]),_:1})):v("",!0),a.type==="search"?(i(),c(f,{key:2,label:"默认搜索类型"},{default:s(()=>[o(q,{value:a.search_default_type,"onUpdate:value":e[10]||(e[10]=l=>a.search_default_type=l)},{default:s(()=>[o(M,null,{default:s(()=>[o(U,{value:"post"},{default:s(()=>[...e[37]||(e[37]=[u("文章",-1)])]),_:1}),o(U,{value:"category"},{default:s(()=>[...e[38]||(e[38]=[u("分类",-1)])]),_:1}),o(U,{value:"tag"},{default:s(()=>[...e[39]||(e[39]=[u("标签",-1)])]),_:1})]),_:1})]),_:1},8,["value"])]),_:1})):v("",!0),["link","msg","pay_vip"].includes(a.type)?(i(),c(f,{key:3,label:"链接地址"},{default:s(()=>[o(T,{value:a.link,"onUpdate:value":e[11]||(e[11]=l=>a.link=l),placeholder:a.type==="msg"?"留空使用默认消息中心地址":a.type==="pay_vip"?"留空使用默认会员页地址":"https:// 或 /path"},null,8,["value","placeholder"])]),_:1})):v("",!0),a.type==="link"?(i(),c(f,{key:4,label:"新窗口打开"},{default:s(()=>[o(r,{value:a.new_window,"onUpdate:value":e[12]||(e[12]=l=>a.new_window=l)},null,8,["value"])]),_:1})):v("",!0),a.type==="add"?(i(),y("div",Se,[n("div",Ne,[e[42]||(e[42]=n("strong",null,"发布菜单项",-1)),o(p(m),{size:"small",type:"primary",onClick:K},{icon:s(()=>[...e[40]||(e[40]=[n("i",{class:"fa fas fa-plus"},null,-1)])]),default:s(()=>[e[41]||(e[41]=u(" 添加子项 ",-1))]),_:1})]),n("div",Pe,[e[43]||(e[43]=n("span",{class:"add-items-editor__presets-label"},"快速添加:",-1)),(i(),y($,null,ye(Z,l=>o(p(m),{key:l.url,size:"tiny",secondary:"",type:a.add_items.some(g=>g.url===l.url)?"success":"default",disabled:a.add_items.some(g=>g.url===l.url),onClick:g=>J(l)},{default:s(()=>[u(w(l.label),1)]),_:2},1032,["type","disabled","onClick"])),64))]),a.add_items.length?(i(),y("div",Be,[o(p(E),{modelValue:a.add_items,"onUpdate:modelValue":e[13]||(e[13]=l=>a.add_items=l),"item-key":"id",handle:".add-items-editor__drag","ghost-class":"add-items-editor__ghost",animation:"180"},{item:s(({element:l,index:g})=>[n("div",Oe,[e[45]||(e[45]=n("button",{type:"button",class:"add-items-editor__drag","aria-label":"拖拽排序"},[n("i",{class:"fa fas fa-bars"})],-1)),o(T,{value:l.label,"onUpdate:value":k=>l.label=k,placeholder:"名称,例如:写文章"},null,8,["value","onUpdate:value"]),o(L,{value:l.icon,"onUpdate:value":k=>l.icon=k,placeholder:"选择图标"},null,8,["value","onUpdate:value"]),o(T,{value:l.url,"onUpdate:value":k=>l.url=k,placeholder:"链接,例如:/wp-admin/post-new.php"},null,8,["value","onUpdate:value"]),o(p(m),{quaternary:"",type:"error",onClick:k=>Q(g)},{icon:s(()=>[...e[44]||(e[44]=[n("i",{class:"fa fas fa-trash-alt"},null,-1)])]),_:1},8,["onClick"])])]),_:1},8,["modelValue"])])):(i(),y("div",Me,"当前没有子项,前端将回退为默认发布入口。"))])):v("",!0),a.type==="home"?(i(),c(f,{key:6,label:"返回顶部功能"},{default:s(()=>[o(r,{value:a.ontop,"onUpdate:value":e[14]||(e[14]=l=>a.ontop=l)},null,8,["value"]),e[46]||(e[46]=n("span",{class:"aksrt-hint-text",style:{"margin-left":"12px"}},"页面滚动后切换为返回顶部按钮",-1))]),_:1})):v("",!0),o(f,{label:"启用状态"},{default:s(()=>[o(r,{value:a.enabled,"onUpdate:value":e[15]||(e[15]=l=>a.enabled=l)},null,8,["value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["show","title"])])}}},Ke=_e(Ee,[["__scopeId","data-v-cc40d71e"]]);export{Ke as default};