Files
machartaa_admin_dist/dist/assets/index-16bf35a6.js
T
2026-10-17 17:09:50 +03:30

2 lines
10 KiB
JavaScript

import{_ as oe}from"./BasicMainCard-d88efce1.js";import{_ as ie}from"./BasicInput.vue_vue_type_style_index_0_lang-98efdfef.js";import{_ as ne}from"./BaseSwitch.vue_vue_type_script_setup_true_lang-c915f24e.js";import{_ as le}from"./button.vue_vue_type_style_index_0_lang-dc7b87c6.js";import{I as T,d as re,i as p,j as x,x as ue,o as l,c as r,e as u,w as y,b as e,f as b,n as w,F as I,q as $,J as ce,K as de,L as _e,t as h,s as F,B as pe,H as A,M as ve,N as me,A as ye}from"./index-f7911a6d.js";import{_ as be,T as ge}from"./index-10c207c0.js";import{_ as fe}from"./_plugin-vue_export-helper-a59ccce4.js";import"./Grid-d4d08bfb.js";import"./index-c5c3e497.js";import"./Col-a3b51974.js";import"./styleChecker-10d88d72.js";import"./isPlainObject-72a97f79.js";import"./vnode-160a3584.js";import"./Icon-b5a365b6.js";import"./usePrice-bc935b83.js";import"./index-31699bda.js";import"./SearchOutlined-9cce5c32.js";import"./omit-19fd03e3.js";import"./FormItemContext-e8070c30.js";import"./index-fd54b9e9.js";import"./index-c48ccee5.js";import"./index-53f009ba.js";import"./shallowequal-1fb084f0.js";import"./index-2e819d27.js";import"./isSymbol-b0715776.js";import"./useState-2a09ed7b.js";import"./useRefs-2e02a4a6.js";import"./_flatRest-dd0446c0.js";import"./isMobile-e2e89480.js";async function j(){return await T.get("/admin/ai/settings")}async function he(v){return(await T.put("/admin/ai/settings",v)).settings??await j()}async function ke(){return await T.post("/admin/ai/test")}async function xe(v){return await T.post("/admin/ai/chat",{messages:v},{timeout:12e4})}const c=v=>(ve("data-v-28e55f88"),v=v(),me(),v),we={class:"ai-shell"},Ae={class:"ai-toolbar"},Se=c(()=>e("div",null,[e("div",{class:"ai-title"},"دستیار هوش مصنوعی ماچارتا"),e("div",{class:"ai-subtitle"}," به داده‌های کاربران، سفارش‌ها، محصولات، اشتراک و پشتیبانی دسترسی خواندنی دارد. ")],-1)),Ce={key:0,class:"ai-banner ai-banner--warn"},Ie={key:1,class:"ai-banner ai-banner--warn"},Te={key:0,class:"ai-empty"},Be=c(()=>e("div",{class:"ai-empty-icon"},"✦",-1)),Ke=c(()=>e("h3",null,"از من بپرس",-1)),Oe=c(()=>e("p",null,"می‌توانم وضعیت سفارش، موجودی محصول، اشتراک کاربر یا آمار کلی سیستم را از دیتابیس بخوانم.",-1)),Ne={class:"ai-suggestions"},Re=["disabled","onClick"],Ue={class:"ai-bubble"},$e={class:"ai-bubble-label"},Me={class:"ai-bubble-text"},Ve={key:0,class:"ai-tools"},qe={key:1,class:"ai-row is-assistant"},Le=c(()=>e("div",{class:"ai-bubble ai-bubble--pending"},[e("div",{class:"ai-bubble-label"},"دستیار ماچارتا"),e("div",{class:"ai-bubble-text"},"در حال بررسی دیتابیس و پاسخ...")],-1)),Pe=[Le],De={class:"ai-composer"},Ee=["disabled","onKeydown"],Ge={class:"ai-settings"},Je=c(()=>e("p",{class:"ai-settings-help"}," کلید API مدل را اینجا ذخیره کنید. اتصال با استاندارد OpenAI Chat Completions است و با OpenAI، OpenRouter، Groq، DeepSeek و مدل‌های سازگار کار می‌کند. ",-1)),Fe={key:0,class:"py-8 text-center"},He={class:"flex items-center gap-3 mb-4"},je=c(()=>e("span",{class:"text-sm"},"فعال بودن دستیار هوش مصنوعی",-1)),ze={class:"mb-4"},Ye=c(()=>e("div",{class:"mb-1 text-sm text-gray-600"},"کلید API",-1)),Qe={class:"text-xs text-gray-500 mt-1"},We={key:0},Xe={class:"mb-4"},Ze=c(()=>e("div",{class:"mb-1 text-sm text-gray-600"},"Base URL",-1)),ea=c(()=>e("div",{class:"text-xs text-gray-500 mt-1"},[b(" نمونه: OpenAI "),e("code",null,"https://api.openai.com/v1"),b(" — OpenRouter "),e("code",null,"https://openrouter.ai/api/v1"),b(" — Groq "),e("code",null,"https://api.groq.com/openai/v1")],-1)),aa={class:"mb-4"},ta=c(()=>e("div",{class:"mb-1 text-sm text-gray-600"},"نام مدل",-1)),sa={class:"flex gap-2"},H="macharta_admin_ai_thread",oa=re({__name:"index",setup(v){const M=["آمار کلی سیستم را بگو","پلن‌های اشتراک فعال کدام‌اند؟","آخرین سفارش‌های فروشگاه را خلاصه کن"],V=p("chat"),B=p(!0),K=p(!1),O=p(!1),g=p(!1),f=p(""),q=p(null),d=p([]),n=p({enabled:!1,api_key_set:!1,api_key_masked:"",base_url:"https://api.openai.com/v1",model:"gpt-4o-mini"}),o=p({enabled:!1,api_key:"",base_url:"https://api.openai.com/v1",model:"gpt-4o-mini"}),L=x(()=>n.value.enabled&&n.value.api_key_set),P=x(()=>L.value&&!!f.value.trim()&&!g.value),z=x(()=>n.value.enabled&&(n.value.api_key_set||!!o.value.api_key.trim())),Y=x(()=>o.value.enabled?!n.value.api_key_set&&!o.value.api_key.trim()?"کلید API وارد نشده است.":`آماده اتصال به مدل ${o.value.model||n.value.model}`:"دستیار غیرفعال است و در منوی گفتگو پاسخ نمی‌دهد."),Q=x(()=>z.value?"bg-green-50 border-green-200 text-green-800":"bg-amber-50 border-amber-200 text-amber-800");function S(){try{localStorage.setItem(H,JSON.stringify(d.value))}catch{}}function W(){try{const s=localStorage.getItem(H);if(!s)return;const t=JSON.parse(s);Array.isArray(t)&&(d.value=t)}catch{d.value=[]}}async function C(){await pe();const s=q.value;s&&(s.scrollTop=s.scrollHeight)}function D(s){n.value=s,o.value.enabled=s.enabled,o.value.base_url=s.base_url,o.value.model=s.model,o.value.api_key=""}async function X(){var s,t;B.value=!0;try{D(await j())}catch(a){A.error(((t=(s=a==null?void 0:a.response)==null?void 0:s.data)==null?void 0:t.message)||(a==null?void 0:a.message)||"خطا در بارگذاری تنظیمات")}finally{B.value=!1}}async function E(){var s,t;K.value=!0;try{const a=await he({enabled:o.value.enabled,base_url:o.value.base_url,model:o.value.model,api_key:o.value.api_key.trim()||void 0});D(a),A.success("تنظیمات هوش مصنوعی ذخیره شد")}catch(a){A.error(((t=(s=a==null?void 0:a.response)==null?void 0:s.data)==null?void 0:t.message)||(a==null?void 0:a.message)||"خطا در ذخیره تنظیمات")}finally{K.value=!1}}async function Z(){var s,t;O.value=!0;try{(o.value.api_key.trim()||o.value.base_url!==n.value.base_url||o.value.model!==n.value.model)&&await E();const a=await ke();A.success(a.reply||"اتصال برقرار شد")}catch(a){A.error(((t=(s=a==null?void 0:a.response)==null?void 0:s.data)==null?void 0:t.message)||(a==null?void 0:a.message)||"تست اتصال ناموفق بود")}finally{O.value=!1}}function ee(){d.value=[],S()}async function N(){var t,a,k;const s=f.value.trim();if(!(!s||!P.value)){d.value.push({role:"user",content:s}),f.value="",S(),await C(),g.value=!0;try{const _=d.value.map(({role:R,content:U})=>({role:R,content:U})),m=await xe(_);d.value.push({role:"assistant",content:((t=m.message)==null?void 0:t.content)||"پاسخی دریافت نشد.",tools:m.tools_used||[]}),S(),await C()}catch(_){const m=((k=(a=_==null?void 0:_.response)==null?void 0:a.data)==null?void 0:k.message)||(_==null?void 0:_.message)||"خطا در دریافت پاسخ";d.value.push({role:"assistant",content:m}),S()}finally{g.value=!1,await C()}}}function ae(s){f.value=s,N()}return ue(async()=>{W(),await X(),await C()}),(s,t)=>{const a=le,k=be,_=ne,m=ie,R=ge,U=oe;return l(),r("div",null,[u(U,null,{default:y(()=>[u(R,{activeKey:V.value,"onUpdate:activeKey":t[5]||(t[5]=i=>V.value=i)},{default:y(()=>[u(k,{key:"chat",tab:"گفتگو"},{default:y(()=>[e("div",we,[e("div",Ae,[Se,u(a,{onClick:ee},{default:y(()=>[b("گفتگوی جدید")]),_:1})]),n.value.enabled?n.value.api_key_set?w("",!0):(l(),r("div",Ie," کلید API هنوز ذخیره نشده. برای شروع گفتگو، از تب تنظیمات کلید مدل را وارد کنید. ")):(l(),r("div",Ce," هوش مصنوعی در تنظیمات غیرفعال است. از تب تنظیمات آن را فعال کنید. ")),e("div",{ref_key:"threadRef",ref:q,class:"ai-thread"},[d.value.length?w("",!0):(l(),r("div",Te,[Be,Ke,Oe,e("div",Ne,[(l(),r(I,null,$(M,i=>e("button",{key:i,type:"button",class:"ai-chip",disabled:g.value,onClick:G=>ae(i)},h(i),9,Re)),64))])])),(l(!0),r(I,null,$(d.value,(i,G)=>{var J;return l(),r("div",{key:G,class:F(["ai-row",`is-${i.role}`])},[e("div",Ue,[e("div",$e,h(i.role==="user"?"شما":"دستیار ماچارتا"),1),e("div",Me,h(i.content),1),(J=i.tools)!=null&&J.length?(l(),r("div",Ve,[(l(!0),r(I,null,$(i.tools,(te,se)=>(l(),r("span",{key:se},h(te.summary),1))),128))])):w("",!0)])],2)}),128)),g.value?(l(),r("div",qe,Pe)):w("",!0)],512),e("div",De,[ce(e("textarea",{"onUpdate:modelValue":t[0]||(t[0]=i=>f.value=i),rows:"2",disabled:g.value||!L.value,placeholder:"مثلاً: آخرین سفارش‌های شماره ۰۹۱۲... را بگو",onKeydown:_e(ye(N,["exact","prevent"]),["enter"])},null,40,Ee),[[de,f.value]]),u(a,{type:"primary",loading:g.value,disabled:!P.value,onClick:N},{default:y(()=>[b(" ارسال ")]),_:1},8,["loading","disabled"])])])]),_:1}),u(k,{key:"settings",tab:"تنظیمات"},{default:y(()=>[e("div",Ge,[Je,B.value?(l(),r("div",Fe,"در حال بارگذاری...")):(l(),r(I,{key:1},[e("div",He,[u(_,{value:o.value.enabled,"onUpdate:value":t[1]||(t[1]=i=>o.value.enabled=i)},null,8,["value"]),je]),e("div",ze,[Ye,u(m,{value:o.value.api_key,"onUpdate:value":t[2]||(t[2]=i=>o.value.api_key=i),"is-password":"","place-holder":n.value.api_key_set?n.value.api_key_masked:"sk-..."},null,8,["value","place-holder"]),e("div",Qe,[b(" اگر خالی بماند، کلید قبلی نگه داشته می‌شود. "),n.value.api_key_set?(l(),r("span",We," کلید فعلی: "+h(n.value.api_key_masked),1)):w("",!0)])]),e("div",Xe,[Ze,u(m,{value:o.value.base_url,"onUpdate:value":t[3]||(t[3]=i=>o.value.base_url=i),"place-holder":"https://api.openai.com/v1"},null,8,["value"]),ea]),e("div",aa,[ta,u(m,{value:o.value.model,"onUpdate:value":t[4]||(t[4]=i=>o.value.model=i),"place-holder":"gpt-4o-mini"},null,8,["value"])]),e("div",{class:F(["rounded-lg border p-3 text-sm mb-4",Q.value])},h(Y.value),3),e("div",sa,[u(a,{type:"primary",loading:K.value,onClick:E},{default:y(()=>[b("ذخیره تنظیمات")]),_:1},8,["loading"]),u(a,{loading:O.value,disabled:!n.value.api_key_set&&!o.value.api_key,onClick:Z},{default:y(()=>[b(" تست اتصال ")]),_:1},8,["loading","disabled"])])],64))])]),_:1})]),_:1},8,["activeKey"])]),_:1})])}}});const Ua=fe(oa,[["__scopeId","data-v-28e55f88"]]);export{Ua as default};