feat(admin): strip SPA ops menus; redirect old hashes to native WP (Phase 4)

SPA shop/forum/payment/users sections now keep configuration pages only.
Operational workbenches were removed from the sidebar and loaders; legacy
hash routes open NativeOpsRedirect into the matching WP native admin page.
Admin SPA production build refreshed accordingly.
This commit is contained in:
2026-07-15 02:10:05 +08:00
parent bf061f43ee
commit a3dde3874a
85 changed files with 15987 additions and 249 deletions
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.aksrt-attach__summary[data-v-a728445f]{display:flex;align-items:center;gap:10px;padding:12px;border-radius:6px;background:#fafafa}.aksrt-attach__summary strong[data-v-a728445f]{display:block;font-size:13px;color:#1a1a2e}.aksrt-attach__summary p[data-v-a728445f]{margin:2px 0 0;font-size:12px;color:#8a909c}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.aksrt-inline-setting[data-v-ef7a491f]{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.aksrt-inline-setting__hint[data-v-ef7a491f]{color:#7a7f8a;font-size:13px}.aksrt-inline-setting__actions[data-v-ef7a491f]{display:flex;justify-content:flex-end}.aksrt-modal-preview[data-v-ef7a491f]{margin:-8px 0 18px;border-radius:8px;overflow:hidden;border:1px solid #eef1f6}.aksrt-modal-grid[data-v-ef7a491f]{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}.aksrt-modal-footer[data-v-ef7a491f]{display:flex;justify-content:flex-end;gap:10px}@media(max-width:768px){.aksrt-modal-grid[data-v-ef7a491f]{grid-template-columns:1fr}}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{o as M,X as N,a4 as t,a3 as n,r as C,a1 as r,e as E,_ as R,W as V,f as m,Y as u,Z as f}from"./vendor-vue.Bykizn0M.js";import{a as y}from"./shared-api.D5_fnN32.js";import{P as A}from"./PageHeader.Di3JTPjc.js";import{u as U}from"./vendor-naive.BuHWlEgf.js";import"./index.js";import"./vendor-misc.1adHN6i_.js";const $={class:"aksrt-page-container"},H={class:"aksrt-form-actions"},z={__name:"CommentPermissions",setup(K){const q=R(),g=U(),b=C(!0),v=C(!1),s=E({comment_require_login:!1,comment_allow_reply:!0}),a=E({commentCaptchaEnabled:!1,moderationEnabled:!1,rateLimitEnabled:!1,keywordRuleCount:0});function w(o){q.push(o)}function P(o){return String(o||"").split(/\r?\n/).map(e=>e.trim()).filter(Boolean)}async function S(){b.value=!0;try{const[o,e,i]=await Promise.all([y.getSchemaPage("post_list","comment"),y.getPermissionsLoginSettings(),y.getPermissionsModerationSettings()]),c=(o==null?void 0:o.data)??o??{},l=(e==null?void 0:e.data)??e??{},d=(i==null?void 0:i.data)??i??{},p=Array.isArray(l.disabled_scenarios)?l.disabled_scenarios:[];s.comment_require_login=!!c.comment_require_login,s.comment_allow_reply=c.comment_allow_reply!==!1,a.commentCaptchaEnabled=!!l.enabled&&!!l.active_provider&&!p.includes("comment"),a.moderationEnabled=!!d.enabled,a.rateLimitEnabled=!!d.rate_limit_enabled,a.keywordRuleCount=P(d.blocked_keywords).length}catch(o){g.error(o.message||"加载评论权限失败")}finally{b.value=!1}}async function x(){v.value=!0;try{await y.saveSchemaPage("post_list","comment",{comment_require_login:s.comment_require_login,comment_allow_reply:s.comment_allow_reply}),g.success("评论权限已保存")}catch(o){g.error(o.message||"保存失败")}finally{v.value=!1}}return M(S),(o,e)=>{const i=r("n-button"),c=r("n-space"),l=r("n-tag"),d=r("n-card"),p=r("n-switch"),k=r("n-form-item"),h=r("n-form"),L=r("n-alert"),B=r("n-spin");return V(),N("div",$,[t(A,{title:"评论权限",desc:"管理评论入口的登录要求与回复权限,并查看当前验证码与审核策略状态。"},{actions:n(()=>[t(c,null,{default:n(()=>[t(i,{quaternary:"",onClick:e[0]||(e[0]=_=>w("/permissions/login"))},{default:n(()=>[...e[4]||(e[4]=[m("人机验证",-1)])]),_:1}),t(i,{quaternary:"",onClick:e[1]||(e[1]=_=>w("/permissions/moderation"))},{default:n(()=>[...e[5]||(e[5]=[m("审核策略",-1)])]),_:1})]),_:1})]),_:1}),t(B,{show:b.value,style:{width:"100%","min-height":"200px"}},{default:n(()=>[t(d,{class:"aksrt-section-card"},{default:n(()=>[e[6]||(e[6]=u("div",{class:"aksrt-section-header"},[u("h3",null,"当前联动状态")],-1)),t(c,null,{default:n(()=>[t(l,{type:a.commentCaptchaEnabled?"success":"default",round:""},{default:n(()=>[m(" 评论验证码:"+f(a.commentCaptchaEnabled?"已启用":"未启用"),1)]),_:1},8,["type"]),t(l,{type:a.moderationEnabled?"warning":"default",round:""},{default:n(()=>[m(" 审核链路:"+f(a.moderationEnabled?"已启用":"未启用"),1)]),_:1},8,["type"]),t(l,{type:a.rateLimitEnabled?"warning":"default",round:""},{default:n(()=>[m(" 评论限流:"+f(a.rateLimitEnabled?"已启用":"未启用"),1)]),_:1},8,["type"]),t(l,{type:a.keywordRuleCount>0?"error":"default",round:""},{default:n(()=>[m(" 敏感词:"+f(a.keywordRuleCount)+" 条 ",1)]),_:1},8,["type"])]),_:1})]),_:1}),t(d,{class:"aksrt-section-card"},{default:n(()=>[e[9]||(e[9]=u("div",{class:"aksrt-section-header"},[u("h3",null,"评论准入")],-1)),t(h,{model:s,"label-placement":"left","label-width":"180",class:"aksrt-form"},{default:n(()=>[t(k,{label:"评论需要登录"},{feedback:n(()=>[...e[7]||(e[7]=[u("span",{class:"aksrt-hint-text"},"开启后,游客只能浏览评论,不能直接提交评论。",-1)])]),default:n(()=>[t(p,{value:s.comment_require_login,"onUpdate:value":e[2]||(e[2]=_=>s.comment_require_login=_)},null,8,["value"])]),_:1}),t(k,{label:"允许楼中回复"},{feedback:n(()=>[...e[8]||(e[8]=[u("span",{class:"aksrt-hint-text"},"关闭后,前台评论列表将不再展示回复按钮。",-1)])]),default:n(()=>[t(p,{value:s.comment_allow_reply,"onUpdate:value":e[3]||(e[3]=_=>s.comment_allow_reply=_)},null,8,["value"])]),_:1})]),_:1},8,["model"])]),_:1}),t(d,{class:"aksrt-section-card"},{default:n(()=>[t(L,{type:"info","show-icon":!1},{default:n(()=>[...e[10]||(e[10]=[m(" 评论排序、分页方式、头像大小和空状态文案继续在“文章&列表 -> 评论设置”中维护;本页只负责准入与治理联动。 ",-1)])]),_:1})]),_:1}),u("div",H,[t(i,{type:"primary",loading:v.value,onClick:x},{default:n(()=>[...e[11]||(e[11]=[m("保存配置",-1)])]),_:1},8,["loading"])])]),_:1},8,["show"])])}}};export{z as default};
@@ -0,0 +1 @@
import t from"./SchemaPage.CSkx936u.js";import{a2 as o,W as m}from"./vendor-vue.Bykizn0M.js";import"./shared-api.B7o7Pzvu.js";import"./FaIcon.CX_hGmM4.js";import"./index.js";import"./vendor-naive.BuHWlEgf.js";import"./vendor-misc.1adHN6i_.js";import"./shared-api.D5_fnN32.js";const u={__name:"CommentSettings",setup(r){return(e,p)=>(m(),o(t,{domain:"post_list",section:"comment"}))}};export{u as default};
@@ -0,0 +1 @@
import{X as n,Y as r,a4 as u,Z as l,a3 as c,a2 as y,a5 as f,F as h,R as P,c as o,a1 as V,$ as b,W as a,f as _}from"./vendor-vue.Bykizn0M.js";import{_ as S}from"./FaIcon.CX_hGmM4.js";import{_ as C}from"./index.js";import"./vendor-naive.BuHWlEgf.js";import"./vendor-misc.1adHN6i_.js";const F={class:"aksrt-deferred-page"},R={class:"aksrt-deferred-page__icon"},w={class:"aksrt-deferred-page__title"},A={class:"aksrt-deferred-page__desc"},I={class:"aksrt-deferred-page__meta"},T={key:0,class:"aksrt-deferred-page__depends"},$={class:"aksrt-deferred-page__depends-list"},E={key:1,class:"aksrt-deferred-page__reason"},L={key:2,class:"aksrt-deferred-page__features"},W={class:"aksrt-deferred-page__badge"},X={__name:"DeferredPage",props:{title:{type:String,default:""},description:{type:String,default:""},icon:{type:String,default:""},features:{type:Array,default:()=>[]},status:{type:String,default:""},phase:{type:String,default:""},dependsOn:{type:Array,default:()=>[]},reason:{type:String,default:""}},setup(z){const t=z,d=b(),O=o(()=>{var s,e;return t.title||((e=(s=d.meta)==null?void 0:s.deferredProps)==null?void 0:e.title)||"功能开发中"}),x=o(()=>{var s,e;return t.description||((e=(s=d.meta)==null?void 0:s.deferredProps)==null?void 0:e.description)||"此功能正在规划开发中,将在后续版本上线。"}),D=o(()=>{var s,e;return t.icon||((e=(s=d.meta)==null?void 0:s.deferredProps)==null?void 0:e.icon)||"fas fa-rocket"}),B=o(()=>{var s,e;return t.status||((e=(s=d.meta)==null?void 0:s.deferredProps)==null?void 0:e.status)||"deferred"}),g=o(()=>{var s,e;return t.phase||((e=(s=d.meta)==null?void 0:s.deferredProps)==null?void 0:e.phase)||""}),m=o(()=>{var s,e;return t.dependsOn&&t.dependsOn.length?t.dependsOn:((e=(s=d.meta)==null?void 0:s.deferredProps)==null?void 0:e.dependsOn)||[]}),k=o(()=>{var s,e;return t.reason||((e=(s=d.meta)==null?void 0:s.deferredProps)==null?void 0:e.reason)||""}),v=o(()=>{var s,e;return t.features&&t.features.length?t.features:((e=(s=d.meta)==null?void 0:s.deferredProps)==null?void 0:e.features)||[]});return(s,e)=>{const p=V("n-tag");return a(),n("div",F,[r("div",R,[u(S,{icon:D.value,size:48},null,8,["icon"])]),r("h2",w,l(O.value),1),r("p",A,l(x.value),1),r("div",I,[u(p,{size:"small",type:"info"},{default:c(()=>[_(l(B.value),1)]),_:1}),g.value?(a(),y(p,{key:0,size:"small",type:"warning"},{default:c(()=>[_("Phase "+l(g.value),1)]),_:1})):f("",!0)]),m.value.length?(a(),n("div",T,[e[0]||(e[0]=r("span",{class:"aksrt-deferred-page__label"},"依赖",-1)),r("div",$,[(a(!0),n(h,null,P(m.value,i=>(a(),y(p,{key:i,size:"small",type:"default"},{default:c(()=>[_(l(i),1)]),_:2},1024))),128))])])):f("",!0),k.value?(a(),n("div",E,[e[1]||(e[1]=r("span",{class:"aksrt-deferred-page__label"},"原因",-1)),r("p",null,l(k.value),1)])):f("",!0),v.value&&v.value.length?(a(),n("div",L,[(a(!0),n(h,null,P(v.value,(i,N)=>(a(),n("div",{key:N,class:"aksrt-deferred-page__feature"},[u(S,{icon:"fas fa-check-circle",size:14}),r("span",null,l(i),1)]))),128))])):f("",!0),r("div",W,[u(p,{type:"info",size:"small"},{default:c(()=>[...e[2]||(e[2]=[_("即将推出",-1)])]),_:1})])])}}},H=C(X,[["__scopeId","data-v-e3307067"]]);export{H as default};
+1
View File
@@ -0,0 +1 @@
.aksrt-deferred-page[data-v-e3307067]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:400px;text-align:center;padding:40px 20px}.aksrt-deferred-page__icon[data-v-e3307067]{color:#c0c4cc;margin-bottom:20px}.aksrt-deferred-page__title[data-v-e3307067]{margin:0 0 10px;font-size:20px;font-weight:600;color:#1a1a2e}.aksrt-deferred-page__desc[data-v-e3307067]{margin:0 0 20px;font-size:14px;color:#8a909c;max-width:400px;line-height:1.6}.aksrt-deferred-page__meta[data-v-e3307067]{display:flex;gap:10px;margin-bottom:18px}.aksrt-deferred-page__depends[data-v-e3307067],.aksrt-deferred-page__reason[data-v-e3307067]{width:min(520px,100%);margin-bottom:18px;text-align:left}.aksrt-deferred-page__label[data-v-e3307067]{display:inline-block;margin-bottom:8px;font-size:12px;font-weight:600;color:#4b5563}.aksrt-deferred-page__depends-list[data-v-e3307067]{display:flex;flex-wrap:wrap;gap:8px}.aksrt-deferred-page__reason p[data-v-e3307067]{margin:0;color:#666;line-height:1.7}.aksrt-deferred-page__features[data-v-e3307067]{display:flex;flex-direction:column;gap:8px;margin-bottom:20px}.aksrt-deferred-page__feature[data-v-e3307067]{display:flex;align-items:center;gap:8px;font-size:13px;color:#666}.aksrt-deferred-page__feature[data-v-e3307067] i{color:#52c41a}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.aksrt-docs__mode-status[data-v-ec6dbd74]{display:flex;align-items:center;justify-content:space-between;gap:16px}.aksrt-docs__mode-info[data-v-ec6dbd74]{display:flex;align-items:center;gap:12px}.aksrt-docs__mode-info strong[data-v-ec6dbd74]{display:block;font-size:14px;color:#1a1a2e}.aksrt-docs__mode-info p[data-v-ec6dbd74]{margin:2px 0 0;font-size:12px;color:#8a909c}.aksrt-docs__mode-link[data-v-ec6dbd74]{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:6px;background:#f5f7fa;color:#1890ff;text-decoration:none;font-size:13px;transition:background .2s}.aksrt-docs__mode-link[data-v-ec6dbd74]:hover{background:#e6f4ff}.aksrt-docs__stat[data-v-ec6dbd74]{display:flex;align-items:center;gap:10px;padding:12px;border-radius:6px;background:#fafafa}.aksrt-docs__stat strong[data-v-ec6dbd74]{display:block;font-size:20px;color:#1a1a2e}.aksrt-docs__stat p[data-v-ec6dbd74]{margin:0;font-size:12px;color:#8a909c}.aksrt-docs__grid[data-v-ec6dbd74]{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:12px;margin-bottom:16px}.aksrt-docs__card[data-v-ec6dbd74]{cursor:pointer;transition:box-shadow .2s}.aksrt-docs__card[data-v-ec6dbd74]:hover{box-shadow:0 2px 12px #00000014}.aksrt-docs__card-inner[data-v-ec6dbd74]{display:flex;align-items:center;gap:12px}.aksrt-docs__card-icon[data-v-ec6dbd74]{flex-shrink:0;width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center}.aksrt-docs__card-body[data-v-ec6dbd74]{flex:1;min-width:0}.aksrt-docs__card-title[data-v-ec6dbd74]{margin:0 0 2px;font-size:14px;font-weight:600;color:#1a1a2e}.aksrt-docs__card-desc[data-v-ec6dbd74]{margin:0;font-size:12px;color:#8a909c;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aksrt-docs__card-arrow[data-v-ec6dbd74]{flex-shrink:0;color:#c0c4cc}.aksrt-docs__section[data-v-ec6dbd74]{margin-bottom:16px}.aksrt-docs__action[data-v-ec6dbd74]{display:flex;gap:12px;align-items:flex-start;padding:12px;border-radius:6px;background:#fafafa}.aksrt-docs__action i[data-v-ec6dbd74]{color:#1890ff;margin-top:2px}.aksrt-docs__action strong[data-v-ec6dbd74]{display:block;font-size:14px;color:#1a1a2e;margin-bottom:2px}.aksrt-docs__action p[data-v-ec6dbd74]{margin:0 0 4px;font-size:12px;color:#8a909c}.aksrt-docs__action a[data-v-ec6dbd74]{font-size:12px;color:#1890ff;text-decoration:none}.aksrt-docs__action a[data-v-ec6dbd74]:hover{text-decoration:underline}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.aksrt-ai__status[data-v-800595b0]{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:24px}.aksrt-ai__status-card[data-v-800595b0]{display:flex;align-items:center;gap:12px;padding:16px;background:#fff;border-radius:8px;border:1px solid #e8e8e8}.aksrt-ai__status-icon[data-v-800595b0]{width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px}.aksrt-ai__status-icon--ok[data-v-800595b0]{background:#d4edda;color:#155724}.aksrt-ai__status-icon--warn[data-v-800595b0]{background:#fff3cd;color:#856404}.aksrt-ai__status-icon--off[data-v-800595b0]{background:#f8d7da;color:#721c24}.aksrt-ai__status-icon--info[data-v-800595b0]{background:#d1ecf1;color:#0c5460}.aksrt-ai__status-value[data-v-800595b0]{font-size:18px;font-weight:600;color:#1a1a2e}.aksrt-ai__status-label[data-v-800595b0]{font-size:12px;color:#888}.aksrt-ai__form-card[data-v-800595b0]{background:#fff;border:1px solid #e8e8e8;border-radius:8px;padding:24px;margin-bottom:16px}.aksrt-ai__form-card h3[data-v-800595b0]{margin:0 0 16px;font-size:16px;font-weight:600}.aksrt-form-hint[data-v-800595b0]{font-size:12px;color:#888;margin-top:4px}.aksrt-ai__load-error[data-v-800595b0]{background:#fdecea;border-color:#f5c2c0;color:#842029;margin-bottom:16px}.aksrt-ai__notice[data-v-800595b0]{background:#fff8e1;border-color:#ffe082}.aksrt-ai__notice h3[data-v-800595b0]{color:#e65100}.aksrt-ai__notice ul[data-v-800595b0]{margin:0;padding-left:20px}.aksrt-ai__notice li[data-v-800595b0]{margin-bottom:8px;font-size:14px}.aksrt-ai__notice code[data-v-800595b0]{background:#0000000f;padding:2px 6px;border-radius:3px;font-size:13px}.aksrt-badge[data-v-800595b0]{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px}.aksrt-badge--success[data-v-800595b0]{background:#d4edda;color:#155724}.aksrt-badge--warning[data-v-800595b0]{background:#fff3cd;color:#856404}.aksrt-table[data-v-800595b0]{width:100%;border-collapse:collapse}.aksrt-table th[data-v-800595b0],.aksrt-table td[data-v-800595b0]{border-bottom:1px solid #eee;padding:10px 8px;text-align:left}.aksrt-form-group[data-v-800595b0]{margin-bottom:14px}.aksrt-input[data-v-800595b0],.aksrt-select[data-v-800595b0]{width:100%;max-width:480px;padding:8px 10px}.aksrt-button[data-v-800595b0]{padding:8px 16px;border:0;border-radius:6px;cursor:pointer}.aksrt-button--primary[data-v-800595b0]{background:#1677ff;color:#fff}.aksrt-button[data-v-800595b0]:disabled{opacity:.6;cursor:not-allowed}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.aksrt-security__section[data-v-1628ae71]{margin-bottom:16px}.aksrt-security__overview-card[data-v-1628ae71]{display:flex;align-items:center;gap:10px;padding:14px;border-radius:8px;background:#fafafa;border:1px solid #f0f0f0}.aksrt-security__overview-card strong[data-v-1628ae71]{display:block;font-size:14px;color:#1a1a2e}.aksrt-security__overview-card p[data-v-1628ae71]{margin:2px 0 0;font-size:12px;color:#8a909c}.aksrt-security__config-link[data-v-1628ae71]{font-size:12px;color:#1890ff;text-decoration:none;white-space:nowrap}.aksrt-security__config-link[data-v-1628ae71]:hover{text-decoration:underline}.aksrt-security__output[data-v-1628ae71]{margin:12px 0 0;padding:12px 14px;border-radius:12px;background:#101828;color:#d0d7e2;font-size:12px;line-height:1.7;white-space:pre-wrap;word-break:break-word}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.aksrt-tools__section[data-v-dc044b00]{margin-bottom:16px}.aksrt-tools__health-card[data-v-dc044b00]{display:flex;align-items:center;gap:10px;padding:14px;border-radius:8px;background:#fafafa;border:1px solid #f0f0f0}.aksrt-tools__health-card strong[data-v-dc044b00]{display:block;font-size:14px;color:#1a1a2e}.aksrt-tools__health-card p[data-v-dc044b00]{margin:2px 0 0;font-size:12px;color:#8a909c}.aksrt-tools__health-card--warn[data-v-dc044b00]{border-color:#faad14;background:#fffbe6}.aksrt-tools__tool-card[data-v-dc044b00]{display:flex;align-items:center;gap:12px;padding:14px;border-radius:8px;background:#fafafa;border:1px solid #f0f0f0;cursor:pointer;transition:all .2s}.aksrt-tools__tool-card[data-v-dc044b00]:hover{border-color:#1890ff;box-shadow:0 2px 8px #1890ff1a}.aksrt-tools__tool-icon[data-v-dc044b00]{width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.aksrt-tools__tool-body[data-v-dc044b00]{flex:1;min-width:0}.aksrt-tools__tool-body strong[data-v-dc044b00]{display:block;font-size:14px;color:#1a1a2e}.aksrt-tools__tool-body p[data-v-dc044b00]{margin:2px 0 0;font-size:12px;color:#8a909c}
+1
View File
@@ -0,0 +1 @@
import{W as r,X as p,I as u,L as f,c as a}from"./vendor-vue.Bykizn0M.js";const c={__name:"FaIcon",props:{icon:{type:String,required:!0},size:{type:[Number,String],default:null},fw:{type:Boolean,default:!1},spin:{type:Boolean,default:!1},pulse:{type:Boolean,default:!1},rotate:{type:[Number,String],default:null},flip:{type:String,default:null},extraClass:{type:String,default:""}},setup(l){const e=l,i=a(()=>{const t=[],s=e.icon.trim();return s.startsWith("fa-")?t.push("fas",s):t.push(...s.split(/\s+/)),e.fw&&t.push("fa-fw"),e.spin&&t.push("fa-spin"),e.pulse&&t.push("fa-pulse"),e.rotate&&t.push(`fa-rotate-${e.rotate}`),e.flip&&t.push(`fa-flip-${e.flip}`),e.extraClass&&t.push(e.extraClass),t.join(" ")}),n=a(()=>e.size?{fontSize:typeof e.size=="number"?`${e.size}px`:e.size}:{});return(t,s)=>(r(),p("i",{class:f(i.value),style:u(n.value),"aria-hidden":"true"},null,6))}};export{c as _};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.icon-preview-row[data-v-3f29cff8]{display:flex;align-items:center;gap:8px;margin-bottom:16px;font-size:13px}.theme-icon-preview[data-v-3f29cff8]{display:flex;flex-direction:column;gap:6px;color:var(--n-text-color-3);font-size:13px}.theme-icon-preview span[data-v-3f29cff8],.theme-icon-preview-inline[data-v-3f29cff8]{display:inline-flex;align-items:center;gap:6px}.icon-preview-row a[data-v-3f29cff8]{color:var(--n-primary-color);text-decoration:none}.icon-preview-row a[data-v-3f29cff8]:hover{text-decoration:underline}.muted-text[data-v-3f29cff8]{color:#999;font-size:12px}.aksrt-modal-footer[data-v-3f29cff8]{display:flex;justify-content:flex-end;gap:10px}.section-desc[data-v-3f29cff8]{color:var(--n-text-color-3);font-size:13px;margin:0 0 16px}.float-btn-sort[data-v-3f29cff8]{display:flex;flex-direction:column;gap:12px}.float-btn-sort__item[data-v-3f29cff8]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid var(--n-border-color);border-radius:14px;background:var(--n-card-color)}.float-btn-sort__main[data-v-3f29cff8]{display:flex;align-items:center;gap:12px;min-width:0;flex:1}.float-btn-sort__handle[data-v-3f29cff8]{width:30px;height:30px;border:0;background:transparent;color:var(--n-text-color-3);cursor:grab}.float-btn-sort__handle[data-v-3f29cff8]:active{cursor:grabbing}.float-btn-sort__icon[data-v-3f29cff8]{width:36px;height:36px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;background:#88abda1f;color:var(--n-text-color-2)}.float-btn-sort__meta[data-v-3f29cff8]{min-width:0;flex:1}.float-btn-sort__title-row[data-v-3f29cff8]{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:6px}.float-btn-sort__desc[data-v-3f29cff8]{font-size:13px;color:var(--n-text-color-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.float-btn-sort__actions[data-v-3f29cff8]{display:flex;gap:8px;flex-shrink:0}.float-btn-sort__ghost[data-v-3f29cff8]{opacity:.45}.add-items-editor[data-v-3f29cff8]{margin-bottom:16px}.add-items-editor__head[data-v-3f29cff8]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.add-items-editor__head-actions[data-v-3f29cff8]{display:flex;gap:8px}.add-items-editor__list[data-v-3f29cff8]{display:flex;flex-direction:column;gap:10px}.add-items-editor__row[data-v-3f29cff8]{display:grid;grid-template-columns:auto 1fr 1fr 1.4fr auto;gap:10px;align-items:center}.add-items-editor__drag[data-v-3f29cff8]{width:32px;height:32px;border:0;border-radius:8px;background:#88abda1f;color:var(--n-text-color-3);cursor:grab}.add-items-editor__drag[data-v-3f29cff8]:active{cursor:grabbing}.add-items-editor__ghost[data-v-3f29cff8]{opacity:.45}.add-items-preview[data-v-3f29cff8]{margin-top:14px;padding:14px;border:1px dashed var(--n-border-color);border-radius:14px;background:#88abda0a}.add-items-preview__title[data-v-3f29cff8]{font-size:13px;color:var(--n-text-color-3);margin-bottom:10px}.add-items-preview__panel[data-v-3f29cff8]{display:flex;align-items:center;gap:12px;margin-top:12px}.add-items-preview__panel[data-v-3f29cff8]:first-of-type{margin-top:0}.add-items-preview__mode[data-v-3f29cff8]{width:40px;flex-shrink:0;font-size:12px;color:var(--n-text-color-3)}.add-items-preview__trigger[data-v-3f29cff8]{width:42px;height:42px;border-radius:12px;background:#fff;border:1px solid var(--n-border-color);display:inline-flex;align-items:center;justify-content:center;color:var(--n-text-color-2);box-shadow:0 8px 20px #11182714}.add-items-preview__trigger--dark[data-v-3f29cff8]{background:#232734;border-color:#ffffff14;color:#d8dee9;box-shadow:0 12px 28px #00000047}.add-items-preview__menu[data-v-3f29cff8]{flex:1;min-width:0;padding:10px;border-radius:14px;background:#fff;border:1px solid var(--n-border-color)}.add-items-preview__menu--dark[data-v-3f29cff8]{background:#232734;border-color:#ffffff14}.add-items-preview__list[data-v-3f29cff8]{display:flex;flex-direction:column;gap:6px}.add-items-preview__item[data-v-3f29cff8]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:10px;background:#88abda0f;color:var(--n-text-color-2);text-decoration:none}.add-items-preview__item i[data-v-3f29cff8]{width:18px;text-align:center;color:var(--n-primary-color)}.add-items-preview__item--dark[data-v-3f29cff8]{background:#ffffff0d;color:#e5e7eb}.add-items-preview__item--dark i[data-v-3f29cff8]{color:#9fc0ec}.add-items-preview__empty[data-v-3f29cff8]{font-size:13px;color:var(--n-text-color-3);padding:10px 12px}.add-items-preview__empty--dark[data-v-3f29cff8]{color:#e5e7ebb8}
+1
View File
@@ -0,0 +1 @@
.aksrt-modal-footer[data-v-75e6f4e1]{display:flex;justify-content:flex-end;gap:10px}.aksrt-media-row[data-v-75e6f4e1]{display:flex;align-items:center;gap:8px;width:100%}.aksrt-media-preview[data-v-75e6f4e1]{display:block;max-width:200px;max-height:80px;margin-top:8px;border-radius:6px;border:1px solid var(--n-border-color, #e0e0e6);object-fit:contain}.aksrt-media-preview--sm[data-v-75e6f4e1]{max-width:64px;max-height:64px}.aksrt-mini-img-row[data-v-75e6f4e1]{padding:10px 0;border-bottom:1px solid var(--n-border-color, #e0e0e6)}.aksrt-mini-img-row[data-v-75e6f4e1]:last-child{border-bottom:none}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.icon-preview-row[data-v-13ae8f9c]{display:flex;align-items:center;gap:8px;margin-top:4px;font-size:13px}.icon-preview-row a[data-v-13ae8f9c]{color:var(--n-primary-color);text-decoration:none}.icon-preview-row a[data-v-13ae8f9c]:hover{text-decoration:underline}.muted-text[data-v-13ae8f9c]{color:#999;font-size:12px}.aksrt-modal-footer[data-v-13ae8f9c]{display:flex;justify-content:flex-end;gap:10px}.section-desc[data-v-13ae8f9c]{color:var(--n-text-color-3);font-size:13px;margin:0 0 16px}.section-desc--tight[data-v-13ae8f9c]{margin-top:-6px}.add-items-editor[data-v-13ae8f9c]{margin-bottom:16px}.add-items-editor__head[data-v-13ae8f9c]{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.add-items-editor__presets[data-v-13ae8f9c]{display:flex;align-items:center;gap:6px;margin-bottom:12px;flex-wrap:wrap}.add-items-editor__presets-label[data-v-13ae8f9c]{font-size:12px;color:var(--n-text-color-3, #999)}.add-items-editor__list[data-v-13ae8f9c]{display:flex;flex-direction:column;gap:10px}.add-items-editor__row[data-v-13ae8f9c]{display:grid;grid-template-columns:32px 1fr 1fr 1.2fr 40px;gap:8px;align-items:center}.add-items-editor__drag[data-v-13ae8f9c]{width:32px;height:32px;border:0;border-radius:10px;background:#f3f5f7;color:#6b7280;cursor:grab}.add-items-editor__ghost[data-v-13ae8f9c]{opacity:.5}.tabbar-sort[data-v-13ae8f9c]{display:flex;flex-direction:column;gap:12px}.tabbar-sort__item[data-v-13ae8f9c]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border:1px solid var(--n-border-color);border-radius:14px;background:#fff}.tabbar-sort__main[data-v-13ae8f9c]{min-width:0;display:flex;align-items:center;gap:12px;flex:1}.tabbar-sort__handle[data-v-13ae8f9c]{width:32px;height:32px;border:0;border-radius:10px;background:#f3f5f7;color:#6b7280;cursor:grab}.tabbar-sort__icon[data-v-13ae8f9c]{width:38px;height:38px;border-radius:12px;display:inline-flex;align-items:center;justify-content:center;background:#18a0581f;color:#18a058;font-size:18px;flex:0 0 auto}.tabbar-sort__meta[data-v-13ae8f9c]{min-width:0;flex:1}.tabbar-sort__title-row[data-v-13ae8f9c]{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:4px}.tabbar-sort__desc[data-v-13ae8f9c]{color:var(--n-text-color-3);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabbar-sort__actions[data-v-13ae8f9c]{display:flex;gap:6px;flex:0 0 auto}.tabbar-sort__ghost[data-v-13ae8f9c]{opacity:.5}@media(max-width:1023px){.tabbar-sort__item[data-v-13ae8f9c]{flex-direction:column;align-items:stretch}.tabbar-sort__actions[data-v-13ae8f9c]{justify-content:flex-end}.add-items-editor__row[data-v-13ae8f9c]{grid-template-columns:32px 1fr}}
+1
View File
@@ -0,0 +1 @@
.aksrt-inline-setting[data-v-2bdc0f38]{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.aksrt-inline-setting__hint[data-v-2bdc0f38]{color:#7a7f8a;font-size:13px}.aksrt-inline-setting__actions[data-v-2bdc0f38]{display:flex;justify-content:flex-end}.aksrt-modal-preview[data-v-2bdc0f38]{margin:-8px 0 18px;border-radius:8px;overflow:hidden;border:1px solid #eef1f6}.aksrt-modal-grid[data-v-2bdc0f38]{display:grid;grid-template-columns:1fr 1fr;gap:14px}.aksrt-layer-item[data-v-2bdc0f38]{border:1px solid #eef1f6;border-radius:8px;padding:14px;margin-bottom:10px;background:#fafbfc}.aksrt-layer-item__header[data-v-2bdc0f38]{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.aksrt-modal-footer[data-v-2bdc0f38]{display:flex;justify-content:flex-end;gap:10px}@media(max-width:768px){.aksrt-modal-grid[data-v-2bdc0f38]{grid-template-columns:1fr}}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.homepage-settings__empty-tabs[data-v-ae4c5b65]{padding:24px;text-align:center;border:1px dashed var(--n-border-color);border-radius:4px;margin-bottom:12px}.homepage-settings__tab-row[data-v-ae4c5b65]{margin-bottom:8px}.homepage-settings__tab-fields[data-v-ae4c5b65]{display:flex;gap:8px;align-items:center}.aksrt-form-actions[data-v-ae4c5b65]{margin-top:16px;text-align:right}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{o as d,X as a,Y as o,Z as u,c as l,$ as _,W as r}from"./vendor-vue.Bykizn0M.js";import{_ as m}from"./index.js";import"./vendor-naive.BuHWlEgf.js";import"./vendor-misc.1adHN6i_.js";const v={class:"aks-native-ops-redirect"},f={key:0},h=["href"],k={key:1,class:"desc"},b={__name:"NativeOpsRedirect",setup(w){const n=_(),p=l(()=>{var e;return((e=n.meta)==null?void 0:e.title)||"运营功能已迁移"}),t=l(()=>{var i,c;const e=((i=n.meta)==null?void 0:i.nativeAdminPath)||"";return e?(((c=window.aksrtAdminData)==null?void 0:c.adminUrl)||"/wp-admin/").replace(/\/?$/,"/")+e.replace(/^\//,""):""});return d(()=>{t.value&&window.location.replace(t.value)}),(e,s)=>(r(),a("div",v,[o("h2",null,u(p.value),1),s[0]||(s[0]=o("p",{class:"desc"}," 此运营功能已迁移到 WordPress 原生后台侧栏(对齐 zibll)。正在跳转… ",-1)),t.value?(r(),a("p",f,[o("a",{class:"button button-primary",href:t.value},"立即打开原生页面",8,h)])):(r(),a("p",k,"未配置原生跳转地址,请从左侧 WP 菜单进入。"))]))}},P=m(b,[["__scopeId","data-v-da26f551"]]);export{P as default};
+1
View File
@@ -0,0 +1 @@
.aks-native-ops-redirect[data-v-da26f551]{max-width:640px;margin:48px auto;padding:24px;background:var(--aks-surface, #fff);border-radius:8px;border:1px solid var(--aks-border, #e5e7eb)}.desc[data-v-da26f551]{color:#646970;line-height:1.6}.button[data-v-da26f551]{display:inline-block;margin-top:8px;padding:8px 14px;background:#2271b1;color:#fff;border-radius:4px;text-decoration:none}
@@ -0,0 +1 @@
import{_ as n}from"./index.js";import{X as s,Y as d,Z as o,l as r,a5 as c,W as t,f as i}from"./vendor-vue.Bykizn0M.js";const _={class:"aksrt-page-header"},l={class:"aksrt-page-header__main"},h={class:"aksrt-page-header__title"},p={key:0,class:"aksrt-page-header__desc"},u={key:1,class:"aksrt-page-header__desc"},g={key:0,class:"aksrt-page-header__actions"},k={__name:"PageHeader",props:{title:{type:String,required:!0},desc:{type:String,default:""}},setup(a){return(e,m)=>(t(),s("header",_,[d("div",l,[d("h2",h,o(a.title),1),a.desc?(t(),s("p",p,[r(e.$slots,"desc",{},()=>[i(o(a.desc),1)],!0)])):e.$slots.desc?(t(),s("div",u,[r(e.$slots,"desc",{},void 0,!0)])):c("",!0)]),e.$slots.actions?(t(),s("div",g,[r(e.$slots,"actions",{},void 0,!0)])):c("",!0)]))}},$=n(k,[["__scopeId","data-v-8ce32c14"]]);export{$ as P};
+1
View File
@@ -0,0 +1 @@
.aksrt-page-header[data-v-8ce32c14]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}.aksrt-page-header__main[data-v-8ce32c14]{flex:1 1 auto;min-width:0}.aksrt-page-header__title[data-v-8ce32c14]{margin:0 0 6px;color:#1a1a2e;font-size:22px;font-weight:700;letter-spacing:-.02em;line-height:1.3}.aksrt-page-header__desc[data-v-8ce32c14]{margin:0;color:#7a7f8a;font-size:13px;line-height:1.65}.aksrt-page-header__actions[data-v-8ce32c14]{flex:0 0 auto;display:flex;align-items:center;gap:8px}@media(max-width:768px){.aksrt-page-header[data-v-8ce32c14]{margin-bottom:14px;gap:10px}.aksrt-page-header__title[data-v-8ce32c14]{font-size:18px}.aksrt-page-header__desc[data-v-8ce32c14]{font-size:12px}.aksrt-page-header__actions[data-v-8ce32c14]{width:100%}}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.aksrt-gateway__card[data-v-fe319791]{display:flex;align-items:center;gap:12px;padding:14px;border-radius:8px;background:var(--surface-2, #fafafa);border:1px solid var(--color-line, #f0f0f0)}.aksrt-gateway__icon[data-v-fe319791]{width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:var(--surface-3, #f0f0f0);color:var(--color-ink-4, #8a909c);font-size:16px}.aksrt-gateway__icon--active[data-v-fe319791]{background:var(--color-primary-soft, #f0f5ff);color:var(--color-primary, #1890ff)}.aksrt-gateway__card strong[data-v-fe319791]{display:block;font-size:14px;color:var(--color-ink, #1a1a2e)}.aksrt-gateway__card p[data-v-fe319791]{margin:2px 0 0;font-size:12px;color:var(--color-ink-4, #8a909c)}.aksrt-gateway__stat[data-v-fe319791]{text-align:center;padding:16px;border-radius:8px;background:var(--surface-2, #fafafa)}.aksrt-gateway__stat strong[data-v-fe319791]{display:block;font-size:18px;font-weight:600;color:var(--color-ink, #1a1a2e)}.aksrt-gateway__stat p[data-v-fe319791]{margin:4px 0 0;font-size:12px;color:var(--color-ink-4, #8a909c)}.aksrt-text-warning[data-v-fe319791]{color:var(--color-warning, #f59e0b)}.aksrt-text-info[data-v-fe319791]{color:var(--color-info, #3b82f6)}
@@ -0,0 +1 @@
import{a as V}from"./shared-api.D5_fnN32.js";import{P as R}from"./PageHeader.Di3JTPjc.js";import{_ as T}from"./index.js";import{u as U,b as C,e as q,f as H}from"./vendor-naive.BuHWlEgf.js";import{o as L,X as j,a4 as l,a3 as o,r as _,e as B,a1 as f,W as h,f as m,a2 as P,Y as c,N as S,Z as v,a5 as W,F as X,R as Y,k as r}from"./vendor-vue.Bykizn0M.js";import"./vendor-misc.1adHN6i_.js";const Z={class:"aksrt-page-container"},A={class:"aksrt-cap-matrix__header"},G={class:"aksrt-cap-matrix__title"},I={class:"aksrt-cap-matrix__desc"},K={class:"aksrt-form-actions"},Q={__name:"PermissionsCapabilities",setup($){const y=U(),g=_(!0),k=_(!1),b=_([]),N=_({}),u=B({cap_count:0,group_count:0,column_count:0}),i=B({}),x=_({});L(w);async function w(){g.value=!0;try{const e=await V.getCapabilities(),a=(e==null?void 0:e.data)||{};N.value=a.columns||{},b.value=a.groups||[],Object.assign(u,a.summary||{cap_count:0,group_count:0,column_count:0});const s={};for(const t of b.value)for(const n of t.items||[])s[n.cap_id]={...n.values||{}};O(i,s),x.value=JSON.parse(JSON.stringify(s))}catch(e){y.error((e==null?void 0:e.message)||"加载能力矩阵失败")}finally{g.value=!1}}function O(e,a){Object.keys(e).forEach(s=>delete e[s]),Object.entries(a).forEach(([s,t])=>{e[s]={...t}})}function z(e){const a=[{title:"能力项",key:"label",fixed:"left",width:280,render:t=>r("div",{class:"aksrt-cap-matrix__cap"},[r("strong",t.label),r("code",t.cap_id)])}],s=new Set;for(const t of e.items||[])for(const n of t.visible_columns||[])s.add(n);for(const t of Object.keys(N.value||{}))s.has(t)&&a.push({title:N.value[t],key:t,width:t==="level"||t==="vip"?110:100,render:n=>E(n,t)});return a}function E(e,a){var t,n;return(e.visible_columns||[]).includes(a)?(i[e.cap_id]||(i[e.cap_id]={...e.values||{}}),a==="level"||a==="vip"?r(q,{value:((t=i[e.cap_id])==null?void 0:t[a])??-1,min:-1,max:a==="level"?10:2,step:1,size:"small",style:"width: 90px",onUpdateValue:d=>J(e.cap_id,a,d??-1)}):r(H,{value:!!((n=i[e.cap_id])!=null&&n[a]),size:"small",onUpdateValue:d=>J(e.cap_id,a,d)})):r("span",{class:"aksrt-cap-matrix__empty"},"—")}function J(e,a,s){i[e]||(i[e]={}),i[e][a]=s}function M(){O(i,JSON.parse(JSON.stringify(x.value||{}))),y.info("已恢复默认矩阵")}async function D(){k.value=!0;try{await V.saveCapabilities(JSON.parse(JSON.stringify(i))),x.value=JSON.parse(JSON.stringify(i)),y.success("能力矩阵已保存")}catch(e){y.error((e==null?void 0:e.message)||"保存能力矩阵失败")}finally{k.value=!1}}return(e,a)=>{const s=f("n-button"),t=f("n-space"),n=f("n-card"),d=f("n-data-table"),F=f("n-spin");return h(),j("div",Z,[l(R,{title:"基本权限 / 能力矩阵",desc:"统一管理用户治理、投稿和评论的角色能力矩阵。"},{actions:o(()=>[l(t,null,{default:o(()=>[l(s,{quaternary:"",onClick:M},{default:o(()=>[...a[0]||(a[0]=[m("恢复默认",-1)])]),_:1})]),_:1})]),_:1}),l(F,{show:g.value,style:{width:"100%","min-height":"240px"}},{default:o(()=>[u.cap_count?(h(),P(n,{key:0,class:"aksrt-section-card"},{default:o(()=>[a[1]||(a[1]=c("div",{class:"aksrt-section-header"},[c("h3",null,"矩阵概览")],-1)),l(t,null,{default:o(()=>[l(S(C),{round:"",type:"info"},{default:o(()=>[m("能力项:"+v(u.cap_count),1)]),_:1}),l(S(C),{round:"",type:"info"},{default:o(()=>[m("分组:"+v(u.group_count),1)]),_:1}),l(S(C),{round:"",type:"info"},{default:o(()=>[m("角色列:"+v(u.column_count),1)]),_:1})]),_:1})]),_:1})):W("",!0),(h(!0),j(X,null,Y(b.value,p=>(h(),P(n,{key:p.key,class:"aksrt-section-card"},{header:o(()=>[c("div",A,[c("div",null,[c("h3",G,v(p.title),1),c("p",I,"共 "+v(p.items.length)+" 项能力",1)])])]),default:o(()=>[l(d,{columns:z(p),data:p.items,bordered:!0,size:"small","single-line":!1,"scroll-x":1200},null,8,["columns","data"])]),_:2},1024))),128)),c("div",K,[l(s,{type:"primary",loading:k.value,onClick:D},{default:o(()=>[...a[2]||(a[2]=[m("保存能力矩阵",-1)])]),_:1},8,["loading"])])]),_:1},8,["show"])])}}},ie=T(Q,[["__scopeId","data-v-34bd6923"]]);export{ie as default};
@@ -0,0 +1 @@
.aksrt-cap-matrix__header[data-v-34bd6923]{display:flex;align-items:center;justify-content:space-between}.aksrt-cap-matrix__title[data-v-34bd6923]{margin:0;font-size:15px;font-weight:600}.aksrt-cap-matrix__desc[data-v-34bd6923]{margin:4px 0 0;font-size:12px;color:#8a909c}.aksrt-cap-matrix__cap[data-v-34bd6923]{display:flex;flex-direction:column;gap:4px}.aksrt-cap-matrix__cap code[data-v-34bd6923]{font-size:11px;color:#667085}.aksrt-cap-matrix__empty[data-v-34bd6923]{color:#c0c4cc}.aksrt-form-actions[data-v-34bd6923]{display:flex;justify-content:flex-end;margin-top:16px}
@@ -0,0 +1 @@
import t from"./SchemaPage.CSkx936u.js";import{a2 as o,W as r}from"./vendor-vue.Bykizn0M.js";import"./shared-api.B7o7Pzvu.js";import"./FaIcon.CX_hGmM4.js";import"./index.js";import"./vendor-naive.BuHWlEgf.js";import"./vendor-misc.1adHN6i_.js";import"./shared-api.D5_fnN32.js";const l={__name:"PostPageSettings",setup(e){return(p,a)=>(r(),o(t,{domain:"post_list",section:"page"}))}};export{l as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.aksrt-schema-page[data-v-a4bec770]{max-width:1100px;margin:0 auto}.aksrt-schema-page__tool-actions[data-v-a4bec770]{display:flex;justify-content:flex-end;margin-top:16px}.aksrt-schema-page__field-hint[data-v-a4bec770]{margin:8px 0 0;font-size:12px;color:#8a909c}.captcha-test-overlay[data-v-a4bec770]{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;justify-content:center;align-items:center;z-index:9999}.captcha-test-panel[data-v-a4bec770]{background:#fff;border-radius:12px;width:420px;max-width:90%;box-shadow:0 8px 32px #0000002e}.captcha-test-header[data-v-a4bec770]{display:flex;justify-content:space-between;align-items:center;padding:18px 22px;border-bottom:1px solid #e8e8ec;font-size:16px;font-weight:600}.captcha-test-close[data-v-a4bec770]{background:none;border:none;font-size:24px;cursor:pointer;color:#999;padding:0;line-height:1}.captcha-test-close[data-v-a4bec770]:hover{color:#333}.captcha-test-body[data-v-a4bec770]{padding:24px;min-height:180px;display:flex;justify-content:center;align-items:center}
@@ -0,0 +1 @@
import{X as k,a4 as n,a3 as o,a1 as s,_ as c,W as x,f as e}from"./vendor-vue.Bykizn0M.js";import{P as C}from"./PageHeader.Di3JTPjc.js";import"./index.js";import"./vendor-naive.BuHWlEgf.js";import"./vendor-misc.1adHN6i_.js";const b={class:"aksrt-page-container"},q={__name:"ThemeAuthorizationPage",setup(g){const d=c();function r(a){d.push(a)}return(a,t)=>{const i=s("n-button"),p=s("n-space"),_=s("n-alert"),u=s("n-card"),l=s("n-list-item"),m=s("n-list");return x(),k("div",b,[n(C,{title:"主题授权",desc:"当前版本按产品决策不实现在线授权/撤销授权,仅保留主题信息与更新能力。"},{actions:o(()=>[n(p,null,{default:o(()=>[n(i,{quaternary:"",onClick:t[0]||(t[0]=f=>r("/tools/import-export"))},{default:o(()=>[...t[2]||(t[2]=[e("兼容&工具",-1)])]),_:1}),n(i,{quaternary:"",onClick:t[1]||(t[1]=f=>r("/tools/update"))},{default:o(()=>[...t[3]||(t[3]=[e("更新中心",-1)])]),_:1})]),_:1})]),_:1}),n(u,{class:"aksrt-section-card"},{default:o(()=>[n(_,{type:"info",title:"按设计省略","show-icon":!0},{default:o(()=>[...t[4]||(t[4]=[e(" 本主题当前不实现 zibll 风格的授权码校验、域名绑定、撤销授权、本地免授权等机制。 `AKSRT_Update_Checker` 仅负责匿名版本检测与更新提示,不与授权系统耦合。 ",-1)])]),_:1})]),_:1}),n(u,{class:"aksrt-section-card",title:"当前策略",size:"small"},{default:o(()=>[n(m,{bordered:""},{default:o(()=>[n(l,null,{default:o(()=>[...t[5]||(t[5]=[e("不提供授权码输入框或“立即授权”按钮",-1)])]),_:1}),n(l,null,{default:o(()=>[...t[6]||(t[6]=[e("不提供“已授权 / 未授权 / 本地免授权”三态逻辑",-1)])]),_:1}),n(l,null,{default:o(()=>[...t[7]||(t[7]=[e("更新能力统一收口到“更新中心”与“主题信息”页",-1)])]),_:1}),n(l,null,{default:o(()=>[...t[8]||(t[8]=[e("若未来恢复授权体系,应单独立项,不与现有更新检测器混接",-1)])]),_:1})]),_:1})]),_:1})])}}};export{q as default};
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.aksrt-theme-info__loading[data-v-ded10315]{display:flex;justify-content:center;padding:60px 0}.aksrt-theme-info__card[data-v-ded10315]{margin-bottom:16px}.aksrt-theme-info__modules[data-v-ded10315]{display:flex;flex-wrap:wrap;gap:8px}.aksrt-theme-info__module-tag[data-v-ded10315]{display:inline-flex;align-items:center;gap:5px}.aksrt-theme-info__links[data-v-ded10315]{display:flex;flex-wrap:wrap;gap:12px}.aksrt-theme-info__link[data-v-ded10315]{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:6px;background:#f5f7fa;color:#333;text-decoration:none;font-size:13px;transition:background .2s}.aksrt-theme-info__link[data-v-ded10315]:hover{background:#e8eaed}
@@ -0,0 +1 @@
import{o as N,X as u,a4 as o,a3 as s,r as _,a1 as n,_ as T,W as r,f as d,Y as l,Z as i,F as V,R as q,a2 as z}from"./vendor-vue.Bykizn0M.js";import{a as y}from"./shared-api.D5_fnN32.js";import{P as A}from"./PageHeader.Di3JTPjc.js";import{_ as D}from"./index.js";import{u as F}from"./vendor-naive.BuHWlEgf.js";import"./vendor-misc.1adHN6i_.js";const P={class:"aksrt-page-container"},$={class:"aksrt-section-header"},H={key:0,class:"aksrt-rollback-list"},I={style:{margin:"6px 0 0",color:"#4b5565"}},L={style:{margin:"6px 0 0",color:"#7a7f8a","font-size":"12px"}},S={__name:"ToolsEmailRollback",setup(U){const h=T(),c=F(),m=_(!0),p=_(0),f=_([]),v=_(0);function x(t){h.push(t)}function b(t){return(t==null?void 0:t.data)??t??{}}async function g(){m.value=!0;try{const t=b(await y.getEmailRollbackUsers());f.value=Array.isArray(t.items)?t.items:[],v.value=Number(t.total||0)}catch(t){c.error(t.message||"加载邮件回滚列表失败")}finally{m.value=!1}}async function w(t){p.value=t;try{const a=await y.executeEmailRollback(t);a.code==="success"?(c.success(a.message||"回滚成功"),await g()):c.error(a.message||"回滚失败")}catch(a){c.error(a.message||"回滚失败")}finally{p.value=0}}return N(g),(t,a)=>{const k=n("n-button"),R=n("n-space"),C=n("n-tag"),E=n("n-empty"),B=n("n-card"),M=n("n-spin");return r(),u("div",P,[o(A,{title:"邮件回滚",desc:"查看 14 天邮箱变更窗口内的账号,并在必要时执行回滚。"},{actions:s(()=>[o(R,null,{default:s(()=>[o(k,{quaternary:"",onClick:a[0]||(a[0]=e=>x("/tools/health"))},{default:s(()=>[...a[1]||(a[1]=[d("健康检查",-1)])]),_:1}),o(k,{quaternary:"",onClick:g},{default:s(()=>[...a[2]||(a[2]=[d("刷新列表",-1)])]),_:1})]),_:1})]),_:1}),o(M,{show:m.value,style:{width:"100%","min-height":"200px"}},{default:s(()=>[o(B,{class:"aksrt-section-card"},{default:s(()=>[l("div",$,[a[3]||(a[3]=l("h3",null,"待处理账号",-1)),o(C,{round:"",type:"info"},{default:s(()=>[d("总计 "+i(v.value),1)]),_:1})]),f.value.length?(r(),u("div",H,[(r(!0),u(V,null,q(f.value,e=>(r(),u("div",{key:e.user_id,class:"aksrt-rollback-list__item"},[l("div",null,[l("strong",null,i(e.display_name||e.login),1),l("p",I,i(e.current_email)+" → "+i(e.previous_email),1),l("p",L," 剩余窗口:"+i(Math.max(0,Math.floor((e.expires_in||0)/3600)))+" 小时 ",1)]),o(k,{size:"small",loading:p.value===e.user_id,onClick:W=>w(e.user_id)},{default:s(()=>[...a[4]||(a[4]=[d(" 执行回滚 ",-1)])]),_:1},8,["loading","onClick"])]))),128))])):(r(),z(E,{key:1,description:"当前没有可回滚的邮箱变更记录"}))]),_:1})]),_:1},8,["show"])])}}},K=D(S,[["__scopeId","data-v-775b42f3"]]);export{K as default};
@@ -0,0 +1 @@
.aksrt-rollback-list[data-v-775b42f3]{display:grid;gap:12px}.aksrt-rollback-list__item[data-v-775b42f3]{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:14px 16px;border:1px solid #e7ebf3;border-radius:14px}@media(max-width:768px){.aksrt-rollback-list__item[data-v-775b42f3]{align-items:flex-start;flex-direction:column}}
@@ -0,0 +1 @@
import{o as B,X as y,a4 as n,a3 as a,r as _,a1 as i,_ as V,W as f,f as r,Y as l,Z as u,F as D,R as E,a2 as N,c as P}from"./vendor-vue.Bykizn0M.js";import{a as b}from"./shared-api.D5_fnN32.js";import{P as q}from"./PageHeader.Di3JTPjc.js";import{_ as F}from"./index.js";import{u as I}from"./vendor-naive.BuHWlEgf.js";import"./vendor-misc.1adHN6i_.js";const M={class:"aksrt-page-container"},S={class:"aksrt-health-grid"},$={class:"aksrt-section-header"},j={style:{margin:"0",color:"#4b5565"}},L={__name:"ToolsHealth",setup(O){const w=V(),x=I(),d=_(!0),p=_({}),o=_({feature_enabled:!1,pending_users:0,rest_blocking_active:!1}),H=P(()=>Object.entries(p.value||{}).map(([e,t])=>({key:e,...t||{}})));function m(e){w.push(e)}function g(e){return(e==null?void 0:e.data)??e??{}}function T(e){return e==="ok"?"success":e==="warning"?"warning":e==="error"?"error":"info"}async function C(){d.value=!0;try{const[e,t]=await Promise.all([b.getHealthCheck(),b.getHealthEmailVerification()]);p.value=g(e).checks||{},o.value=g(t)}catch(e){x.error(e.message||"加载健康检查失败")}finally{d.value=!1}}return B(C),(e,t)=>{const v=i("n-button"),h=i("n-space"),c=i("n-tag"),k=i("n-card"),R=i("n-spin");return f(),y("div",M,[n(q,{title:"健康检查",desc:"集中查看运行环境、数据库表、邮箱验证迁移和系统诊断状态。"},{actions:a(()=>[n(h,null,{default:a(()=>[n(v,{quaternary:"",onClick:t[0]||(t[0]=s=>m("/tools/import-export"))},{default:a(()=>[...t[2]||(t[2]=[r("导入导出",-1)])]),_:1}),n(v,{quaternary:"",onClick:t[1]||(t[1]=s=>m("/tools/email-rollback"))},{default:a(()=>[...t[3]||(t[3]=[r("邮件回滚",-1)])]),_:1})]),_:1})]),_:1}),n(R,{show:d.value,style:{width:"100%","min-height":"200px"}},{default:a(()=>[n(k,{class:"aksrt-section-card"},{default:a(()=>[t[4]||(t[4]=l("div",{class:"aksrt-section-header"},[l("h3",null,"邮箱验证状态")],-1)),n(h,null,{default:a(()=>[n(c,{round:"",type:o.value.feature_enabled?"success":"default"},{default:a(()=>[r(" 功能开关:"+u(o.value.feature_enabled?"已启用":"未启用"),1)]),_:1},8,["type"]),n(c,{round:"",type:o.value.rest_blocking_active?"warning":"default"},{default:a(()=>[r(" REST 阻断:"+u(o.value.rest_blocking_active?"已开启":"仅记录/关闭"),1)]),_:1},8,["type"]),n(c,{round:"",type:"info"},{default:a(()=>[r(" 待验证用户:"+u(o.value.pending_users),1)]),_:1})]),_:1})]),_:1}),l("div",S,[(f(!0),y(D,null,E(H.value,s=>(f(),N(k,{key:s.key,class:"aksrt-section-card"},{default:a(()=>[l("div",$,[l("h3",null,u(s.label),1),n(c,{round:"",type:T(s.status)},{default:a(()=>[r(u(s.status),1)]),_:2},1032,["type"])]),l("p",j,u(s.value),1)]),_:2},1024))),128))])]),_:1},8,["show"])])}}},G=F(L,[["__scopeId","data-v-485f9fd2"]]);export{G as default};
+1
View File
@@ -0,0 +1 @@
.aksrt-health-grid[data-v-485f9fd2]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}
@@ -0,0 +1,3 @@
import{X as $,a4 as a,a3 as l,a1 as c,_ as A,W as B,f as r,Y as n,Z as P,r as u}from"./vendor-vue.Bykizn0M.js";import{a as f}from"./shared-api.D5_fnN32.js";import{P as V}from"./PageHeader.Di3JTPjc.js";import{_ as q}from"./index.js";import{u as U}from"./vendor-naive.BuHWlEgf.js";import"./vendor-misc.1adHN6i_.js";const z={class:"aksrt-page-container"},H={class:"aksrt-tools-output"},M={__name:"ToolsImportExport",setup(W){const b=A(),s=U(),m=u(!1),i=u(!1),y=u(!1),g=u(!1),v=u(""),d=u(""),k=u("global"),N=[{label:"全局&功能",value:"global"},{label:"页面&显示",value:"page_display"},{label:"文章&列表",value:"post_list"},{label:"用户&互动",value:"users"},{label:"支付&付费",value:"payment"}];function w(e){b.push(e)}function C(e){return(e==null?void 0:e.data)??e??{}}function S(){try{return JSON.parse(v.value||"{}")}catch{throw new Error("导入 JSON 格式无效")}}async function O(){m.value=!0;try{const e=C(await f.exportSettings());v.value=JSON.stringify(e,null,2),d.value=`导出完成
版本: ${e.version||"unknown"}
时间: ${e.exported||"unknown"}`,s.success("导出成功")}catch(e){s.error(e.message||"导出失败")}finally{m.value=!1}}async function J(){i.value=!0;try{const e=S(),t=await f.importSettings({...e,dry_run:!0});d.value=JSON.stringify(t,null,2),s.success("Dry Run 校验完成")}catch(e){s.error(e.message||"校验失败")}finally{i.value=!1}}async function R(){i.value=!0;try{const e=S(),t=await f.importSettings(e);d.value=JSON.stringify(t,null,2),s.success("导入完成")}catch(e){s.error(e.message||"导入失败")}finally{i.value=!1}}async function D(){y.value=!0;try{const e=await f.resetDomain(k.value);d.value=JSON.stringify(e,null,2),s.success("域设置已重置")}catch(e){s.error(e.message||"重置失败")}finally{y.value=!1}}async function E(){if(window.confirm("确认重置全部 schema 托管设置吗?系统会先自动创建一份“重置全部前快照”。")){g.value=!0;try{const e=await f.resetAllSettings();d.value=JSON.stringify(e,null,2),s.success("全部设置已重置")}catch(e){s.error(e.message||"重置全部失败")}finally{g.value=!1}}}return(e,t)=>{const o=c("n-button"),x=c("n-space"),T=c("n-input"),_=c("n-card"),I=c("n-select");return B(),$("div",z,[a(V,{title:"导入导出",desc:"导出当前设置快照、执行 dry-run 导入校验,并支持按域重置到 schema 默认值。"},{actions:l(()=>[a(x,null,{default:l(()=>[a(o,{quaternary:"",onClick:t[0]||(t[0]=p=>w("/tools/backup"))},{default:l(()=>[...t[4]||(t[4]=[r("数据备份",-1)])]),_:1}),a(o,{quaternary:"",onClick:t[1]||(t[1]=p=>w("/tools/health"))},{default:l(()=>[...t[5]||(t[5]=[r("健康检查",-1)])]),_:1})]),_:1})]),_:1}),a(_,{class:"aksrt-section-card"},{default:l(()=>[t[9]||(t[9]=n("div",{class:"aksrt-section-header"},[n("h3",null,"导出与导入")],-1)),a(x,{style:{"margin-bottom":"16px"}},{default:l(()=>[a(o,{loading:m.value,onClick:O},{default:l(()=>[...t[6]||(t[6]=[r("导出当前配置",-1)])]),_:1},8,["loading"]),a(o,{loading:i.value,onClick:J},{default:l(()=>[...t[7]||(t[7]=[r("Dry Run 校验",-1)])]),_:1},8,["loading"]),a(o,{type:"primary",loading:i.value,onClick:R},{default:l(()=>[...t[8]||(t[8]=[r("执行导入",-1)])]),_:1},8,["loading"])]),_:1}),a(T,{value:v.value,"onUpdate:value":t[2]||(t[2]=p=>v.value=p),type:"textarea",autosize:{minRows:12,maxRows:20},placeholder:"导出的 JSON 会出现在这里,也可以直接粘贴导入。"},null,8,["value"]),t[10]||(t[10]=n("p",{class:"aksrt-tools-hint"}," 正式导入前会自动创建一份“导入前自动快照”,与“数据备份”页的快照体系共用,便于回滚。 ",-1))]),_:1}),a(_,{class:"aksrt-section-card"},{default:l(()=>[t[13]||(t[13]=n("div",{class:"aksrt-section-header"},[n("h3",null,"按域重置")],-1)),a(x,{align:"center",wrap:""},{default:l(()=>[a(I,{value:k.value,"onUpdate:value":t[3]||(t[3]=p=>k.value=p),options:N,style:{width:"220px"}},null,8,["value"]),a(o,{loading:y.value,onClick:D},{default:l(()=>[...t[11]||(t[11]=[r("重置所选域",-1)])]),_:1},8,["loading"]),a(o,{type:"error",tertiary:"",loading:g.value,onClick:E},{default:l(()=>[...t[12]||(t[12]=[r("重置全部",-1)])]),_:1},8,["loading"])]),_:1}),t[14]||(t[14]=n("p",{class:"aksrt-tools-hint"},"仅支持重置 schema 托管的业务域。健康检查、迁移状态和邮件回滚属于运维面板,不参与按域回滚。",-1))]),_:1}),a(_,{class:"aksrt-section-card"},{default:l(()=>[t[15]||(t[15]=n("div",{class:"aksrt-section-header"},[n("h3",null,"最近结果")],-1)),n("pre",H,P(d.value||"尚未执行操作。"),1)]),_:1})])}}},G=q(M,[["__scopeId","data-v-9ee419ed"]]);export{G as default};
+1
View File
@@ -0,0 +1 @@
.aksrt-tools-output[data-v-9ee419ed]{margin:0;padding:14px;border-radius:12px;background:#101828;color:#d0d7e2;font-size:12px;line-height:1.7;white-space:pre-wrap;word-break:break-word}.aksrt-tools-hint[data-v-9ee419ed]{margin:12px 0 0;color:#667085;font-size:12px;line-height:1.7}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.aksrt-update__changelog[data-v-8fad1124]{margin-top:16px}.aksrt-update__changelog pre[data-v-8fad1124]{margin:8px 0 0;padding:12px 14px;border-radius:12px;background:#101828;color:#d0d7e2;font-size:12px;line-height:1.7;white-space:pre-wrap;word-break:break-word}.aksrt-update__grid[data-v-8fad1124]{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}.aksrt-update__guide[data-v-8fad1124]{display:flex;flex-direction:column;gap:4px;padding:14px;border:1px solid #eef1f6;border-radius:12px;text-decoration:none;color:inherit;background:#fafafa}.aksrt-update__guide[data-v-8fad1124]:hover{border-color:#1890ff;background:#f5faff}.aksrt-update__guide span[data-v-8fad1124]{font-size:12px;color:#667085}
@@ -0,0 +1,4 @@
import{o as E,X as H,a4 as t,a3 as n,r as N,a1 as l,e as S,_ as T,W as v,f as d,Y as u,Z as _,a2 as P,a5 as R,c as W}from"./vendor-vue.Bykizn0M.js";import{a as k}from"./shared-api.D5_fnN32.js";import{P as X}from"./PageHeader.Di3JTPjc.js";import{u as Y}from"./vendor-naive.BuHWlEgf.js";import"./index.js";import"./vendor-misc.1adHN6i_.js";const Z={class:"aksrt-page-container"},j={class:"aksrt-form-actions"},O={__name:"UsersBadge",setup(A){const U=T(),m=Y(),g=N(!0),p=N(!1),a=S({user_badge_enabled:!1,user_badge_public_display:!0,user_badge_limit:3,user_badge_dictionary:`founder|创始成员|warning
staff|站务团队|info`}),y=S({dynamicBadge:!1}),h=W(()=>String(a.user_badge_dictionary||"").split(/\r?\n/).map(s=>s.trim()).filter(Boolean).length);function w(s){U.push(s)}function x(s){return(s==null?void 0:s.data)??s??{}}async function D(){g.value=!0;try{const[s,e]=await Promise.all([k.getSchemaPage("users","badge"),k.getNotificationSettings()]),o=x(s),c=x(e);a.user_badge_enabled=!!o.user_badge_enabled,a.user_badge_public_display=o.user_badge_public_display!==!1,a.user_badge_limit=Number(o.user_badge_limit||3),a.user_badge_dictionary=o.user_badge_dictionary||`founder|创始成员|warning
staff|站务团队|info`,y.dynamicBadge=!!c.user_badge_enabled}catch(s){m.error(s.message||"加载用户徽章配置失败")}finally{g.value=!1}}async function V(){p.value=!0;try{await k.saveSchemaPage("users","badge",{user_badge_enabled:a.user_badge_enabled,user_badge_public_display:a.user_badge_public_display,user_badge_limit:Number(a.user_badge_limit||3),user_badge_dictionary:a.user_badge_dictionary}),m.success("用户徽章配置已保存")}catch(s){m.error(s.message||"保存失败")}finally{p.value=!1}}return E(D),(s,e)=>{const o=l("n-button"),c=l("n-space"),i=l("n-tag"),b=l("n-card"),B=l("n-switch"),f=l("n-form-item"),q=l("n-input-number"),C=l("n-form"),M=l("n-input"),$=l("n-alert"),z=l("n-spin");return v(),H("div",Z,[t(X,{title:"用户徽章",desc:"维护公开徽章字典、展示数量和前台展示位。具体授予逻辑可以后续再接业务,但字段和展示契约已经固定。"},{actions:n(()=>[t(c,null,{default:n(()=>[t(o,{quaternary:"",onClick:e[0]||(e[0]=r=>w("/users/notifications"))},{default:n(()=>[...e[6]||(e[6]=[d("消息通知",-1)])]),_:1}),t(o,{quaternary:"",onClick:e[1]||(e[1]=r=>w("/users/level"))},{default:n(()=>[...e[7]||(e[7]=[d("用户等级",-1)])]),_:1})]),_:1})]),_:1}),t(z,{show:g.value,style:{width:"100%","min-height":"200px"}},{default:n(()=>[t(b,{class:"aksrt-section-card"},{default:n(()=>[e[8]||(e[8]=u("div",{class:"aksrt-section-header"},[u("h3",null,"当前联动摘要")],-1)),t(c,null,{default:n(()=>[t(i,{round:"",type:a.user_badge_enabled?"success":"default"},{default:n(()=>[d(" 徽章系统:"+_(a.user_badge_enabled?"已启用":"已关闭"),1)]),_:1},8,["type"]),t(i,{round:"",type:a.user_badge_public_display?"info":"default"},{default:n(()=>[d(" 公开展示:"+_(a.user_badge_public_display?"开启":"关闭"),1)]),_:1},8,["type"]),t(i,{round:"",type:"info"},{default:n(()=>[d(" 最多显示:"+_(a.user_badge_limit)+" 枚 ",1)]),_:1}),t(i,{round:"",type:y.dynamicBadge?"success":"default"},{default:n(()=>[d(" 通知红点联动:"+_(y.dynamicBadge?"启用":"关闭"),1)]),_:1},8,["type"]),t(i,{round:"",type:"info"},{default:n(()=>[d(" 字典条目:"+_(h.value),1)]),_:1})]),_:1})]),_:1}),t(b,{class:"aksrt-section-card"},{default:n(()=>[e[9]||(e[9]=u("div",{class:"aksrt-section-header"},[u("h3",null,"徽章展示")],-1)),t(C,{model:a,"label-placement":"left","label-width":"180",class:"aksrt-form"},{default:n(()=>[t(f,{label:"启用徽章系统"},{default:n(()=>[t(B,{value:a.user_badge_enabled,"onUpdate:value":e[2]||(e[2]=r=>a.user_badge_enabled=r)},null,8,["value"])]),_:1}),a.user_badge_enabled?(v(),P(f,{key:0,label:"公开页显示徽章"},{default:n(()=>[t(B,{value:a.user_badge_public_display,"onUpdate:value":e[3]||(e[3]=r=>a.user_badge_public_display=r)},null,8,["value"])]),_:1})):R("",!0),a.user_badge_enabled?(v(),P(f,{key:1,label:"最多显示数量"},{default:n(()=>[t(q,{value:a.user_badge_limit,"onUpdate:value":e[4]||(e[4]=r=>a.user_badge_limit=r),min:1,max:8,style:{width:"180px"}},null,8,["value"])]),_:1})):R("",!0)]),_:1},8,["model"])]),_:1}),t(b,{class:"aksrt-section-card"},{default:n(()=>[e[11]||(e[11]=u("div",{class:"aksrt-section-header"},[u("h3",null,"徽章字典")],-1)),t(C,{model:a,"label-placement":"left","label-width":"180",class:"aksrt-form"},{default:n(()=>[t(f,{label:"徽章列表"},{feedback:n(()=>[...e[10]||(e[10]=[u("span",{class:"aksrt-hint-text"},"每行一个徽章,格式 `slug|显示文案|色调`,色调支持 `neutral / info / success / warning / brand`。",-1)])]),default:n(()=>[t(M,{value:a.user_badge_dictionary,"onUpdate:value":e[5]||(e[5]=r=>a.user_badge_dictionary=r),type:"textarea",autosize:{minRows:5,maxRows:10},placeholder:`founder|创始成员|warning
staff|站务团队|info`,disabled:!a.user_badge_enabled},null,8,["value","disabled"])]),_:1})]),_:1},8,["model"])]),_:1}),t(b,{class:"aksrt-section-card"},{default:n(()=>[t($,{type:"info","show-icon":!1},{default:n(()=>[...e[12]||(e[12]=[d(" 前台从 `aksrt_user_badges` user meta 读取已授予徽章列表,并在公开主页和本人中心头部展示。这里只负责定义合法徽章字典和展示上限。 ",-1)])]),_:1})]),_:1}),u("div",j,[t(o,{type:"primary",loading:p.value,onClick:V},{default:n(()=>[...e[13]||(e[13]=[d("保存配置",-1)])]),_:1},8,["loading"])])]),_:1},8,["show"])])}}};export{O as default};
File diff suppressed because one or more lines are too long
+10
View File
@@ -0,0 +1,10 @@
import{o as E,X as H,a4 as s,a3 as a,r as U,a1 as r,e as B,_ as T,W as g,f as u,Y as _,Z as p,a2 as M,a5 as P,c as W}from"./vendor-vue.Bykizn0M.js";import{a as k}from"./shared-api.D5_fnN32.js";import{P as X}from"./PageHeader.Di3JTPjc.js";import{u as Y}from"./vendor-naive.BuHWlEgf.js";import"./index.js";import"./vendor-misc.1adHN6i_.js";const Z={class:"aksrt-page-container"},j={class:"aksrt-form-actions"},Q={__name:"UsersLevel",setup(A){const R=T(),m=Y(),b=U(!0),y=U(!1),l=B({user_level_enabled:!1,user_level_public_display:!0,user_level_source:"credits_balance",user_level_prefix:"Lv.",user_level_thresholds:`1|0
2|30
3|100
4|300`}),i=B({enabled:!0,currencyName:"积分"}),D=W(()=>String(l.user_level_thresholds||"").split(/\r?\n/).map(t=>t.trim()).filter(Boolean).length);function h(t){R.push(t)}function x(t){return(t==null?void 0:t.data)??t??{}}async function L(){b.value=!0;try{const[t,e]=await Promise.all([k.getSchemaPage("users","level"),k.getCreditSettings()]),o=x(t),d=x(e);l.user_level_enabled=!!o.user_level_enabled,l.user_level_public_display=o.user_level_public_display!==!1,l.user_level_source=o.user_level_source||"credits_balance",l.user_level_prefix=o.user_level_prefix||"Lv.",l.user_level_thresholds=o.user_level_thresholds||`1|0
2|30
3|100
4|300`,i.enabled=d.enabled!==!1,i.currencyName=d.currency_name||"积分"}catch(t){m.error(t.message||"加载用户等级配置失败")}finally{b.value=!1}}async function V(){y.value=!0;try{await k.saveSchemaPage("users","level",{user_level_enabled:l.user_level_enabled,user_level_public_display:l.user_level_public_display,user_level_source:l.user_level_source,user_level_prefix:l.user_level_prefix,user_level_thresholds:l.user_level_thresholds}),m.success("用户等级配置已保存")}catch(t){m.error(t.message||"保存失败")}finally{y.value=!1}}return E(L),(t,e)=>{const o=r("n-button"),d=r("n-space"),v=r("n-tag"),f=r("n-card"),w=r("n-switch"),c=r("n-form-item"),C=r("n-input"),N=r("n-form"),S=r("n-radio"),q=r("n-radio-group"),z=r("n-alert"),$=r("n-spin");return g(),H("div",Z,[s(X,{title:"用户等级",desc:"配置等级来源、展示前缀和阈值规则。前台公开主页会按照这里的规则输出等级身份芯片。"},{actions:a(()=>[s(d,null,{default:a(()=>[s(o,{quaternary:"",onClick:e[0]||(e[0]=n=>h("/users/credits"))},{default:a(()=>[...e[7]||(e[7]=[u("用户积分",-1)])]),_:1}),s(o,{quaternary:"",onClick:e[1]||(e[1]=n=>h("/users/badge"))},{default:a(()=>[...e[8]||(e[8]=[u("用户徽章",-1)])]),_:1})]),_:1})]),_:1}),s($,{show:b.value,style:{width:"100%","min-height":"200px"}},{default:a(()=>[s(f,{class:"aksrt-section-card"},{default:a(()=>[e[9]||(e[9]=_("div",{class:"aksrt-section-header"},[_("h3",null,"当前联动摘要")],-1)),s(d,null,{default:a(()=>[s(v,{round:"",type:l.user_level_enabled?"success":"default"},{default:a(()=>[u(" 等级系统:"+p(l.user_level_enabled?"已启用":"已关闭"),1)]),_:1},8,["type"]),s(v,{round:"",type:i.enabled?"info":"warning"},{default:a(()=>[u(" 积分系统:"+p(i.enabled?"已启用":"未启用"),1)]),_:1},8,["type"]),s(v,{round:"",type:"info"},{default:a(()=>[u(" 当前货币:"+p(i.currencyName),1)]),_:1}),s(v,{round:"",type:l.user_level_source==="credits_balance"?"success":"warning"},{default:a(()=>[u(" 来源:"+p(l.user_level_source==="credits_balance"?"积分余额":"手动 Meta"),1)]),_:1},8,["type"]),s(v,{round:"",type:"info"},{default:a(()=>[u(" 阈值条目:"+p(D.value),1)]),_:1})]),_:1})]),_:1}),s(f,{class:"aksrt-section-card"},{default:a(()=>[e[10]||(e[10]=_("div",{class:"aksrt-section-header"},[_("h3",null,"等级显示")],-1)),s(N,{model:l,"label-placement":"left","label-width":"180",class:"aksrt-form"},{default:a(()=>[s(c,{label:"启用等级系统"},{default:a(()=>[s(w,{value:l.user_level_enabled,"onUpdate:value":e[2]||(e[2]=n=>l.user_level_enabled=n)},null,8,["value"])]),_:1}),l.user_level_enabled?(g(),M(c,{key:0,label:"公开页显示等级"},{default:a(()=>[s(w,{value:l.user_level_public_display,"onUpdate:value":e[3]||(e[3]=n=>l.user_level_public_display=n)},null,8,["value"])]),_:1})):P("",!0),l.user_level_enabled?(g(),M(c,{key:1,label:"等级前缀"},{default:a(()=>[s(C,{value:l.user_level_prefix,"onUpdate:value":e[4]||(e[4]=n=>l.user_level_prefix=n),maxlength:"12",placeholder:"Lv."},null,8,["value"])]),_:1})):P("",!0)]),_:1},8,["model"])]),_:1}),s(f,{class:"aksrt-section-card"},{default:a(()=>[e[14]||(e[14]=_("div",{class:"aksrt-section-header"},[_("h3",null,"等级规则")],-1)),s(N,{model:l,"label-placement":"left","label-width":"180",class:"aksrt-form"},{default:a(()=>[s(c,{label:"等级来源"},{default:a(()=>[s(q,{value:l.user_level_source,"onUpdate:value":e[5]||(e[5]=n=>l.user_level_source=n),disabled:!l.user_level_enabled},{default:a(()=>[s(d,{size:"large"},{default:a(()=>[s(S,{value:"credits_balance"},{default:a(()=>[...e[11]||(e[11]=[u("积分余额",-1)])]),_:1}),s(S,{value:"manual_meta"},{default:a(()=>[...e[12]||(e[12]=[u("手动 Meta",-1)])]),_:1})]),_:1})]),_:1},8,["value","disabled"])]),_:1}),s(c,{label:"等级阈值"},{feedback:a(()=>[...e[13]||(e[13]=[_("span",{class:"aksrt-hint-text"},"每行一个等级,格式 `等级|所需积分`。手动 Meta 模式下仍建议保留完整字典,方便后续切换回自动计算。",-1)])]),default:a(()=>[s(C,{value:l.user_level_thresholds,"onUpdate:value":e[6]||(e[6]=n=>l.user_level_thresholds=n),type:"textarea",autosize:{minRows:5,maxRows:10},placeholder:`1|0
2|30
3|100
4|300`,disabled:!l.user_level_enabled},null,8,["value","disabled"])]),_:1})]),_:1},8,["model"])]),_:1}),s(f,{class:"aksrt-section-card"},{default:a(()=>[s(z,{type:"info","show-icon":!1},{default:a(()=>[...e[15]||(e[15]=[u(" 手动模式读取 `aksrt_user_level` user meta;自动模式则根据当前积分余额和上方阈值表实时计算等级,不需要单独写库。 ",-1)])]),_:1})]),_:1}),_("div",j,[s(o,{type:"primary",loading:y.value,onClick:V},{default:a(()=>[...e[16]||(e[16]=[u("保存配置",-1)])]),_:1},8,["loading"])])]),_:1},8,["show"])])}}};export{Q as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.aksrt-verify-drawer__section[data-v-84e367b4]{margin-top:20px}.aksrt-verify-drawer__title[data-v-84e367b4]{margin-bottom:10px;font-size:14px;font-weight:600;color:#1f2937}.aksrt-verify-drawer__timeline[data-v-84e367b4]{display:grid;gap:12px}.aksrt-verify-drawer__timeline-item[data-v-84e367b4]{padding:12px;border:1px solid #e5e7eb;border-radius:12px;background:#f8fafc}.aksrt-verify-drawer__timeline-head[data-v-84e367b4]{display:flex;justify-content:space-between;gap:12px;margin-bottom:6px}.aksrt-verify-drawer__timeline-item p[data-v-84e367b4]{margin:0 0 6px;color:#111827;white-space:pre-wrap}.aksrt-verify-drawer__timeline-item small[data-v-84e367b4]{color:#6b7280}.aksrt-verify-page__card[data-v-96c64f9f]{margin-top:16px}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.aksrt-wechat__status[data-v-cb377b9c]{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:24px}.aksrt-wechat__status-card[data-v-cb377b9c]{display:flex;align-items:center;gap:12px;padding:16px;background:#fff;border-radius:8px;border:1px solid #e8e8e8}.aksrt-wechat__status-icon[data-v-cb377b9c]{width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px}.aksrt-wechat__status-icon--ok[data-v-cb377b9c]{background:#d4edda;color:#155724}.aksrt-wechat__status-icon--warn[data-v-cb377b9c]{background:#fff3cd;color:#856404}.aksrt-wechat__status-icon--info[data-v-cb377b9c]{background:#d1ecf1;color:#0c5460}.aksrt-wechat__status-value[data-v-cb377b9c]{font-size:18px;font-weight:600;color:#1a1a2e}.aksrt-wechat__status-label[data-v-cb377b9c]{font-size:12px;color:#888}.aksrt-wechat__form-card[data-v-cb377b9c]{background:#fff;border:1px solid #e8e8e8;border-radius:8px;padding:24px;margin-bottom:16px}.aksrt-wechat__form-card h3[data-v-cb377b9c]{margin:0 0 16px;font-size:16px;font-weight:600}.aksrt-form-hint[data-v-cb377b9c]{font-size:12px;color:#888;margin-top:4px}
File diff suppressed because one or more lines are too long
+16
View File
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AKSRT 主题设置</title>
<script type="module" crossorigin src="./index.js"></script>
<link rel="modulepreload" crossorigin href="./vendor-vue.Bykizn0M.js">
<link rel="modulepreload" crossorigin href="./vendor-misc.1adHN6i_.js">
<link rel="modulepreload" crossorigin href="./vendor-naive.BuHWlEgf.js">
<link rel="stylesheet" crossorigin href="./index.css">
</head>
<body>
<div id="aksrt-admin-app"></div>
</body>
</html>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
function c(n={}){var r;const o=(r=window.wp)==null?void 0:r.media;if(!o)throw new Error("当前后台未加载 WordPress 媒体库。");const e=o({title:n.title||"选择图片",button:{text:n.buttonText||"使用此图片"},library:{type:n.type||"image"},multiple:!1});return new Promise((i,s)=>{e.on("select",()=>{var l;const t=(l=e.state().get("selection").first())==null?void 0:l.toJSON();if(!(t!=null&&t.url)){s(new Error("未选择有效的媒体资源。"));return}i(t)}),e.on("close",()=>{e.state().get("selection").length>0||i(null)}),e.open()})}export{c as o};
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -57
View File
@@ -1,33 +1,12 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
import { renderFaIcon, schemaPage } from './helpers'
// Forum SPA = config only. Ops moved to native CPT menus (Phase 4).
export const forumSection = {
key: 'forum',
label: '社区&论坛',
icon: renderFaIcon('fas fa-comments'),
route: '/forum',
children: [
customPage({
key: 'forum-boards',
name: 'ForumBoards',
label: '板块管理',
route: '/forum/boards',
component: 'ForumBoards',
title: '板块管理',
desc: '创建、编辑和排序论坛板块。',
canonicalDomain: 'forum',
section: 'boards',
}),
customPage({
key: 'forum-topics',
name: 'ForumTopics',
label: '主题治理',
route: '/forum/topics',
component: 'ForumTopics',
title: '主题治理',
desc: '集中处理主题审核、可见性、版块移动和治理状态。',
canonicalDomain: 'forum',
section: 'topics',
}),
schemaPage({
key: 'forum-settings-basic',
name: 'ForumSettingsBasic',
@@ -128,39 +107,5 @@ export const forumSection = {
canonicalDomain: 'forum',
section: 'credits',
}),
customPage({
key: 'forum-moderator-applications',
name: 'ForumModeratorApplications',
label: '版主申请',
route: '/forum/moderator-applications',
component: 'ForumModeratorApplications',
title: '版主申请',
desc: '处理前台版主申请和审核结果反馈。',
canonicalDomain: 'forum',
section: 'moderator-applications',
}),
customPage({
key: 'forum-moderators',
name: 'ForumModerators',
label: '版主管理',
route: '/forum/moderators',
component: 'ForumModerators',
title: '版主管理',
desc: '为每个论坛版块分配和管理版主。',
canonicalDomain: 'forum',
section: 'moderators',
}),
customPage({
key: 'forum-dashboard',
name: 'ForumDashboard',
label: '论坛概览',
route: '/forum/dashboard',
component: 'ForumDashboard',
title: '论坛概览',
desc: '社区讨论、帖子管理、版块配置等论坛功能概览。',
canonicalDomain: 'forum',
section: 'dashboard',
secondaryEntry: true,
}),
],
}
+2 -2
View File
@@ -18,8 +18,8 @@ const SECTION_DEFAULT_CHILDREN = {
permissions: 'permissions-comment',
users: 'users-auth',
payment: 'payment-paid',
shop: 'shop-products',
forum: 'forum-boards',
shop: 'shop-basic',
forum: 'forum-settings-basic',
extensions: 'extensions-ip',
tools: 'tools-import-export',
'theme-info': 'theme-info-dashboard',
+3 -39
View File
@@ -60,18 +60,6 @@ export const paymentSection = {
canonicalDomain: 'payment',
section: 'order',
}),
customPage({
key: 'payment-revenue',
name: 'PaymentRevenue',
label: '创作分成',
route: '/payment/revenue',
component: 'PaymentRevenue',
status: 'available',
title: '创作分成',
desc: '创作者收益分配和结算记录。',
canonicalDomain: 'payment',
section: 'revenue',
}),
schemaPage({
key: 'payment-affiliate',
name: 'PaymentAffiliate',
@@ -79,22 +67,10 @@ export const paymentSection = {
route: '/payment/affiliate',
status: 'available',
title: '推广返佣',
desc: '返佣规则、邀请链路和结算记录。',
desc: '返佣规则、邀请链路和结算策略(返佣工单在支付中心)。',
canonicalDomain: 'payment',
section: 'affiliate',
}),
customPage({
key: 'payment-charge-card',
name: 'PaymentChargeCard',
label: '充值卡',
route: '/payment/charge-card',
component: 'PaymentChargeCard',
status: 'available',
title: '充值卡',
desc: '创建和管理充值卡。',
canonicalDomain: 'payment',
section: 'charge-card',
}),
schemaPage({
key: 'payment-card-pass',
name: 'PaymentCardPass',
@@ -102,7 +78,7 @@ export const paymentSection = {
route: '/payment/card-pass',
status: 'available',
title: '卡密设置',
desc: '充值卡类型、卡号规则与兑换文案。',
desc: '充值卡类型、卡号规则与兑换文案(卡密工单在支付中心)。',
canonicalDomain: 'payment',
section: 'card-pass',
}),
@@ -113,21 +89,9 @@ export const paymentSection = {
route: '/payment/withdrawal',
status: 'available',
title: '提现策略',
desc: '最低提现、手续费与说明文案(提现工单在商城提现管理)。',
desc: '最低提现、手续费与说明文案(提现工单在支付中心)。',
canonicalDomain: 'payment',
section: 'withdrawal',
}),
customPage({
key: 'payment-rebate',
name: 'PaymentRebate',
label: '返佣管理',
route: '/payment/rebate',
component: 'PaymentRebate',
status: 'available',
title: '返佣管理',
desc: '管理订单返佣和推广返佣记录。',
canonicalDomain: 'payment',
section: 'rebate',
}),
],
}
+2 -79
View File
@@ -1,33 +1,12 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
import { renderFaIcon, schemaPage } from './helpers'
// Shop SPA = config only. Ops moved to native WP menus (Phase 4).
export const shopSection = {
key: 'shop',
label: '商城&商品',
icon: renderFaIcon('fas fa-shopping-cart'),
route: '/shop',
children: [
customPage({
key: 'shop-products',
name: 'ShopProducts',
label: '商品管理',
route: '/shop/products',
component: 'ShopProducts',
title: '商品管理',
desc: '管理所有商品的上架、编辑和库存。',
canonicalDomain: 'shop',
section: 'products',
}),
customPage({
key: 'shop-orders',
name: 'ShopOrders',
label: '订单管理',
route: '/shop/orders',
component: 'ShopOrders',
title: '订单管理',
desc: '查看和管理所有交易订单。',
canonicalDomain: 'shop',
section: 'orders',
}),
schemaPage({
key: 'shop-basic',
name: 'ShopBasic',
@@ -78,28 +57,6 @@ export const shopSection = {
canonicalDomain: 'shop',
section: 'contact',
}),
customPage({
key: 'shop-after-sale',
name: 'ShopAfterSale',
label: '售后管理',
route: '/shop/after-sale',
component: 'ShopAfterSale',
title: '售后管理',
desc: '管理退款、换货等售后工单。',
canonicalDomain: 'shop',
section: 'after-sale',
}),
customPage({
key: 'shop-shipping',
name: 'ShopShipping',
label: '物流管理',
route: '/shop/shipping',
component: 'ShopShipping',
title: '物流管理',
desc: '管理订单发货、物流单号和发货状态。',
canonicalDomain: 'shop',
section: 'shipping',
}),
schemaPage({
key: 'shop-shipping-config',
name: 'ShopShippingConfig',
@@ -120,39 +77,5 @@ export const shopSection = {
canonicalDomain: 'shop',
section: 'timing',
}),
customPage({
key: 'shop-coupons',
name: 'ShopCoupons',
label: '优惠券',
route: '/shop/coupons',
component: 'ShopCoupons',
title: '优惠券',
desc: '创建和管理优惠券。',
canonicalDomain: 'shop',
section: 'coupons',
}),
customPage({
key: 'shop-withdrawals',
name: 'ShopWithdrawals',
label: '提现管理',
route: '/shop/withdrawals',
component: 'ShopWithdrawals',
title: '提现管理',
desc: '审核和管理创作者提现申请。',
canonicalDomain: 'shop',
section: 'withdrawals',
}),
customPage({
key: 'shop-dashboard',
name: 'ShopDashboard',
label: '商城概览',
route: '/shop/dashboard',
component: 'ShopDashboard',
title: '商城概览',
desc: '商品管理、订单系统、库存管理等电商功能概览。',
canonicalDomain: 'shop',
section: 'dashboard',
secondaryEntry: true,
}),
],
}
+5 -48
View File
@@ -1,5 +1,9 @@
import { renderFaIcon, schemaPage, customPage } from './helpers'
/**
* Users SPA keeps config-shaped pages.
* Message / invite / ban / report queues live under users.php native menus.
*/
export const usersSection = {
key: 'users',
label: '用户&互动',
@@ -67,7 +71,7 @@ export const usersSection = {
component: 'UsersVerify',
status: 'available',
title: '身份认证',
desc: '身份认证字段、审核流和展示标签。',
desc: '身份认证字段与展示配置(审核队列在 用户 → 身份认证)。',
canonicalDomain: 'users',
section: 'verify',
}),
@@ -105,53 +109,6 @@ export const usersSection = {
canonicalDomain: 'users',
section: 'notifications',
}),
customPage({
key: 'users-messages',
name: 'UsersMessages',
label: '消息中心',
route: '/users/messages',
component: 'UsersMessages',
status: 'available',
title: '消息中心',
desc: '管理站内通知、系统消息和用户私信记录。',
canonicalDomain: 'users',
section: 'messages',
}),
customPage({
key: 'users-invite-codes',
name: 'UsersInviteCodes',
label: '邀请码运营',
route: '/users/invite-codes',
component: 'UsersInviteCodes',
title: '邀请码运营',
desc: '管理邀请码列表、生成新邀请码和查看邀请统计。',
canonicalDomain: 'users',
section: 'invite-codes',
}),
customPage({
key: 'users-ban',
name: 'UsersBan',
label: '禁封管理',
route: '/users/ban',
component: 'UsersBan',
status: 'available',
title: '禁封管理',
desc: '查看和管理用户封禁、限制状态。',
canonicalDomain: 'users',
section: 'ban',
}),
customPage({
key: 'users-report',
name: 'UsersReport',
label: '禁封/举报',
route: '/users/report',
component: 'UsersReport',
status: 'available',
title: '禁封/举报',
desc: '举报受理与用户限制状态管理。',
canonicalDomain: 'users',
section: 'report',
}),
schemaPage({
key: 'users-sms',
name: 'UsersSms',
@@ -0,0 +1,57 @@
<template>
<div class="aks-native-ops-redirect">
<h2>{{ title }}</h2>
<p class="desc">
此运营功能已迁移到 WordPress 原生后台侧栏(对齐 zibll)。正在跳转…
</p>
<p v-if="nativeUrl">
<a class="button button-primary" :href="nativeUrl">立即打开原生页面</a>
</p>
<p v-else class="desc">未配置原生跳转地址,请从左侧 WP 菜单进入。</p>
</div>
</template>
<script setup>
import { computed, onMounted } from 'vue'
import { useRoute } from 'vue-router'
const route = useRoute()
const title = computed(() => route.meta?.title || '运营功能已迁移')
const nativeUrl = computed(() => {
const path = route.meta?.nativeAdminPath || ''
if (!path) return ''
const base = (window.aksrtAdminData?.adminUrl || '/wp-admin/').replace(/\/?$/, '/')
return base + path.replace(/^\//, '')
})
onMounted(() => {
if (nativeUrl.value) {
window.location.replace(nativeUrl.value)
}
})
</script>
<style scoped>
.aks-native-ops-redirect {
max-width: 640px;
margin: 48px auto;
padding: 24px;
background: var(--aks-surface, #fff);
border-radius: 8px;
border: 1px solid var(--aks-border, #e5e7eb);
}
.desc {
color: #646970;
line-height: 1.6;
}
.button {
display: inline-block;
margin-top: 8px;
padding: 8px 14px;
background: #2271b1;
color: #fff;
border-radius: 4px;
text-decoration: none;
}
</style>
@@ -1,6 +1,7 @@
export const corePageLoaders = {
SchemaPage: () => import('@/pages/SchemaPage.vue'),
DeferredPage: () => import('@/components/DeferredPage.vue'),
NativeOpsRedirect: () => import('@/pages/placeholder/NativeOpsRedirect.vue'),
FloatingButtonsSettings: () => import('@/pages/content/FloatingButtonsSettings.vue'),
FooterTabbarSettings: () => import('@/pages/content/FooterTabbarSettings.vue'),
FooterSettings: () => import('@/pages/content/FooterSettings.vue'),
@@ -1,7 +1,2 @@
export const forumPageLoaders = {
ForumDashboard: () => import('@/pages/forum/ForumDashboard.vue'),
ForumBoards: () => import('@/pages/forum/ForumBoards.vue'),
ForumTopics: () => import('@/pages/forum/ForumTopics.vue'),
ForumModerators: () => import('@/pages/forum/ForumModerators.vue'),
ForumModeratorApplications: () => import('@/pages/forum/ForumModeratorApplications.vue'),
}
// Forum ops Vue pages removed (Phase 4). Config uses SchemaPage.
export const forumPageLoaders = {}
@@ -1,6 +1,3 @@
export const paymentPageLoaders = {
PaymentRevenue: () => import('@/pages/payment/PaymentRevenue.vue'),
PaymentGateway: () => import('@/pages/payment/PaymentGateway.vue'),
PaymentChargeCard: () => import('@/pages/payment/PaymentChargeCard.vue'),
PaymentRebate: () => import('@/pages/payment/PaymentRebate.vue'),
}
@@ -1,9 +1,2 @@
export const shopPageLoaders = {
ShopDashboard: () => import('@/pages/shop/ShopDashboard.vue'),
ShopProducts: () => import('@/pages/shop/ShopProducts.vue'),
ShopOrders: () => import('@/pages/shop/ShopOrders.vue'),
ShopWithdrawals: () => import('@/pages/shop/ShopWithdrawals.vue'),
ShopCoupons: () => import('@/pages/shop/ShopCoupons.vue'),
ShopAfterSale: () => import('@/pages/shop/ShopAfterSale.vue'),
ShopShipping: () => import('@/pages/shop/ShopShipping.vue'),
}
// Shop ops Vue pages removed (Phase 4). Config uses SchemaPage.
export const shopPageLoaders = {}
@@ -1,12 +1,8 @@
export const usersPageLoaders = {
UsersFeatures: () => import('@/pages/users/UsersFeatures.vue'),
UsersSignin: () => import('@/pages/users/UsersSignin.vue'),
UsersInviteCodes: () => import('@/pages/users/UsersInviteCodes.vue'),
UsersVerify: () => import('@/pages/users/UsersVerify.vue'),
UsersLevel: () => import('@/pages/users/UsersLevel.vue'),
UsersBadge: () => import('@/pages/users/UsersBadge.vue'),
UsersReport: () => import('@/pages/users/UsersReport.vue'),
UsersMessages: () => import('@/pages/users/UsersMessages.vue'),
UsersBan: () => import('@/pages/users/UsersBan.vue'),
UsersWechatTemplate: () => import('@/pages/users/UsersWechatTemplate.vue'),
}
+36
View File
@@ -71,6 +71,32 @@ function createSectionRedirectRoutes() {
})
}
/**
* Old SPA ops routes → native WP admin pages (Phase 4 transition).
* Bookmarks under #/shop/products etc. land on NativeOpsRedirect.
*/
const NATIVE_OPS_REDIRECTS = [
{ path: '/shop/products', title: '商品管理', nativeAdminPath: 'edit.php?post_type=aksrt_product' },
{ path: '/shop/orders', title: '订单管理', nativeAdminPath: 'admin.php?page=aksrt_orders' },
{ path: '/shop/after-sale', title: '售后管理', nativeAdminPath: 'admin.php?page=aksrt_after_sale' },
{ path: '/shop/shipping', title: '物流管理', nativeAdminPath: 'admin.php?page=aksrt_shipping' },
{ path: '/shop/coupons', title: '优惠券', nativeAdminPath: 'admin.php?page=aksrt_coupons' },
{ path: '/shop/withdrawals', title: '提现管理', nativeAdminPath: 'admin.php?page=aksrt_withdraw' },
{ path: '/shop/dashboard', title: '商城概览', nativeAdminPath: 'admin.php?page=aksrt_pay' },
{ path: '/forum/boards', title: '板块管理', nativeAdminPath: 'edit.php?post_type=aksrt_forum_plate' },
{ path: '/forum/topics', title: '主题治理', nativeAdminPath: 'edit.php?post_type=aksrt_forum_topic' },
{ path: '/forum/moderators', title: '版主管理', nativeAdminPath: 'edit.php?post_type=aksrt_forum_plate' },
{ path: '/forum/moderator-applications', title: '版主申请', nativeAdminPath: 'edit.php?post_type=aksrt_forum_plate' },
{ path: '/forum/dashboard', title: '论坛概览', nativeAdminPath: 'edit.php?post_type=aksrt_forum_topic' },
{ path: '/payment/charge-card', title: '充值卡', nativeAdminPath: 'admin.php?page=aksrt_charge_cards' },
{ path: '/payment/revenue', title: '创作分成', nativeAdminPath: 'admin.php?page=aksrt_income' },
{ path: '/payment/rebate', title: '返佣管理', nativeAdminPath: 'admin.php?page=aksrt_rebate' },
{ path: '/users/messages', title: '消息中心', nativeAdminPath: 'users.php?page=aksrt_messages' },
{ path: '/users/invite-codes', title: '邀请码运营', nativeAdminPath: 'users.php?page=aksrt_invite_codes' },
{ path: '/users/ban', title: '禁封管理', nativeAdminPath: 'users.php?page=aksrt_user_ban&tab=restrictions' },
{ path: '/users/report', title: '禁封/举报', nativeAdminPath: 'users.php?page=aksrt_user_ban&tab=reports' },
]
const routes = [
{ path: '/', redirect: ADMIN_DEFAULT_ROUTE },
...createSectionRedirectRoutes(),
@@ -80,6 +106,16 @@ const routes = [
component: resolveComponent(page),
meta: createRouteMeta(page),
})),
...NATIVE_OPS_REDIRECTS.map((item) => ({
path: item.path,
name: `NativeRedirect_${item.path.replace(/\W+/g, '_')}`,
component: componentLoaders.NativeOpsRedirect,
meta: {
title: item.title,
nativeAdminPath: item.nativeAdminPath,
status: 'redirect',
},
})),
]
export default createRouter({
+1 -1
View File
@@ -98,7 +98,7 @@ Note: zibll「商品管理」`zibpay_product_page` is **paid article sales**, no
| 2a Pay menu + orders/withdraw/cards | done |
| 2b Shipping/after-sale/coupons/income/rebate | done |
| 3 users.php submenus | done |
| 4 SPA strip | pending (after 1–3) |
| 4 SPA strip | done (ops routes redirect to native) |
| 5+ behavior parity | backlog |
## Dual-UI rule