Files
nademitex_admin/dist/assets/CategoriesView-jQSu6NG7.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
17 KiB
JavaScript

import{$ as e,B as t,C as n,Ct as r,G as i,J as a,N as o,Q as s,V as c,X as l,Z as u,dt as d,et as f,gt as p,ht as m,it as h,lt as g,rt as _,st as ee,tt as v,vt as y,yt as b,z as te}from"./index-B2VD3zy8.js";import{t as ne}from"./AdminPageSkeleton-BJpm6oxf.js";import{t as x}from"./BaseSwitch-dp2xMemS.js";import{t as S}from"./AdminImagePicker-C0OGC-bB.js";import{t as C}from"./AdminSelect-BeLNl2Qz.js";var w={class:`category-icon`,"aria-hidden":`true`},T=[`width`,`height`,`stroke`,`stroke-width`],E=[`width`,`height`,`stroke`,`stroke-width`],D=[`width`,`height`,`stroke`,`stroke-width`],O=[`width`,`height`,`stroke`],k=[`width`,`height`,`stroke`],A=[`width`,`height`,`stroke`],j=c(h({__name:`CategoryIcon`,props:{name:{},size:{default:18},color:{default:`currentColor`},strokeWidth:{default:1.5}},setup(n){let r=n,i={bolt:`vuesax-linear:flash`,feather:`vuesax-linear:pen-add`,diamond:`vuesax-linear:diamonds`,grid:`vuesax-linear:element-3`,bag:`vuesax-linear:shopping-bag`,weight:`vuesax-linear:shopping-bag`,"id-card":`vuesax-linear:personalcard`,catalog:`vuesax-linear:category`,headset:`vuesax-linear:headphone`,home:`vuesax-linear:home`},a=l(()=>i[r.name]);return(r,i)=>(g(),f(`span`,w,[a.value?(g(),s(t,{key:0,icon:a.value,size:n.size,"stroke-width":n.strokeWidth,color:n.color},null,8,[`icon`,`size`,`stroke-width`,`color`])):n.name===`shirt`?(g(),f(`svg`,{key:1,width:n.size,height:n.size,viewBox:`0 0 24 24`,fill:`none`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},[...i[0]||=[u(`path`,{d:`M8.25 5.25 12 7.75l3.75-2.5 2.25 2.75L16 9.5V18.5a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V9.5L6 8l2.25-2.75Z`},null,-1),u(`path`,{d:`M12 7.75V18.5`},null,-1)]],8,T)):n.name===`suit`?(g(),f(`svg`,{key:2,width:n.size,height:n.size,viewBox:`0 0 24 24`,fill:`none`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},[...i[1]||=[u(`path`,{d:`M7.5 5.5h9l2 3v10.5a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1V8.5l2-3Z`},null,-1),u(`path`,{d:`M12 5.5v13`},null,-1),u(`path`,{d:`M7.5 9 12 11.75 16.5 9`},null,-1),u(`path`,{d:`M10.25 5.5V4a1.75 1.75 0 0 1 3.5 0v1.5`},null,-1)]],8,E)):n.name===`trousers`?(g(),f(`svg`,{key:3,width:n.size,height:n.size,viewBox:`0 0 24 24`,fill:`none`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},[...i[2]||=[u(`path`,{d:`M8 4.5h8v4.25l-1.75 11H13l-1-9.5-1 9.5H7.75L6 8.75V4.5Z`},null,-1),u(`path`,{d:`M12 8.75v11`},null,-1),u(`path`,{d:`M8 7.25h8`},null,-1)]],8,D)):n.name===`ruler`?(g(),f(`svg`,{key:4,width:n.size,height:n.size,viewBox:`0 0 24 24`,fill:`none`,stroke:n.color,"stroke-width":`1.6`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[...i[3]||=[v(`<rect x="3" y="8" width="18" height="8" rx="1.5" data-v-76e4dc13></rect><path d="M7 8v3" data-v-76e4dc13></path><path d="M10 8v4" data-v-76e4dc13></path><path d="M13 8v3" data-v-76e4dc13></path><path d="M16 8v4" data-v-76e4dc13></path>`,5)]],8,O)):n.name===`composition`?(g(),f(`svg`,{key:5,width:n.size,height:n.size,viewBox:`0 0 24 24`,fill:`none`,stroke:n.color,"stroke-width":`1.6`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[...i[4]||=[u(`path`,{d:`M12 3.5 20 8v8l-8 4.5L4 16V8l8-4.5Z`},null,-1)]],8,k)):n.name===`weave`?(g(),f(`svg`,{key:6,width:n.size,height:n.size,viewBox:`0 0 24 24`,fill:`none`,stroke:n.color,"stroke-width":`1.6`,"stroke-linecap":`round`},[...i[5]||=[v(`<path d="M6 4v16" data-v-76e4dc13></path><path d="M10 4v16" data-v-76e4dc13></path><path d="M14 4v16" data-v-76e4dc13></path><path d="M18 4v16" data-v-76e4dc13></path><path d="M4 8h16" data-v-76e4dc13></path><path d="M4 12h16" data-v-76e4dc13></path><path d="M4 16h16" data-v-76e4dc13></path>`,7)]],8,A)):e(``,!0)]))}}),[[`__scopeId`,`data-v-76e4dc13`]]),re={class:`categories-admin`},ie={class:`admin-page-header`},ae=[`disabled`],oe={key:1,class:`categories-admin__grid`},se={class:`admin-card categories-panel`},ce={class:`categories-panel__head`},le={key:0,class:`categories-panel__add`},ue={key:1,class:`categories-panel__empty`},M={key:2,class:`categories-panel__list`},N={class:`category-row__fields`},P={class:`category-row__line`},F=[`onUpdate:modelValue`],I={class:`category-row__line`},L=[`onUpdate:modelValue`],R={class:`category-row__line`},z={class:`category-row__id`,dir:`ltr`},B=[`onClick`],V={class:`admin-card categories-panel`},H={class:`categories-panel__head`},U={key:0,class:`categories-panel__add`},W={key:1,class:`categories-panel__empty`},de={key:2,class:`categories-panel__list`},fe={class:`category-row__fields`},pe={class:`category-row__line`},me=[`onUpdate:modelValue`],he={class:`category-row__line`},ge=[`onUpdate:modelValue`],_e={class:`category-row__line`},ve=[`onUpdate:modelValue`],ye={class:`category-row__line`},be={class:`category-row__id`,dir:`ltr`},xe=[`onClick`],G=c(h({__name:`CategoriesView`,setup(t){let c=b([]),h=b([]),v=y({}),w=b(!0),T=b(!1),E=te(),D=b(!1),O=b(!1),k=[{value:`shirt`,label:`پیراهن`},{value:`suit`,label:`کت‌شلوار`},{value:`trousers`,label:`شلوار`},{value:`bolt`,label:`آذرخش`},{value:`feather`,label:`پر`},{value:`diamond`,label:`الماس`},{value:`grid`,label:`شبکه`},{value:`bag`,label:`کیف`},{value:`id-card`,label:`کارت`},{value:`catalog`,label:`کالیته`},{value:`headset`,label:`پشتیبانی`},{value:`home`,label:`خانه`},{value:`ruler`,label:`عرض`},{value:`composition`,label:`جنس`},{value:`weight`,label:`وزن`},{value:`weave`,label:`نوع بافت`}];function A(e){return e===`shirt`?`shirt`:e===`suit`?`suit`:e===`trousers`?`trousers`:`grid`}function G(e){return e===`summer`?`bolt`:e===`winter`?`feather`:`diamond`}let K=y({id:``,title:``,subtitle:`مشاهده محصولات`,icon:`grid`,showTitle:!0,showSubtitle:!0,showIcon:!0}),q=y({id:``,title:``,description:``,ctaLabel:`مشاهده محصولات`,icon:`diamond`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0});function J(e){return e!==!1}let Y=l(()=>c.value.map(e=>e.id)),X=l(()=>h.value.map(e=>e.id));function Z(e){return e.trim().toLowerCase().replace(/\s+/g,`_`).replace(/[^a-z0-9_\u0600-\u06ff-]/gi,``).slice(0,48)}function Q(){let e=[...Y.value,...X.value];for(let t of e)t in v||(v[t]=null);for(let t of Object.keys(v))e.includes(t)||delete v[t]}async function $(){w.value=!0;try{let e=await n.get();c.value=e.categoryDefsJson?.usage?.length?e.categoryDefsJson.usage.map(e=>({id:e.id,title:e.title,subtitle:e.subtitle||`مشاهده محصولات`,icon:e.icon||A(e.id),showTitle:J(e.showTitle),showSubtitle:J(e.showSubtitle),showIcon:J(e.showIcon)})):[{id:`trousers`,title:`پارچه‌های شلواری`,subtitle:`مشاهده محصولات`,icon:`trousers`,showTitle:!0,showSubtitle:!0,showIcon:!0},{id:`suit`,title:`پارچه‌های کت‌شلواری`,subtitle:`مشاهده محصولات`,icon:`suit`,showTitle:!0,showSubtitle:!0,showIcon:!0},{id:`shirt`,title:`پارچه‌های پیراهنی`,subtitle:`مشاهده محصولات`,icon:`shirt`,showTitle:!0,showSubtitle:!0,showIcon:!0}],h.value=e.categoryDefsJson?.seasons?.length?e.categoryDefsJson.seasons.map(e=>({id:e.id,title:e.title,description:e.description||``,ctaLabel:e.ctaLabel||`مشاهده محصولات`,icon:e.icon||G(e.id),showTitle:J(e.showTitle),showDescription:J(e.showDescription),showCta:J(e.showCta),showIcon:J(e.showIcon)})):[{id:`summer`,title:`تابستانه`,description:`سبک، خنک و مناسب فصل گرم`,ctaLabel:`مشاهده محصولات`,icon:`bolt`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0},{id:`winter`,title:`زمستانه`,description:`گرم و مناسب فصل سرد`,ctaLabel:`مشاهده محصولات`,icon:`feather`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0},{id:`all_season`,title:`چهارفصل`,description:`مناسب استفاده در بیشتر فصل‌های سال`,ctaLabel:`مشاهده محصولات`,icon:`diamond`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0}],Q();let t=e.categoryImagesJson??{};for(let e of Object.keys(v))v[e]=t[e]??null}catch(e){E.error(e instanceof o?e.message:`بارگذاری دسته‌ها ناموفق بود.`),c.value.length||(c.value=[{id:`trousers`,title:`پارچه‌های شلواری`,subtitle:`مشاهده محصولات`,icon:`trousers`,showTitle:!0,showSubtitle:!0,showIcon:!0},{id:`suit`,title:`پارچه‌های کت‌شلواری`,subtitle:`مشاهده محصولات`,icon:`suit`,showTitle:!0,showSubtitle:!0,showIcon:!0},{id:`shirt`,title:`پارچه‌های پیراهنی`,subtitle:`مشاهده محصولات`,icon:`shirt`,showTitle:!0,showSubtitle:!0,showIcon:!0}]),h.value.length||(h.value=[{id:`summer`,title:`تابستانه`,description:`سبک، خنک و مناسب فصل گرم`,ctaLabel:`مشاهده محصولات`,icon:`bolt`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0},{id:`winter`,title:`زمستانه`,description:`گرم و مناسب فصل سرد`,ctaLabel:`مشاهده محصولات`,icon:`feather`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0},{id:`all_season`,title:`چهارفصل`,description:`مناسب استفاده در بیشتر فصل‌های سال`,ctaLabel:`مشاهده محصولات`,icon:`diamond`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0}]),Q()}finally{w.value=!1}}function Se(){let e=Z(K.id||K.title),t=K.title.trim();if(!e||!t){E.error(`شناسه و عنوان دسته کاربرد الزامی است.`);return}if(Y.value.includes(e)||X.value.includes(e)){E.error(`این شناسه از قبل وجود دارد.`);return}c.value.push({id:e,title:t,subtitle:K.subtitle.trim()||`مشاهده محصولات`,icon:K.icon,showTitle:K.showTitle,showSubtitle:K.showSubtitle,showIcon:K.showIcon}),v[e]=null,K.id=``,K.title=``,K.subtitle=`مشاهده محصولات`,K.icon=`grid`,K.showTitle=!0,K.showSubtitle=!0,K.showIcon=!0,D.value=!1}function Ce(){let e=Z(q.id||q.title),t=q.title.trim();if(!e||!t){E.error(`شناسه و عنوان دسته فصل الزامی است.`);return}if(Y.value.includes(e)||X.value.includes(e)){E.error(`این شناسه از قبل وجود دارد.`);return}h.value.push({id:e,title:t,description:q.description.trim(),ctaLabel:q.ctaLabel.trim()||`مشاهده محصولات`,icon:q.icon,showTitle:q.showTitle,showDescription:q.showDescription,showCta:q.showCta,showIcon:q.showIcon}),v[e]=null,q.id=``,q.title=``,q.description=``,q.ctaLabel=`مشاهده محصولات`,q.icon=`diamond`,q.showTitle=!0,q.showDescription=!0,q.showCta=!0,q.showIcon=!0,O.value=!1}function we(e){if(c.value.length<=1){E.error(`حداقل یک دسته کاربرد لازم است.`);return}c.value=c.value.filter(t=>t.id!==e),delete v[e]}function Te(e){if(h.value.length<=1){E.error(`حداقل یک دسته فصل لازم است.`);return}h.value=h.value.filter(t=>t.id!==e),delete v[e]}async function Ee(){T.value=!0;try{let e={};for(let[t,n]of Object.entries(v))n&&(e[t]=n);await n.update({categoryDefsJson:{usage:c.value,seasons:h.value},categoryImagesJson:e}),E.success(`دسته‌بندی‌ها ذخیره شد.`),await $()}catch(e){E.error(e instanceof o?e.message:`ذخیره دسته‌بندی‌ها ناموفق بود.`)}finally{T.value=!1}}return ee(()=>{$()}),(t,n)=>(g(),f(`div`,re,[u(`div`,ie,[n[8]||=u(`div`,null,[u(`h1`,{class:`admin-page-header__title`},`دسته‌بندی‌ها`),u(`p`,{class:`admin-page-header__sub`},` دسته‌های کاربرد و فصل را اضافه کنید. با کلید «نمایش / مخفی» مشخص کنید عنوان و توضیح در اپ کاربر دیده شود. `)],-1),u(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:T.value||w.value,onClick:Ee},r(T.value?`در حال ذخیره...`:`ذخیره تغییرات`),9,ae)]),w.value?(g(),s(ne,{key:0,variant:`cards`})):(g(),f(`div`,oe,[u(`section`,se,[u(`div`,ce,[u(`div`,null,[n[9]||=u(`h2`,null,`بر اساس کاربرد`,-1),u(`p`,null,r(c.value.length)+` دسته برای فیلتر محصول در اپ کاربر`,1)]),u(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:n[0]||=e=>D.value=!D.value},r(D.value?`بستن فرم`:`+ افزودن دسته`),1)]),D.value?(g(),f(`div`,le,[p(u(`input`,{"onUpdate:modelValue":n[1]||=e=>K.title=e,class:`admin-input`,type:`text`,placeholder:`عنوان (مثلاً پارچه‌های مانتویی)`},null,512),[[i,K.title]]),p(u(`input`,{"onUpdate:modelValue":n[2]||=e=>K.id=e,class:`admin-input`,type:`text`,dir:`ltr`,placeholder:`شناسه انگلیسی (اختیاری، مثلاً mantle)`},null,512),[[i,K.id]]),p(u(`input`,{"onUpdate:modelValue":n[3]||=e=>K.subtitle=e,class:`admin-input`,type:`text`,placeholder:`زیرعنوان`},null,512),[[i,K.subtitle]]),u(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Se},`ثبت در لیست`)])):e(``,!0),c.value.length?(g(),f(`div`,M,[(g(!0),f(a,null,d(c.value,t=>(g(),f(`article`,{key:t.id,class:`category-row`},[_(S,{"model-value":v[t.id],"onUpdate:modelValue":e=>v[t.id]=e},null,8,[`model-value`,`onUpdate:modelValue`]),u(`div`,N,[u(`div`,P,[p(u(`input`,{"onUpdate:modelValue":e=>t.title=e,class:`admin-input`,type:`text`,placeholder:`عنوان دسته`},null,8,F),[[i,t.title]]),_(x,{modelValue:t.showTitle,"onUpdate:modelValue":e=>t.showTitle=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),u(`div`,I,[p(u(`input`,{"onUpdate:modelValue":e=>t.subtitle=e,class:`admin-input`,type:`text`,placeholder:`زیرعنوان`},null,8,L),[[i,t.subtitle]]),_(x,{modelValue:t.showSubtitle,"onUpdate:modelValue":e=>t.showSubtitle=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),u(`div`,R,[_(C,{modelValue:t.icon,"onUpdate:modelValue":e=>t.icon=e,options:k,"aria-label":`آیکون`,block:``},{"option-leading":m(({option:t})=>[t?(g(),s(j,{key:0,name:t.value,size:18},null,8,[`name`])):e(``,!0)]),_:1},8,[`modelValue`,`onUpdate:modelValue`]),_(x,{modelValue:t.showIcon,"onUpdate:modelValue":e=>t.showIcon=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),u(`p`,z,r(t.id),1)]),u(`button`,{type:`button`,class:`category-row__remove`,onClick:e=>we(t.id)},`حذف`,8,B)]))),128))])):(g(),f(`p`,ue,`هنوز دسته‌ای ثبت نشده. با «افزودن دسته» شروع کنید.`))]),u(`section`,V,[u(`div`,H,[u(`div`,null,[n[10]||=u(`h2`,null,`بر اساس فصل`,-1),u(`p`,null,r(h.value.length)+` دسته فصلی برای فیلتر محصول`,1)]),u(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:n[4]||=e=>O.value=!O.value},r(O.value?`بستن فرم`:`+ افزودن دسته`),1)]),O.value?(g(),f(`div`,U,[p(u(`input`,{"onUpdate:modelValue":n[5]||=e=>q.title=e,class:`admin-input`,type:`text`,placeholder:`عنوان (مثلاً بهاره)`},null,512),[[i,q.title]]),p(u(`input`,{"onUpdate:modelValue":n[6]||=e=>q.id=e,class:`admin-input`,type:`text`,dir:`ltr`,placeholder:`شناسه انگلیسی (اختیاری، مثلاً spring)`},null,512),[[i,q.id]]),p(u(`input`,{"onUpdate:modelValue":n[7]||=e=>q.description=e,class:`admin-input`,type:`text`,placeholder:`توضیح`},null,512),[[i,q.description]]),u(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Ce},`ثبت در لیست`)])):e(``,!0),h.value.length?(g(),f(`div`,de,[(g(!0),f(a,null,d(h.value,t=>(g(),f(`article`,{key:t.id,class:`category-row`},[_(S,{"model-value":v[t.id],"onUpdate:modelValue":e=>v[t.id]=e},null,8,[`model-value`,`onUpdate:modelValue`]),u(`div`,fe,[u(`div`,pe,[p(u(`input`,{"onUpdate:modelValue":e=>t.title=e,class:`admin-input`,type:`text`,placeholder:`عنوان دسته`},null,8,me),[[i,t.title]]),_(x,{modelValue:t.showTitle,"onUpdate:modelValue":e=>t.showTitle=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),u(`div`,he,[p(u(`input`,{"onUpdate:modelValue":e=>t.description=e,class:`admin-input`,type:`text`,placeholder:`توضیح`},null,8,ge),[[i,t.description]]),_(x,{modelValue:t.showDescription,"onUpdate:modelValue":e=>t.showDescription=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),u(`div`,_e,[p(u(`input`,{"onUpdate:modelValue":e=>t.ctaLabel=e,class:`admin-input`,type:`text`,placeholder:`متن لینک (مشاهده محصولات)`},null,8,ve),[[i,t.ctaLabel]]),_(x,{modelValue:t.showCta,"onUpdate:modelValue":e=>t.showCta=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),u(`div`,ye,[_(C,{modelValue:t.icon,"onUpdate:modelValue":e=>t.icon=e,options:k,"aria-label":`آیکون`,block:``},{"option-leading":m(({option:t})=>[t?(g(),s(j,{key:0,name:t.value,size:18},null,8,[`name`])):e(``,!0)]),_:1},8,[`modelValue`,`onUpdate:modelValue`]),_(x,{modelValue:t.showIcon,"onUpdate:modelValue":e=>t.showIcon=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),u(`p`,be,r(t.id),1)]),u(`button`,{type:`button`,class:`category-row__remove`,onClick:e=>Te(t.id)},`حذف`,8,xe)]))),128))])):(g(),f(`p`,W,`هنوز دسته‌ای ثبت نشده. با «افزودن دسته» شروع کنید.`))])]))]))}}),[[`__scopeId`,`data-v-092c0b6f`]]);export{G as default};