Files
tehran_taj/apps/admin-panel/dist/assets/accounting-BCZ6n3B1.js
T
mahmoodandClaude Sonnet 5.5 5ddb225813 fix(ui): act-as strip no longer covers headers; customer type and slider permission
- apps: the fixed «در حال مشاهده به‌عنوان» strip (38px) sat over the fixed page
  headers, which still sat at top: 0 (the old 30px body padding was shorter than
  the strip too). The strip's height is now one variable, --aab-h, that the
  fixed headers (PageBar, home, dashboard, toasts) use as their top.
- admin: the customer form offers only «مغازه دار اپلیکیشن» to anyone but the
  super admin; bankers and walk-in shopkeepers are listed by super-admin-only
  endpoints, so ordinary admins lost the customers they created under them.
- admin: the mobile slider rid (custom.config.statics.slider) was only under the
  «سفارشی» branch, which the permission screen hides outside level 104. Same rid,
  now listed under «مدیریت ثابت ها». Display only: the slider routes are still
  gated by config.statics.

Rebuilds admin-panel, user-app and user-app-v2 dist.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 11:16:23 +03:30

2 lines
50 KiB
JavaScript
Raw Blame History

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