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