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.
2 lines
18 KiB
JavaScript
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};
|