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
17 KiB
JavaScript
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}; |