Files
sales-trainer/frontend/dist/assets/Settings-DGkBq3Wj.js
Macky ac35be8906 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.
2026-08-07 22:07:16 +07:00

2 lines
2.0 KiB
JavaScript

import{_ as N,r as i,f as r,c as m,a as e,t as l,u as s,i as t,w,v as k,j as x,e as y,s as C,l as S,o as _}from"./index-EpRXsI-R.js";const D={class:"card"},E={style:{"margin-top":"0"}},T=["value"],U={class:"muted"},$={key:0,class:"error",role:"alert"},j={key:1,class:"ok",role:"status"},z=["disabled"],I={key:0,class:"spinner"},M={class:"card",style:{"margin-top":"16px"}},P={style:{"margin-top":"0"}},q={class:"row"},A={__name:"Settings",setup(F){var f,h,b;const c=i(((f=r.user)==null?void 0:f.email)||""),o=i(""),d=i(""),v=i(""),p=i(!1),V=((h=r.user)==null?void 0:h.username)||((b=r.user)==null?void 0:b.id)||"";async function B(){d.value="",v.value="",p.value=!0;try{if(c.value||o.value){const n={username:V,email:c.value};o.value&&(n.password=o.value);const a=await S.setup(n);r.user=a.user,v.value=t.t("saved")}}catch(n){d.value=n.message}finally{p.value=!1}}return(n,a)=>{var g;return _(),m("div",null,[e("h2",null,"⚙️ "+l(s(t).t("settings")),1),e("div",D,[e("h3",E,l(s(t).t("account")),1),e("label",null,l(s(t).t("username")),1),e("input",{value:((g=s(r).user)==null?void 0:g.username)||"",disabled:""},null,8,T),e("label",null,l(s(t).t("email")),1),w(e("input",{"onUpdate:modelValue":a[0]||(a[0]=u=>c.value=u),type:"email"},null,512),[[k,c.value]]),e("label",null,[x(l(s(t).t("newPassword"))+" ",1),e("span",U,"("+l(s(t).t("optional"))+")",1)]),w(e("input",{"onUpdate:modelValue":a[1]||(a[1]=u=>o.value=u),type:"password",autocomplete:"new-password"},null,512),[[k,o.value]]),d.value?(_(),m("div",$,l(d.value),1)):y("",!0),v.value?(_(),m("div",j,"✅ "+l(v.value),1)):y("",!0),e("button",{class:"primary",style:{"margin-top":"16px"},disabled:p.value,onClick:B},[p.value?(_(),m("span",I)):y("",!0),x(l(s(t).t("save")),1)],8,z)]),e("div",M,[e("h3",P,l(s(t).t("language")),1),e("div",q,[e("button",{class:C({active:s(t).locale==="th"}),onClick:a[2]||(a[2]=u=>s(t).set("th"))},"ไทย",2),e("button",{class:C({active:s(t).locale==="en"}),onClick:a[3]||(a[3]=u=>s(t).set("en"))},"English",2)])])])}}},H=N(A,[["__scopeId","data-v-ce5f07b9"]]);export{H as default};