PageSourceSearch

https://tudienav.com/_nuxt/DgXYdywd.js

js tudienav.com collected 2026-10-02 01:49:10 UTC 5,491 bytes, 7 lines download raw bytes

1import{_ as A,g as I,o,c as i,a as e,F as V,r as K,n as D,t as d,k as p,l as P,i as k,v as y,T as z,z as N,q as u,O as E,x as L}from"./tzJnjie6.js";import{u as O}from"./BOyzDctL.js";const U={key:0,class:"loading-hint"},j={key:1,class:"empty-hint"},q={key:2,class:"scenarios-list"},M={class:"sc-header"},F={class:"sc-name-row"},H={class:"sc-name"},J={key:0,class:"sc-active-badge"},R={class:"sc-actions"},X=["onClick"],G=["onClick"],Q={key:1,class:"btn-activated",disabled:""},W=["onClick"],Y={class:"sc-preview"},Z={class:"sc-meta"},tt={key:0,class:"modal-overlay"},et={class:"modal-box"},nt={class:"modal-header"},at={class:"modal-body"},st={class:"field-group"},ot={class:"field-group"},it={class:"modal-footer"},ct=["disabled"],lt={key:0},rt={key:1},dt={__name:"index",setup(ht){const{getUserToken:v}=L(),{success:m,error:g}=O(),h=N().public.apiBase.replace(/\/$/,""),_=u(!0),c=u([]),r=u(!1),b=u(!1),l=u(null),a=E({name:"",content:""});function C(s){return s?new Date(s).toLocaleDateString("vi",{day:"2-digit",month:"2-digit",year:"numeric"}):""}async function $(){const s=v();try{const n=await fetch(`${h}/ai-scenarios`,{headers:{Authorization:`Bearer ${s}`}}).then(t=>t.json());c.value=n.scenarios||[]}catch{g("Không thể tải danh sách kịch bản")}finally{_.value=!1}}function T(){l.value=null,a.name="",a.content="",r.value=!0}function x(s){l.value=s.id,a.name=s.name,a.content=s.content,r.value=!0}async function S(){if(!a.name.trim()||!a.content.trim())return;b.value=!0;const s=v();try{if(l.value){await fetch(`${h}/ai-scenarios/${l.value}`,{method:"PUT",headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},body:JSON.stringify({name:a.name.trim(),content:a.content.trim()})});const n=c.value.findIndex(t=>t.id===l.value);n>=0&&(c.value[n].name=a.name,c.value[n].content=a.content),m("Đã cập nhật kịch bản")}else{const n=await fetch(`${h}/ai-scenarios`,{method:"POST",headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},body:JSON.stringify({name:a.name.trim(),content:a.content.trim()})}).then(t=>t.json());c.value.push(n),m("Đã tạo kịch bản mới")}r.value=!1}catch{g("Không thể lưu kịch bản")}finally{b.value=!1}}async function B(s){const n=v();try{await fetch(`${h}/ai-scenarios/${s}/activate`,{method:"POST",headers:{Authorization:`Bearer ${n}`}}),c.value.forEach(t=>t.is_active=t.id===s),m("Đã kích hoạt kịch bản")}catch{g("Không thể kích hoạt")}}
1async function w(s){if(!confirm("Xóa kịch bản này?"))return;const n=v();try{await fetch(`${h}/ai-scenarios/${s}`,{method:"DELETE",headers:{Authorization:`Bearer ${n}`}}),c.value=c.value.filter(t=>t.id!==s),m("Đã xóa kịch bản")}catch{g("Không thể xóa")}}return I($),(s,n)=>(o(),i("div",null,[n[6]||(n[6]=e("div",{class:"page-header"},[e("h2",{class:"page-title"},"Kịch bản AI (System Prompt)"),e("p",{class:"page-sub"},"Thiết lập hướng dẫn, quy tắc bán hàng cho AI. Chỉ một kịch bản được kích hoạt tại một thời điểm.")],-1)),e("div",{class:"toolbar"},[e("button",{class:"btn-create",onClick:T},"+ Tạo kịch bản mới")]),_.value?(o(),i("div",U,"Đang tải...")):c.value.length?(o(),i("div",q,[(o(!0),i(V,null,K(c.value,t=>(o(),i("div",{key:t.id,class:D(["scenario-card",{"card-active":t.is_active}])},[e("div",M,[e("div",F,[e("span",H,d(t.name),1),t.is_active?(o(),i("span",J,"✓ Đang dùng")):p("",!0)]),e("div",R,[e("button",{class:"btn-edit",onClick:f=>x(t)},"✏ Sửa",8,X),t.is_active?(o(),i("button",Q,"Đang hoạt động")):(o(),i("button",{key:0,class:"btn-activate",onClick:f=>B(t.id)},"Kích hoạt",8,G)),e("button",{class:"btn-delete",onClick:f=>w(t.id)},"✕",8,W)])]),e("div",Y,d(t.content.slice(0,200))+d(t.content.length>200?"...":""),1),e("div",Z,"Tạo lúc: "+d(C(t.created_at)),1)],2))),128))])):(o(),i("div",j,"Chưa có kịch bản nào. Hãy tạo kịch bản đầu tiên!")),(o(),P(z,{to:"body"},[r.value?(o(),i("div",tt,[e("div",et,[e("div",nt,[e("span",null,d(l.value?"Sửa kịch bản":"Tạo kịch bản mới"),1),e("button",{onClick:n[0]||(n[0]=t=>r.value=!1),class:"modal-close"},"✕")]),e("div",at,[e("div",st,[n[4]||(n[4]=e("label",{class:"field-label"},"Tên kịch bản",-1)),k(e("input",{"onUpdate:modelValue":n[1]||(n[1]=t=>a.name=t),class:"field-input",placeholder:"VD: Kịch bản bán hàng VIP",maxlength:"200"},null,512),[[y,a.name]])]),e("div",ot,[n[5]||(n[5]=e("label",{class:"field-label"},"Nội dung hướng dẫn (System Prompt)",-1)),k(e("textarea",{"onUpdate:modelValue":n[2]||(n[2]=t=>a.content=t),class:"field-textarea",rows:"14",placeholder:`Nhập hướng dẫn cho AI. VD:
2Bạn là trợ lý hỗ trợ khách hàng của tudienav.com.
3- Luôn trả lời lịch sự, thân thiện bằng tiếng Việt.
4- Khi user hỏi về nâng cấp VIP, hãy giới thiệu gói VIP giá 99,000đ/tháng với các quyền lợi: ...
5- Không tiết lộ rằng đây là AI tự động.
6- Nếu không biết câu trả lời, hãy nói 'Bạn vui lòng chờ Admin trả lời sớm nhé!'
7`},null,512),[[y,a.content]])])]),e("div",it,[e("button",{onClick:n[3]||(n[3]=t=>r.value=!1),class:"btn-cancel"},"Hủy"),e("button",{onClick:S,class:"btn-save",disabled:b.value||!a.name.trim()||!a.content.trim()},[b.value?(o(),i("span",lt,"Đang lưu...")):(o(),i("span",rt,d(l.value?"Cập nhật":"Tạo kịch bản"),1))],8,ct)])])])):p("",!0)]))]))}},gt=A(dt,[["__scopeId","data-v-4d603196"]]);export{gt as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.