Files
imen_pishghaman/apps/admin/dist/assets/CategoryEditPage-B4VYwreC.js
T
S. EsmaeiliandClaude Haiku 5.5 10e453e4be build: ship pre-built API bundle; images copy output instead of installing
- API: `pnpm build` bundles dist/ into apps/api/.output (esbuild), with
  Linux musl native packages for sharp and argon2 kept alongside
- docker/api.Dockerfile copies that output; no pnpm install on the server
- add dist/migrate.js (prisma migrate deploy equivalent, same
  _prisma_migrations table and lock) so the Prisma CLI is not needed at runtime
- pnpm-workspace: supportedArchitectures for linux/x64/musl
- admin: apps/admin/.env.production sets VITE_SITE_URL for the production build
- drop NPM_REGISTRY / SITE_URL build args from compose and .env.example
- gitignore: anchor node_modules rules so pre-built node_modules are committed
- README: describe the pre-built deploy flow

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-24 14:41:31 +03:30

1 line
9.0 KiB
JavaScript

import{_ as e,t}from"./VuesaxIcon-B2OgulS6.js";import{Bt as n,Ct as r,It as i,Lt as a,Nt as o,Rt as s,Tt as c,_t as l,a as u,ct as d,ft as f,gt as p,ht as m,i as h,kt as g,lt as _,n as v,o as y,ot as b,pt as x,st as S,ut as C}from"./index-BuGK6ptM.js";import{t as w}from"./PageHeader-3Ryvg2HD.js";import{n as T,t as E}from"./FormField-CiVT7mqC.js";import{t as D}from"./IconSelect-rJLPzIXV.js";import{n as ee,t as te}from"./ListEditor-C8F91lSJ.js";import{t as ne}from"./slug-Flyc3fOh.js";var re={class:`lg:hidden mb-4 overflow-x-auto pb-1 scrollbar-none`},ie={class:`flex items-center gap-1.5 min-w-max bg-gray-100 p-1 rounded-xl`},O={class:`rounded-full bg-gray-200 px-1.5 py-0.2 text-[10px]`},k={class:`grid gap-6 xl:grid-cols-3`},A={class:`space-y-6 xl:col-span-2`},j={class:`grid gap-x-4 md:grid-cols-2`},M={class:`grid gap-x-4 md:grid-cols-2`},N={class:`space-y-6`},P={class:`ms-2`},F={class:`lg:hidden fixed bottom-0 inset-x-0 z-30 border-t border-gray-200 bg-white/95 px-4 py-2.5 backdrop-blur-md shadow-lg flex items-center justify-between gap-3`},I={class:`flex items-center gap-2`},L={class:`text-xs font-medium text-gray-700`},R={class:`flex items-center gap-2`},z=[`href`],B=l({__name:`CategoryEditPage`,setup(l){let B=u(),V=y(),H=_(()=>B.params.id?Number(B.params.id):null),{model:U,validate:W,handleError:G,reset:K}=T(e,{slug:``,code:``,name:``,nameEn:``,shortDesc:``,fullDesc:``,icon:``,coverImageId:null,isPublished:!0,seoTitle:``,seoDescription:``,groups:[]}),q=i(null),J=i({}),Y=i(!1),X=i(!1);async function Z(){if(H.value){Y.value=!0;try{let e=await v(`/admin/categories/${H.value}`);K({slug:e.slug,code:e.code,name:e.name,nameEn:e.nameEn,shortDesc:e.shortDesc,fullDesc:e.fullDesc,icon:e.icon,coverImageId:e.coverImageId,isPublished:e.isPublished,seoTitle:e.seoTitle,seoDescription:e.seoDescription,groups:e.groups.map(e=>({id:e.id,slug:e.slug,name:e.name,desc:e.desc}))}),q.value=e.coverImage,J.value=Object.fromEntries(e.groups.map(e=>[e.id,e.productCount]))}catch(e){b.error(h(e))}finally{Y.value=!1}}}function ae(e){q.value=e,U.value.coverImageId=e.id}async function Q(){let e=W();if(e){X.value=!0;try{let t=await v(H.value?`/admin/categories/${H.value}`:`/admin/categories`,{method:H.value?`PUT`:`POST`,body:e});b.success(`دسته ذخیره شد`),H.value||await V.replace({name:`category-edit`,params:{id:t.id}}),await Z()}catch(e){G(e)}finally{X.value=!1}}}let oe=()=>({slug:``,name:``,desc:``}),se=e=>{let t=e.id?J.value[e.id]:0;return t?`${e.name} (${t} محصول)`:e.name},$=i(`main`);return r(Z),(e,r)=>{let i=g(`a-button`),l=g(`a-input`),u=g(`a-textarea`),h=g(`a-card`),_=g(`a-switch`),v=g(`a-form`),y=g(`a-spin`);return c(),x(d,null,[p(w,{title:H.value?`ویرایش دسته: ${a(U).name}`:`دسته جدید`,back:`/categories`},{default:o(()=>[p(i,{type:`primary`,loading:X.value,onClick:Q},{icon:o(()=>[p(t,{name:`save-2`,size:16})]),default:o(()=>[r[18]||=m(` ذخیره `,-1)]),_:1},8,[`loading`])]),_:1},8,[`title`]),C(`div`,re,[C(`div`,ie,[C(`button`,{type:`button`,class:s([`rounded-lg px-3 py-1.5 text-xs font-bold transition-all`,$.value===`main`?`bg-white text-orange-600 shadow-sm`:`text-gray-600`]),onClick:r[0]||=e=>$.value=`main`},` اطلاعات اصلی `,2),C(`button`,{type:`button`,class:s([`rounded-lg px-3 py-1.5 text-xs font-bold transition-all flex items-center gap-1`,$.value===`groups`?`bg-white text-orange-600 shadow-sm`:`text-gray-600`]),onClick:r[1]||=e=>$.value=`groups`},[r[19]||=C(`span`,null,`زیرگروه‌ها`,-1),C(`span`,O,n(a(U).groups.length),1)],2),C(`button`,{type:`button`,class:s([`rounded-lg px-3 py-1.5 text-xs font-bold transition-all`,$.value===`media`?`bg-white text-orange-600 shadow-sm`:`text-gray-600`]),onClick:r[2]||=e=>$.value=`media`},` کاور و آیکون `,2),C(`button`,{type:`button`,class:s([`rounded-lg px-3 py-1.5 text-xs font-bold transition-all`,$.value===`seo`?`bg-white text-orange-600 shadow-sm`:`text-gray-600`]),onClick:r[3]||=e=>$.value=`seo`},` سئو و انتشار `,2)])]),p(y,{spinning:Y.value},{default:o(()=>[p(v,{layout:`vertical`,class:`pb-20 lg:pb-0`,onSubmit:S(Q,[`prevent`])},{default:o(()=>[C(`div`,k,[C(`div`,A,[p(h,{title:`اطلاعات اصلی`,class:s($.value!==`main`&&`max-lg:hidden`)},{default:o(()=>[C(`div`,j,[p(E,{path:`name`,label:`نام دسته`,required:``},{default:o(()=>[p(l,{value:a(U).name,"onUpdate:value":r[4]||=e=>a(U).name=e},null,8,[`value`])]),_:1}),p(E,{path:`nameEn`,label:`نام انگلیسی`,hint:`زیر نام دسته نمایش داده می‌شود`},{default:o(()=>[p(l,{value:a(U).nameEn,"onUpdate:value":r[5]||=e=>a(U).nameEn=e,class:`ltr-input`},null,8,[`value`])]),_:1}),p(E,{path:`slug`,label:`اسلاگ (آدرس صفحه)`,hint:`آدرس: /categories/${a(U).slug||`...`}`,required:``},{default:o(()=>[p(l,{value:a(U).slug,"onUpdate:value":r[7]||=e=>a(U).slug=e,class:`ltr-input`},{suffix:o(()=>[C(`a`,{class:`text-xs`,onClick:r[6]||=e=>a(U).slug=a(ne)(a(U).nameEn)},`ساخت از نام انگلیسی`)]),_:1},8,[`value`])]),_:1},8,[`hint`]),p(E,{path:`code`,label:`کد دسته`,required:``},{default:o(()=>[p(l,{value:a(U).code,"onUpdate:value":r[8]||=e=>a(U).code=e,class:`ltr-input`,placeholder:`IP-C09`},null,8,[`value`])]),_:1}),p(E,{path:`shortDesc`,label:`توضیح کوتاه`,class:`md:col-span-2`},{default:o(()=>[p(u,{value:a(U).shortDesc,"onUpdate:value":r[9]||=e=>a(U).shortDesc=e,"auto-size":{minRows:2,maxRows:4}},null,8,[`value`])]),_:1}),p(E,{path:`fullDesc`,label:`توضیح کامل (بالای صفحه دسته)`,class:`md:col-span-2`},{default:o(()=>[p(u,{value:a(U).fullDesc,"onUpdate:value":r[10]||=e=>a(U).fullDesc=e,"auto-size":{minRows:3,maxRows:8}},null,8,[`value`])]),_:1})])]),_:1},8,[`class`]),p(h,{title:`زیرگروه‌ها`,"body-style":{background:`#fafafa`},class:s($.value!==`groups`&&`max-lg:hidden`)},{default:o(()=>[r[20]||=C(`p`,{class:`mb-4 text-sm text-gray-500`},` زیرگروه‌ها در صفحه دسته به‌صورت فیلتر نمایش داده می‌شوند. با حذف یک زیرگروه، محصولات آن بدون زیرگروه می‌مانند. `,-1),p(te,{modelValue:a(U).groups,"onUpdate:modelValue":r[11]||=e=>a(U).groups=e,create:oe,"add-label":`افزودن زیرگروه`,"item-title":se},{default:o(({item:e,index:t})=>[C(`div`,M,[p(E,{path:`groups.${t}.name`,label:`نام`,required:``},{default:o(()=>[p(l,{value:e.name,"onUpdate:value":t=>e.name=t},null,8,[`value`,`onUpdate:value`])]),_:2},1032,[`path`]),p(E,{path:`groups.${t}.slug`,label:`اسلاگ`,required:``},{default:o(()=>[p(l,{value:e.slug,"onUpdate:value":t=>e.slug=t,class:`ltr-input`},null,8,[`value`,`onUpdate:value`])]),_:2},1032,[`path`]),p(E,{path:`groups.${t}.desc`,label:`توضیح`,class:`md:col-span-2`},{default:o(()=>[p(u,{value:e.desc,"onUpdate:value":t=>e.desc=t,"auto-size":{minRows:1,maxRows:4}},null,8,[`value`,`onUpdate:value`])]),_:2},1032,[`path`])])]),_:1},8,[`modelValue`])]),_:1},8,[`class`])]),C(`div`,N,[p(h,{title:`انتشار`,class:s($.value!==`seo`&&`max-lg:hidden`)},{default:o(()=>[p(E,{path:`isPublished`},{default:o(()=>[p(_,{checked:a(U).isPublished,"onUpdate:checked":r[12]||=e=>a(U).isPublished=e},null,8,[`checked`]),C(`span`,P,n(a(U).isPublished?`در سایت نمایش داده می‌شود`:`مخفی`),1)]),_:1})]),_:1},8,[`class`]),p(h,{title:`تصویر کاور`,class:s($.value!==`media`&&`max-lg:hidden`)},{default:o(()=>[p(E,{path:`coverImageId`},{default:o(()=>[p(ee,{url:q.value?.url,clearable:``,onPick:ae,onClear:r[13]||=e=>{q.value=null,a(U).coverImageId=null}},null,8,[`url`])]),_:1})]),_:1},8,[`class`]),p(h,{title:`آیکون`,class:s($.value!==`media`&&`max-lg:hidden`)},{default:o(()=>[p(E,{path:`icon`},{default:o(()=>[p(D,{modelValue:a(U).icon,"onUpdate:modelValue":r[14]||=e=>a(U).icon=e,"allow-clear":``},null,8,[`modelValue`])]),_:1})]),_:1},8,[`class`]),p(h,{title:`سئو`,class:s($.value!==`seo`&&`max-lg:hidden`)},{default:o(()=>[p(E,{path:`seoTitle`,label:`عنوان صفحه`,hint:`خالی = نام دسته`},{default:o(()=>[p(l,{value:a(U).seoTitle,"onUpdate:value":r[15]||=e=>a(U).seoTitle=e,maxlength:120,"show-count":``},null,8,[`value`])]),_:1}),p(E,{path:`seoDescription`,label:`توضیحات متا`,hint:`خالی = توضیح کامل`},{default:o(()=>[p(u,{value:a(U).seoDescription,"onUpdate:value":r[16]||=e=>a(U).seoDescription=e,maxlength:300,"show-count":``,"auto-size":{minRows:3}},null,8,[`value`])]),_:1})]),_:1},8,[`class`])])])]),_:1})]),_:1},8,[`spinning`]),C(`div`,F,[C(`div`,I,[p(_,{checked:a(U).isPublished,"onUpdate:checked":r[17]||=e=>a(U).isPublished=e,size:`small`},null,8,[`checked`]),C(`span`,L,n(a(U).isPublished?`انتشار`:`پیش‌نویس`),1)]),C(`div`,R,[a(U).slug?(c(),x(`a`,{key:0,href:`/categories/${a(U).slug}`,target:`_blank`,rel:`noopener`},[p(i,{size:`middle`,class:`!px-3`,title:`مشاهده در سایت`},{icon:o(()=>[p(t,{name:`eye`,size:16})]),_:1})],8,z)):f(``,!0),p(i,{type:`primary`,size:`middle`,class:`!font-bold !px-5`,loading:X.value,onClick:Q},{icon:o(()=>[p(t,{name:`save-2`,size:16})]),default:o(()=>[r[21]||=m(` ذخیره تغییرات `,-1)]),_:1},8,[`loading`])])])],64)}}});export{B as default};