1 line
7.4 KiB
JavaScript
1 line
7.4 KiB
JavaScript
import{A as e,At as t,D as n,N as r,Ot as ee,Q as i,U as a,W as o,c as s,d as c,et as l,g as u,h as d,jt as f,l as p,m,r as h,s as g,t as _,u as v}from"./_plugin-vue_export-helper-vx-p5QAT.js";import{a as te,d as y,t as b}from"./http-CTjL79ty.js";import{V as x,m as S}from"./index-BWgYBNME.js";import{t as C}from"./AdminPageSkeleton-DacAHji8.js";import{t as w}from"./BaseSwitch-Dz4ODUhf.js";import{t as ne}from"./BaseEmptyState-88fQ29rO.js";import{t as re}from"./AdminImagePicker-DhyB3HhH.js";import{t as T}from"./AdminSelect-hgn_nYC2.js";function E(e){let t=e.trim();if(!t)return!0;if(t.startsWith(`/`))return/^\/[^\s]*$/.test(t);try{let e=new URL(t);return e.protocol===`http:`||e.protocol===`https:`}catch{return!1}}var D={class:`banners-page`},O={key:2,class:`admin-card`},k={class:`admin-table`},A={key:0,class:`banner-sub`},j={class:`actions`},M=[`onClick`],N=[`onClick`],P={class:`field`},F={class:`field`},I={class:`field__head`},L={class:`field`},R={class:`field__head`},z={class:`field`},ie={class:`field__head`},B={class:`field`},V={class:`field`},H={class:`field`},U=[`disabled`],W=_(u({__name:`BannersView`,setup(u){let _=[{value:`home_hero`,label:`خانه — بنر اصلی`},{value:`products_hero`,label:`لیست محصولات`},{value:`categories_hero`,label:`دستهبندیها`}],W=l([]),G=l(!0),K=l(!1),q=l(!1),J=l(null),Y=te(),X=i({slot:`home_hero`,title:``,subtitle:``,ctaLabel:``,ctaLink:`/categories`,bannerLink:``,imageUrl:null,displayOrder:0,isActive:!0,showTitle:!0,showSubtitle:!0,showCta:!0}),Z=g(()=>J.value?`ویرایش بنر`:`افزودن بنر`);function ae(e){return _.find(t=>t.value===e)?.label??e}async function Q(){G.value=!0;try{W.value=await S.list()}catch(e){Y.error(e instanceof b?e.message:`بارگذاری بنرها ناموفق بود.`)}finally{G.value=!1}}function $(){J.value=null,Object.assign(X,{slot:`home_hero`,title:``,subtitle:``,ctaLabel:`مشاهده کالکشن`,ctaLink:`/categories`,bannerLink:``,imageUrl:null,displayOrder:W.value.length,isActive:!0,showTitle:!0,showSubtitle:!0,showCta:!0}),q.value=!0}function oe(e){J.value=e.id,Object.assign(X,{slot:e.slot,title:e.title,subtitle:e.subtitle,ctaLabel:e.ctaLabel,ctaLink:e.ctaLink||`/categories`,bannerLink:e.bannerLink||``,imageUrl:e.imageUrl||null,displayOrder:e.displayOrder,isActive:e.isActive,showTitle:e.showTitle!==!1,showSubtitle:e.showSubtitle!==!1,showCta:e.showCta!==!1}),q.value=!0}async function se(){if(X.title.trim()){if(!E(X.bannerLink)){Y.error(`لینک بنر معتبر نیست. مسیر داخلی (مثل /categories) یا آدرس https وارد کنید.`);return}K.value=!0;try{let e={slot:X.slot,title:X.title.trim(),subtitle:X.subtitle.trim()||null,ctaLabel:X.ctaLabel.trim()||null,ctaLink:X.ctaLink.trim()||null,bannerLink:X.bannerLink.trim()||null,imageUrl:X.imageUrl,displayOrder:X.displayOrder,isActive:X.isActive,showTitle:X.showTitle,showSubtitle:X.showSubtitle,showCta:X.showCta};J.value?await S.update(J.value,e):await S.create(e),q.value=!1,Y.success(`بنر ذخیره شد.`),await Q()}catch(e){Y.error(e instanceof b?e.message:`ذخیره بنر ناموفق بود.`)}finally{K.value=!1}}}async function ce(e){if(window.confirm(`بنر «${e.title}» حذف شود؟`))try{await S.remove(e.id),Y.success(`بنر حذف شد.`),await Q()}catch(e){Y.error(e instanceof b?e.message:`حذف بنر ناموفق بود.`)}}return n(()=>{Q()}),(n,i)=>(e(),c(`div`,D,[s(`div`,{class:`admin-page-header`},[i[14]||=s(`div`,null,[s(`h1`,{class:`admin-page-header__title`},`بنرها`),s(`p`,{class:`admin-page-header__sub`},`بنر بخشهای مختلف اپ کاربر را از اینجا مدیریت کنید.`)],-1),s(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:$},`افزودن بنر`)]),G.value?(e(),p(C,{key:0,variant:`table`})):W.value.length?(e(),c(`div`,O,[s(`table`,k,[i[15]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`تصویر`),s(`th`,null,`عنوان`),s(`th`,null,`بخش`),s(`th`,null,`دکمه`),s(`th`,null,`فعال`),s(`th`,{class:`actions`},`عملیات`)])],-1),s(`tbody`,null,[(e(!0),c(h,null,r(W.value,n=>(e(),c(`tr`,{key:n.id},[s(`td`,null,[s(`span`,{class:ee([`banner-thumb`,{"banner-thumb--empty":!n.imageUrl}]),style:t(n.imageUrl?{backgroundImage:`url(${n.imageUrl})`}:void 0)},null,6)]),s(`td`,null,[s(`strong`,null,f(n.title),1),n.subtitle?(e(),c(`p`,A,f(n.subtitle),1)):v(``,!0)]),s(`td`,null,f(ae(n.slot)),1),s(`td`,null,f(n.ctaLabel||`—`),1),s(`td`,null,f(n.isActive?`بله`:`خیر`),1),s(`td`,j,[s(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>oe(n)},` ویرایش `,8,M),s(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>ce(n)},` حذف `,8,N)])]))),128))])])])):(e(),p(ne,{key:1,title:`بنری ثبت نشده`,description:`اولین بنر خانه را اضافه کنید.`},{default:a(()=>[s(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:$},` افزودن بنر `)]),_:1})),d(x,{open:q.value,title:Z.value,onClose:i[13]||=e=>q.value=!1},{footer:a(()=>[s(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:i[12]||=e=>q.value=!1},`انصراف`),s(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!X.title.trim()||K.value,onClick:se},f(K.value?`در حال ذخیره...`:`ذخیره`),9,U)]),default:a(()=>[s(`label`,P,[i[16]||=m(` بخش نمایش `,-1),d(T,{modelValue:X.slot,"onUpdate:modelValue":i[0]||=e=>X.slot=e,options:_},null,8,[`modelValue`])]),s(`div`,F,[s(`span`,I,[i[17]||=m(` عنوان `,-1),d(w,{modelValue:X.showTitle,"onUpdate:modelValue":i[1]||=e=>X.showTitle=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`])]),o(s(`input`,{"onUpdate:modelValue":i[2]||=e=>X.title=e,class:`admin-input`},null,512),[[y,X.title]])]),s(`div`,L,[s(`span`,R,[i[18]||=m(` زیرعنوان `,-1),d(w,{modelValue:X.showSubtitle,"onUpdate:modelValue":i[3]||=e=>X.showSubtitle=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`])]),o(s(`input`,{"onUpdate:modelValue":i[4]||=e=>X.subtitle=e,class:`admin-input`},null,512),[[y,X.subtitle]])]),s(`div`,z,[s(`span`,ie,[i[19]||=m(` متن دکمه `,-1),d(w,{modelValue:X.showCta,"onUpdate:modelValue":i[5]||=e=>X.showCta=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`])]),o(s(`input`,{"onUpdate:modelValue":i[6]||=e=>X.ctaLabel=e,class:`admin-input`},null,512),[[y,X.ctaLabel]])]),s(`label`,B,[i[20]||=m(` لینک دکمه `,-1),o(s(`input`,{"onUpdate:modelValue":i[7]||=e=>X.ctaLink=e,class:`admin-input`,dir:`ltr`,placeholder:`/categories`},null,512),[[y,X.ctaLink]])]),s(`label`,V,[i[21]||=m(` لینک بنر `,-1),o(s(`input`,{"onUpdate:modelValue":i[8]||=e=>X.bannerLink=e,class:`admin-input`,dir:`ltr`,placeholder:`/categories یا https://...`},null,512),[[y,X.bannerLink]]),i[22]||=s(`span`,{class:`field-hint`},`با کلیک روی تصویر بنر در اپ؛ خالی = بدون لینک روی تصویر`,-1)]),s(`label`,H,[i[23]||=m(`ترتیب نمایش`,-1),o(s(`input`,{"onUpdate:modelValue":i[9]||=e=>X.displayOrder=e,type:`number`,min:`0`,class:`admin-input`},null,512),[[y,X.displayOrder,void 0,{number:!0}]])]),d(re,{modelValue:X.imageUrl,"onUpdate:modelValue":i[10]||=e=>X.imageUrl=e,label:`تصویر بنر`},null,8,[`modelValue`]),d(w,{modelValue:X.isActive,"onUpdate:modelValue":i[11]||=e=>X.isActive=e,label:`فعال`},null,8,[`modelValue`])]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-2c8696f3`]]);export{W as default}; |