Files
nademitex_admin/dist/assets/UsersView-DIwx8h0p.js
T
mohmdsdgandCopilot 9854842ada fix(auth): secure sessions and app routing
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>
2026-09-24 20:14:11 +03:30

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};