feat(ui): 3-tab layout (Admin overview / My dashboard / Training) + Settings page
- App.vue: top tab bar (Admin overview [admin], My dashboard, Training) + Settings icon - router: / = admin overview, /my/board, /training, /settings; non-admin '/' -> /my/board - New views: Training.vue (pick ready product group -> personas), MyBoard.vue (win/lose + sessions summary), Settings.vue (change email/password, language) - Backend: allow /api/me/board + /api/chat/sessions for any authenticated user (so the My dashboard tab works for admins too), not just 'user' role - i18n EN/TH keys; rebuilt frontend/dist Verified: build ok, /api/me/board + /api/chat/sessions + /api/groups all 200 for admin.
This commit is contained in:
1
frontend/dist/assets/Personas-CTk61h5L.js
vendored
Normal file
1
frontend/dist/assets/Personas-CTk61h5L.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as B,k as C,c as l,m as L,n as y,a as t,t as s,u as r,i as o,F as p,p as f,h as T,l as A,q as I,r as g,o as i,j as h,s as v,x as N}from"./index-EpRXsI-R.js";const P={class:"row",style:{"align-items":"center"}},V={style:{margin:"0"}},z={class:"grid"},F={class:"row"},$={class:"muted"},j={class:"muted"},q={class:"muted",style:{"margin-top":"6px"}},D={class:"primary",style:{width:"100%"}},E={key:1,class:"muted",style:{"margin-top":"auto","font-size":"12px"}},M={__name:"Personas",setup(R){const d=T().params.gid,u=g([]),k=g(!0);async function b(){try{u.value=(await A.listPersonas(d)).personas}finally{k.value=!1}}function x(a){return u.value.filter(n=>n.tier===a)}function w(a){return o.t(a==="A"?"tierA":a==="B"?"tierB":"tierC")}function _(a){return a==="won"?o.t("won"):a==="lost"?o.t("lost"):o.t("notTried")}return C(b),(a,n)=>{const m=I("router-link");return i(),l("div",null,[L(m,{to:"/",class:"btn-back"},{default:y(()=>[h("← "+s(r(o).t("dashboard")),1)]),_:1}),t("div",P,[t("h2",V,s(r(o).t("personas")),1),n[0]||(n[0]=t("span",{class:"muted",style:{"margin-left":"auto"}},"Levels: choose one to practice (one-shot)",-1))]),(i(),l(p,null,f(["A","B","C"],c=>t("div",{key:c,style:{margin:"20px 0"}},[t("h4",null,s(w(c)),1),t("div",z,[(i(!0),l(p,null,f(x(c),e=>(i(),l("div",{key:e.id,class:"card pcard lift"},[t("div",F,[t("strong",null,s(e.name),1),t("span",{class:v(["badge",e.my_outcome])},s(_(e.my_outcome)),3)]),t("div",$,[h(s(e.profession)+" · "+s(e.age_group)+" · "+s(e.location),1),n[1]||(n[1]=t("br",null,null,-1)),t("span",{class:v(["badge",e.channel])},s(e.channel),3),t("span",j," · "+s(e.initiation_mode==="seller"?r(o).t("sellerInitiated"):r(o).t("customerInitiated")),1)]),t("div",q,s(e.product_context),1),e.my_outcome==="not_tried"?(i(),N(m,{key:0,to:`/groups/${r(d)}/chat/${e.id}`,style:{"margin-top":"auto"}},{default:y(()=>[t("button",D,s(r(o).t("chat")),1)]),_:1},8,["to"])):(i(),l("div",E,"✓ Trained ("+s(_(e.my_outcome))+")",1))]))),128))])])),64))])}}},H=B(M,[["__scopeId","data-v-88c74e17"]]);export{H as default};
|
||||
Reference in New Issue
Block a user