Files
tehran_tala/apps/admin-panel/dist/assets/AddProduct-BKH7Wuas.js
T
s.esmaeiliandClaude Opus 5 53436ec855 chore(release): prepare release/delivery + fix docker env passthrough
DEPLOY-01: docker-compose.yml passed only DATABASE_URL and PORT to the api
service, so JWT_SECRET, JWT_CUSTOMER_SECRET, OTP_MASTER_CODE and every SMS_TREZ_*
variable were silently dropped in Docker. A deployed build would have used the
development JWT fallback and would not have had the delivery master code at all,
so the demo login would have failed with no obvious cause. All are now forwarded,
defaulting to empty (which the code treats as unset); verified with
`docker compose config`.

TEST-01: test-sales-expert-roundtrip.cjs had localhost:3077 hardcoded and could
only connect by accident. Now defaults to the repo's API_PORT. 33/33.

DELIVERY.md documents env vars (names only), run/deploy commands, how migrations
run inside the container, the verification results and the known issues.

release/delivery contains both parity branches with no conflicts (fast-forward).
build 5/5, jest 45/45, admin smoke 43/43, apps smoke 43/43, B2B scan 34/34,
B2B writes 25/25, auth-smoke 32/32, typecheck clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 00:30:09 +03:30

2 lines
12 KiB
JavaScript

import{d as _e,u as pe,v as ce,x as V,b as c,c as l,w as o,A as me,j as ve,l as y,y as R,r as p,o as n,n as m,F as b,e as I,f as v,a as g,h as A,E as ye,i as j,D as ge,t as M,s as Y,z as F,k as fe}from"./index-JKzARUiG.js";import{_ as $}from"./ImageUploadInput.vue_vue_type_script_setup_true_lang-CHSXOCGA.js";import{_ as be}from"./_plugin-vue_export-helper-DlAUqK2U.js";const ke={id:"page-user-view"},we={class:"grid-2"},Ue={class:"image-grid"},xe={class:"image-grid"},Ce={class:"grid-3"},Ve={class:"grid-1"},Ie={class:"grid-3"},$e={class:"flex"},qe=["src"],he={key:1,class:"variant-thumb variant-thumb--empty"},Oe={key:0,class:"variant-picker"},je=["onClick"],Me=["src"],Ne=_e({__name:"AddProduct",setup(Se){const Z=ve(),ee=fe(),te=pe(),N=d=>!!te.hasPermission(d),q=Z.params.id,P=y(!1),L=y([]),T=y([]),G=y([]),s=R({title:"",product_code:"",show_type:3,category_id:void 0,brand_id:void 0,ciny_ids:[],body_html:"",is_active:!0,indicator_id:null,mobile_pic:null}),w=R({}),U=y([]),x=y([]),z=y([]),C=y([]),h=y(!1),O=y(null),u=R({__key:"",title:"",grams:void 0,percentage_pay:void 0,qty:0,is_active:!0,is_pre_order:!1,image_id:null,image_url:null});function H(d){u.image_id=d?d.id:null,u.image_url=d?d.url:null}const le=[{title:"تصویر",dataIndex:"image"},{title:"عنوان",dataIndex:"title"},{title:"وزن",dataIndex:"grams"},{title:"اجرت درصدی",dataIndex:"percentage_pay"},{title:"تعداد",dataIndex:"qty"},{title:"فعال",dataIndex:"is_active"},{title:" پیش سفارش",dataIndex:"is_pre_order"},{title:"عملیات",dataIndex:"op"}];function J(d,e){d&&e!==void 0?(O.value=e,Object.assign(u,d)):(O.value=null,Object.assign(u,{__key:`v-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,id:void 0,title:"",grams:void 0,percentage_pay:void 0,qty:0,is_active:!0,is_pre_order:!1,image_id:null,image_url:null})),h.value=!0}function ae(){if(!u.title){F.error("عنوان تنوع الزامی است");return}const d={...u};O.value===null?C.value.push(d):C.value[O.value]=d,h.value=!1}function oe(){return Object.keys(w).forEach(d=>delete w[d]),s.title||(w.title="لطفا مقدار را وارد کنید"),Object.keys(w).length===0}async function K(){var d,e;if(oe())try{P.value=!0;const a={...s,cats:s.category_id?[s.category_id]:[],images:U.value,images_mobile:x.value,variants:C.value.map(i=>({id:i.id,title:i.title,grams:i.grams,percentage_pay:i.percentage_pay,qty:i.qty,is_active:i.is_active,is_pre_order:i.is_pre_order,image_id:i.image_id??null}))};q?await V.put(`product/update/${q}`,a):await V.post("product/create",a),F.info("اطلاعات با موفقیت به ثبت رسید."),ee.push("/apps/product/list")}catch(a){F.error(((e=(d=a==null?void 0:a.response)==null?void 0:d.data)==null?void 0:e.message)??"خطا در ثبت اطلاعات.")}finally{P.value=!1}}return ce(async()=>{var d,e;try{const[a,i,k]=await Promise.all([V.get("brand"),V.post("category"),V.get("admin/products/collections")]);L.value=a.data,T.value=(i.data.rows??i.data).map(r=>({id:r.id,title:r.type_str?`${r.title} (${r.type_str}) `:r.title,type:r.type})),G.value=k.data}catch(a){console.log(a)}if(q)try{const{data:a}=await V.get(`product/show/${q}`);Object.assign(s,{title:a.title??"",product_code:a.product_code??"",show_type:a.show_type??3,category_id:((d=a.category)==null?void 0:d.id)??void 0,brand_id:((e=a.brand)==null?void 0:e.id)??void 0,ciny_ids:a.ciny_ids??[],body_html:a.body_html??"",is_active:a.is_active??!0,indicator_id:a.indicator_id??null,mobile_pic:a.mobile_pic??null}),U.value=a.images_gallery??[],x.value=a.images_mobile??[],z.value=a.gallery??[],C.value=(a.variants_all??[]).map((i,k)=>{var r;return{__key:i.id??`v-${k}`,id:i.id,title:i.title,grams:Number(i.grams),percentage_pay:Number(i.percentage_pay),qty:i.qty,is_active:i.is_active,is_pre_order:i.is_pre_order,image_id:i.image_id??null,image_url:((r=i.image)==null?void 0:r.url)??null}})}catch(a){console.log(a)}}),(d,e)=>{const a=p("a-form-item"),i=p("a-card"),k=p("a-input"),r=p("a-select-option"),S=p("a-select"),ie=p("a-textarea"),D=p("a-switch"),B=p("a-button"),Q=p("a-tooltip"),W=p("a-tag"),se=p("a-table"),ne=p("a-spin"),X=p("a-form"),E=p("a-input-number"),de=p("a-alert"),ue=p("a-modal");return n(),c("div",ke,[l(X,{layout:"vertical",onSubmit:me(K,["prevent"])},{default:o(()=>[l(ne,{spinning:P.value},{default:o(()=>[l(i,{title:"تصاویر محصول",class:"mb-base"},{default:o(()=>[m("div",we,[l(a,{label:"تصویر شاخص"},{default:o(()=>[l($,{modelValue:s.indicator_id,"onUpdate:modelValue":e[0]||(e[0]=t=>s.indicator_id=t),purpose:"product.indicator",placeholder:"تصویر شاخص"},null,8,["modelValue"])]),_:1}),l(a,{label:"تصویر شاخص موبایل"},{default:o(()=>[l($,{modelValue:s.mobile_pic,"onUpdate:modelValue":e[1]||(e[1]=t=>s.mobile_pic=t),purpose:"product.indicator_mobile",placeholder:"تصویر شاخص موبایل"},null,8,["modelValue"])]),_:1})]),l(a,{label:"گالری تصاویر سایت"},{default:o(()=>[m("div",Ue,[(n(!0),c(b,null,I(U.value,(t,_)=>(n(),c("div",{key:_,class:"image-grid__item"},[l($,{"model-value":t,purpose:"product.gallery",placeholder:"تصویر","onUpdate:modelValue":f=>f?U.value[_]=f:U.value.splice(_,1)},null,8,["model-value","onUpdate:modelValue"])]))),128)),l($,{"model-value":null,purpose:"product.gallery",placeholder:"افزودن تصویر","onUpdate:modelValue":e[2]||(e[2]=t=>t&&U.value.push(t))})])]),_:1}),l(a,{label:"گالری تصاویر موبایل"},{default:o(()=>[m("div",xe,[(n(!0),c(b,null,I(x.value,(t,_)=>(n(),c("div",{key:_,class:"image-grid__item"},[l($,{"model-value":t,purpose:"product.gallery_mobile",placeholder:"تصویر","onUpdate:modelValue":f=>f?x.value[_]=f:x.value.splice(_,1)},null,8,["model-value","onUpdate:modelValue"])]))),128)),l($,{"model-value":null,purpose:"product.gallery_mobile",placeholder:"افزودن تصویر","onUpdate:modelValue":e[3]||(e[3]=t=>t&&x.value.push(t))})])]),_:1})]),_:1}),l(i,{title:"اطلاعات پایه",class:"mb-base"},{default:o(()=>[m("div",Ce,[l(a,{label:"کد محصول"},{default:o(()=>[l(k,{value:s.product_code,"onUpdate:value":e[4]||(e[4]=t=>s.product_code=t)},null,8,["value"])]),_:1}),l(a,{label:"نام محصول","validate-status":w.title?"error":"",help:w.title},{default:o(()=>[l(k,{value:s.title,"onUpdate:value":e[5]||(e[5]=t=>s.title=t)},null,8,["value"])]),_:1},8,["validate-status","help"]),l(a,{label:"نوع نمایش"},{default:o(()=>[l(S,{value:s.show_type,"onUpdate:value":e[6]||(e[6]=t=>s.show_type=t)},{default:o(()=>[l(r,{value:1},{default:o(()=>[...e[22]||(e[22]=[v("سایت",-1)])]),_:1}),l(r,{value:2},{default:o(()=>[...e[23]||(e[23]=[v("گوشی",-1)])]),_:1}),l(r,{value:3},{default:o(()=>[...e[24]||(e[24]=[v("سایت و گوشی",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),l(a,{label:"دسته بندی"},{default:o(()=>[l(S,{value:s.category_id,"onUpdate:value":e[7]||(e[7]=t=>s.category_id=t),"allow-clear":"",placeholder:"انتخاب کنید"},{default:o(()=>[(n(!0),c(b,null,I(T.value,t=>(n(),g(r,{key:t.id,value:t.id},{default:o(()=>[v(M(t.title),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),l(a,{label:"برند"},{default:o(()=>[l(S,{value:s.brand_id,"onUpdate:value":e[8]||(e[8]=t=>s.brand_id=t),"allow-clear":"",placeholder:"انتخاب کنید"},{default:o(()=>[(n(!0),c(b,null,I(L.value,t=>(n(),g(r,{key:t.id,value:t.id},{default:o(()=>[v(M(t.title),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),l(a,{label:"سینی ها"},{default:o(()=>[l(S,{value:s.ciny_ids,"onUpdate:value":e[9]||(e[9]=t=>s.ciny_ids=t),mode:"multiple","allow-clear":"",placeholder:"انتخاب کنید"},{default:o(()=>[(n(!0),c(b,null,I(G.value,t=>(n(),g(r,{key:t.id,value:t.id},{default:o(()=>[v(M(t.title),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1})]),m("div",Ve,[l(a,{label:"شرح محصول (سایت)"},{default:o(()=>[l(ie,{value:s.body_html,"onUpdate:value":e[10]||(e[10]=t=>s.body_html=t),"auto-size":{minRows:4,maxRows:10}},null,8,["value"])]),_:1})]),m("div",Ie,[l(a,{label:"نمایش محصول"},{default:o(()=>[l(D,{checked:s.is_active,"onUpdate:checked":e[11]||(e[11]=t=>s.is_active=t)},null,8,["checked"])]),_:1})])]),_:1}),N("product.list.variants")?(n(),g(i,{key:0,class:"mb-8 overflow-auto"},{title:o(()=>[m("div",$e,[e[26]||(e[26]=m("div",{class:"flex-1"},"تنوع ها",-1)),N("product.list.variants.add")?(n(),g(B,{key:0,type:"primary",onClick:e[12]||(e[12]=t=>J())},{default:o(()=>[...e[25]||(e[25]=[v(" افزودن تنوع ",-1)])]),_:1})):j("",!0)])]),default:o(()=>[l(se,{columns:le,"data-source":C.value,pagination:!1,size:"small","row-key":"__key"},{bodyCell:o(({column:t,record:_,index:f})=>[t.dataIndex==="image"?(n(),c(b,{key:0},[_.image_url?(n(),c("img",{key:0,src:_.image_url,class:"variant-thumb",alt:""},null,8,qe)):(n(),c("span",he,"—"))],64)):t.dataIndex==="op"?(n(),c(b,{key:1},[N("product.list.variants.edit")?(n(),g(Q,{key:0,title:"ویرایش"},{default:o(()=>[l(A(ye),{class:"cursor-pointer mx-1 text-primary",onClick:re=>J(_,f)},null,8,["onClick"])]),_:2},1024)):j("",!0),N("product.list.variants.remove")?(n(),g(Q,{key:1,title:"حذف"},{default:o(()=>[l(A(ge),{class:"cursor-pointer mx-1 text-danger",onClick:re=>C.value.splice(f,1)},null,8,["onClick"])]),_:2},1024)):j("",!0)],64)):t.dataIndex==="is_active"?(n(),g(W,{key:2,color:_.is_active?"green":"red"},{default:o(()=>[v(M(_.is_active?"فعال":"غیر فعال"),1)]),_:2},1032,["color"])):t.dataIndex==="is_pre_order"?(n(),g(W,{key:3,color:_.is_pre_order?"blue":""},{default:o(()=>[v(M(_.is_pre_order?"بله":"خیر"),1)]),_:2},1032,["color"])):j("",!0)]),_:1},8,["data-source"])]),_:1})):j("",!0),m("div",null,[l(B,{type:"primary",class:"mr-4",onClick:K},{default:o(()=>[...e[27]||(e[27]=[v("ثبت اطلاعات",-1)])]),_:1})])]),_:1},8,["spinning"])]),_:1}),l(ue,{open:h.value,"onUpdate:open":e[21]||(e[21]=t=>h.value=t),title:O.value===null?"افزودن تنوع":"ویرایش تنوع"},{footer:o(()=>[l(B,{onClick:e[20]||(e[20]=t=>h.value=!1)},{default:o(()=>[...e[29]||(e[29]=[v("انصراف",-1)])]),_:1}),l(B,{type:"primary",onClick:ae},{default:o(()=>[...e[30]||(e[30]=[v("ثبت",-1)])]),_:1})]),default:o(()=>[l(X,{layout:"vertical"},{default:o(()=>[l(a,{label:"عنوان"},{default:o(()=>[l(k,{value:u.title,"onUpdate:value":e[13]||(e[13]=t=>u.title=t)},null,8,["value"])]),_:1}),l(a,{label:"وزن"},{default:o(()=>[l(E,{value:u.grams,"onUpdate:value":e[14]||(e[14]=t=>u.grams=t),class:"w-full",step:.001},null,8,["value"])]),_:1}),l(a,{label:"اجرت درصدی"},{default:o(()=>[l(E,{value:u.percentage_pay,"onUpdate:value":e[15]||(e[15]=t=>u.percentage_pay=t),class:"w-full",step:.1},null,8,["value"])]),_:1}),l(a,{label:"تعداد"},{default:o(()=>[l(E,{value:u.qty,"onUpdate:value":e[16]||(e[16]=t=>u.qty=t),class:"w-full"},null,8,["value"])]),_:1}),l(a,{label:"تصویر تنوع"},{default:o(()=>[z.value.length?(n(),c("div",Oe,[m("button",{type:"button",class:Y(["variant-picker__item",{"is-on":!u.image_id}]),onClick:e[17]||(e[17]=t=>H(null))},[...e[28]||(e[28]=[m("span",{class:"variant-picker__none"},"بدون تصویر",-1)])],2),(n(!0),c(b,null,I(z.value,t=>(n(),c("button",{key:t.id,type:"button",class:Y(["variant-picker__item",{"is-on":u.image_id===t.id}]),onClick:_=>H(t)},[m("img",{src:t.url,alt:""},null,8,Me)],10,je))),128))])):(n(),g(de,{key:1,type:"info","show-icon":"",message:A(q)?"برای این محصول تصویری ثبت نشده است.":"ابتدا محصول را ذخیره کنید تا بتوانید تصویر تنوع را انتخاب کنید."},null,8,["message"]))]),_:1}),l(a,{label:"فعال"},{default:o(()=>[l(D,{checked:u.is_active,"onUpdate:checked":e[18]||(e[18]=t=>u.is_active=t)},null,8,["checked"])]),_:1}),l(a,{label:" پیش سفارش"},{default:o(()=>[l(D,{checked:u.is_pre_order,"onUpdate:checked":e[19]||(e[19]=t=>u.is_pre_order=t)},null,8,["checked"])]),_:1})]),_:1})]),_:1},8,["open","title"])])}}}),De=be(Ne,[["__scopeId","data-v-d501144a"]]);export{De as default};