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