2 lines
51 KiB
JavaScript
2 lines
51 KiB
JavaScript
import{m as qe}from"./index-CaaMcRJv.js";import{c as a,I as mt,d as ft,m as Je,o,b as c,n as s,a as O,g as Ut,f as i,t as m,w as l,i as y,F as D,e as we,s as Ge,h as Ue,B as Tt,p as I,y as le,l as U,x as A,z as B,r as f,C as vt,G as Dt,_ as bt,u as $t,v as It}from"./index-u3RAcmrU.js";import{S as Ke}from"./SafetyCertificateOutlined-DyKj8i4A.js";var Mt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM332 240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224H332V240zm460 600H232V536h560v304zM484 701v53c0 4.4 3.6 8 8 8h40c4.4 0 8-3.6 8-8v-53a48.01 48.01 0 10-56 0z"}}]},name:"lock",theme:"outlined"};function ct(b){for(var x=1;x<arguments.length;x++){var v=arguments[x]!=null?Object(arguments[x]):{},z=Object.keys(v);typeof Object.getOwnPropertySymbols=="function"&&(z=z.concat(Object.getOwnPropertySymbols(v).filter(function(R){return Object.getOwnPropertyDescriptor(v,R).enumerable}))),z.forEach(function(R){zt(b,R,v[R])})}return b}function zt(b,x,v){return x in b?Object.defineProperty(b,x,{value:v,enumerable:!0,configurable:!0,writable:!0}):b[x]=v,b}var Qe=function(x,v){var z=ct({},x,v.attrs);return a(mt,ct({},z,{icon:Mt}),null)};Qe.displayName="LockOutlined";Qe.inheritAttrs=!1;var Rt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm192 472c0 4.4-3.6 8-8 8H328c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h368c4.4 0 8 3.6 8 8v48z"}}]},name:"minus-circle",theme:"filled"};function pt(b){for(var x=1;x<arguments.length;x++){var v=arguments[x]!=null?Object(arguments[x]):{},z=Object.keys(v);typeof Object.getOwnPropertySymbols=="function"&&(z=z.concat(Object.getOwnPropertySymbols(v).filter(function(R){return Object.getOwnPropertyDescriptor(v,R).enumerable}))),z.forEach(function(R){jt(b,R,v[R])})}return b}function jt(b,x,v){return x in b?Object.defineProperty(b,x,{value:v,enumerable:!0,configurable:!0,writable:!0}):b[x]=v,b}var Le=function(x,v){var z=pt({},x,v.attrs);return a(mt,pt({},z,{icon:Rt}),null)};Le.displayName="MinusCircleFilled";Le.inheritAttrs=!1;const At={class:"conn"},Gt={class:"status__body"},Lt={class:"status__title"},Pt={key:0,class:"status__text"},Bt={key:1,class:"kv status__rows"},Vt=["dir"],Wt={class:"step"},Ft={class:"choices",role:"radiogroup"},Yt=["aria-checked","onClick"],Ht={class:"choice__name"},Kt={class:"choice__desc"},qt={class:"step"},Jt={class:"step__title"},Qt={class:"help"},Zt={key:0,class:"token"},Xt={key:0},ea={key:1,class:"text-danger"},ta={class:"help"},aa={key:0,class:"step"},la={class:"step__lead"},na={key:0,class:"cert cert--ok"},sa={class:"cert__body"},oa={class:"cert__title"},ia={key:0,class:"kv"},ra={dir:"ltr",class:"latin"},ua={dir:"ltr",class:"mono"},da={key:1,class:"help"},va={key:1,class:"cert cert--ask"},ca={class:"cert__body"},pa={class:"kv"},ma={dir:"ltr",class:"latin"},fa={dir:"ltr",class:"mono"},ba={key:2,class:"cert cert--ok"},_a={key:3,class:"cert"},ya={key:1,class:"step"},ka={class:"kv kv--inline"},ga=["dir"],Ca={key:0,class:"text-danger mt"},wa={class:"latin"},Ea={class:"latin"},Oa={key:1,class:"help"},Sa={key:0,class:"help"},ha={class:"bar"},xa={class:"bar__note"},Na=ft({__name:"AccountingConnection",props:{overview:{},form:{},tokens:{},saving:{type:Boolean}},emits:["save","clearToken"],setup(b,{emit:x}){const v=b,z=x,R={tahesab:"تهحساب",zarrin:"زرین"},Pe=[{value:"none",label:"بدون اتصال",desc:"هیچ اطلاعاتی با حسابداری رد و بدل نمیشود."},{value:"tahesab",label:"تهحساب",desc:"اتصال به وبسرویس نرمافزار تهحساب."},{value:"zarrin",label:"زرین",desc:"اتصال به وبسرویس نرمافزار زرین."}],r=I(()=>v.form.provider==="none"?null:v.form.provider),J=I(()=>{var u;return((u=v.overview)==null?void 0:u.config)??null}),F=u=>{var t;return(t=J.value)==null?void 0:t[u]},ne=I(()=>{var u;return!!(r.value&&((u=F(r.value))!=null&&u.tokenSet))}),S=I(()=>!!r.value&&/^https:\/\//i.test(v.form[r.value].baseUrl||"")),p=(u,t)=>{var C,k,N,$,ee;return JSON.stringify(t==="none"?{provider:t}:{provider:t,baseUrl:((C=u[t])==null?void 0:C.baseUrl)??"",caCert:((k=u[t])==null?void 0:k.caCert)??"",timeoutMs:(N=u[t])==null?void 0:N.timeoutMs,dbName:t==="tahesab"?($=u.tahesab)==null?void 0:$.dbName:void 0,balanceOwesWhen:t==="zarrin"?(ee=u.zarrin)==null?void 0:ee.balanceOwesWhen:void 0})},Q=I(()=>{var u;return J.value?v.form.provider!==J.value.provider?!0:r.value?p(v.form,r.value)!==p(J.value,r.value)||!!((u=v.tokens[r.value])!=null&&u.trim()):!1:!1}),Te=I(()=>!!J.value&&J.value.provider!=="none"&&J.value.provider!==v.form.provider),me=u=>u?qe(u).format("jYYYY/jMM/jDD ساعت HH:mm"):"",G=I(()=>{const u=v.overview;if(!u)return{tone:"off",icon:Le,title:"…",text:"",rows:[]};const t=u.config;if(t.provider==="none")return{tone:"off",icon:Le,title:"اتصال خاموش است",text:"هیچ اطلاعاتی با نرمافزار حسابداری رد و بدل نمیشود."};const C=R[t.provider];if(u.inactiveReason)return{tone:"bad",icon:vt,title:`اتصال به ${C} کار نمیکند`,text:u.inactiveReason};const k=u.realtime;if(k!=null&&k.lastError)return{tone:"bad",icon:vt,title:`${C}: ارتباط برقرار نیست`,text:k.lastError};const $=[{label:"آدرس",value:t[t.provider].baseUrl,ltr:!0}];return t.provider==="tahesab"&&$.push({label:"دیتابیس",value:t.tahesab.dbName,ltr:!0}),k!=null&&k.lastOkAt&&$.push({label:"آخرین ارتباط موفق",value:me(k.lastOkAt)}),{tone:"ok",icon:Dt,title:`متصل به ${C}`,text:"",rows:$}}),Z=le({tahesab:!1,zarrin:!1});function de(){r.value&&(v.tokens[r.value]="",Z[r.value]=!1)}Je(()=>v.overview,()=>{Z.tahesab=!1,Z.zarrin=!1,h.value=null});const fe=I({get:()=>r.value?Math.round((v.form[r.value].timeoutMs??2e4)/1e3):20,set:u=>{r.value&&(v.form[r.value].timeoutMs=Math.max(3,Math.min(120,Number(u)||20))*1e3)}}),Y=U(!1),h=U(null),be=u=>{var t;return((t=u.match(/CN=([^\n,]+)/))==null?void 0:t[1])??u.replace(/\n/g,", ")},se=u=>u?qe(new Date(u)).format("jYYYY/jMM/jDD"):"—",oe=I(()=>{var u;return!!r.value&&(v.form[r.value].caCert||"")!==(((u=F(r.value))==null?void 0:u.caCert)||"")}),H=I(()=>{var u;return r.value?oe.value?h.value&&h.value.pem===v.form[r.value].caCert?h.value:null:((u=F(r.value))==null?void 0:u.caInfo)??null:null});async function ie(){var u,t;if(r.value){Y.value=!0;try{const{data:C}=await A.post("admin/accounting/certificate",{baseUrl:v.form[r.value].baseUrl});h.value=C,v.form[r.value].caCert&&C.pem.trim()===v.form[r.value].caCert.trim()?B.success("گواهی سرور همان گواهی تأییدشده است"):v.form[r.value].caCert&&(v.form[r.value].caCert="")}catch(C){B.error(((t=(u=C==null?void 0:C.response)==null?void 0:u.data)==null?void 0:t.message)??"گواهی دریافت نشد")}finally{Y.value=!1}}}function X(){!r.value||!h.value||(v.form[r.value].caCert=h.value.pem)}const _e=U(!1),j=U(null),De=U(""),$e=()=>r.value?JSON.stringify([v.form.provider,v.form[r.value],v.tokens[r.value]]):"",Ie=I(()=>!!j.value&&De.value!==$e()),Be=I(()=>{var u;return!!r.value&&!!v.form[r.value].baseUrl&&(ne.value||!!((u=v.tokens[r.value])!=null&&u.trim()))});Je(r,()=>j.value=null);async function re(){var t,C;if(!r.value)return;const u=r.value;_e.value=!0;try{const k={baseUrl:v.form[u].baseUrl,timeoutMs:v.form[u].timeoutMs,caCert:v.form[u].caCert,token:v.tokens[u]||void 0};u==="tahesab"?k.dbName=v.form.tahesab.dbName:k.balanceOwesWhen=v.form.zarrin.balanceOwesWhen,De.value=$e();const{data:N}=await A.post("admin/accounting/test",{provider:u,connection:k});j.value=N}catch(k){const N=(C=(t=k==null?void 0:k.response)==null?void 0:t.data)==null?void 0:C.message;j.value={ok:!1,error:Array.isArray(N)?N.join("، "):N??"خطا در تست اتصال"}}finally{_e.value=!1}}const Ve={version:{label:"نسخه",ltr:!0},dbType:{label:"نوع دیتابیس",ltr:!0},dbName:{label:"دیتابیس",ltr:!0},customerGroups:{label:"گروههای حساب"},message:{label:"پیام سرور"}},K=I(()=>{var C,k;const u=((C=j.value)==null?void 0:C.info)??{},t=Object.entries(Ve).filter(([N])=>u[N]!==void 0&&u[N]!==null&&u[N]!=="").map(([N,$])=>({label:$.label,value:String(u[N]),ltr:$.ltr}));return t.push({label:"زمان پاسخ",value:`${(((k=j.value)==null?void 0:k.ms)??0).toLocaleString("fa-IR")} میلیثانیه`,ltr:!1}),t}),Ee=I(()=>{var u,t;return r.value==="tahesab"&&!!((t=(u=j.value)==null?void 0:u.info)!=null&&t.dbName)&&String(j.value.info.dbName).toLowerCase()!==String(v.form.tahesab.dbName||"").toLowerCase()});return(u,t)=>{var he,Re,te;const C=f("a-tag"),k=f("a-alert"),N=f("a-input"),$=f("a-form-item"),ee=f("a-select-option"),Oe=f("a-select"),L=f("a-button"),Se=f("a-popconfirm"),V=f("a-space"),Me=f("a-input-password"),q=f("a-form"),ze=f("a-input-number"),ve=f("a-collapse-panel"),ye=f("a-collapse"),We=f("a-textarea");return o(),c("div",At,[s("div",{class:Ge(["status",`status--${G.value.tone}`])},[(o(),O(Ut(G.value.icon),{class:"status__icon"})),s("div",Gt,[s("div",Lt,[i(m(G.value.title)+" ",1),Q.value?(o(),O(C,{key:0,color:"orange",class:"status__tag"},{default:l(()=>[...t[11]||(t[11]=[i("تغییرات ذخیره نشده",-1)])]),_:1})):y("",!0)]),G.value.text?(o(),c("div",Pt,m(G.value.text),1)):y("",!0),(he=G.value.rows)!=null&&he.length?(o(),c("dl",Bt,[(o(!0),c(D,null,we(G.value.rows,_=>(o(),c(D,{key:_.label},[s("dt",null,m(_.label),1),s("dd",{dir:_.ltr?"ltr":void 0,class:Ge({latin:_.ltr})},m(_.value),11,Vt)],64))),128))])):y("",!0)])],2),s("section",Wt,[t[14]||(t[14]=s("h3",{class:"step__title"},[s("span",{class:"step__no"},"۱"),i("نرمافزار حسابداری")],-1)),s("div",Ft,[(o(),c(D,null,we(Pe,_=>s("button",{key:_.value,type:"button",role:"radio","aria-checked":b.form.provider===_.value,class:Ge(["choice",{"choice--on":b.form.provider===_.value}]),onClick:ke=>b.form.provider=_.value},[t[13]||(t[13]=s("span",{class:"choice__dot"},null,-1)),s("span",Ht,[i(m(_.label)+" ",1),_.value==="zarrin"?(o(),O(C,{key:0,color:"gold",class:"choice__tag"},{default:l(()=>[...t[12]||(t[12]=[i("آزمودهنشده",-1)])]),_:1})):y("",!0)]),s("span",Kt,m(_.desc),1)],10,Yt)),64))]),Te.value?(o(),O(k,{key:0,class:"mt",type:"info","show-icon":"",message:"با ذخیره، نرمافزار عوض میشود",description:"کارهای در صف نرمافزار قبلی متوقف میمانند (پاک نمیشوند) و لینکهای هر نرمافزار جدا نگه داشته میشوند؛ برگشت بیخطر است."})):y("",!0)]),r.value?(o(),c(D,{key:0},[s("section",qt,[s("h3",Jt,[t[15]||(t[15]=s("span",{class:"step__no"},"۲",-1)),i("اطلاعات اتصال به "+m(R[r.value]),1)]),a(q,{layout:"vertical",class:"grid"},{default:l(()=>[a($,{label:"آدرس وبسرویس",required:""},{default:l(()=>[a(N,{value:b.form[r.value].baseUrl,"onUpdate:value":t[0]||(t[0]=_=>b.form[r.value].baseUrl=_),dir:"ltr",class:"ltr",placeholder:r.value==="tahesab"?"https://192.168.1.10:8081":"http://192.168.1.10:8000/ZarrinService/accounting"},null,8,["value","placeholder"]),s("div",Qt,"آدرسی که وبسرویس "+m(R[r.value])+" روی آن در دسترس است، با پورت.",1)]),_:1}),r.value==="tahesab"?(o(),O($,{key:0,label:"نام دیتابیس (DBname)",required:""},{default:l(()=>[a(N,{value:b.form.tahesab.dbName,"onUpdate:value":t[1]||(t[1]=_=>b.form.tahesab.dbName=_),dir:"ltr",class:"ltr",placeholder:"TahesabDB"},null,8,["value"]),t[16]||(t[16]=s("div",{class:"help"},"نام دقیق دیتابیس همین شرکت. یک سرور ممکن است چند دیتابیس داشته باشد؛ بعد از تست، نام را در نتیجه چک کنید.",-1))]),_:1})):(o(),O($,{key:1,label:"علامت ماندهی بدهکار"},{default:l(()=>[a(Oe,{value:b.form.zarrin.balanceOwesWhen,"onUpdate:value":t[2]||(t[2]=_=>b.form.zarrin.balanceOwesWhen=_)},{default:l(()=>[a(ee,{value:"negative"},{default:l(()=>[...t[17]||(t[17]=[i("منفی یعنی بدهکار",-1)])]),_:1}),a(ee,{value:"positive"},{default:l(()=>[...t[18]||(t[18]=[i("مثبت یعنی بدهکار",-1)])]),_:1})]),_:1},8,["value"]),t[19]||(t[19]=s("div",{class:"help"},"در دورهی آزمایشی با یک حساب نمونه بررسی شود.",-1))]),_:1})),a($,{label:"توکن وبسرویس",required:"",class:"grid__full"},{default:l(()=>{var _;return[ne.value&&!Z[r.value]?(o(),c("div",Zt,[a(Ue(Qe),{class:"token__icon"}),(_=F(r.value))!=null&&_.tokenReadable?(o(),c("span",Xt,"توکن ذخیره شده است و نمایش داده نمیشود.")):(o(),c("span",ea,"توکن ذخیرهشده قابلخواندن نیست؛ دوباره وارد کنید.")),a(V,{class:"token__actions"},{default:l(()=>[a(L,{size:"small",onClick:t[3]||(t[3]=ke=>Z[r.value]=!0)},{default:l(()=>[...t[20]||(t[20]=[i("تغییر توکن",-1)])]),_:1}),a(Se,{title:"توکن حذف شود؟ تا توکن جدید وارد نشود اتصال کار نمیکند.","ok-text":"حذف","cancel-text":"انصراف",onConfirm:t[4]||(t[4]=ke=>z("clearToken",r.value))},{default:l(()=>[a(L,{size:"small",danger:""},{default:l(()=>[...t[21]||(t[21]=[i("حذف",-1)])]),_:1})]),_:1})]),_:1})])):(o(),c(D,{key:1},[a(Me,{value:b.tokens[r.value],"onUpdate:value":t[5]||(t[5]=ke=>b.tokens[r.value]=ke),dir:"ltr",class:"ltr",autocomplete:"new-password",placeholder:"توکن را اینجا وارد کنید"},null,8,["value"]),s("div",ta,[t[22]||(t[22]=i(" بعد از ذخیره، توکن رمز میشود و دیگر نمایش داده نمیشود. ",-1)),ne.value?(o(),c("a",{key:0,class:"link",onClick:de},"انصراف و نگهداشتن توکن فعلی")):y("",!0)])],64))]}),_:1})]),_:1}),a(ye,{ghost:"",class:"advanced"},{default:l(()=>[a(ve,{key:"adv",header:"تنظیمات پیشرفته"},{default:l(()=>[a(q,{layout:"vertical"},{default:l(()=>[a($,{label:"حداکثر زمان انتظار برای پاسخ"},{default:l(()=>[a(ze,{value:fe.value,"onUpdate:value":t[6]||(t[6]=_=>fe.value=_),min:3,max:120,"addon-after":"ثانیه"},null,8,["value"]),t[23]||(t[23]=s("div",{class:"help"},"اگر سرور حسابداری کند است بیشترش کنید. پیشفرض ۲۰ ثانیه.",-1))]),_:1})]),_:1})]),_:1})]),_:1})]),S.value?(o(),c("section",aa,[t[42]||(t[42]=s("h3",{class:"step__title"},[s("span",{class:"step__no"},"۳"),i("گواهی امنیتی سرور")],-1)),s("p",la," اتصال همیشه رمزنگاریشده و بررسیشده است. نصبهای معمول "+m(R[r.value])+" گواهی خودساخته دارند؛ در این حالت یک بار گواهی سرور را بررسی و تأیید کنید. ",1),b.form[r.value].caCert?(o(),c("div",na,[a(Ue(Ke),{class:"cert__icon"}),s("div",sa,[s("div",oa,[t[26]||(t[26]=i(" گواهی سرور تأیید شده است ",-1)),oe.value?(o(),O(C,{key:0,color:"orange"},{default:l(()=>[...t[24]||(t[24]=[i("ذخیره نشده",-1)])]),_:1})):y("",!0),(Re=H.value)!=null&&Re.expired?(o(),O(C,{key:1,color:"red"},{default:l(()=>[...t[25]||(t[25]=[i("منقضی شده",-1)])]),_:1})):y("",!0)]),H.value?(o(),c("dl",ia,[t[27]||(t[27]=s("dt",null,"صادرشده برای",-1)),s("dd",ra,m(be(H.value.subject)),1),t[28]||(t[28]=s("dt",null,"معتبر تا",-1)),s("dd",null,m(se(H.value.validTo)),1),t[29]||(t[29]=s("dt",null,"اثرانگشت",-1)),s("dd",ua,m(H.value.fingerprint256),1)])):(o(),c("div",da,"مشخصات گواهی بعد از ذخیره نمایش داده میشود."))]),a(V,{direction:"vertical",class:"cert__actions"},{default:l(()=>[a(L,{size:"small",loading:Y.value,onClick:ie},{default:l(()=>[...t[30]||(t[30]=[i("بررسی دوباره",-1)])]),_:1},8,["loading"]),a(L,{size:"small",danger:"",onClick:t[7]||(t[7]=_=>b.form[r.value].caCert="")},{default:l(()=>[...t[31]||(t[31]=[i("برداشتن",-1)])]),_:1})]),_:1})])):h.value&&!h.value.trustedBySystem?(o(),c("div",va,[a(Ue(Tt),{class:"cert__icon"}),s("div",ca,[t[35]||(t[35]=s("div",{class:"cert__title"},"این گواهی را تأیید میکنید؟",-1)),t[36]||(t[36]=s("div",{class:"help"},"اثرانگشت زیر را با گواهی نصبشده روی سرور حسابداری مقایسه کنید. اگر یکی است تأیید کنید.",-1)),s("dl",pa,[t[32]||(t[32]=s("dt",null,"صادرشده برای",-1)),s("dd",ma,m(be(h.value.subject)),1),t[33]||(t[33]=s("dt",null,"معتبر تا",-1)),s("dd",null,m(se(h.value.validTo)),1),t[34]||(t[34]=s("dt",null,"اثرانگشت",-1)),s("dd",fa,m(h.value.fingerprint256),1)]),h.value.expired?(o(),O(k,{key:0,type:"error","show-icon":"",message:"این گواهی منقضی شده است.",class:"mt"})):y("",!0)]),a(V,{direction:"vertical",class:"cert__actions"},{default:l(()=>[a(L,{type:"primary",size:"small",onClick:X},{default:l(()=>[...t[37]||(t[37]=[i("تأیید گواهی",-1)])]),_:1}),a(L,{size:"small",onClick:t[8]||(t[8]=_=>h.value=null)},{default:l(()=>[...t[38]||(t[38]=[i("انصراف",-1)])]),_:1})]),_:1})])):(te=h.value)!=null&&te.trustedBySystem?(o(),c("div",ba,[a(Ue(Ke),{class:"cert__icon"}),t[39]||(t[39]=s("div",{class:"cert__body"},[s("div",{class:"cert__title"},"گواهی سرور معتبر است"),s("div",{class:"help"},"این سرور گواهی معتبر عمومی دارد؛ کاری لازم نیست.")],-1))])):(o(),c("div",_a,[a(Ue(Ke),{class:"cert__icon cert__icon--muted"}),t[41]||(t[41]=s("div",{class:"cert__body"},[s("div",{class:"cert__title"},"گواهیای تأیید نشده"),s("div",{class:"help"},"اگر «تست اتصال» خطای گواهی داد، اینجا گواهی سرور را بررسی کنید.")],-1)),a(L,{loading:Y.value,disabled:!b.form[r.value].baseUrl,onClick:ie},{default:l(()=>[...t[40]||(t[40]=[i("بررسی گواهی سرور",-1)])]),_:1},8,["loading","disabled"])])),a(ye,{ghost:"",class:"advanced"},{default:l(()=>[a(ve,{key:"pem",header:"وارد کردن دستی گواهی (PEM)"},{default:l(()=>[a(We,{value:b.form[r.value].caCert,"onUpdate:value":t[9]||(t[9]=_=>b.form[r.value].caCert=_),dir:"ltr",class:"ltr mono",rows:5,placeholder:"-----BEGIN CERTIFICATE-----"},null,8,["value"])]),_:1})]),_:1})])):y("",!0)],64)):y("",!0),r.value&&j.value?(o(),c("section",ya,[j.value.ok?(o(),O(k,{key:0,type:"success","show-icon":"",message:`اتصال به ${R[r.value]} برقرار است`},{description:l(()=>[s("dl",ka,[(o(!0),c(D,null,we(K.value,_=>(o(),c(D,{key:_.label},[s("dt",null,m(_.label),1),s("dd",{dir:_.ltr?"ltr":void 0,class:Ge({latin:_.ltr})},m(_.value),11,ga)],64))),128))]),Ee.value?(o(),c("div",Ca,[t[43]||(t[43]=i(" دیتابیسی که وصل شد ",-1)),s("bdi",wa,m(j.value.info.dbName),1),t[44]||(t[44]=i(" است، نه ",-1)),s("bdi",Ea,m(b.form.tahesab.dbName),1),t[45]||(t[45]=i(". نام دیتابیس را چک کنید. ",-1))])):y("",!0),Ie.value?(o(),c("div",Oa,"این نتیجه برای مقادیر قبلی است؛ دوباره تست کنید.")):y("",!0)]),_:1},8,["message"])):(o(),O(k,{key:1,type:"error","show-icon":"",message:"اتصال برقرار نشد"},{description:l(()=>[s("div",null,m(j.value.error),1),Ie.value?(o(),c("div",Sa,"این نتیجه برای مقادیر قبلی است؛ دوباره تست کنید.")):y("",!0)]),_:1}))])):y("",!0),s("div",ha,[s("span",xa,[Q.value?(o(),c(D,{key:0},[i("تغییرات هنوز ذخیره نشدهاند.")],64)):r.value?(o(),c(D,{key:1},[i("«تست اتصال» مقادیر همین فرم را امتحان میکند، حتی پیش از ذخیره.")],64)):y("",!0)]),a(V,null,{default:l(()=>[r.value?(o(),O(L,{key:0,loading:_e.value,disabled:!Be.value,onClick:re},{default:l(()=>[...t[46]||(t[46]=[i("تست اتصال",-1)])]),_:1},8,["loading","disabled"])):y("",!0),a(L,{type:"primary",loading:b.saving,disabled:!Q.value,onClick:t[10]||(t[10]=_=>z("save"))},{default:l(()=>[...t[47]||(t[47]=[i("ذخیره",-1)])]),_:1},8,["loading","disabled"])]),_:1})])])}}}),Ua=bt(Na,[["__scopeId","data-v-a32bb40e"]]),Ta={key:0},Da={key:0},$a={key:1},Ia={key:2,class:"warn"},Ma={key:2},za={key:0,class:"hint"},Ra={key:0,class:"warn"},ja={key:1},Aa={class:"grid-2 mt-4"},Ga={key:0},La={class:"grid-2"},Pa={class:"grid-2"},Ba={key:1,class:"hint mb-4"},Va={key:2,class:"hint mb-4"},Wa={key:0,class:"hint"},Fa={key:4,class:"warn small"},Ya={class:"grid-2"},Ha={dir:"ltr"},Ka={dir:"ltr"},qa={class:"hint"},Ja=ft({__name:"accounting",setup(b){const x=$t(),v=n=>!!x.hasPermission(n),z={PENDING:"در صف",SENDING:"در حال ارسال",SENT:"ارسال شد",FAILED:"ناموفق",NEEDS_REVIEW:"نیاز به بررسی",RESOLVED:"حلشده"},R={PENDING:"default",SENDING:"processing",SENT:"success",FAILED:"error",NEEDS_REVIEW:"warning",RESOLVED:"default"},Pe={CUSTOMER_PUSH:"ارسال مشتری",PRODUCT_PUSH:"ساخت کارساخته",ORDER_DOCUMENT:"سند سفارش",ORDER_DOCUMENT_DELETE:"حذف سند سفارش"},r={CUSTOMER_NO_MOBILE:"حساب بدون موبایل",CUSTOMER_DUPLICATE_MOBILE:"موبایل تکراری",CUSTOMER_LINK_CONFLICT:"تداخل لینک",PRODUCT_DUPLICATE_TITLE:"عنوان تکراری محصول",PRODUCT_CODE_TAKEN:"کد محصول تکراری"},J={LINKED:"جفت با موبایل/نام",IMPORTED:"وارد شده از حسابداری",PUSHED:"ساخته شده از منتزر",MANUAL:"دستی"},F=U(!1),ne=U("connection"),S=U(null),p=le({provider:"none",tahesab:{baseUrl:"",dbName:"TahesabDB",timeoutMs:2e4,caCert:""},zarrin:{baseUrl:"",balanceOwesWhen:"negative",timeoutMs:2e4,caCert:""},features:{customers:!1,balances:!1,report:!1,products:!1,documents:!1},intervals:{customersMinutes:60,balancesMinutes:10,productsMinutes:30},mapping:{karat:750},report:{windowDays:365},documents:{triggerStatus:"DELIVERED_TO_AGENT"}}),Q=le({tahesab:"",zarrin:""}),Te=U("none"),me=I(()=>Te.value!=="none"),G=le({customerGroups:[],karSakhteGroups:[],karSakhteTypes:[]}),Z=U([]),de=U([]),fe=U(!1),Y=n=>n?`${n.id}|${n.name}`:void 0,h=n=>{if(!n)return null;const e=n.indexOf("|");return{id:n.slice(0,e),name:n.slice(e+1)}},be=(n,e)=>{const g=[...n];for(const w of e)w&&!g.some(W=>W.id===w.id&&W.name===w.name)&&g.push(w);return g.map(w=>({value:Y(w),label:w.id?`${w.name} (${w.id})`:w.name}))},se=U([]),oe=U(),H=U(),ie=U(),X=le({}),_e=I(()=>be(G.customerGroups,[...se.value.map(h),h(oe.value)])),j=I(()=>be(G.karSakhteGroups,[h(H.value),...Object.values(X).map(h)])),De=I(()=>be(G.karSakhteTypes,[h(ie.value)])),$e=[{value:"PLACED",label:"ثبت سفارش"},{value:"ADMIN_APPROVED",label:"تأیید مدیر"},{value:"SOURCING",label:"در حال تأمین"},{value:"PREPARING",label:"در حال آمادهسازی"},{value:"DELIVERED_TO_AGENT",label:"تحویل مسئول فروش"},{value:"DELIVERED_TO_CUSTOMER",label:"تحویل مشتری"}],Ie=[{key:"customers",label:"سینک مشتریان (ورود/لینک با موبایل، ساخت پس از احراز هویت)",interval:"customersMinutes",job:"customers"},{key:"balances",label:"سینک مانده (نمایش به مشتری)",interval:"balancesMinutes",job:"balances"},{key:"report",label:"گزارش مشتری از حسابداری",interval:null,job:null},{key:"products",label:"کارساخته ↔ محصول و قفل ناموجود",interval:"productsMinutes",job:"products"},{key:"documents",label:"ثبت سند سفارش (موقت)",interval:null,job:"outbox"}],Be=[{title:"قابلیت",dataIndex:"label",key:"label"},{title:"فعال",key:"on",width:80},{title:"بازه",key:"interval",width:170},{title:"وضعیت",key:"state"},{title:"",key:"run",width:110}],re=n=>{var e,g,w;return(w=(g=(e=S.value)==null?void 0:e.state)==null?void 0:g.jobs)==null?void 0:w[n]},Ve=n=>Object.entries(n).map(([e,g])=>`${e}: ${g}`).join("، "),K=le({rows:[],total:0,page:1,limit:25}),Ee=U(),u=[{title:"زمان",key:"createdAt",width:150},{title:"نوع",key:"kind",width:120},{title:"مورد",key:"entity"},{title:"وضعیت",key:"status",width:140},{title:"خطا",key:"error"},{title:"",key:"actions",width:190}],t=I(()=>{var g;const n=((g=S.value)==null?void 0:g.outbox)??{},e=(n.FAILED??0)+(n.NEEDS_REVIEW??0);return e?` (${e})`:""}),C=le({rows:[],total:0,page:1,limit:25}),k=le({rows:[],total:0,page:1,limit:25}),N=U("CUSTOMER"),$=U(""),ee=le({rows:[],scope:null}),Oe=U(""),L=U(""),Se=U(!1),V=n=>n?qe(n).format("jYYYY/jMM/jDD HH:mm"):"—",Me=n=>n==null?"—":JSON.stringify(n,null,2),q=(n,e)=>{var w,W;const g=(W=(w=n==null?void 0:n.response)==null?void 0:w.data)==null?void 0:W.message;return Array.isArray(g)?g.join("، "):g??e};function ze(n){var e;p.provider=n.provider,Te.value=n.provider;for(const g of["tahesab","zarrin"])p[g].baseUrl=n[g].baseUrl,p[g].timeoutMs=n[g].timeoutMs,p[g].caCert=n[g].caCert??"";p.tahesab.dbName=n.tahesab.dbName,p.zarrin.balanceOwesWhen=n.zarrin.balanceOwesWhen,Object.assign(p.features,n.features),Object.assign(p.intervals,n.intervals),p.mapping.karat=n.mapping.karat,p.report.windowDays=n.report.windowDays,p.documents.triggerStatus=((e=n.documents)==null?void 0:e.triggerStatus)??"DELIVERED_TO_AGENT",se.value=(n.mapping.importCustomerGroups??[]).map(Y),oe.value=Y(n.mapping.newCustomerGroup),H.value=Y(n.mapping.newKarSakhteGroup),ie.value=Y(n.mapping.newKarSakhteType);for(const g of Object.keys(X))delete X[g];for(const g of n.mapping.categoryGroups??[])X[g.categoryId]=Y(g.group)}async function ve(){try{F.value=!0;const{data:n}=await A.get("admin/accounting");S.value=n,ze(n.config)}catch(n){B.error(q(n,"خطا در دریافت تنظیمات"))}finally{F.value=!1}}async function ye(){const n={provider:p.provider,tahesab:{baseUrl:p.tahesab.baseUrl,dbName:p.tahesab.dbName,timeoutMs:p.tahesab.timeoutMs,caCert:p.tahesab.caCert},zarrin:{baseUrl:p.zarrin.baseUrl,balanceOwesWhen:p.zarrin.balanceOwesWhen,timeoutMs:p.zarrin.timeoutMs,caCert:p.zarrin.caCert},features:p.features,intervals:p.intervals,report:p.report,documents:p.documents,mapping:{karat:p.mapping.karat,importCustomerGroups:se.value.map(h).filter(Boolean),newCustomerGroup:h(oe.value),newKarSakhteGroup:h(H.value),newKarSakhteType:h(ie.value),categoryGroups:Object.entries(X).filter(([,e])=>!!e).map(([e,g])=>({categoryId:e,group:h(g)}))}};for(const e of["tahesab","zarrin"])Q[e].trim()&&(n[e].token=Q[e].trim());try{F.value=!0;const{data:e}=await A.put("admin/accounting/config",n);S.value=e,ze(e.config),Q.tahesab="",Q.zarrin="",B.success("تنظیمات ذخیره شد")}catch(e){B.error(q(e,"خطا در ذخیره"))}finally{F.value=!1}}async function We(n){try{const{data:e}=await A.put("admin/accounting/config",{[n]:{token:null}});S.value=e,B.success("توکن حذف شد")}catch(e){B.error(q(e,"خطا"))}}async function he(){fe.value=!0,de.value=[];try{const{data:n}=await A.get("admin/accounting/options",{params:{provider:p.provider}});G.customerGroups=n.customerGroups.items,G.karSakhteGroups=n.karSakhteGroups.items,G.karSakhteTypes=n.karSakhteTypes.items,Z.value=n.categories;for(const e of[n.customerGroups,n.karSakhteGroups,n.karSakhteTypes])e.ok||de.value.push(e.error)}catch(n){de.value=[q(n,"تنظیمات اتصال را اول ذخیره کنید")]}finally{fe.value=!1}}async function Re(n){try{const{data:e}=await A.post(`admin/accounting/run/${n}`);e.started?B.success("همگامسازی شروع شد؛ نتیجه چند لحظه بعد در همین صفحه دیده میشود"):B.warning(e.message),setTimeout(ve,4e3)}catch(e){B.error(q(e,"خطا"))}}async function te(n=1){const{data:e}=await A.get("admin/accounting/outbox",{params:{page:n,status:Ee.value}});Object.assign(K,e)}async function _(n){try{await A.post(`admin/accounting/outbox/${n}/retry`),B.success("دوباره در صف قرار گرفت"),te(K.page)}catch(e){B.error(q(e,"خطا"))}}async function ke(n){await A.post(`admin/accounting/outbox/${n}/resolve`,{}),te(K.page)}async function Fe(n=1){const{data:e}=await A.get("admin/accounting/issues",{params:{page:n}});Object.assign(C,e)}async function _t(n){await A.post(`admin/accounting/issues/${n}/resolve`),Fe(C.page),ve()}async function xe(n=1){const{data:e}=await A.get("admin/accounting/links",{params:{page:n,entityType:N.value,q:$.value||void 0}});Object.assign(k,e)}async function yt(n){await A.delete(`admin/accounting/links/${n}`),xe(k.page)}async function kt(){Se.value=!0;try{const{data:n}=await A.get("admin/accounting/movement",{params:{from:Oe.value||void 0,to:L.value||void 0}});Object.assign(ee,n)}catch(n){B.error(q(n,"خطا در دریافت گردش"))}finally{Se.value=!1}}return Je(ne,n=>{n==="outbox"&&te(1),n==="issues"&&Fe(1),n==="links"&&xe(1),n==="mapping"&&p.provider!=="none"&&Z.value.length===0&&he()}),It(ve),(n,e)=>{const g=f("a-tag"),w=f("a-button"),W=f("a-space"),ue=f("a-alert"),ce=f("a-tab-pane"),gt=f("a-switch"),Ye=f("a-input-number"),Ze=f("a-select-option"),pe=f("a-select"),ge=f("a-table"),Ce=f("a-form-item"),Ct=f("a-collapse-panel"),wt=f("a-collapse"),Xe=f("a-divider"),T=f("a-table-column"),Et=f("a-form"),He=f("a-popconfirm"),et=f("a-radio-button"),Ot=f("a-radio-group"),St=f("a-input-search"),tt=f("a-input"),ht=f("a-tabs"),xt=f("a-spin"),Nt=f("a-card");return o(),c("div",null,[v("config.accounting")?(o(),O(Nt,{key:0,title:"اتصال به نرمافزار حسابداری"},{extra:l(()=>[a(W,null,{default:l(()=>{var Ne;return[(Ne=S.value)!=null&&Ne.busy?(o(),O(g,{key:0,color:"processing"},{default:l(()=>[...e[17]||(e[17]=[i("همگامسازی در حال اجرا",-1)])]),_:1})):y("",!0),a(w,{size:"small",onClick:ve},{default:l(()=>[...e[18]||(e[18]=[i("تازهسازی",-1)])]),_:1})]}),_:1})]),default:l(()=>{var Ne,at,lt,nt,st,ot,it,rt;return[S.value&&S.value.config.secretKeySource!=="ACCOUNTING_SECRET_KEY"?(o(),O(ue,{key:0,type:"warning","show-icon":"",class:"mb-4",message:"متغیر ACCOUNTING_SECRET_KEY روی سرور تنظیم نشده است",description:"توکن با کلیدی مشتق از JWT_SECRET رمز میشود؛ اگر JWT_SECRET عوض شود باید توکن را دوباره وارد کنید."})):y("",!0),(Ne=S.value)!=null&&Ne.inactiveReason&&S.value.config.provider!=="none"&&ne.value!=="connection"?(o(),O(ue,{key:1,type:"error","show-icon":"",class:"mb-4",message:"همگامسازی انجام نمیشود",description:S.value.inactiveReason},null,8,["description"])):me.value&&!((st=(nt=(lt=(at=S.value)==null?void 0:at.config)==null?void 0:lt.mapping)==null?void 0:nt.importCustomerGroups)!=null&&st.length)&&((rt=(it=(ot=S.value)==null?void 0:ot.config)==null?void 0:it.features)!=null&&rt.customers)?(o(),O(ue,{key:2,type:"warning","show-icon":"",class:"mb-4",message:"سینک مشتری اجرا نمیشود",description:"هیچ گروه مشتری برای ورود انتخاب نشده است؛ در تب «نگاشت» گروههایی را که واقعاً مشتری هستند انتخاب و ذخیره کنید."})):y("",!0),a(xt,{spinning:F.value},{default:l(()=>[a(ht,{"active-key":ne.value,"onUpdate:activeKey":e[16]||(e[16]=je=>ne.value=je)},{default:l(()=>{var je;return[a(ce,{key:"connection",tab:"اتصال"},{default:l(()=>[a(Ua,{overview:S.value,form:p,tokens:Q,saving:F.value,onSave:ye,onClearToken:We},null,8,["overview","form","tokens","saving"])]),_:1}),a(ce,{key:"features",tab:"قابلیتها و زمانبندی"},{default:l(()=>{var d,E,Ae,ut;return[p.provider==="zarrin"?(o(),O(ue,{key:0,type:"info","show-icon":"",class:"mb-4",message:"درایور زرین روی نصب واقعی تست نشده است",description:"طبق تصمیم مالک، پیش از استفادهی واقعی یک دورهی آزمایشی با اسناد موقت لازم است (علامت مانده و فیلد هزینهی سنگ را بررسی کنید)."})):y("",!0),me.value&&((E=(d=S.value)==null?void 0:d.config)!=null&&E.provider)&&(p.features.balances||p.features.products)?(o(),O(ue,{key:1,type:(ut=(Ae=S.value)==null?void 0:Ae.realtime)!=null&&ut.lastError?"warning":"success","show-icon":"",class:"mb-4",message:"همگامسازی لحظهای"},{description:l(()=>{var ae,M,P,dt;return[(M=(ae=S.value)==null?void 0:ae.realtime)!=null&&M.lastOkAt?(o(),c("div",Ta,[i(" تغییرات حسابداری چند ثانیه یکبار بررسی میشود؛ آخرین بررسی: "+m(V(S.value.realtime.lastOkAt))+". ",1),S.value.realtime.lastChangeAt?(o(),c("span",Da,"آخرین تغییر دریافتشده: "+m(V(S.value.realtime.lastChangeAt))+".",1)):y("",!0)])):(o(),c("div",$a,"هنوز بررسی انجام نشده است (چند ثانیه بعد از روشنشدن شروع میشود).")),(dt=(P=S.value)==null?void 0:P.realtime)!=null&&dt.lastError?(o(),c("div",Ia,"خطای آخرین بررسی: "+m(S.value.realtime.lastError),1)):y("",!0),e[19]||(e[19]=s("div",{class:"hint"}," سفارش و ویرایش مشتری بلافاصله ارسال میشود و موجودی هنگام ثبت سفارش مستقیم از حسابداری خوانده میشود؛ اگر حسابداری آن لحظه پاسخ ندهد، آخرین موجودی معلوم ملاک است. بازههای «دقیقه»ی زیر فقط شبکهی اطمیناناند (مشتری جدید، ویرایش یا حذف در حسابداری). ",-1))]}),_:1},8,["type"])):y("",!0),a(ge,{"data-source":Ie,columns:Be,pagination:!1,"row-key":"key",size:"middle"},{bodyCell:l(({column:ae,record:M})=>[ae.key==="on"?(o(),O(gt,{key:0,checked:p.features[M.key],"onUpdate:checked":P=>p.features[M.key]=P},null,8,["checked","onUpdate:checked"])):ae.key==="interval"?(o(),c(D,{key:1},[M.interval?(o(),O(Ye,{key:0,value:p.intervals[M.interval],"onUpdate:value":P=>p.intervals[M.interval]=P,min:1,max:1440,"addon-after":"دقیقه"},null,8,["value","onUpdate:value"])):M.key==="documents"?(o(),O(pe,{key:1,value:p.documents.triggerStatus,"onUpdate:value":e[0]||(e[0]=P=>p.documents.triggerStatus=P),style:{"min-width":"220px"},title:"سند (موقت / پیشفاکتور) وقتی سفارش به این وضعیت برسد ثبت میشود"},{default:l(()=>[(o(),c(D,null,we($e,P=>a(Ze,{key:P.value,value:P.value},{default:l(()=>[i("ثبت در: "+m(P.label),1)]),_:2},1032,["value"])),64))]),_:1},8,["value"])):(o(),c("span",Ma,"—"))],64)):ae.key==="state"?(o(),c(D,{key:2},[M.job&&re(M.job)?(o(),c("div",za,[i(" آخرین اجرا: "+m(V(re(M.job).lastRunAt))+" ",1),re(M.job).lastError?(o(),c("span",Ra," — خطا: "+m(re(M.job).lastError),1)):re(M.job).summary?(o(),c("span",ja," — "+m(Ve(re(M.job).summary)),1)):y("",!0)])):y("",!0)],64)):ae.key==="run"?(o(),c(D,{key:3},[M.job?(o(),O(w,{key:0,size:"small",disabled:!me.value,onClick:P=>Re(M.job)},{default:l(()=>[...e[20]||(e[20]=[i("سینک الان",-1)])]),_:1},8,["disabled","onClick"])):y("",!0)],64)):y("",!0)]),_:1}),s("div",Aa,[a(Ce,{label:"بازهی گزارش مشتری (روز)"},{default:l(()=>[a(Ye,{value:p.report.windowDays,"onUpdate:value":e[1]||(e[1]=ae=>p.report.windowDays=ae),min:7,max:3650,class:"w-full"},null,8,["value"])]),_:1})]),e[22]||(e[22]=s("div",{class:"hint mb-4"}," اسناد سفارش همیشه «موقت» ثبت میشوند و تا حسابدار نهایی نکند روی ماندهی حسابداری اثر ندارند. سقف اعتبار سفارش همچنان با دفتر داخلی منتزر چک میشود. ",-1)),a(w,{type:"primary",onClick:ye},{default:l(()=>[...e[21]||(e[21]=[i("ذخیره",-1)])]),_:1})]}),_:1}),a(ce,{key:"mapping",tab:"نگاشت"},{default:l(()=>[a(wt,{ghost:"",class:"mb-4"},{default:l(()=>[a(Ct,{key:"guide",header:"راهنمای این تب: نگاشت چیست و چطور پر میشود؟"},{default:l(()=>[e[28]||(e[28]=s("p",null,[i(" در این صفحه «منتزر» یعنی همین سامانه: "),s("b",null,"اپ مشتری"),i(" (جایی که مشتری ثبتنام، احراز هویت و سفارش میکند و ماندهاش را میبیند) و "),s("b",null,"پنل مدیریت"),i(" (همین پنل، جایی که محصول و دستهبندی تعریف میشود). «حسابداری» یعنی نرمافزار حسابداری مغازه (تهحساب یا زرین). ")],-1)),e[29]||(e[29]=s("p",null," منتزر و حسابداری هر کدام گروهبندی خودشان را دارند. این تب میگوید هر چیز در منتزر با کدام گروه در حسابداری متناظر است؛ خودِ مشتریها و محصولها اینجا وصل نمیشوند (آنها در تب «لینکها» دیده میشوند). ",-1)),s("ol",null,[e[24]||(e[24]=s("li",null,"تنظیمات تب «اتصال» را ذخیره کنید، بعد «دریافت گروهها از حسابداری» را بزنید تا فهرستها از حسابداری پر شوند.",-1)),e[25]||(e[25]=s("li",null,[s("b",null,"گروههای حسابی که مشتری منتزر حساب میشوند:"),i(" در حسابداری صندوق، کارمند و سرمایهگذار هم «حساب» هستند. فقط گروههایی را انتخاب کنید که واقعاً مشتریاند؛ سینک مشتری فقط حسابهای این گروهها را با شماره موبایل به کاربران اپ مشتری وصل میکند. اگر خالی بماند سینک مشتری اجرا نمیشود. ")],-1)),e[26]||(e[26]=s("li",null,[s("b",null,"گروه مشتری جدید:"),i(" وقتی کاربری در اپ مشتری احراز هویت شود و در حسابداری حساب نداشته باشد، حسابش در این گروه ساخته میشود. اگر تعیین نشود، ساخت حساب در «لاگ ارسال» با وضعیت «نیاز به بررسی» میماند. ")],-1)),e[27]||(e[27]=s("li",null,[s("b",null,"عیار پایه:"),i(" عیار وزنهایی که در منتزر ثبت میشود (وزن محصولها و سفارشها؛ معمولاً ۷۵۰ = ۱۸ عیار). در سند سفارش، وزن با همین عیار به حسابداری میرود؛ در تهحساب اجرت هم روی آن اعمال میشود (مثلاً ۷۵۰ با اجرت ۱۰٪ میشود ۸۲۵). ")],-1)),p.provider==="zarrin"?(o(),c("li",Ga,[...e[23]||(e[23]=[s("b",null,"کارساخته (فقط زرین):",-1),i(" وقتی در پنل مدیریت منتزر محصول جدیدی تعریف شود، برایش یک «کارساخته» در زرین ساخته میشود. «نوع» تعیین میکند گرمی است یا تعدادی، و «گروه ساخته» جای آن در زرین است. در جدول پایین برای هر دستهبندی محصولِ منتزر میتوانید گروه جدا بدهید؛ دستهای که «پیشفرض» بماند در «گروه ساختهی پیشفرض» میرود. اگر نوع یا گروه خالی باشد، ساخت کارساخته در «لاگ ارسال» منتظر بررسی میماند. ",-1)])])):y("",!0)]),e[30]||(e[30]=s("p",{class:"hint"}," تغییر این تنظیمات فقط روی موارد بعدی اثر دارد؛ حسابها و کارساختههایی که قبلاً ساخته شدهاند جابهجا نمیشوند. در آخر «ذخیره» را بزنید. ",-1))]),_:1})]),_:1}),a(W,{class:"mb-4"},{default:l(()=>[a(w,{disabled:p.provider==="none",loading:fe.value,onClick:he},{default:l(()=>[...e[31]||(e[31]=[i("دریافت گروهها از حسابداری",-1)])]),_:1},8,["disabled","loading"]),(o(!0),c(D,null,we(de.value,d=>(o(),c("span",{key:d,class:"warn"},m(d),1))),128))]),_:1}),a(Et,{layout:"vertical"},{default:l(()=>[a(Xe,{orientation:"right"},{default:l(()=>[...e[32]||(e[32]=[i("حساب مشتریها",-1)])]),_:1}),a(ue,{type:"info","show-icon":"",class:"mb-4",message:"این بخش تعیین میکند کدام حسابهای حسابداری به کاربران اپ مشتری منتزر وصل شوند"},{description:l(()=>[...e[33]||(e[33]=[s("div",null," هر حسابی که در گروههای انتخابشده باشد و موبایلش با یک کاربر اپ مشتری منتزر یکی باشد، به آن کاربر وصل میشود و ماندهاش در اپ مشتری نمایش داده میشود. صندوق، کارمند و سرمایهگذار را انتخاب نکنید. ",-1),s("div",null," مثال: «بنکدار» و «مغازهدار» را در فیلد اول انتخاب کنید و در فیلد دوم «مغازهدار» را بگذارید. در این حالت کسی که در اپ مشتری ثبتنام و احراز هویت کند و در حسابداری حساب نداشته باشد، در گروه «مغازهدار» برایش حساب ساخته میشود. ",-1)])]),_:1}),s("div",La,[a(Ce,{label:"گروههای حسابی که مشتری منتزر حساب میشوند",extra:"فقط گروههایی که مشتریاند؛ خالی = سینک مشتری اجرا نمیشود"},{default:l(()=>[a(pe,{value:se.value,"onUpdate:value":e[2]||(e[2]=d=>se.value=d),mode:"multiple",options:_e.value,"allow-clear":"",placeholder:"هیچ گروهی انتخاب نشده"},null,8,["value","options"])]),_:1}),a(Ce,{label:"گروه حسابداریِ مشتری تازهی اپ مشتری",extra:"کاربری که در اپ مشتری احراز هویت شده و در حسابداری حساب ندارد، در این گروه برایش حساب ساخته میشود"},{default:l(()=>[a(pe,{value:oe.value,"onUpdate:value":e[3]||(e[3]=d=>oe.value=d),options:_e.value,"allow-clear":""},null,8,["value","options"])]),_:1}),a(Ce,{label:"عیار پایهی وزنهای منتزر",extra:"عیار وزن محصولها و سفارشها در منتزر؛ ۷۵۰ یعنی ۱۸ عیار"},{default:l(()=>[a(Ye,{value:p.mapping.karat,"onUpdate:value":e[4]||(e[4]=d=>p.mapping.karat=d),min:1,max:1e3,class:"w-full"},null,8,["value"])]),_:1})]),p.provider==="zarrin"?(o(),c(D,{key:0},[a(Xe,{orientation:"right"},{default:l(()=>[...e[34]||(e[34]=[i("کارساخته (زرین)",-1)])]),_:1}),a(ue,{type:"info","show-icon":"",class:"mb-4",message:"هر محصولی که در پنل مدیریت منتزر (بخش محصولات) تعریف میکنید، در زرین یک «کارساخته» میشود"},{description:l(()=>[...e[35]||(e[35]=[s("div",null,[i(" زرین برای ساختن کارساخته دو چیز لازم دارد: "),s("b",null,"نوع"),i(" (گرمی یا تعدادی) و "),s("b",null,"گروه ساخته"),i(" (کارساخته در کدام پوشهی زرین قرار بگیرد). این بخش این دو را بهجای شما انتخاب میکند تا لازم نباشد برای هر محصول جداگانه در زرین کاری انجام دهید. ")],-1),s("div",null," ستون «دستهبندی محصول در منتزر» همان دستهبندیهایی است که در پنل مدیریت برای محصولات تعریف کردهاید. مثال: اگر روبهروی «انگشتر» گروه «انگشتر» زرین را بگذارید، هر محصول تازه در دستهی انگشتر منتزر، در گروه انگشترِ زرین ساخته میشود. دستههایی که «پیشفرض» بمانند در «گروه ساختهی پیشفرض» میروند. ",-1),s("div",null," اگر نوع یا گروه خالی باشد، محصول در منتزر ساخته میشود ولی ساخت کارساخته در «لاگ ارسال» منتظر میماند تا آن را تعیین کنید و «تلاش دوباره» بزنید. محصولهایی که از قبل به کارساخته وصل شدهاند تغییری نمیکنند. ",-1)])]),_:1}),s("div",Pa,[a(Ce,{label:"نوع کارساختهی جدید (گرمی/تعدادی…)",extra:"برای محصول تازهای که در پنل مدیریت منتزر تعریف میشود"},{default:l(()=>[a(pe,{value:ie.value,"onUpdate:value":e[5]||(e[5]=d=>ie.value=d),options:De.value,"allow-clear":""},null,8,["value","options"])]),_:1}),a(Ce,{label:"گروه ساختهی پیشفرض",extra:"برای دستههایی که در جدول زیر «پیشفرض» ماندهاند"},{default:l(()=>[a(pe,{value:H.value,"onUpdate:value":e[6]||(e[6]=d=>H.value=d),options:j.value,"allow-clear":""},null,8,["value","options"])]),_:1})]),a(ge,{"data-source":Z.value,pagination:!1,"row-key":"id",size:"small",class:"mb-4"},{default:l(()=>[a(T,{title:"دستهبندی محصول در منتزر","data-index":"title"}),a(T,{title:"گروه ساخته در زرین"},{default:l(({record:d})=>[a(pe,{value:X[d.id],"onUpdate:value":E=>X[d.id]=E,options:j.value,"allow-clear":"",class:"w-full",placeholder:"پیشفرض"},null,8,["value","onUpdate:value","options"])]),_:1})]),_:1},8,["data-source"])],64)):p.provider==="tahesab"?(o(),c("div",Ba," تهحساب در API خود ساخت کارساخته ندارد: نام کار با اولین سند سفارش در تهحساب ساخته میشود و از آن به بعد به محصول لینک میشود. ")):y("",!0),de.value.length?(o(),c("div",Va," اگر فهرستی خالی است، یعنی دریافت آن از حسابداری خطا داده (پیام قرمز بالای صفحه). اتصال را بررسی کنید و دوباره «دریافت گروهها» را بزنید. ")):y("",!0),a(w,{type:"primary",onClick:ye},{default:l(()=>[...e[36]||(e[36]=[i("ذخیره",-1)])]),_:1})]),_:1})]),_:1}),a(ce,{key:"outbox",tab:`لاگ ارسال${t.value}`},{default:l(()=>[a(W,{class:"mb-4"},{default:l(()=>[a(pe,{value:Ee.value,"onUpdate:value":e[7]||(e[7]=d=>Ee.value=d),style:{width:"180px"},"allow-clear":"",placeholder:"همهی وضعیتها",onChange:e[8]||(e[8]=d=>te(1))},{default:l(()=>[(o(),c(D,null,we(z,(d,E)=>a(Ze,{key:E,value:E},{default:l(()=>[i(m(d),1)]),_:2},1032,["value"])),64))]),_:1},8,["value"]),a(w,{onClick:e[9]||(e[9]=d=>te(K.page))},{default:l(()=>[...e[37]||(e[37]=[i("تازهسازی",-1)])]),_:1})]),_:1}),a(ge,{"data-source":K.rows,columns:u,"row-key":"id",size:"small",pagination:{current:K.page,pageSize:K.limit,total:K.total,onChange:te}},{bodyCell:l(({column:d,record:E})=>[d.key==="createdAt"?(o(),c(D,{key:0},[i(m(V(E.createdAt)),1)],64)):d.key==="kind"?(o(),c(D,{key:1},[i(m(Pe[E.kind]??E.kind),1)],64)):d.key==="entity"?(o(),c(D,{key:2},[i(m(E.entityLabel??E.entityId),1)],64)):d.key==="status"?(o(),c(D,{key:3},[a(g,{color:R[E.status]},{default:l(()=>[i(m(z[E.status]??E.status),1)]),_:2},1032,["color"]),E.provider!==p.provider?(o(),c("span",Wa," ("+m(E.provider)+")",1)):y("",!0)],64)):d.key==="error"?(o(),c("span",Fa,m(E.lastError),1)):d.key==="actions"?(o(),O(W,{key:5},{default:l(()=>[["FAILED","NEEDS_REVIEW","PENDING"].includes(E.status)?(o(),O(He,{key:0,title:"پیش از تلاش دوباره، مطمئن شوید سند در حسابداری ثبت نشده است. ادامه؟",onConfirm:Ae=>_(E.id)},{default:l(()=>[a(w,{size:"small"},{default:l(()=>[...e[38]||(e[38]=[i("تلاش دوباره",-1)])]),_:1})]),_:1},8,["onConfirm"])):y("",!0),["FAILED","NEEDS_REVIEW","PENDING"].includes(E.status)?(o(),O(He,{key:1,title:"این ردیف «حلشده» علامت بخورد (دستی در حسابداری رسیدگی شده)؟",onConfirm:Ae=>ke(E.id)},{default:l(()=>[a(w,{size:"small"},{default:l(()=>[...e[39]||(e[39]=[i("حلشده",-1)])]),_:1})]),_:1},8,["onConfirm"])):y("",!0)]),_:2},1024)):y("",!0)]),expandedRowRender:l(({record:d})=>[s("div",Ya,[s("div",null,[e[40]||(e[40]=s("b",null,"درخواست",-1)),s("pre",Ha,m(Me(d.lastRequest)),1)]),s("div",null,[e[41]||(e[41]=s("b",null,"پاسخ",-1)),s("pre",Ka,m(Me(d.lastResponse)),1)])]),s("div",qa,"کد مرجع: "+m(d.externalRef??"—")+" | تلاش: "+m(d.attempts)+" | تلاش بعدی: "+m(V(d.nextAttemptAt)),1)]),_:1},8,["data-source","pagination"])]),_:1},8,["tab"]),a(ce,{key:"issues",tab:`مغایرتها${(je=S.value)!=null&&je.openIssues?` (${S.value.openIssues})`:""}`},{default:l(()=>[a(ge,{"data-source":C.rows,"row-key":"id",size:"small",pagination:{current:C.page,pageSize:C.limit,total:C.total,onChange:Fe}},{default:l(()=>[a(T,{title:"تاریخ"},{default:l(({record:d})=>[i(m(V(d.updatedAt)),1)]),_:1}),a(T,{title:"نرمافزار","data-index":"provider"}),a(T,{title:"نوع"},{default:l(({record:d})=>[i(m(r[d.kind]??d.kind),1)]),_:1}),a(T,{title:"کد حسابداری","data-index":"externalCode"}),a(T,{title:"شرح","data-index":"message"}),a(T,{title:""},{default:l(({record:d})=>[a(w,{size:"small",onClick:E=>_t(d.id)},{default:l(()=>[...e[42]||(e[42]=[i("رسیدگی شد",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data-source","pagination"])]),_:1},8,["tab"]),a(ce,{key:"links",tab:"لینکها"},{default:l(()=>[a(W,{class:"mb-4"},{default:l(()=>[a(Ot,{value:N.value,"onUpdate:value":e[10]||(e[10]=d=>N.value=d),onChange:e[11]||(e[11]=d=>xe(1))},{default:l(()=>[a(et,{value:"CUSTOMER"},{default:l(()=>[...e[43]||(e[43]=[i("مشتری",-1)])]),_:1}),a(et,{value:"PRODUCT"},{default:l(()=>[...e[44]||(e[44]=[i("کارساخته",-1)])]),_:1})]),_:1},8,["value"]),a(St,{value:$.value,"onUpdate:value":e[12]||(e[12]=d=>$.value=d),placeholder:"کد یا نام در حسابداری",style:{width:"240px"},onSearch:e[13]||(e[13]=d=>xe(1))},null,8,["value"])]),_:1}),a(ge,{"data-source":k.rows,"row-key":"id",size:"small",pagination:{current:k.page,pageSize:k.limit,total:k.total,onChange:xe}},{default:l(()=>[a(T,{title:"کد حسابداری","data-index":"externalCode"}),a(T,{title:"نام در حسابداری","data-index":"externalName"}),a(T,{title:"شناسه در منتزر","data-index":"entityId"}),a(T,{title:"منشأ"},{default:l(({record:d})=>[i(m(J[d.origin]??d.origin),1)]),_:1}),a(T,{title:"آخرین سینک"},{default:l(({record:d})=>[i(m(V(d.syncedAt)),1)]),_:1}),a(T,{title:""},{default:l(({record:d})=>[a(He,{title:"لینک حذف شود؟ در سینک بعدی دوباره با موبایل/نام جفت میشود.",onConfirm:E=>yt(d.id)},{default:l(()=>[a(w,{size:"small",danger:""},{default:l(()=>[...e[45]||(e[45]=[i("حذف لینک",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:1})]),_:1},8,["data-source","pagination"])]),_:1}),a(ce,{key:"movement",tab:"گردش کارساخته"},{default:l(()=>[a(W,{class:"mb-4"},{default:l(()=>[a(tt,{value:Oe.value,"onUpdate:value":e[14]||(e[14]=d=>Oe.value=d),dir:"ltr",placeholder:"از ۱۴۰۵/۰۷/۰۱",style:{width:"150px"}},null,8,["value"]),a(tt,{value:L.value,"onUpdate:value":e[15]||(e[15]=d=>L.value=d),dir:"ltr",placeholder:"تا ۱۴۰۵/۰۷/۳۰",style:{width:"150px"}},null,8,["value"]),a(w,{disabled:!me.value,loading:Se.value,onClick:kt},{default:l(()=>[...e[46]||(e[46]=[i("نمایش",-1)])]),_:1},8,["disabled","loading"])]),_:1}),ee.scope==="recent-documents"?(o(),O(ue,{key:0,type:"info","show-icon":"",class:"mb-4",message:"تهحساب گزارش گردش همهی حسابها را ندارد؛ این فهرست از آخرین ۱۰۰۰ سند ثبتشده ساخته شده است."})):y("",!0),a(ge,{"data-source":ee.rows,"row-key":(d,E)=>E,size:"small"},{default:l(()=>[a(T,{title:"تاریخ","data-index":"date"}),a(T,{title:"کارساخته","data-index":"itemName"}),a(T,{title:"شرح","data-index":"description"}),a(T,{title:"وزن","data-index":"weight"}),a(T,{title:"تعداد","data-index":"count"}),a(T,{title:"مبلغ","data-index":"amount"})]),_:1},8,["data-source","row-key"])]),_:1})]}),_:1},8,["active-key"])]),_:1},8,["spinning"])]}),_:1})):y("",!0)])}}}),el=bt(Ja,[["__scopeId","data-v-252fab5f"]]);export{el as default};
|