Files
nademitex_admin/dist/assets/ProductsView-B6AdrIEM.js
T

1 line
16 KiB
JavaScript

import{$ as e,B as t,C as n,K as r,N as i,P as ee,Q as a,R as te,S as o,St as s,U as c,W as l,X as u,Y as d,Z as f,_t as ne,bt as re,ct as p,ht as m,mt as h,n as g,nt as _,o as v,ot as ie,p as ae,q as y,rt as b,tt as x,ut as S,vt as C,xt as w,yt as T,z as oe}from"./index-BHqDDh7X.js";import{t as se}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as E}from"./BaseSwitch-DYYNQNXf.js";import{t as ce}from"./BaseEmptyState-vNIhbGdV.js";import{n as le,t as ue}from"./AdminImagePicker-DzV79efN.js";import{t as D}from"./AdminSelect-BjB6PHdr.js";import{t as O}from"./ActiveSwitchCell-BzzYl8MV.js";import{t as de}from"./AdminCurrencyInput-B-jo-Bw8.js";var fe={class:`products-page`},pe={class:`products-page__filters admin-card`},me={class:`products-page__search`},he={key:2,class:`products-page__table admin-card desktop-only`},ge={class:`admin-table-wrap`},_e={class:`admin-table`},ve={class:`numeric`},ye={class:`numeric`},be={class:`numeric`},xe={class:`numeric`},Se={class:`status`},Ce={class:`actions`},k=[`onClick`],A={key:3,class:`compact-only admin-card-list`},we={class:`admin-card-item__header`},Te={class:`admin-card-item__title`},Ee={class:`admin-card-item__header-actions`},De=[`onClick`],Oe={class:`admin-card-item__meta`},ke={key:0,class:`admin-form__error`,role:`alert`},Ae={class:`admin-form__field`},je={class:`admin-form__row`},Me={class:`admin-form__field`},Ne={class:`admin-form__field`},Pe={class:`admin-form__field`},Fe={class:`admin-form__row`},Ie={class:`admin-form__field`},Le={class:`admin-form__field`},Re={class:`admin-form__row`},ze={class:`admin-form__field`},Be={class:`admin-form__field`},Ve={class:`admin-form__row`},He={class:`admin-form__field`},Ue=[`value`],We={class:`admin-form__field`},Ge=[`value`],Ke={class:`admin-form__row`},qe={class:`admin-form__field`},Je={class:`admin-form__field`},Ye={class:`admin-form__row`},Xe={class:`admin-form__field`},Ze={class:`admin-form__field`},Qe={class:`admin-form__field`},$e={class:`color-variants`},et={class:`color-variant__fields`},tt=[`onUpdate:modelValue`,`placeholder`],nt=[`onClick`],rt={class:`admin-form__field`},it={class:`product-images`},at=[`onClick`],ot={class:`product-images__add`},st=[`disabled`],ct={class:`admin-form__field`},lt={class:`admin-form__field`},ut=[`disabled`],j=t(b({__name:`ProductsView`,setup(t){let b=C([]),j=C([]),M=C([{value:`trousers`,label:`شلوار`},{value:`suit`,label:`کت‌وشلوار`},{value:`shirt`,label:`پیراهن`},{value:`other`,label:`سایر`}]),N=C([{value:`summer`,label:`تابستان`},{value:`winter`,label:`زمستان`},{value:`all_season`,label:`چهارفصل`}]),P=C(``),F=C(`all`),I=C(!0),L=C(null),R=C(null),z=C(``),B=C(!1),V=oe(),dt=d(()=>[{value:`all`,label:`همه کالیته‌ها`},...j.value.map(e=>({value:e.id,label:`${e.code} — ${e.name}`}))]),ft=d(()=>j.value.map(e=>({value:e.id,label:`${e.code} — ${e.name} (${e.companyName})`}))),H=()=>({catalogId:j.value[0]?.id??``,name:``,color:``,productCode:``,minMeterage:100,orderStep:50,price:null,internalStock:0,isActive:!0,usageCategory:`other`,season:`all_season`,composition:``,weaveType:``,subtitle:``,rollMeters:50,isNew:!1,colorRows:[{name:``,imageUrl:``}],extraImageUrls:[]}),U=ne(H()),pt=d(()=>L.value!==null),mt=d(()=>L.value===`edit`?`ویرایش محصول`:`افزودن محصول`),W=d(()=>U.name.trim()&&U.catalogId&&U.minMeterage>0),G=d(()=>P.value.trim().length>0||F.value!==`all`),K=d(()=>{let e=b.value;F.value!==`all`&&(e=e.filter(e=>e.catalogId===F.value));let t=P.value.trim();return t&&(e=e.filter(e=>e.name.includes(t)||e.color.includes(t)||e.productCode.includes(t)||e.catalogCode.includes(t))),e});async function ht(){I.value=!0;try{let[e,t,r]=await Promise.all([o.list(),ae.list(),n.get().catch(()=>null)]);b.value=e,j.value=t,r?.categoryDefsJson?.usage?.length&&(M.value=[...r.categoryDefsJson.usage.map(e=>({value:e.id,label:e.title})),{value:`other`,label:`سایر`}]),r?.categoryDefsJson?.seasons?.length&&(N.value=r.categoryDefsJson.seasons.map(e=>({value:e.id,label:e.title})))}catch(e){V.error(e instanceof i?e.message:`بارگذاری محصولات انجام نشد.`)}finally{I.value=!1}}ie(()=>{ht()});function gt(e){return j.value.find(t=>t.id===e)}function q(){L.value=`add`,R.value=null,Object.assign(U,H()),z.value=``}function J(e){L.value=`edit`,R.value=e.id,U.catalogId=e.catalogId,U.name=e.name,U.color=e.color,U.productCode=e.productCode,U.minMeterage=e.minMeterage,U.orderStep=e.orderStep,U.price=e.price,U.internalStock=e.internalStock,U.isActive=e.isActive,U.usageCategory=e.usageCategory??`other`,U.season=e.season??`all_season`,U.composition=e.composition??``,U.weaveType=e.weaveType??``,U.subtitle=e.subtitle??``,U.rollMeters=e.rollMeters??50,U.isNew=e.isNew??!1;let t=e.colors??[],n=e.colorImages??[],r=[...e.imageUrls??[]];if(t.length){U.colorRows=t.map((e,t)=>({name:e,imageUrl:n[t]||r[t]||``}));let e=new Set(U.colorRows.map(e=>e.imageUrl).filter(Boolean));U.extraImageUrls=r.filter(t=>!e.has(t))}else U.colorRows=[{name:e.color||``,imageUrl:r[0]||``}],U.extraImageUrls=r.slice(1);z.value=``}function Y(){U.colorRows.push({name:``,imageUrl:``})}function _t(e){if(U.colorRows.length<=1){U.colorRows[0]={name:``,imageUrl:``};return}U.colorRows.splice(e,1)}let X=C(!1);async function vt(e){let t=e.target,n=[...t.files??[]];if(t.value=``,n.length){X.value=!0,z.value=``;try{let e=await Promise.all(n.map(e=>le(e)));U.extraImageUrls=[...U.extraImageUrls,...e]}catch(e){z.value=e instanceof Error?e.message:`بارگذاری تصویر ناموفق بود.`}finally{X.value=!1}}}function yt(e){U.extraImageUrls.splice(e,1)}function Z(){L.value=null,R.value=null,z.value=``}async function Q(){if(!W.value){z.value=`نام محصول، کالیته و حداقل متراژ الزامی هستند.`;return}let e=gt(U.catalogId);if(!e){z.value=`کالیته معتبر انتخاب کنید.`;return}let t=U.colorRows.map(e=>({name:e.name.trim(),imageUrl:e.imageUrl.trim()||void 0})).filter(e=>e.name),n={usageCategory:U.usageCategory,season:U.season,composition:U.composition.trim()||null,weaveType:U.weaveType.trim()||null,subtitle:U.subtitle.trim()||null,rollMeters:U.rollMeters,isNew:U.isNew,colorsJson:t,imageUrlsJson:U.extraImageUrls},r=U.productCode.trim()||`${e.code}-NEW`;B.value=!0;try{if(L.value===`edit`&&R.value){let e=await o.update(R.value,{catalogId:U.catalogId,name:U.name.trim(),color:U.color.trim()||t[0]?.name||`—`,code:r,productCode:r,minMeterage:U.minMeterage,orderStep:U.orderStep,price:U.price,internalStock:U.internalStock,isActive:U.isActive,...n}),i=b.value.findIndex(e=>e.id===R.value);i!==-1&&(b.value[i]={...b.value[i],...e}),V.success(`اطلاعات محصول به‌روزرسانی شد.`)}else{let i=await o.create({companyId:e.companyId,catalogId:U.catalogId,name:U.name.trim(),color:U.color.trim()||t[0]?.name||`—`,code:r,productCode:r,minMeterage:U.minMeterage,orderStep:U.orderStep,price:U.price,internalStock:U.internalStock,isActive:U.isActive,...n});b.value.push(i),V.success(`محصول جدید ثبت شد.`)}Z()}catch(e){V.error(e instanceof i?e.message:`ذخیره محصول انجام نشد.`)}finally{B.value=!1}}async function $(e,t){await o.setActive(e,t)}function bt(){P.value=``,F.value=`all`}return(t,n)=>(p(),e(`div`,fe,[u(`div`,{class:`admin-page-header`},[n[18]||=u(`div`,null,[u(`h1`,{class:`admin-page-header__title`},`محصولات`)],-1),u(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:q},` افزودن محصول `)]),u(`div`,pe,[u(`div`,me,[_(ee,{name:`search`,size:18}),m(u(`input`,{"onUpdate:modelValue":n[0]||=e=>P.value=e,type:`search`,class:`products-page__search-input`,placeholder:`جستجو در نام، رنگ، کد...`},null,512),[[l,P.value]])]),_(D,{modelValue:F.value,"onUpdate:modelValue":n[1]||=e=>F.value=e,class:`products-page__catalog-filter`,"aria-label":`فیلتر کالیته`,options:dt.value},null,8,[`modelValue`,`options`])]),I.value?(p(),f(se,{key:0,variant:`table`})):K.value.length?(p(),e(`div`,he,[u(`div`,ge,[u(`table`,_e,[n[19]||=u(`thead`,null,[u(`tr`,null,[u(`th`,null,`تصویر`),u(`th`,null,`کد محصول`),u(`th`,null,`نام`),u(`th`,null,`رنگ`),u(`th`,null,`کالیته`),u(`th`,null,`شرکت`),u(`th`,{class:`numeric`},`حداقل متراژ`),u(`th`,{class:`numeric`},`ضریب`),u(`th`,{class:`numeric`},`قیمت`),u(`th`,{class:`numeric`},`موجودی`),u(`th`,{class:`status`},`وضعیت`),u(`th`,{class:`actions`},`عملیات`)])],-1),u(`tbody`,null,[(p(!0),e(y,null,S(K.value,t=>(p(),e(`tr`,{key:t.id},[u(`td`,null,[u(`span`,{class:re([`product-thumb`,{"product-thumb--empty":!t.imageUrls?.[0]}]),style:w(t.imageUrls?.[0]?{backgroundImage:`url(${t.imageUrls[0]})`}:void 0)},null,6)]),u(`td`,null,s(t.productCode),1),u(`td`,null,s(t.name),1),u(`td`,null,s(t.color),1),u(`td`,null,s(t.catalogCode),1),u(`td`,null,s(t.companyName),1),u(`td`,ve,s(T(v)(t.minMeterage))+` متر`,1),u(`td`,ye,s(T(v)(t.orderStep)),1),u(`td`,be,s(t.price?T(g)(t.price):`—`),1),u(`td`,xe,s(T(v)(t.internalStock))+` متر`,1),u(`td`,Se,[_(O,{id:t.id,modelValue:t.isActive,"onUpdate:modelValue":e=>t.isActive=e,"entity-name":t.name,"entity-type":`محصول`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),u(`td`,Ce,[u(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>J(t)},` ویرایش `,8,k)])]))),128))])])])])):(p(),f(ce,{key:1,class:`admin-card`,icon:`products`,title:G.value?`نتیجه‌ای یافت نشد`:`محصولی ثبت نشده`,description:G.value?`عبارت جستجو را تغییر دهید یا فیلترها را پاک کنید.`:`برای شروع، اولین محصول را ثبت کنید.`},{default:h(()=>[G.value?(p(),e(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:bt},` پاک کردن فیلترها `)):(p(),e(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:q},` افزودن محصول `))]),_:1},8,[`title`,`description`])),!I.value&&K.value.length?(p(),e(`div`,A,[(p(!0),e(y,null,S(K.value,t=>(p(),e(`article`,{key:t.id,class:`admin-card-item`},[u(`div`,we,[u(`p`,Te,s(t.name),1),u(`div`,Ee,[_(O,{id:t.id,modelValue:t.isActive,"onUpdate:modelValue":e=>t.isActive=e,"entity-name":t.name,"entity-type":`محصول`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`]),u(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>J(t)},` ویرایش `,8,De)])]),u(`div`,Oe,[u(`span`,null,s(t.productCode),1),u(`span`,null,s(t.color),1),u(`span`,null,`کالیته `+s(t.catalogCode),1),u(`span`,null,s(t.price?T(g)(t.price):`بدون قیمت`),1)])]))),128))])):a(``,!0),_(te,{open:pt.value,title:mt.value,size:`lg`,onClose:Z},{footer:h(()=>[u(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},`انصراف`),u(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!W.value||B.value,onClick:Q},s(L.value===`edit`?`ذخیره تغییرات`:`ثبت محصول`),9,ut)]),default:h(()=>[u(`form`,{class:`admin-form`,onSubmit:r(Q,[`prevent`])},[z.value?(p(),e(`p`,ke,s(z.value),1)):a(``,!0),u(`div`,Ae,[n[20]||=u(`label`,null,[x(`کالیته `),u(`span`,{class:`admin-form__required`},`*`)],-1),_(D,{modelValue:U.catalogId,"onUpdate:modelValue":n[2]||=e=>U.catalogId=e,block:``,"aria-label":`انتخاب کالیته`,placeholder:`انتخاب کالیته`,options:ft.value},null,8,[`modelValue`,`options`])]),u(`div`,je,[u(`div`,Me,[n[21]||=u(`label`,{for:`product-name`},[x(`نام محصول `),u(`span`,{class:`admin-form__required`},`*`)],-1),m(u(`input`,{id:`product-name`,"onUpdate:modelValue":n[3]||=e=>U.name=e,type:`text`,class:`admin-input`},null,512),[[l,U.name]])]),u(`div`,Ne,[n[22]||=u(`label`,{for:`product-color`},`رنگ / نوع`,-1),m(u(`input`,{id:`product-color`,"onUpdate:modelValue":n[4]||=e=>U.color=e,type:`text`,class:`admin-input`},null,512),[[l,U.color]])])]),u(`div`,Pe,[n[23]||=u(`label`,{for:`product-code`},`کد محصول`,-1),m(u(`input`,{id:`product-code`,"onUpdate:modelValue":n[5]||=e=>U.productCode=e,type:`text`,class:`admin-input`,dir:`ltr`},null,512),[[l,U.productCode]])]),u(`div`,Fe,[u(`div`,Ie,[n[24]||=u(`label`,{for:`product-min`},`حداقل متراژ`,-1),m(u(`input`,{id:`product-min`,"onUpdate:modelValue":n[6]||=e=>U.minMeterage=e,type:`number`,min:`1`,class:`admin-input`},null,512),[[l,U.minMeterage,void 0,{number:!0}]])]),u(`div`,Le,[n[25]||=u(`label`,{for:`product-step`},`ضریب سفارش`,-1),m(u(`input`,{id:`product-step`,"onUpdate:modelValue":n[7]||=e=>U.orderStep=e,type:`number`,min:`1`,class:`admin-input`},null,512),[[l,U.orderStep,void 0,{number:!0}]])])]),u(`div`,Re,[u(`div`,ze,[n[26]||=u(`label`,{for:`product-price`},`قیمت (تومان)`,-1),_(de,{id:`product-price`,modelValue:U.price,"onUpdate:modelValue":n[8]||=e=>U.price=e},null,8,[`modelValue`])]),u(`div`,Be,[n[27]||=u(`label`,{for:`product-stock`},`موجودی داخلی (متر)`,-1),m(u(`input`,{id:`product-stock`,"onUpdate:modelValue":n[9]||=e=>U.internalStock=e,type:`number`,min:`0`,class:`admin-input`},null,512),[[l,U.internalStock,void 0,{number:!0}]])])]),u(`div`,Ve,[u(`div`,He,[n[28]||=u(`label`,{for:`product-usage`},`کاربرد`,-1),m(u(`select`,{id:`product-usage`,"onUpdate:modelValue":n[10]||=e=>U.usageCategory=e,class:`admin-input`},[(p(!0),e(y,null,S(M.value,t=>(p(),e(`option`,{key:t.value,value:t.value},s(t.label),9,Ue))),128))],512),[[c,U.usageCategory]])]),u(`div`,We,[n[29]||=u(`label`,{for:`product-season`},`فصل`,-1),m(u(`select`,{id:`product-season`,"onUpdate:modelValue":n[11]||=e=>U.season=e,class:`admin-input`},[(p(!0),e(y,null,S(N.value,t=>(p(),e(`option`,{key:t.value,value:t.value},s(t.label),9,Ge))),128))],512),[[c,U.season]])])]),u(`div`,Ke,[u(`div`,qe,[n[30]||=u(`label`,{for:`product-composition`},`جنس / ترکیب`,-1),m(u(`input`,{id:`product-composition`,"onUpdate:modelValue":n[12]||=e=>U.composition=e,type:`text`,class:`admin-input`},null,512),[[l,U.composition]])]),u(`div`,Je,[n[31]||=u(`label`,{for:`product-weave`},`نوع بافت`,-1),m(u(`input`,{id:`product-weave`,"onUpdate:modelValue":n[13]||=e=>U.weaveType=e,type:`text`,class:`admin-input`},null,512),[[l,U.weaveType]])])]),u(`div`,Ye,[u(`div`,Xe,[n[32]||=u(`label`,{for:`product-subtitle`},`زیرعنوان`,-1),m(u(`input`,{id:`product-subtitle`,"onUpdate:modelValue":n[14]||=e=>U.subtitle=e,type:`text`,class:`admin-input`},null,512),[[l,U.subtitle]])]),u(`div`,Ze,[n[33]||=u(`label`,{for:`product-roll`},`متراژ طاقه`,-1),m(u(`input`,{id:`product-roll`,"onUpdate:modelValue":n[15]||=e=>U.rollMeters=e,type:`number`,min:`1`,class:`admin-input`},null,512),[[l,U.rollMeters,void 0,{number:!0}]])])]),u(`div`,Qe,[n[34]||=u(`label`,null,`رنگ‌ها و تصویر هر رنگ`,-1),n[35]||=u(`p`,{class:`color-variants__hint`},`برای هر رنگ یک نام و یک عکس جدا بگذارید؛ در فروشگاه با انتخاب همان رنگ، همان عکس نمایش داده می‌شود.`,-1),u(`div`,$e,[(p(!0),e(y,null,S(U.colorRows,(t,n)=>(p(),e(`div`,{key:n,class:`color-variant`},[_(ue,{"model-value":t.imageUrl||null,"onUpdate:modelValue":e=>t.imageUrl=e??``},null,8,[`model-value`,`onUpdate:modelValue`]),u(`div`,et,[m(u(`input`,{"onUpdate:modelValue":e=>t.name=e,type:`text`,class:`admin-input`,placeholder:`نام رنگ ${n+1}`},null,8,tt),[[l,t.name]]),u(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>_t(n)},` حذف این رنگ `,8,nt)])]))),128)),u(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Y},` + افزودن رنگ `)])]),u(`div`,rt,[n[36]||=u(`label`,null,`تصاویر عمومی محصول (اختیاری)`,-1),u(`div`,it,[(p(!0),e(y,null,S(U.extraImageUrls,(t,n)=>(p(),e(`div`,{key:`${n}-${t.slice(0,24)}`,class:`product-images__item`},[u(`span`,{class:`product-images__thumb`,style:w({backgroundImage:`url(${t})`})},null,4),u(`button`,{type:`button`,class:`product-images__remove`,onClick:e=>yt(n)},` حذف `,8,at)]))),128)),u(`label`,ot,[u(`input`,{type:`file`,accept:`image/*`,multiple:``,hidden:``,disabled:X.value,onChange:vt},null,40,st),x(` `+s(X.value?`...`:`+ افزودن تصویر`),1)])])]),u(`div`,ct,[_(E,{modelValue:U.isNew,"onUpdate:modelValue":n[16]||=e=>U.isNew=e,label:`محصول جدید`},null,8,[`modelValue`])]),u(`div`,lt,[_(E,{modelValue:U.isActive,"onUpdate:modelValue":n[17]||=e=>U.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-881243f1`]]);export{j as default};