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