Validate sessions against the API, honor configurable base paths, and route unknown pages to 404. Keep development ports stable so user and admin apps cannot be confused. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 line
7.3 KiB
JavaScript
1 line
7.3 KiB
JavaScript
import{$ as e,Ct as t,G as n,J as r,N as i,P as ee,Q as a,R as te,V as o,X as s,Z as c,bt as l,dt as u,et as d,gt as f,ht as p,i as ne,it as m,lt as h,nt as g,q as re,rt as _,s as v,st as ie,vt as ae,yt as y,z as oe}from"./index-B2VD3zy8.js";import{t as se}from"./AdminPageSkeleton-BJpm6oxf.js";import{t as b}from"./BaseSwitch-dp2xMemS.js";import{t as ce}from"./BaseEmptyState-DGu6Pfui.js";import{t as le}from"./AdminSelect-BeLNl2Qz.js";import{o as x}from"./adminLabels-Cz9ccm1Z.js";import{t as S}from"./ActiveSwitchCell-DIzTn08M.js";var ue={class:`users-page`},de={class:`users-page__search admin-card`},fe={key:2,class:`users-page__table admin-card desktop-only`},pe={class:`admin-table-wrap`},me={class:`admin-table`},he={dir:`ltr`},ge={class:`status`},C={class:`actions`},w=[`onClick`],T={key:3,class:`compact-only admin-card-list`},E={class:`admin-card-item__header`},D={class:`admin-card-item__title`},O={class:`admin-card-item__meta`},k={dir:`ltr`},A={class:`admin-card-item__actions`},j=[`onClick`],M={key:0,class:`admin-form__error`,role:`alert`},N={class:`admin-form__field`},P={class:`admin-form__row`},F={class:`admin-form__field`},I={class:`admin-form__field`},L={class:`admin-form__field`},_e={class:`admin-form__field`},ve=[`disabled`],ye={key:0,class:`admin-btn__spinner`,"aria-hidden":`true`},R=o(m({__name:`UsersView`,setup(o){let m=y([]),R=y(``),z=y(!0),B=y(null),V=y(null),H=y(``),U=y(!1),W=oe(),be=[{value:`admin`,label:`مدیر سیستم`},{value:`sales`,label:`واحد فروش`},{value:`finance`,label:`واحد مالی`},{value:`warehouse`,label:`انبار`}],G=()=>({fullName:``,phone:``,email:``,role:`sales`,isActive:!0}),K=ae(G()),xe=s(()=>B.value!==null),Se=s(()=>B.value===`edit`?`ویرایش کاربر`:`افزودن کاربر`),q=s(()=>K.fullName.trim()&&K.phone.trim()),J=s(()=>{let e=R.value.trim();return e?m.value.filter(t=>t.fullName.includes(e)||t.phone.includes(e)||t.email.includes(e)||x[t.role].includes(e)):m.value});async function Ce(){z.value=!0;try{m.value=await v.list()}catch(e){W.error(e instanceof i?e.message:`بارگذاری کاربران انجام نشد.`)}finally{z.value=!1}}ie(()=>{Ce()});function Y(){B.value=`add`,V.value=null,Object.assign(K,G()),H.value=``}function X(e){B.value=`edit`,V.value=e.id,K.fullName=e.fullName,K.phone=e.phone,K.email=e.email,K.role=e.role,K.isActive=e.isActive,H.value=``}function Z(){B.value=null,V.value=null,H.value=``}async function Q(){if(!q.value){H.value=`نام و تلفن الزامی هستند.`;return}U.value=!0;let e={fullName:K.fullName.trim(),phone:K.phone.trim(),email:K.email.trim()||void 0,role:K.role,isActive:K.isActive};try{if(B.value===`edit`&&V.value){let t=await v.update(V.value,e),n=m.value.findIndex(e=>e.id===V.value);n!==-1&&(m.value[n]={...m.value[n],...t})}else{let t=await v.create(e);m.value.push(t)}W.success(B.value===`edit`?`اطلاعات کاربر بهروزرسانی شد.`:`کاربر جدید ثبت شد.`),Z()}catch(e){W.error(e instanceof i?e.message:`ذخیره کاربر انجام نشد.`)}finally{U.value=!1}}async function $(e,t){await v.setActive(e,t)}function we(){R.value=``}return(i,o)=>(h(),d(`div`,ue,[c(`div`,{class:`admin-page-header`},[o[6]||=c(`div`,null,[c(`h1`,{class:`admin-page-header__title`},`کاربران و دسترسیها`)],-1),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Y},` افزودن کاربر `)]),c(`div`,de,[_(ee,{name:`search`,size:18}),f(c(`input`,{"onUpdate:modelValue":o[0]||=e=>R.value=e,type:`search`,class:`users-page__search-input`,placeholder:`جستجو در نام، تلفن، ایمیل...`},null,512),[[n,R.value]])]),z.value?(h(),a(se,{key:0,variant:`table`})):J.value.length?(h(),d(`div`,fe,[c(`div`,pe,[c(`table`,me,[o[7]||=c(`thead`,null,[c(`tr`,null,[c(`th`,null,`نام`),c(`th`,null,`تلفن`),c(`th`,null,`ایمیل`),c(`th`,null,`نقش`),c(`th`,{class:`status`},`وضعیت`),c(`th`,null,`آخرین ورود`),c(`th`,{class:`actions`},`عملیات`)])],-1),c(`tbody`,null,[(h(!0),d(r,null,u(J.value,e=>(h(),d(`tr`,{key:e.id},[c(`td`,null,t(e.fullName),1),c(`td`,null,t(e.phone),1),c(`td`,he,t(e.email),1),c(`td`,null,t(l(x)[e.role]),1),c(`td`,ge,[_(S,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.fullName,"entity-type":`کاربر`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),c(`td`,null,t(e.lastLoginAt?l(ne)(e.lastLoginAt):`—`),1),c(`td`,C,[c(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>X(e)},` ویرایش `,8,w)])]))),128))])])])])):(h(),a(ce,{key:1,class:`admin-card`,icon:`users`,title:R.value.trim()?`نتیجهای یافت نشد`:`کاربری ثبت نشده`,description:R.value.trim()?`عبارت جستجو را تغییر دهید یا فیلترها را پاک کنید.`:`برای شروع، اولین کاربر را ثبت کنید.`},{default:p(()=>[R.value.trim()?(h(),d(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:we},` پاک کردن جستجو `)):(h(),d(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:Y},` افزودن کاربر `))]),_:1},8,[`title`,`description`])),!z.value&&J.value.length?(h(),d(`div`,T,[(h(!0),d(r,null,u(J.value,e=>(h(),d(`article`,{key:e.id,class:`admin-card-item`},[c(`div`,E,[c(`p`,D,t(e.fullName),1),_(S,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.fullName,"entity-type":`کاربر`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),c(`div`,O,[c(`span`,null,t(l(x)[e.role]),1),c(`span`,null,t(e.phone),1),c(`span`,k,t(e.email),1)]),c(`div`,A,[c(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>X(e)},` ویرایش `,8,j)])]))),128))])):e(``,!0),_(te,{open:xe.value,title:Se.value,size:`lg`,onClose:Z},{footer:p(()=>[c(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},`انصراف`),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!q.value||U.value,onClick:Q},[U.value?(h(),d(`span`,ye)):e(``,!0),g(` `+t(B.value===`edit`?`ذخیره تغییرات`:`ثبت کاربر`),1)],8,ve)]),default:p(()=>[c(`form`,{class:`admin-form`,onSubmit:re(Q,[`prevent`])},[H.value?(h(),d(`p`,M,t(H.value),1)):e(``,!0),c(`div`,N,[o[8]||=c(`label`,{for:`user-name`},[g(`نام کامل `),c(`span`,{class:`admin-form__required`},`*`)],-1),f(c(`input`,{id:`user-name`,"onUpdate:modelValue":o[1]||=e=>K.fullName=e,type:`text`,class:`admin-input`},null,512),[[n,K.fullName]])]),c(`div`,P,[c(`div`,F,[o[9]||=c(`label`,{for:`user-phone`},[g(`تلفن `),c(`span`,{class:`admin-form__required`},`*`)],-1),f(c(`input`,{id:`user-phone`,"onUpdate:modelValue":o[2]||=e=>K.phone=e,type:`tel`,class:`admin-input`,inputmode:`tel`,dir:`ltr`},null,512),[[n,K.phone]])]),c(`div`,I,[o[10]||=c(`label`,{for:`user-email`},`ایمیل`,-1),f(c(`input`,{id:`user-email`,"onUpdate:modelValue":o[3]||=e=>K.email=e,type:`email`,class:`admin-input`,dir:`ltr`},null,512),[[n,K.email]])])]),c(`div`,L,[o[11]||=c(`label`,null,`نقش`,-1),_(le,{modelValue:K.role,"onUpdate:modelValue":o[4]||=e=>K.role=e,block:``,"aria-label":`نقش کاربر`,options:be},null,8,[`modelValue`])]),c(`div`,_e,[_(b,{modelValue:K.isActive,"onUpdate:modelValue":o[5]||=e=>K.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-345a9659`]]);export{R as default}; |