Files
wordpress-theme-aksrt/assets/admin/build/ExtensionAI.BmvoDo9B.js
T
kate522 27d8a9ea71 build(admin): track the SPA build output so git deploys carry it
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.
2026-09-06 14:35:15 +08:00

2 lines
8.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{X as l,a4 as I,Y as s,f as d,Z as i,a5 as m,L as k,j as _,ag as P,aj as w,ah as u,F as S,R as E,o as V,c as g,r as f,e as C,a1 as O,W as r}from"./vendor-vue.BxZIRU0_.js";import{P as U}from"./PageHeader.CtT29f8Y.js";import{a as A}from"./shared-api.DnsQ5cxS.js";import{_ as L}from"./index.js";import"./vendor-naive.CKYCZmXD.js";import"./vendor-misc.bELTaXdf.js";const W={name:"ExtensionAI",components:{PageHeader:U},setup(){const n=f({enabled:!1,provider:"none",configured:!1,model:"",api_key:"",rate_limit:10,available:!1,backend:"none",wp_ai_available:!1,theme_available:!1,seo_ai_enabled:!1,write_assist:!1}),a=C({enabled:!1,provider:"none",api_key:"",api_base:"https://api.openai.com/v1",model:"gpt-3.5-turbo",max_tokens:1e3,rate_limit:10}),v=f(!1),e=f(""),b=g(()=>({wp_ai:"WP AI Client",theme:"主题 Provider",none:"无"})[n.value.backend]||n.value.backend||"无"),c=g(()=>{const t=!!n.value.available;return[{key:"seo",name:"AI 生成 SEO",scene:"文章/分类「独立 SEO」框",ready:t&&!!n.value.seo_ai_enabled},{key:"summary",name:"AI 生成摘要",scene:"前台投稿页",ready:t},{key:"tags",name:"AI 建议标签",scene:"前台投稿页",ready:t}]});function p(t){!t||typeof t!="object"||(n.value={enabled:!!t.enabled,provider:t.provider||"none",configured:!!t.configured,model:t.model||"",api_key:"",rate_limit:t.rate_limit||10,available:!!t.available,backend:t.backend||"none",wp_ai_available:!!t.wp_ai_available,theme_available:!!t.theme_available,seo_ai_enabled:!!t.seo_ai_enabled,write_assist:!!t.write_assist},a.enabled=!!t.enabled,a.provider=t.provider||"none",a.model=t.model||"gpt-3.5-turbo",a.rate_limit=t.rate_limit||10,t.api_base&&(a.api_base=t.api_base),typeof t.max_tokens=="number"&&t.max_tokens>0&&(a.max_tokens=t.max_tokens))}async function o(){e.value="";try{const t=await A.getAiStatus();p(t.data||{})}catch(t){console.error("Load AI status failed:",t),e.value=(t==null?void 0:t.message)||"加载 AI 状态失败"}}async function x(){v.value=!0;try{const t={enabled:a.enabled,provider:a.provider,api_base:a.api_base,model:a.model,max_tokens:a.max_tokens,rate_limit:a.rate_limit};a.api_key&&a.api_key!=="***"&&(t.api_key=a.api_key);const y=await A.updateAiSettings(t);alert(y.message||"设置已保存"),await o()}catch(t){console.error("Save failed:",t),alert((t==null?void 0:t.message)||"保存失败")}finally{v.value=!1}}return V(()=>o()),{status:n,form:a,saving:v,loadError:e,features:c,backendLabel:b,saveSettings:x}}},j={class:"aksrt-page-container"},N={key:0,class:"aksrt-ai__form-card aksrt-ai__load-error",role:"alert"},B={class:"aksrt-ai__status"},M={class:"aksrt-ai__status-card"},R={class:"aksrt-ai__status-info"},F={class:"aksrt-ai__status-value"},H={class:"aksrt-ai__status-card"},T={class:"aksrt-ai__status-info"},D={class:"aksrt-ai__status-value"},K={class:"aksrt-ai__status-card"},z={class:"aksrt-ai__status-info"},X={class:"aksrt-ai__status-value"},Y={class:"aksrt-ai__status-card"},Z={class:"aksrt-ai__status-info"},q={class:"aksrt-ai__status-value"},G={class:"aksrt-ai__form-card"},J={class:"aksrt-form-group"},Q={class:"aksrt-form-group"},h={key:0,class:"aksrt-form-group"},$={key:1,class:"aksrt-form-group"},aa={key:2,class:"aksrt-form-group"},sa={key:3,class:"aksrt-form-group"},ta={key:4,class:"aksrt-form-group"},ea={class:"aksrt-form-actions"},oa=["disabled"],la={class:"aksrt-ai__form-card"},ia={class:"aksrt-table aksrt-table--sm"};function ra(n,a,v,e,b,c){const p=O("PageHeader");return r(),l("div",j,[I(p,{title:"AI 连接配置",desc:"配置 AI 生成能力的连接方式。优先使用 WordPress AI Connectors;也可填写 OpenAI 兼容接口。SEO 生成入口在文章「独立 SEO」框,摘要/标签入口在前台投稿页。"}),e.loadError?(r(),l("div",N,[a[8]||(a[8]=s("strong",null,"加载失败:",-1)),d(i(e.loadError),1)])):m("",!0),s("div",B,[s("div",M,[s("div",{class:k(["aksrt-ai__status-icon",e.status.available?"aksrt-ai__status-icon--ok":"aksrt-ai__status-icon--off"])},[...a[9]||(a[9]=[s("i",{class:"fa fab fa-android"},null,-1)])],2),s("div",R,[a[10]||(a[10]=s("div",{class:"aksrt-ai__status-label"},"可用状态",-1)),s("div",F,i(e.status.available?"可用":"不可用"),1)])]),s("div",H,[s("div",{class:k(["aksrt-ai__status-icon",e.status.wp_ai_available?"aksrt-ai__status-icon--ok":"aksrt-ai__status-icon--warn"])},[...a[11]||(a[11]=[s("i",{class:"fa fas fa-plug"},null,-1)])],2),s("div",T,[a[12]||(a[12]=s("div",{class:"aksrt-ai__status-label"},"WP AI Client",-1)),s("div",D,i(e.status.wp_ai_available?"已就绪":"不可用"),1)])]),s("div",K,[s("div",{class:k(["aksrt-ai__status-icon",e.status.theme_available?"aksrt-ai__status-icon--ok":"aksrt-ai__status-icon--warn"])},[...a[13]||(a[13]=[s("i",{class:"fa fas fa-key"},null,-1)])],2),s("div",z,[a[14]||(a[14]=s("div",{class:"aksrt-ai__status-label"},"主题 Provider",-1)),s("div",X,i(e.status.theme_available?"已配置":"未配置"),1)])]),s("div",Y,[a[16]||(a[16]=s("div",{class:"aksrt-ai__status-icon aksrt-ai__status-icon--info"},[s("i",{class:"fa fas fa-road"})],-1)),s("div",Z,[a[15]||(a[15]=s("div",{class:"aksrt-ai__status-label"},"当前后端",-1)),s("div",q,i(e.backendLabel),1)])])]),s("div",G,[a[27]||(a[27]=s("h3",null,"主题 Provider 配置(回退链路)",-1)),a[28]||(a[28]=s("p",{class:"aksrt-form-hint"},[d("已配置主题 Provider 时优先走下方接口;未配置时才尝试 WordPress AI Connectors。NewAPI/兼容网关请填到 "),s("code",null,"/v1"),d("(也可只填域名,保存时会自动补全)。")],-1)),s("div",J,[s("label",null,[_(s("input",{type:"checkbox","onUpdate:modelValue":a[0]||(a[0]=o=>e.form.enabled=o)},null,512),[[P,e.form.enabled]]),a[17]||(a[17]=d(" 启用主题 AI Provider ",-1))])]),s("div",Q,[a[19]||(a[19]=s("label",null,"AI Provider",-1)),_(s("select",{"onUpdate:modelValue":a[1]||(a[1]=o=>e.form.provider=o),class:"aksrt-select"},[...a[18]||(a[18]=[s("option",{value:"none"},"不使用",-1),s("option",{value:"openai"},"OpenAI 兼容接口",-1)])],512),[[w,e.form.provider]])]),e.form.provider!=="none"?(r(),l("div",h,[a[20]||(a[20]=s("label",null,"API Key",-1)),_(s("input",{"onUpdate:modelValue":a[2]||(a[2]=o=>e.form.api_key=o),type:"password",class:"aksrt-input",placeholder:"sk-..."},null,512),[[u,e.form.api_key]]),a[21]||(a[21]=s("p",{class:"aksrt-form-hint"},"保存后不会回显完整密钥",-1))])):m("",!0),e.form.provider==="openai"?(r(),l("div",$,[a[22]||(a[22]=s("label",null,"API Base URL",-1)),_(s("input",{"onUpdate:modelValue":a[3]||(a[3]=o=>e.form.api_base=o),type:"text",class:"aksrt-input",placeholder:"https://llm.example.com/v1"},null,512),[[u,e.form.api_base]]),a[23]||(a[23]=s("p",{class:"aksrt-form-hint"},"示例:https://api.openai.com/v1 或 https://你的网关/v1(不要填到 /chat/completions)",-1))])):m("",!0),e.form.provider!=="none"?(r(),l("div",aa,[a[24]||(a[24]=s("label",null,"模型",-1)),_(s("input",{"onUpdate:modelValue":a[4]||(a[4]=o=>e.form.model=o),type:"text",class:"aksrt-input",placeholder:"gpt-3.5-turbo"},null,512),[[u,e.form.model]])])):m("",!0),e.form.provider!=="none"?(r(),l("div",sa,[a[25]||(a[25]=s("label",null,"最大 Token 数",-1)),_(s("input",{"onUpdate:modelValue":a[5]||(a[5]=o=>e.form.max_tokens=o),type:"number",min:"100",max:"4000",class:"aksrt-input"},null,512),[[u,e.form.max_tokens,void 0,{number:!0}]])])):m("",!0),e.form.provider!=="none"?(r(),l("div",ta,[a[26]||(a[26]=s("label",null,"每分钟请求限制",-1)),_(s("input",{"onUpdate:modelValue":a[6]||(a[6]=o=>e.form.rate_limit=o),type:"number",min:"1",max:"100",class:"aksrt-input"},null,512),[[u,e.form.rate_limit,void 0,{number:!0}]])])):m("",!0),s("div",ea,[s("button",{class:"aksrt-button aksrt-button--primary",disabled:e.saving,onClick:a[7]||(a[7]=(...o)=>e.saveSettings&&e.saveSettings(...o))},i(e.saving?"保存中...":"保存设置"),9,oa)])]),s("div",la,[a[30]||(a[30]=s("h3",null,"已接通能力",-1)),s("table",ia,[a[29]||(a[29]=s("thead",null,[s("tr",null,[s("th",null,"能力"),s("th",null,"入口"),s("th",null,"状态")])],-1)),s("tbody",null,[(r(!0),l(S,null,E(e.features,o=>(r(),l("tr",{key:o.key},[s("td",null,i(o.name),1),s("td",null,i(o.scene),1),s("td",null,[s("span",{class:k(["aksrt-badge",o.ready?"aksrt-badge--success":"aksrt-badge--warning"])},i(o.ready?"可用":"未就绪"),3)])]))),128))])]),a[31]||(a[31]=s("p",{class:"aksrt-form-hint"},"SEO 开关与提示词请到「全局 → SEO」配置(seo_ai_enabled / ai_seo_*_prompt)。",-1))]),a[32]||(a[32]=s("div",{class:"aksrt-ai__form-card aksrt-ai__notice"},[s("h3",null,[s("i",{class:"fa fas fa-exclamation-triangle"}),d(" 重要说明")]),s("ul",null,[s("li",null,[d("AI 输出仅作为"),s("strong",null,"建议"),d(",不会自动写库;需用户点「更新/提交」才保存")]),s("li",null,"主题 API Key 已配置时优先使用;否则回退 WordPress AI Connectors"),s("li",null,"生成接口要求登录与编辑/投稿权限;配置接口仍需管理员")])],-1))])}const ka=L(W,[["render",ra],["__scopeId","data-v-290bff3b"]]);export{ka as default};