assets/admin/build was gitignored, so servers deployed by git pull kept running a stale admin bundle — the icon picker integration in the tabbar and floating-button settings pages never reached them. Track the build directory (rebuild with: cd assets/admin && npm run build) and commit the current bundle containing the universal icon picker.
2 lines
8.3 KiB
JavaScript
2 lines
8.3 KiB
JavaScript
import{o as ee,X as v,a4 as a,a3 as l,r as T,a1 as u,e as ae,_ as le,W as m,f as o,Y as i,Z as b,a2 as k,a5 as U,F as $,R as q,N as se,c as te}from"./vendor-vue.BxZIRU0_.js";import{a as D}from"./shared-api.DnsQ5cxS.js";import{P as ne}from"./PageHeader.CtT29f8Y.js";import{d as E,M as re}from"./badge.CKTsmH1z.js";import{_ as ue}from"./index.js";import{u as de}from"./vendor-naive.CKYCZmXD.js";import"./vendor-misc.bELTaXdf.js";const oe={class:"aksrt-page-container"},_e={class:"aksrt-section-header",style:{display:"flex","justify-content":"space-between","align-items":"center"}},me={style:{"margin-top":"8px","text-align":"right"}},ie={class:"aksrt-form-actions"},pe={__name:"UsersBadge",setup(ce){const I=le(),C=de(),x=T(!0),h=T(!1),V=re,s=ae({user_medal_s:!1,user_medal_public_display:!0,user_medal_limit:3,user_medal_args:E()}),L=te(()=>s.user_medal_args.reduce((n,e)=>n+(Array.isArray(e.items)?e.items.length:0),0));function A(n){I.push(n)}function F(n){return(n==null?void 0:n.data)??n??{}}function N(){return{slug:"",name:"",desc:"",icon:"",get_type:"manually_add",get_val:0}}function z(n){return Array.isArray(n)?n.map(e=>({cat_name:String((e==null?void 0:e.cat_name)||(e==null?void 0:e.name)||"未命名").trim()||"未命名",items:Array.isArray(e==null?void 0:e.items)?e.items.map(t=>({slug:String((t==null?void 0:t.slug)||"").trim(),name:String((t==null?void 0:t.name)||"").trim(),desc:String((t==null?void 0:t.desc)||"").trim(),icon:String((t==null?void 0:t.icon)||(t==null?void 0:t.icon_url)||"").trim(),get_type:String((t==null?void 0:t.get_type)||"manually_add").trim()||"manually_add",get_val:Math.max(0,Number((t==null?void 0:t.get_val)??0)||0)})):[]})):E()}function Y(){s.user_medal_args.push({cat_name:"新分类",items:[N()]})}function j(n){s.user_medal_args.splice(n,1)}function G(n){s.user_medal_args[n].items||(s.user_medal_args[n].items=[]),s.user_medal_args[n].items.push(N())}function H(n,e){s.user_medal_args[n].items.splice(e,1)}async function K(){x.value=!0;try{const n=await D.getSchemaPage("users","badge"),e=F(n);s.user_medal_s=!!(e.user_medal_s??e.user_badge_enabled),s.user_medal_public_display=e.user_medal_public_display!==void 0?e.user_medal_public_display!==!1:e.user_badge_public_display!==!1,s.user_medal_limit=Number(e.user_medal_limit??e.user_badge_limit??3),s.user_medal_args=z(e.user_medal_args??null)}catch(n){C.error(n.message||"加载用户徽章配置失败")}finally{x.value=!1}}async function O(){h.value=!0;try{const n=z(s.user_medal_args);for(const e of n)for(const t of e.items)if(!t.slug||!t.name||!t.get_type){C.error("每个条目需要 slug、名称和获取条件"),h.value=!1;return}await D.saveSchemaPage("users","badge",{user_medal_s:!!s.user_medal_s,user_medal_public_display:!!s.user_medal_public_display,user_medal_limit:Number(s.user_medal_limit||3),user_medal_args:n}),s.user_medal_args=n,C.success("用户徽章配置已保存")}catch(n){C.error(n.message||"保存失败")}finally{h.value=!1}}return ee(K),(n,e)=>{const t=u("n-button"),w=u("n-space"),c=u("n-tag"),g=u("n-card"),B=u("n-switch"),S=u("n-form-item"),M=u("n-input-number"),W=u("n-form"),P=u("n-empty"),f=u("n-input"),p=u("n-grid-item"),X=u("n-select"),Z=u("n-grid"),J=u("n-alert"),Q=u("n-spin");return m(),v("div",oe,[a(ne,{title:"用户徽章",desc:"配置勋章分类、自动授予条件(get_type / get_val)与公开展示。路由 /users/badge,存储键 user_medal_*。"},{actions:l(()=>[a(w,null,{default:l(()=>[a(t,{quaternary:"",onClick:e[0]||(e[0]=d=>A("/users/notifications"))},{default:l(()=>[...e[5]||(e[5]=[o("消息通知",-1)])]),_:1}),a(t,{quaternary:"",onClick:e[1]||(e[1]=d=>A("/users/level"))},{default:l(()=>[...e[6]||(e[6]=[o("用户等级",-1)])]),_:1})]),_:1})]),_:1}),a(Q,{show:x.value,style:{width:"100%","min-height":"200px"}},{default:l(()=>[a(g,{class:"aksrt-section-card"},{default:l(()=>[e[7]||(e[7]=i("div",{class:"aksrt-section-header"},[i("h3",null,"当前摘要")],-1)),a(w,null,{default:l(()=>[a(c,{round:"",type:s.user_medal_s?"success":"default"},{default:l(()=>[o(" 徽章系统:"+b(s.user_medal_s?"已启用":"已关闭"),1)]),_:1},8,["type"]),a(c,{round:"",type:s.user_medal_public_display?"info":"default"},{default:l(()=>[o(" 公开展示:"+b(s.user_medal_public_display?"开启":"关闭"),1)]),_:1},8,["type"]),a(c,{round:"",type:"info"},{default:l(()=>[o("最多显示:"+b(s.user_medal_limit)+" 枚",1)]),_:1}),a(c,{round:"",type:"info"},{default:l(()=>[o("分类:"+b(s.user_medal_args.length),1)]),_:1}),a(c,{round:"",type:"info"},{default:l(()=>[o("条目:"+b(L.value),1)]),_:1})]),_:1})]),_:1}),a(g,{class:"aksrt-section-card"},{default:l(()=>[e[8]||(e[8]=i("div",{class:"aksrt-section-header"},[i("h3",null,"徽章展示")],-1)),a(W,{model:s,"label-placement":"left","label-width":"180",class:"aksrt-form"},{default:l(()=>[a(S,{label:"启用徽章/勋章系统"},{default:l(()=>[a(B,{value:s.user_medal_s,"onUpdate:value":e[2]||(e[2]=d=>s.user_medal_s=d)},null,8,["value"])]),_:1}),s.user_medal_s?(m(),k(S,{key:0,label:"公开页显示徽章"},{default:l(()=>[a(B,{value:s.user_medal_public_display,"onUpdate:value":e[3]||(e[3]=d=>s.user_medal_public_display=d)},null,8,["value"])]),_:1})):U("",!0),s.user_medal_s?(m(),k(S,{key:1,label:"最多显示数量"},{default:l(()=>[a(M,{value:s.user_medal_limit,"onUpdate:value":e[4]||(e[4]=d=>s.user_medal_limit=d),min:1,max:8,style:{width:"180px"}},null,8,["value"])]),_:1})):U("",!0)]),_:1},8,["model"])]),_:1}),s.user_medal_s?(m(),k(g,{key:0,class:"aksrt-section-card"},{default:l(()=>[i("div",_e,[e[10]||(e[10]=i("h3",null,"徽章明细(分类 → 条目)",-1)),a(t,{size:"small",onClick:Y},{default:l(()=>[...e[9]||(e[9]=[o("添加分类",-1)])]),_:1})]),s.user_medal_args.length?U("",!0):(m(),k(P,{key:0,description:"暂无分类,请添加"})),(m(!0),v($,null,q(s.user_medal_args,(d,y)=>(m(),v("div",{key:"cat-"+y,class:"medal-cat-block"},[a(g,{size:"small",embedded:""},{default:l(()=>[a(w,{vertical:"",size:12},{default:l(()=>[a(w,{align:"center"},{default:l(()=>[a(f,{value:d.cat_name,"onUpdate:value":r=>d.cat_name=r,placeholder:"分类名称",style:{width:"220px"}},null,8,["value","onUpdate:value"]),a(t,{size:"small",onClick:r=>G(y)},{default:l(()=>[...e[11]||(e[11]=[o("添加条目",-1)])]),_:1},8,["onClick"]),a(t,{size:"small",quaternary:"",type:"error",onClick:r=>j(y)},{default:l(()=>[...e[12]||(e[12]=[o("删除分类",-1)])]),_:1},8,["onClick"])]),_:2},1024),d.items&&d.items.length?U("",!0):(m(),k(P,{key:0,description:"该分类暂无条目"})),(m(!0),v($,null,q(d.items||[],(r,R)=>(m(),v("div",{key:"item-"+y+"-"+R,class:"medal-item-row"},[a(Z,{cols:"1 s:2 m:3","x-gap":12,"y-gap":8,responsive:"screen"},{default:l(()=>[a(p,null,{default:l(()=>[a(f,{value:r.slug,"onUpdate:value":_=>r.slug=_,placeholder:"slug"},null,8,["value","onUpdate:value"])]),_:2},1024),a(p,null,{default:l(()=>[a(f,{value:r.name,"onUpdate:value":_=>r.name=_,placeholder:"名称"},null,8,["value","onUpdate:value"])]),_:2},1024),a(p,null,{default:l(()=>[a(X,{value:r.get_type,"onUpdate:value":_=>r.get_type=_,options:se(V),placeholder:"获取条件"},null,8,["value","onUpdate:value","options"])]),_:2},1024),a(p,null,{default:l(()=>[a(M,{value:r.get_val,"onUpdate:value":_=>r.get_val=_,min:0,disabled:r.get_type==="manually_add",placeholder:"阈值",style:{width:"100%"}},null,8,["value","onUpdate:value","disabled"])]),_:2},1024),a(p,null,{default:l(()=>[a(f,{value:r.icon,"onUpdate:value":_=>r.icon=_,placeholder:"图标 URL"},null,8,["value","onUpdate:value"])]),_:2},1024),a(p,null,{default:l(()=>[a(f,{value:r.desc,"onUpdate:value":_=>r.desc=_,placeholder:"描述"},null,8,["value","onUpdate:value"])]),_:2},1024)]),_:2},1024),i("div",me,[a(t,{size:"tiny",quaternary:"",type:"error",onClick:_=>H(y,R)},{default:l(()=>[...e[13]||(e[13]=[o("删除条目",-1)])]),_:1},8,["onClick"])])]))),128))]),_:2},1024)]),_:2},1024)]))),128))]),_:1})):U("",!0),a(g,{class:"aksrt-section-card"},{default:l(()=>[a(J,{type:"info","show-icon":!1},{default:l(()=>[...e[14]||(e[14]=[o(" 前台已授予徽章保存在用户 meta aksrt_user_badges;佩戴为 aksrt_wear_badge(slug)。 字典来自 user_medal_args;运行时 AKSRT_User_Badges 读取 identity badge.dictionary 派生列表。 ",-1)])]),_:1})]),_:1}),i("div",ie,[a(t,{type:"primary",loading:h.value,onClick:O},{default:l(()=>[...e[15]||(e[15]=[o("保存配置",-1)])]),_:1},8,["loading"])])]),_:1},8,["show"])])}}},Ce=ue(pe,[["__scopeId","data-v-fe872f5e"]]);export{Ce as default};
|