added dist to docker
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
node_modules
|
||||
.git
|
||||
.env
|
||||
.env.development
|
||||
.env.production
|
||||
.env.local
|
||||
*.log
|
||||
.DS_Store
|
||||
.idea
|
||||
.fleet
|
||||
.cursor
|
||||
+2
-2
@@ -9,8 +9,8 @@ lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
dist-ssr
|
||||
#dist
|
||||
#dist-ssr
|
||||
coverage
|
||||
*.local
|
||||
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
# ایمیج اجرا: dist از گیت میآید. بیلد روی سیستم لوکال است؛ npm داخل داکر اجرا نمیشود.
|
||||
ARG NODE_IMAGE=node:22-alpine
|
||||
FROM ${NODE_IMAGE}
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY dist ./dist
|
||||
COPY scripts/serve-admin.mjs ./scripts/serve-admin.mjs
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
|
||||
RUN chmod +x /entrypoint.sh \
|
||||
&& test -f /app/dist/index.html
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV VITE_BASE_PATH=/admin/
|
||||
ENV PORT=9191
|
||||
|
||||
EXPOSE 9191
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
CMD ["node", "scripts/serve-admin.mjs"]
|
||||
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
RewriteBase /admin/
|
||||
|
||||
# Serve existing files and directories
|
||||
RewriteCond %{REQUEST_FILENAME} -f [OR]
|
||||
RewriteCond %{REQUEST_FILENAME} -d
|
||||
RewriteRule ^ - [L]
|
||||
|
||||
# SPA fallback
|
||||
RewriteRule ^ index.html [L]
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_mime.c>
|
||||
AddType application/javascript .js
|
||||
AddType text/css .css
|
||||
AddType application/wasm .wasm
|
||||
</IfModule>
|
||||
+1
@@ -0,0 +1 @@
|
||||
import{A as e,B as t,H as n,K as r,O as i,Q as a,T as o,U as s,V as c,ct as l,ft as u,j as d,lt as f,q as p,tt as m,ut as h,z as g}from"./index-dG7O4aC2.js";var _=[`title`],v={key:0,class:`base-switch__label`},y={class:`base-switch__control`},b=[`id`,`checked`,`disabled`,`aria-checked`,`aria-label`],x={class:`base-switch__track`,"aria-hidden":`true`},S={class:`base-switch__thumb`},C={key:0,class:`base-switch__spinner`},w=d(p({__name:`BaseSwitch`,props:{modelValue:{type:Boolean},disabled:{type:Boolean},loading:{type:Boolean},error:{type:Boolean},label:{},activeText:{default:`فعال`},inactiveText:{default:`غیرفعال`},id:{}},emits:[`update:modelValue`],setup(e,{emit:r}){let i=e,o=r,c=g(()=>i.id??`switch-${crypto.randomUUID().slice(0,8)}`),l=g(()=>i.modelValue?i.activeText:i.inactiveText);function d(e){let t=e.target,n=t.checked;t.checked=i.modelValue,!(i.disabled||i.loading)&&o(`update:modelValue`,n)}return(r,i)=>(a(),s(`label`,{class:h([`base-switch`,{"base-switch--disabled":e.disabled||e.loading,"base-switch--error":e.error}]),title:l.value},[e.label?(a(),s(`span`,v,u(e.label),1)):n(``,!0),t(`span`,y,[t(`input`,{id:c.value,class:`base-switch__input`,type:`checkbox`,role:`switch`,checked:e.modelValue,disabled:e.disabled||e.loading,"aria-checked":e.modelValue,"aria-label":e.label||l.value,onChange:d},null,40,b),t(`span`,x,[t(`span`,S,[e.loading?(a(),s(`span`,C)):n(``,!0)])])])],10,_))}}),[[`__scopeId`,`data-v-0410eed4`]]),T={class:`base-empty__icon`,"aria-hidden":`true`},E={class:`base-empty__title`},D={key:0,class:`base-empty__description`},O={key:1,class:`base-empty__actions`},k=d(p({__name:`BaseEmptyState`,props:{icon:{default:`file`},title:{},description:{},compact:{type:Boolean}},emits:[`action`,`secondary`],setup(e){return(i,c)=>(a(),s(`div`,{class:h([`base-empty`,{"base-empty--compact":e.compact}])},[t(`div`,T,[r(o,{name:e.icon,size:e.compact?28:36},null,8,[`name`,`size`])]),t(`h3`,E,u(e.title),1),e.description?(a(),s(`p`,D,u(e.description),1)):n(``,!0),i.$slots.default||i.$slots.secondary?(a(),s(`div`,O,[m(i.$slots,`default`,{},void 0,!0),m(i.$slots,`secondary`,{},void 0,!0)])):n(``,!0)],2))}}),[[`__scopeId`,`data-v-47ea81e4`]]);function A(e=480){return new Promise(t=>{window.setTimeout(t,e)})}function j(t){let n=l(null),r=l(null),i=e();async function a(e,a){if(n.value)return a;let o=!a;if(!o&&t.confirmOff&&!await t.confirmOff())return a;n.value=e,r.value=null;let s=a;try{return await t.onPersist(o),i.success(t.successMessage?.(o)??(o?`وضعیت فعال شد.`:`وضعیت غیرفعال شد.`)),o}catch{return r.value=e,i.error(t.errorMessage??`بهروزرسانی وضعیت انجام نشد.`),s}finally{n.value=null}}function o(e){return n.value===e}function s(e){return r.value===e}return{toggle:a,isLoading:o,hasError:s}}var M=p({__name:`ActiveSwitchCell`,props:{id:{},modelValue:{type:Boolean},entityName:{},entityType:{},persist:{type:Function}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,{toggle:o,isLoading:s,hasError:l}=j({onPersist:async e=>{n.persist?await n.persist(n.id,e):await A()},successMessage:e=>e?`${n.entityType??`مورد`} «${n.entityName}» فعال شد.`:`${n.entityType??`مورد`} «${n.entityName}» غیرفعال شد.`});async function u(e){if(e===n.modelValue)return;let t=n.entityType??`مورد`;if(!await i({title:e?`فعالسازی ${t}`:`غیرفعالسازی ${t}`,message:e?`آیا از فعال کردن «${n.entityName}» مطمئن هستید؟`:`آیا از غیرفعال کردن «${n.entityName}» مطمئن هستید؟`,tone:e?`primary`:`danger`,confirmLabel:e?`فعال کردن`:`غیرفعال کردن`,cancelLabel:`انصراف`}))return;let a=await o(n.id,n.modelValue);r(`update:modelValue`,a)}return(t,n)=>(a(),c(w,{"model-value":e.modelValue,loading:f(s)(e.id),error:f(l)(e.id),"onUpdate:modelValue":u},null,8,[`model-value`,`loading`,`error`]))}});export{k as n,w as r,M as t};
|
||||
+1
@@ -0,0 +1 @@
|
||||
.base-switch[data-v-0410eed4]{cursor:pointer;flex-direction:column;gap:6px;display:inline-flex}.base-switch--disabled[data-v-0410eed4]{cursor:not-allowed;opacity:.72}.base-switch--error .base-switch__track[data-v-0410eed4]{box-shadow:0 0 0 2px #dc35452e}.base-switch__label[data-v-0410eed4]{color:var(--color-text);font-size:.8125rem;font-weight:600}.base-switch__control[data-v-0410eed4]{align-items:center;display:inline-flex}.base-switch__input[data-v-0410eed4]{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.base-switch__input:focus-visible+.base-switch__track[data-v-0410eed4]{outline:2px solid var(--color-primary);outline-offset:2px}.base-switch__track[data-v-0410eed4]{width:44px;height:24px;transition:background var(--transition-fast);background:#cbd5e1;border-radius:999px;flex-shrink:0;position:relative}.base-switch__input:checked+.base-switch__track[data-v-0410eed4]{background:var(--color-success)}.base-switch__thumb[data-v-0410eed4]{width:20px;height:20px;box-shadow:var(--shadow-sm);transition:transform var(--transition-fast);background:#fff;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute;top:2px;right:2px}.base-switch__input:checked+.base-switch__track .base-switch__thumb[data-v-0410eed4]{transform:translate(-20px)}.base-switch__spinner[data-v-0410eed4]{border:2px solid #e2e8f0;border-top-color:var(--color-primary);border-radius:50%;width:12px;height:12px;animation:.7s linear infinite base-switch-spin-0410eed4}@keyframes base-switch-spin-0410eed4{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.base-switch__track[data-v-0410eed4],.base-switch__thumb[data-v-0410eed4],.base-switch__spinner[data-v-0410eed4]{transition:none;animation:none}}.base-empty[data-v-47ea81e4]{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:40px 24px;display:flex}.base-empty--compact[data-v-47ea81e4]{padding:28px 16px}.base-empty__icon[data-v-47ea81e4]{border-radius:var(--radius-md);background:var(--color-border-light);width:56px;height:56px;color:var(--color-text-muted);justify-content:center;align-items:center;margin-bottom:4px;display:flex}.base-empty--compact .base-empty__icon[data-v-47ea81e4]{width:48px;height:48px}.base-empty__title[data-v-47ea81e4]{color:var(--color-text);margin:0;font-size:.9375rem;font-weight:700}.base-empty__description[data-v-47ea81e4]{max-width:28rem;color:var(--color-text-muted);margin:0;font-size:.8125rem;line-height:1.6}.base-empty__actions[data-v-47ea81e4]{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:8px;display:flex}
|
||||
+1
@@ -0,0 +1 @@
|
||||
import{Q as e,U as t,j as n,o as r,q as i,t as a,ut as o,z as s}from"./index-dG7O4aC2.js";var c=[`id`,`value`,`placeholder`,`disabled`],l=n(i({__name:`AdminCurrencyInput`,props:{modelValue:{default:null},placeholder:{default:``},disabled:{type:Boolean,default:!1},id:{},inputClass:{default:`admin-input`},allowEmpty:{type:Boolean,default:!0}},emits:[`update:modelValue`],setup(n,{emit:i}){let l=n,u=i,d=s(()=>l.modelValue==null||!Number.isFinite(l.modelValue)?``:r(l.modelValue));function f(e){let t=e.target,n=a(t.value);if(!n){u(`update:modelValue`,l.allowEmpty?null:0),t.value=``;return}let i=Number(n);u(`update:modelValue`,i),t.value=r(i)}return(r,i)=>(e(),t(`input`,{id:n.id,type:`text`,inputmode:`numeric`,dir:`ltr`,class:o([`admin-currency-input`,n.inputClass]),value:d.value,placeholder:n.placeholder,disabled:n.disabled,onInput:f},null,42,c))}}),[[`__scopeId`,`data-v-56435fc8`]]);export{l as t};
|
||||
+1
@@ -0,0 +1 @@
|
||||
.admin-currency-input[data-v-56435fc8]{text-align:right}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{B as e,F as t,H as n,I as r,K as i,L as a,P as o,Q as s,T as c,U as l,V as u,Y as d,at as f,ct as p,et as m,ft as h,j as g,q as _,ut as v,x as y,z as b}from"./index-dG7O4aC2.js";var x=[`id`],S=[`aria-label`,`aria-expanded`],C={class:`admin-select__value`},w={class:`admin-select__chevron`,"aria-hidden":`true`},T=[`aria-label`],E={key:0,class:`admin-select__search`,role:`presentation`},D=[`placeholder`],O={key:1,class:`admin-select__empty`,role:`presentation`},k=[`aria-selected`,`onClick`],A=g(_({__name:`AdminSelect`,props:{modelValue:{},options:{},placeholder:{default:`انتخاب کنید`},ariaLabel:{default:`انتخاب`},block:{type:Boolean,default:!1},searchable:{type:Boolean,default:!1},searchPlaceholder:{default:`جستجو…`},id:{default:void 0}},emits:[`update:modelValue`],setup(g,{emit:_}){let A=g,j=_,M=p(!1),N=p(``),P=p(null),F=p(null);y(P,()=>{M.value=!1,N.value=``});let I=b(()=>A.options.find(e=>e.value===A.modelValue)?.label??A.placeholder),L=b(()=>{let e=N.value.trim().toLowerCase();return e?A.options.filter(t=>t.label.toLowerCase().includes(e)):A.options});async function R(){M.value=!M.value,M.value&&A.searchable&&(N.value=``,await d(),F.value?.focus())}function z(e){j(`update:modelValue`,e),M.value=!1,N.value=``}return(d,p)=>(s(),l(`div`,{id:g.id,ref_key:`rootRef`,ref:P,class:v([`admin-select`,{"admin-select--open":M.value,"admin-select--block":g.block}])},[e(`button`,{type:`button`,class:`admin-select__trigger`,"aria-label":g.ariaLabel,"aria-expanded":M.value,"aria-haspopup":`listbox`,onClick:R},[e(`span`,C,h(I.value),1),e(`span`,w,[i(c,{name:`chevron-down`,size:16})])],8,S),M.value?(s(),l(`ul`,{key:0,class:`admin-select__menu`,role:`listbox`,"aria-label":g.ariaLabel},[g.searchable?(s(),l(`li`,E,[f(e(`input`,{ref_key:`searchInputRef`,ref:F,"onUpdate:modelValue":p[0]||=e=>N.value=e,type:`search`,class:`admin-select__search-input`,placeholder:g.searchPlaceholder,onClick:p[1]||=r(()=>{},[`stop`]),onKeydown:p[2]||=t(r(e=>M.value=!1,[`stop`]),[`esc`])},null,40,D),[[o,N.value]])])):n(``,!0),L.value.length?n(``,!0):(s(),l(`li`,O,` موردی یافت نشد `)),(s(!0),l(a,null,m(L.value,t=>(s(),l(`li`,{key:t.value,role:`presentation`},[e(`button`,{type:`button`,class:v([`admin-select__option`,{"admin-select__option--active":t.value===g.modelValue}]),role:`option`,"aria-selected":t.value===g.modelValue,onClick:e=>z(t.value)},[e(`span`,null,h(t.label),1),t.value===g.modelValue?(s(),u(c,{key:0,name:`check`,size:16,class:`admin-select__check`})):n(``,!0)],10,k)]))),128))],8,T)):n(``,!0)],10,x))}}),[[`__scopeId`,`data-v-f752c229`]]);export{A as t};
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
.admin-select[data-v-f752c229]{min-width:200px;max-width:100%;position:relative}.admin-select--block[data-v-f752c229]{width:100%;min-width:0}.admin-select__trigger[data-v-f752c229]{width:100%;min-height:var(--control-height,40px);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);cursor:pointer;transition:border-color var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);justify-content:space-between;align-items:center;gap:10px;padding:0 12px 0 10px;font-family:inherit;font-size:.875rem;font-weight:500;display:flex}.admin-select__trigger[data-v-f752c229]:hover{border-color:var(--color-primary);background:var(--color-elevated,var(--color-surface))}.admin-select--open .admin-select__trigger[data-v-f752c229],.admin-select__trigger[data-v-f752c229]:focus-visible{border-color:var(--color-primary);box-shadow:var(--focus-ring);outline:none}.admin-select__value[data-v-f752c229]{text-align:start;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.admin-select__chevron[data-v-f752c229]{color:var(--color-text-muted);transition:transform var(--transition-fast);flex-shrink:0;display:inline-flex}.admin-select--open .admin-select__chevron[data-v-f752c229]{color:var(--color-primary);transform:rotate(180deg)}.admin-select__menu[data-v-f752c229]{inset-inline-start:0;z-index:40;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);width:max(100%,220px);max-height:min(320px,50vh);box-shadow:var(--shadow-card,0 12px 28px #0f172a1f);flex-direction:column;gap:4px;margin:0;padding:8px;list-style:none;display:flex;position:absolute;top:calc(100% + 6px);overflow-y:auto}.admin-select__search[data-v-f752c229]{z-index:1;background:var(--color-surface);padding-bottom:4px;position:sticky;top:0}.admin-select__search-input[data-v-f752c229]{border:1px solid var(--color-border);background:var(--color-bg);width:100%;height:36px;color:var(--color-text);font:inherit;border-radius:10px;padding:0 12px;font-size:.8125rem}.admin-select__search-input[data-v-f752c229]:focus{border-color:var(--color-primary);box-shadow:var(--focus-ring);outline:none}.admin-select__empty[data-v-f752c229]{color:var(--color-text-muted);text-align:center;padding:12px;font-size:.8125rem}.admin-select__option[data-v-f752c229]{width:100%;color:var(--color-text);text-align:start;cursor:pointer;transition:background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);background:0 0;border:1px solid #0000;border-radius:12px;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;font-family:inherit;font-size:.875rem;font-weight:500;display:flex}.admin-select__option[data-v-f752c229]:hover{background:var(--color-bg);border-color:var(--color-border)}.admin-select__option--active[data-v-f752c229]{background:var(--color-primary-soft);color:var(--color-primary);border-color:#0000;font-weight:600}.admin-select__option--active[data-v-f752c229]:hover{background:var(--color-primary-soft);border-color:#0000}.admin-select__check[data-v-f752c229]{color:var(--color-primary);flex-shrink:0}
|
||||
+1
@@ -0,0 +1 @@
|
||||
.accounts-page__table[data-v-6dd3bf0f]{overflow:hidden}
|
||||
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
.cash-payments-page__filters[data-v-bca3989e]{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 14px;display:flex}.cash-payments-page__search[data-v-bca3989e]{min-width:200px;color:var(--color-text-muted);flex:1;align-items:center;gap:10px;display:flex}.cash-payments-page__search-input[data-v-bca3989e]{color:var(--color-text);background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.cash-payments-page__status-select[data-v-bca3989e]{flex:0 220px;width:220px}.cash-payments-page__table[data-v-bca3989e]{overflow:hidden}
|
||||
+1
@@ -0,0 +1 @@
|
||||
.catalogs-page__filters[data-v-0d612376]{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 14px;display:flex}.catalogs-page__search[data-v-0d612376]{min-width:200px;color:var(--color-text-muted);flex:1;align-items:center;gap:10px;display:flex}.catalogs-page__search-input[data-v-0d612376]{background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.catalogs-page__company-filter[data-v-0d612376]{width:min(220px,100%)}.catalogs-page__table[data-v-0d612376]{overflow:hidden}
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
.checks-page__order-meta[data-v-77053e0d]{align-items:center;gap:8px;display:flex}.checks-page__stats[data-v-77053e0d]{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:14px;display:grid}.checks-page__stat[data-v-77053e0d]{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);flex-direction:column;gap:2px;padding:10px 12px;display:flex}.checks-page__stat span[data-v-77053e0d]{color:var(--color-text-muted);font-size:.75rem}.checks-page__stat strong[data-v-77053e0d]{font-size:.875rem;font-weight:700}.checks-page__list[data-v-77053e0d]{overflow:hidden}.check-row[data-v-77053e0d]{border-bottom:1px solid var(--color-border-light);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px 12px;padding:8px 12px;display:grid}.check-row[data-v-77053e0d]:last-child{border-bottom:0}.check-row.open[data-v-77053e0d]{background:color-mix(in srgb, var(--color-primary-soft) 55%, transparent)}.check-row__main[data-v-77053e0d]{min-width:0;color:inherit;text-align:start;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:4px 0;display:flex}.check-row__chevron[data-v-77053e0d]{width:14px;color:var(--color-text-muted);flex-shrink:0;font-size:.75rem}.check-row__thumb[data-v-77053e0d]{border:1px solid var(--color-border);cursor:zoom-in;background:#111;border-radius:6px;flex-shrink:0;place-items:center;width:44px;height:32px;padding:0;display:grid;overflow:hidden}.check-row__thumb img[data-v-77053e0d]{object-fit:cover;width:100%;height:100%;display:block}.check-row__thumb--empty[data-v-77053e0d]{color:var(--color-text-muted);cursor:default;font-size:.625rem}.check-row__meta[data-v-77053e0d]{flex:1;gap:2px;min-width:0;display:grid}.check-row__meta strong[data-v-77053e0d]{font-size:.875rem;font-weight:700}.check-row__meta small[data-v-77053e0d]{color:var(--color-text-muted);white-space:nowrap;text-overflow:ellipsis;font-size:.75rem;overflow:hidden}.check-row__actions[data-v-77053e0d]{flex-shrink:0;gap:6px;display:flex}.check-row__panel[data-v-77053e0d]{border-top:1px dashed var(--color-border);flex-wrap:wrap;grid-column:1/-1;align-items:flex-start;gap:12px 16px;padding:8px 0 4px 24px;display:flex}.check-row__fields[data-v-77053e0d]{flex-wrap:wrap;flex:1;gap:8px;min-width:200px;display:flex}.check-row__field[data-v-77053e0d]{background:var(--color-border-light);border-radius:999px;align-items:baseline;gap:6px;padding:4px 8px;font-size:.75rem;display:inline-flex}.check-row__field span[data-v-77053e0d]{color:var(--color-text-muted)}.check-row__field strong[data-v-77053e0d]{font-weight:600}.check-row__photos[data-v-77053e0d]{flex-shrink:0;gap:8px;display:flex}.check-row__photo[data-v-77053e0d]{border:1px solid var(--color-border);width:96px;color:inherit;cursor:zoom-in;text-align:center;background:0 0;border-radius:8px;padding:0;overflow:hidden}.check-row__photo img[data-v-77053e0d]{object-fit:cover;background:#111;width:100%;height:60px;display:block}.check-row__photo span[data-v-77053e0d]{color:var(--color-text-muted);padding:4px;font-size:.6875rem;display:block}.check-row__hint[data-v-77053e0d]{color:var(--color-text-muted);margin:0;font-size:.75rem}.checks-page__footer[data-v-77053e0d]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-top:14px;display:flex}.checks-page__note[data-v-77053e0d]{color:var(--color-text-muted);margin:0;font-size:.75rem}.checks-page__history[data-v-77053e0d]{gap:8px;display:grid}.checks-page__history-item[data-v-77053e0d]{gap:6px;padding:12px;display:grid}.checks-page__history-item-head[data-v-77053e0d]{flex-wrap:wrap;justify-content:space-between;gap:12px;font-size:.875rem;display:flex}.checks-page__history-meta[data-v-77053e0d],.checks-page__history-note[data-v-77053e0d]{margin:0;font-size:.8125rem;line-height:1.5}.checks-page__history-meta[data-v-77053e0d]{color:var(--color-text-muted)}.checks-page__lightbox[data-v-77053e0d]{z-index:300000;background:#000000d6;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.checks-page__lightbox img[data-v-77053e0d]{object-fit:contain;border-radius:8px;max-width:min(900px,100%);max-height:88vh}.checks-page__lightbox-close[data-v-77053e0d]{top:14px;cursor:pointer;border:0;border-radius:8px;padding:8px 12px;position:absolute;inset-inline-end:14px}@media (width<=800px){.checks-page__stats[data-v-77053e0d]{grid-template-columns:repeat(2,minmax(0,1fr))}.check-row[data-v-77053e0d]{grid-template-columns:1fr}.check-row__actions[data-v-77053e0d]{padding-inline-start:24px}.check-row__panel[data-v-77053e0d]{padding-inline-start:0}}
|
||||
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
.checks-list-page__summary[data-v-c611455f]{color:var(--color-text-muted);flex-direction:column;align-items:flex-end;gap:4px;font-size:.8125rem;display:flex}.checks-list-page__filters[data-v-c611455f]{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 14px;display:flex}.checks-list-page__search[data-v-c611455f]{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-border-light);min-width:220px;color:var(--color-text-muted);flex:1;align-items:center;gap:10px;padding:8px 12px;display:flex}.checks-list-page__search-input[data-v-c611455f]{color:var(--color-text);background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.checks-list-page__status-select[data-v-c611455f]{flex:0 220px;width:220px}.checks-list-page__table[data-v-c611455f]{padding:0;overflow:hidden}.checks-list-page__order-link[data-v-c611455f]{color:var(--color-primary);cursor:pointer;font:inherit;background:0 0;border:none;padding:0}.checks-list-page__order-link[data-v-c611455f]:hover{text-decoration:underline}.checks-list-page__empty[data-v-c611455f]{text-align:center;color:var(--color-text-muted);margin:0;padding:24px;font-size:.875rem}
|
||||
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
.companies-page__table[data-v-caae8f52]{overflow:hidden}.companies-page__card-logo[data-v-caae8f52]{align-items:center;gap:12px;display:flex}.companies-page__card-desc[data-v-caae8f52]{color:var(--color-text-muted);margin:4px 0 0;font-size:.8125rem;font-weight:400}.company-logo[data-v-caae8f52]{border-radius:var(--radius-sm);object-fit:contain;background:var(--color-bg);border:1px solid var(--color-border);width:40px;height:40px}.company-logo--fallback[data-v-caae8f52]{background:var(--color-primary);color:#fff;justify-content:center;align-items:center;font-size:1rem;font-weight:700;display:flex}.logo-upload[data-v-caae8f52]{flex-direction:column;gap:10px;display:flex}.logo-upload__input[data-v-caae8f52]{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.logo-upload__dropzone[data-v-caae8f52]{border:2px dashed var(--color-border);border-radius:var(--radius-md);background:var(--color-border-light);cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:28px 16px;transition:border-color .15s,background .15s;display:flex}.logo-upload__dropzone[data-v-caae8f52]:hover{border-color:var(--color-primary);background:var(--color-info-light)}.logo-upload__icon[data-v-caae8f52]{background:var(--color-surface);border:1px solid var(--color-border);width:40px;height:40px;color:var(--color-text-muted);border-radius:50%;justify-content:center;align-items:center;font-size:1.5rem;line-height:1;display:flex}.logo-upload__text[data-v-caae8f52]{color:var(--color-text);font-size:.875rem;font-weight:600}.logo-upload__hint[data-v-caae8f52]{color:var(--color-text-muted);font-size:.75rem}.logo-upload__preview-wrap[data-v-caae8f52]{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-border-light);flex-direction:column;align-items:center;gap:10px;padding:16px;display:flex}.logo-upload__preview[data-v-caae8f52]{object-fit:contain;border-radius:var(--radius-sm);background:var(--color-surface);border:1px solid var(--color-border);width:80px;height:80px}.logo-upload__remove[data-v-caae8f52]{color:var(--color-danger);cursor:pointer;background:0 0;border:none;padding:0;font-size:.8125rem;font-weight:600}.logo-upload__remove[data-v-caae8f52]:hover{text-decoration:underline}.logo-upload__change[data-v-caae8f52]{align-self:flex-start}
|
||||
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
.customers-page__search[data-v-1898ef43]{color:var(--color-text-muted);align-items:center;gap:10px;margin-bottom:16px;padding:10px 14px;display:flex}.customers-page__search-input[data-v-1898ef43]{background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.customers-page__table[data-v-1898ef43]{overflow:hidden}
|
||||
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
.sales-chart__header[data-v-7c631ba3]{margin-bottom:12px}.sales-chart__title[data-v-7c631ba3]{margin:0;font-size:.9375rem;font-weight:700}.sales-chart__subtitle[data-v-7c631ba3]{color:var(--color-text-muted);margin:4px 0 0;font-size:.8125rem}.sales-chart__body[data-v-7c631ba3]{position:relative}.sales-chart__svg[data-v-7c631ba3]{width:100%;height:100%;display:block}.sales-chart__grid[data-v-7c631ba3]{stroke:var(--color-border);stroke-width:1px;stroke-dasharray:4 4}.sales-chart__line[data-v-7c631ba3]{fill:none;stroke-width:2.25px;stroke-linecap:round;stroke-linejoin:round}.sales-chart__cursor[data-v-7c631ba3]{stroke:var(--color-border);stroke-width:1px;stroke-dasharray:3 3}.sales-chart__dot[data-v-7c631ba3]{stroke:#fff;stroke-width:2px}.sales-chart__tooltip[data-v-7c631ba3]{border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface);min-width:120px;box-shadow:var(--shadow-sm);pointer-events:none;text-align:center;padding:8px 10px;position:absolute;top:8px;transform:translate(-50%)}.sales-chart__tooltip-label[data-v-7c631ba3]{color:var(--color-text-muted);margin-bottom:2px;font-size:.6875rem;display:block}.sales-chart__tooltip strong[data-v-7c631ba3]{font-size:.8125rem}.sales-chart__axis[data-v-7c631ba3]{color:var(--color-text-muted);justify-content:space-between;margin-top:8px;font-size:.6875rem;display:flex}.dashboard__toolbar[data-v-bf2ebdae]{justify-content:flex-end;margin-bottom:16px;display:flex}.dashboard__stats[data-v-bf2ebdae]{grid-template-columns:repeat(5,1fr);gap:16px;margin-bottom:20px;display:grid}.dashboard__sales-header[data-v-bf2ebdae]{justify-content:space-between;align-items:flex-start;display:flex}.dashboard__sales-value[data-v-bf2ebdae]{font-size:1.25rem!important}.dashboard__sales-growth[data-v-bf2ebdae]{color:var(--color-success);font-size:.75rem;font-weight:600}.dashboard__sales-icon[data-v-bf2ebdae]{color:var(--color-text-muted)}.dashboard__sparkline[data-v-bf2ebdae]{width:100%;height:32px;margin-top:8px}.dashboard__grid[data-v-bf2ebdae]{grid-template-columns:1fr 1.4fr .9fr;gap:16px;display:grid}.dashboard__chart-card[data-v-bf2ebdae],.dashboard__orders-card[data-v-bf2ebdae],.dashboard__checks-card[data-v-bf2ebdae]{padding:20px}.dashboard__chart-card[data-v-bf2ebdae] .sales-chart__header{margin-bottom:0}.dashboard__card-header[data-v-bf2ebdae]{margin-bottom:16px}.dashboard__card-title[data-v-bf2ebdae]{margin:0;font-size:.9375rem;font-weight:700}.dashboard__card-value[data-v-bf2ebdae]{margin:4px 0 0;font-size:1.125rem;font-weight:700}.dashboard__chart[data-v-bf2ebdae]{width:100%;height:140px}.dashboard__chart-axis[data-v-bf2ebdae]{color:var(--color-text-muted);justify-content:space-between;margin-top:8px;font-size:.6875rem;display:flex}.dashboard__card-footer[data-v-bf2ebdae]{border-top:1px solid var(--color-border-light);justify-content:flex-start;margin-top:12px;padding-top:12px;display:flex}.dashboard__card-footer .admin-btn[data-v-bf2ebdae]{text-decoration:none}.dashboard__deadline-list[data-v-bf2ebdae]{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.dashboard__deadline-item[data-v-bf2ebdae]{grid-template-columns:auto 1fr auto auto;align-items:center;gap:10px;font-size:.8125rem;display:grid}.dashboard__deadline-count[data-v-bf2ebdae]{color:var(--color-text-muted)}.dashboard__deadline-amount[data-v-bf2ebdae]{font-size:.75rem;font-weight:600}
|
||||
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{A as e,B as t,C as n,D as r,E as i,G as a,H as o,I as s,K as c,M as l,N as u,P as d,Q as f,T as p,U as m,W as h,at as g,ct as _,ft as v,j as y,lt as b,q as x,z as S}from"./index-dG7O4aC2.js";var C={class:`login-page`},w={class:`login-page__form-wrap`},T={class:`login-page__card admin-card`},E={key:0,class:`admin-form__error`,role:`alert`},D={class:`admin-form__field`},O={class:`login-page__input-wrap`},k={class:`login-page__field-icon`,"aria-hidden":`true`},A={class:`admin-form__field`},j={class:`login-page__input-wrap login-page__input-wrap--password`},M={class:`login-page__field-icon`,"aria-hidden":`true`},N=[`type`],P=[`aria-label`],F={class:`login-page__remember`},I=[`disabled`],L={key:0,class:`admin-btn__spinner`,"aria-hidden":`true`},R=y(x({__name:`LoginView`,setup(y){let x=r(),R=i(),z=n(),B=e(),V=_(``),H=_(``),U=_(!0),W=_(!1),G=S(()=>V.value.trim().length>0&&H.value.length>0);function K(e){return e.replace(/[۰-۹]/g,e=>String(`۰۱۲۳۴۵۶۷۸۹`.indexOf(e))).replace(/[٠-٩]/g,e=>String(`٠١٢٣٤٥٦٧٨٩`.indexOf(e)))}async function q(){if(!G.value){z.error=`لطفاً شماره موبایل و رمز عبور را وارد کنید.`;return}if(!await z.login(K(V.value.trim()),H.value,U.value))return;B.success(`خوش آمدید، ${z.fullName}`);let e=typeof R.query.redirect==`string`?R.query.redirect:`/`;x.replace(e)}return(e,n)=>(f(),m(`div`,C,[t(`div`,w,[t(`div`,T,[n[10]||=t(`div`,{class:`login-page__header`},[t(`h2`,{class:`login-page__title`},`ورود به پنل مدیریت`),t(`p`,{class:`login-page__subtitle`},`برای ادامه، اطلاعات حساب کاربری خود را وارد کنید.`)],-1),t(`form`,{class:`admin-form login-page__form`,onSubmit:s(q,[`prevent`])},[b(z).error?(f(),m(`p`,E,v(b(z).error),1)):o(``,!0),t(`div`,D,[n[6]||=t(`label`,{for:`login-phone`},`شماره موبایل`,-1),t(`div`,O,[t(`span`,k,[c(p,{name:`phone`,size:18})]),g(t(`input`,{id:`login-phone`,"onUpdate:modelValue":n[0]||=e=>V.value=e,type:`tel`,class:`admin-input login-page__input`,placeholder:`۰۹۱۲۱۱۱۱۲۲۲۲`,autocomplete:`username`,inputmode:`tel`,dir:`ltr`,onInput:n[1]||=e=>b(z).clearError()},null,544),[[d,V.value]])])]),t(`div`,A,[n[7]||=t(`label`,{for:`login-password`},`رمز عبور`,-1),t(`div`,j,[t(`span`,M,[c(p,{name:`lock`,size:18})]),g(t(`input`,{id:`login-password`,"onUpdate:modelValue":n[2]||=e=>H.value=e,type:W.value?`text`:`password`,class:`admin-input login-page__input login-page__input--with-toggle`,placeholder:`رمز عبور`,autocomplete:`current-password`,onInput:n[3]||=e=>b(z).clearError()},null,40,N),[[u,H.value]]),t(`button`,{type:`button`,class:`login-page__toggle-password`,"aria-label":W.value?`پنهان کردن رمز`:`نمایش رمز`,onClick:n[4]||=e=>W.value=!W.value},[c(p,{name:W.value?`eye-off`:`eye`,size:18},null,8,[`name`])],8,P)])]),t(`label`,F,[g(t(`input`,{"onUpdate:modelValue":n[5]||=e=>U.value=e,type:`checkbox`},null,512),[[l,U.value]]),n[8]||=t(`span`,null,`مرا به خاطر بسپار`,-1)]),t(`button`,{type:`submit`,class:`admin-btn admin-btn--primary login-page__submit`,disabled:!G.value||b(z).loading},[b(z).loading?(f(),m(`span`,L)):o(``,!0),n[9]||=a(` ورود به پنل `,-1)],8,I)],32)])]),n[11]||=h(`<div class="login-page__brand" data-v-4f278031><div class="login-page__brand-inner" data-v-4f278031><p class="login-page__brand-badge" data-v-4f278031>پارچه</p><h1 class="login-page__brand-title" data-v-4f278031>پنل مدیریت سفارشهای عمده</h1><p class="login-page__brand-text" data-v-4f278031> مدیریت سفارشها، مشتریان، قیمتگذاری، چکها و گزارشهای فروش در یک محیط یکپارچه. </p></div></div>`,1)]))}}),[[`__scopeId`,`data-v-4f278031`]]);export{R as default};
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
.login-page[data-v-4f278031]{background:var(--color-bg);grid-template-columns:1.05fr 1fr;min-height:100dvh;display:grid}.login-page__brand[data-v-4f278031]{color:#fff;background:linear-gradient(160deg,#1a2542 0%,#243456 55%,#17379f 100%);justify-content:center;align-items:center;padding:48px 40px;display:flex}.login-page__brand-inner[data-v-4f278031]{max-width:420px}.login-page__brand-badge[data-v-4f278031]{background:#ffffff1f;border-radius:999px;margin:0 0 16px;padding:6px 12px;font-size:.8125rem;font-weight:700;display:inline-flex}.login-page__brand-title[data-v-4f278031]{margin:0 0 12px;font-size:clamp(1.5rem,2.4vw,2rem);line-height:1.35}.login-page__brand-text[data-v-4f278031]{color:#ffffffc7;margin:0;font-size:.9375rem;line-height:1.8}.login-page__form-wrap[data-v-4f278031]{justify-content:center;align-items:center;padding:32px 24px;display:flex}.login-page__card[data-v-4f278031]{width:min(100%,420px);padding:28px 24px}.login-page__header[data-v-4f278031]{margin-bottom:20px}.login-page__title[data-v-4f278031]{margin:0 0 6px;font-size:1.25rem;font-weight:700}.login-page__subtitle[data-v-4f278031]{color:var(--color-text-muted);margin:0;font-size:.875rem;line-height:1.6}.login-page__input-wrap[data-v-4f278031]{color:var(--color-text-muted);position:relative}.login-page__field-icon[data-v-4f278031]{pointer-events:none;z-index:1;display:inline-flex;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.login-page__input[data-v-4f278031]{padding-right:42px}.login-page__input--with-toggle[data-v-4f278031]{padding-left:44px}.login-page__toggle-password[data-v-4f278031]{z-index:1;width:32px;height:32px;color:var(--color-text-muted);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:0;transition:color .15s,background-color .15s;display:inline-flex;position:absolute;top:50%;left:6px;transform:translateY(-50%)}.login-page__toggle-password[data-v-4f278031]:hover{color:var(--color-primary);background:var(--color-bg-muted,#0000000a)}.login-page__remember[data-v-4f278031]{color:var(--color-text-muted);align-items:center;gap:8px;font-size:.8125rem;display:flex}.login-page__remember input[data-v-4f278031]{width:16px;height:16px;accent-color:var(--color-primary)}.login-page__submit[data-v-4f278031]{width:100%;margin-top:4px}@media (width<=900px){.login-page[data-v-4f278031]{grid-template-columns:1fr}.login-page__form-wrap[data-v-4f278031]{order:2}.login-page__brand[data-v-4f278031]{order:1;min-height:auto;padding:28px 20px}.login-page__brand-text[data-v-4f278031]{font-size:.875rem}}
|
||||
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
.pricing-page__summary[data-v-334518e1]{margin-bottom:16px;padding:20px}.pricing-page__order-meta[data-v-334518e1]{margin-bottom:16px}.pricing-page__order-id[data-v-334518e1]{margin-bottom:4px;font-size:1rem;display:block}.pricing-page__customer[data-v-334518e1]{color:var(--color-text-muted);margin:0 0 8px;font-size:.875rem}.pricing-page__table[data-v-334518e1]{margin-bottom:16px;padding:0;overflow:hidden}.pricing-page__add-btn[data-v-334518e1]{align-items:center;gap:6px;margin:12px 16px 16px;display:inline-flex}.pricing-page__compact-items[data-v-334518e1]{margin-bottom:16px}.pricing-page__item-index[data-v-334518e1]{color:var(--color-text-muted);font-size:.75rem}.pricing-page__compact-fields[data-v-334518e1]{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:12px;display:grid}.pricing-page__compact-fields label[data-v-334518e1]{color:var(--color-text-muted);flex-direction:column;gap:6px;min-width:0;font-size:.75rem;display:flex}.pricing-page__compact-fields[data-v-334518e1] .admin-input,.pricing-page__compact-fields[data-v-334518e1] input{width:100%;min-width:0}.pricing-page__invoice-hint[data-v-334518e1]{color:var(--color-text-muted);margin:12px 0 0;font-size:.75rem;line-height:1.8}.pricing-page__line-total[data-v-334518e1]{color:var(--color-text);grid-column:1/-1;margin:0;font-size:.875rem;font-weight:700}@media (width<=479px){.pricing-page__compact-fields[data-v-334518e1]{grid-template-columns:1fr}}
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
Vendored
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
.products-page__filters[data-v-70aa7065]{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 14px;display:flex}.products-page__search[data-v-70aa7065]{min-width:200px;color:var(--color-text-muted);flex:1;align-items:center;gap:10px;display:flex}.products-page__search-input[data-v-70aa7065]{background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.products-page__catalog-filter[data-v-70aa7065]{width:min(260px,100%)}.products-page__table[data-v-70aa7065]{overflow:hidden}
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
||||
.reports-page__stats[data-v-46807c88]{grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px;display:grid}.reports-page__growth[data-v-46807c88]{color:var(--color-success-dark);margin-top:6px;font-size:.75rem;display:block}.reports-page__grid[data-v-46807c88]{grid-template-columns:1.4fr 1fr;gap:16px;display:grid}.reports-page__section[data-v-46807c88]{padding:20px;overflow:hidden}.reports-page__section-title[data-v-46807c88]{margin:0 0 16px;font-size:1rem;font-weight:700}.reports-page__status-list[data-v-46807c88]{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.reports-page__status-list li[data-v-46807c88]{background:var(--color-border-light);border-radius:var(--radius-sm);justify-content:space-between;align-items:center;padding:10px 12px;font-size:.875rem;display:flex}@media (width<=1279px){.reports-page__stats[data-v-46807c88]{grid-template-columns:repeat(2,1fr)}.reports-page__grid[data-v-46807c88]{grid-template-columns:1fr}}@media (width<=767px){.reports-page__stats[data-v-46807c88]{grid-template-columns:1fr}}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{A as e,B as t,G as n,K as r,L as i,Q as a,T as o,U as s,X as c,a as l,ct as u,et as d,ft as f,j as p,lt as m,m as h,n as g,o as _,q as v,w as y}from"./index-dG7O4aC2.js";var b={class:`reports-page`},x={class:`admin-page-header`},S={type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`},C={class:`reports-page__stats`},w={class:`admin-stat-card admin-card`},T={class:`admin-stat-card__value`},E={class:`reports-page__growth`},D={class:`admin-stat-card admin-card`},O={class:`admin-stat-card__value`},k={class:`admin-stat-card admin-card`},A={class:`admin-stat-card__value`},j={class:`admin-stat-card admin-card`},M={class:`admin-stat-card__value`},N={class:`reports-page__grid`},P={class:`admin-card reports-page__section`},F={class:`admin-table-wrap desktop-only`},I={class:`admin-table`},L={class:`compact-only admin-card-list`},R={class:`admin-card-item__title`},z={class:`admin-card-item__meta`},B={class:`admin-card reports-page__section`},V={class:`admin-table-wrap desktop-only`},H={class:`admin-table`},U={class:`compact-only reports-page__status-list`},W=p(v({__name:`ReportsView`,setup(p){let v=e(),W=u({newOrders:0,pendingReview:0,pendingCheck:0,finalApproval:0,todaySales:0,todaySalesGrowth:0,monthSales:0}),G=u([]),K=u([]);return c(async()=>{try{let[e,t]=await Promise.all([h.get(),h.reports()]);W.value=e.stats,G.value=t.reportSalesByCompany,K.value=t.reportOrdersByStatus}catch(e){v.error(e instanceof y?e.message:`بارگذاری گزارشها انجام نشد.`)}}),(e,c)=>(a(),s(`div`,b,[t(`div`,x,[c[1]||=t(`div`,null,[t(`h1`,{class:`admin-page-header__title`},`گزارشها`),t(`p`,{class:`admin-page-header__breadcrumb`},`مدیریت / گزارشها`)],-1),t(`button`,S,[r(o,{name:`print`,size:16}),c[0]||=n(` چاپ گزارش `,-1)])]),t(`div`,C,[t(`div`,w,[c[2]||=t(`p`,{class:`admin-stat-card__label`},`فروش امروز`,-1),t(`p`,T,f(m(g)(W.value.todaySales)),1),t(`span`,E,`+`+f(W.value.todaySalesGrowth)+`% نسبت به دیروز`,1)]),t(`div`,D,[c[3]||=t(`p`,{class:`admin-stat-card__label`},`فروش ماه جاری`,-1),t(`p`,O,f(m(g)(W.value.monthSales)),1)]),t(`div`,k,[c[4]||=t(`p`,{class:`admin-stat-card__label`},`سفارشهای جدید`,-1),t(`p`,A,f(m(_)(W.value.newOrders)),1)]),t(`div`,j,[c[5]||=t(`p`,{class:`admin-stat-card__label`},`در انتظار بررسی`,-1),t(`p`,M,f(m(_)(W.value.pendingReview)),1)])]),t(`div`,N,[t(`section`,P,[c[7]||=t(`h2`,{class:`reports-page__section-title`},`فروش به تفکیک شرکت`,-1),t(`div`,F,[t(`table`,I,[c[6]||=t(`thead`,null,[t(`tr`,null,[t(`th`,null,`شرکت`),t(`th`,null,`تعداد سفارش`),t(`th`,null,`مجموع متراژ`),t(`th`,null,`مجموع مبلغ`)])],-1),t(`tbody`,null,[(a(!0),s(i,null,d(G.value,e=>(a(),s(`tr`,{key:e.companyName},[t(`td`,null,f(e.companyName),1),t(`td`,null,f(m(_)(e.orderCount)),1),t(`td`,null,f(m(l)(e.meterage)),1),t(`td`,null,f(m(g)(e.totalAmount)),1)]))),128))])])]),t(`div`,L,[(a(!0),s(i,null,d(G.value,e=>(a(),s(`article`,{key:e.companyName,class:`admin-card-item`},[t(`p`,R,f(e.companyName),1),t(`div`,z,[t(`span`,null,f(e.orderCount)+` سفارش`,1),t(`span`,null,f(m(l)(e.meterage)),1),t(`span`,null,f(m(g)(e.totalAmount)),1)])]))),128))])]),t(`section`,B,[c[9]||=t(`h2`,{class:`reports-page__section-title`},`سفارشها به تفکیک وضعیت`,-1),t(`div`,V,[t(`table`,H,[c[8]||=t(`thead`,null,[t(`tr`,null,[t(`th`,null,`وضعیت`),t(`th`,null,`تعداد`)])],-1),t(`tbody`,null,[(a(!0),s(i,null,d(K.value,e=>(a(),s(`tr`,{key:e.status},[t(`td`,null,f(e.status),1),t(`td`,null,f(m(_)(e.count)),1)]))),128))])])]),t(`ul`,U,[(a(!0),s(i,null,d(K.value,e=>(a(),s(`li`,{key:e.status},[t(`span`,null,f(e.status),1),t(`strong`,null,f(m(_)(e.count)),1)]))),128))])])])]))}}),[[`__scopeId`,`data-v-46807c88`]]);export{W as default};
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
.settings-page__grid[data-v-dc21e015]{grid-template-columns:repeat(2,1fr);gap:16px;display:grid}.settings-page__section[data-v-dc21e015]{padding:20px}.settings-page__title[data-v-dc21e015]{margin:0 0 16px;font-size:1rem;font-weight:700}.settings-page__checks[data-v-dc21e015]{flex-direction:column;gap:12px;display:flex}.settings-page__check[data-v-dc21e015]{cursor:pointer;align-items:center;gap:10px;font-size:.875rem;display:flex}.settings-page__check input[data-v-dc21e015]{width:16px;height:16px;accent-color:var(--color-primary)}@media (width<=1279px){.settings-page__grid[data-v-dc21e015]{grid-template-columns:1fr}}
|
||||
+1
@@ -0,0 +1 @@
|
||||
.shipping-page__filters[data-v-a78e2869]{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 14px;display:flex}.shipping-page__search[data-v-a78e2869]{min-width:200px;color:var(--color-text-muted);flex:1;align-items:center;gap:10px;display:flex}.shipping-page__search-input[data-v-a78e2869]{color:var(--color-text);background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.shipping-page__status-select[data-v-a78e2869]{flex:0 220px;width:220px}.shipping-page__table[data-v-a78e2869]{overflow:hidden}
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{Q as e,U as t,ft as n,j as r,lt as i,q as a,ut as o}from"./index-dG7O4aC2.js";var s={pending_review:{label:`در انتظار بررسی`,tone:`warning`},awaiting_customer:{label:`در انتظار مشتری`,tone:`info`},pending_check:{label:`بررسی چک`,tone:`purple`},pending_payment:{label:`بررسی رسید پرداخت`,tone:`purple`},needs_correction:{label:`نیاز به اصلاح`,tone:`danger`},check_correction:{label:`نیاز به اصلاح چک`,tone:`warning`},final_approval:{label:`تأیید نهایی`,tone:`success`},shipped:{label:`ارسال شده`,tone:`info`},delivered:{label:`تحویل شده`,tone:`delivered`},cancelled:{label:`لغو شده`,tone:`neutral`},rejected:{label:`رد شده`,tone:`danger`},expired:{label:`منقضی شده`,tone:`neutral`}},c={cart:`سبد خرید`,submitted:`ثبتشده`,awaiting_review:`در انتظار بررسی`,pricing:`قیمتگذاری`,awaiting_settlement:`در انتظار تسویه`,awaiting_settlement_fix:`اصلاح تسویه`,cash_in_progress:`در حال ثبت نقدی`,cash_invoice_issued:`صدور فاکتور نقدی`,awaiting_cash_payment:`در انتظار پرداخت نقدی`,cash_payment_submitted:`رسید نقدی ارسالشده`,awaiting_cash_confirmation:`تأیید پرداخت نقدی`,cash_confirmed:`پرداخت نقدی تأیید شد`,check_in_progress:`در حال ثبت چک`,awaiting_check_review:`بررسی چک`,check_needs_fix:`اصلاح چک`,check_rejected:`رد چک`,checks_approved:`تأیید چکها`,final_approved:`تأیید نهایی`,preparing:`آمادهسازی`,ready_to_ship:`آماده ارسال`,shipped:`ارسالشده`,delivered:`تحویلشده`,needs_correction:`نیاز به اصلاح`,cancelled:`لغو شده`,rejected:`رد شده`,expired:`منقضی`};function l(e){return e?c[e]??e:`—`}var u=[`cart`,`submitted`,`awaiting_review`,`pricing`,`needs_correction`],d=[`pending_review`,`needs_correction`];function f(e){return e.rawStatus?u.includes(e.rawStatus):d.includes(e.status)}var p=[{key:`all`,label:`همه`},{key:`pending_review`,label:`در انتظار بررسی`},{key:`awaiting_customer`,label:`در انتظار مشتری`},{key:`pending_check`,label:`بررسی چک`},{key:`pending_payment`,label:`بررسی رسید`},{key:`check_correction`,label:`اصلاح چک`},{key:`needs_correction`,label:`نیاز به اصلاح`},{key:`final_approval`,label:`تأیید نهایی`},{key:`shipped`,label:`ارسال شده`},{key:`delivered`,label:`تحویل شده`}],m=r(a({__name:`StatusBadge`,props:{status:{}},setup(r){let a={active:{label:`فعال`,tone:`success`},inactive:{label:`غیرفعال`,tone:`neutral`},pending_check_review:{label:`در انتظار بررسی`,tone:`warning`},check_approved:{label:`تأیید شده`,tone:`success`},check_rejected:{label:`رد شده`,tone:`danger`}};return(c,l)=>(e(),t(`span`,{class:o([`admin-badge status-badge`,`admin-badge--${(i(s)[r.status]??a[r.status])?.tone??`neutral`}`])},n((i(s)[r.status]??a[r.status])?.label??r.status),3))}}),[[`__scopeId`,`data-v-23aa055a`]]);export{c as a,u as i,s as n,f as o,p as r,l as s,m as t};
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
.status-badge[data-v-23aa055a]{letter-spacing:-.01em}
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
||||
.users-page__search[data-v-73cbd3c3]{color:var(--color-text-muted);align-items:center;gap:10px;margin-bottom:16px;padding:10px 14px;display:flex}.users-page__search-input[data-v-73cbd3c3]{background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.users-page__table[data-v-73cbd3c3]{overflow:hidden}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
var e={wholesale:`عمدهفروش`,retail:`خردهفروش`},t={admin:`مدیر سیستم`,sales:`واحد فروش`,finance:`واحد مالی`,warehouse:`انبار`},n={pending_review:`در انتظار تأیید`,approved:`تأیید شده`,rejected:`رد شده`,expired:`منقضیشده`},r={pending_review:`admin-badge--warning`,approved:`admin-badge--success`,rejected:`admin-badge--danger`,expired:`admin-badge--neutral`},i={preparing:`در حال آمادهسازی`,ready:`آماده ارسال`,shipped:`ارسال شده`,delivered:`تحویل شده`},a={preparing:`admin-badge--warning`,ready:`admin-badge--info`,shipped:`admin-badge--purple`,delivered:`admin-badge--success`};export{i as a,a as i,n,t as o,e as r,r as t};
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
Vendored
+382
File diff suppressed because one or more lines are too long
Vendored
BIN
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fa" dir="rtl">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="/admin/favicon.ico">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>پنل مدیریت | پارچه</title>
|
||||
<script type="module" crossorigin src="/admin/assets/index-dG7O4aC2.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/admin/assets/index-BvDWVN71.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,34 @@
|
||||
#!/bin/sh
|
||||
|
||||
load_env_file() {
|
||||
file="$1"
|
||||
[ -f "$file" ] || return 0
|
||||
while IFS= read -r line || [ -n "$line" ]; do
|
||||
case "$line" in
|
||||
''|\#*) continue ;;
|
||||
esac
|
||||
key="${line%%=*}"
|
||||
val="${line#*=}"
|
||||
eval "current=\${$key-}"
|
||||
if [ -z "$current" ]; then
|
||||
export "$key=$val"
|
||||
fi
|
||||
done < "$file"
|
||||
}
|
||||
|
||||
load_env_file /app/.env.production
|
||||
load_env_file /app/.env
|
||||
|
||||
escape_sed() {
|
||||
printf '%s\n' "$1" | sed -e 's/[\/&]/\\&/g' -e 's/\./\\\./g'
|
||||
}
|
||||
|
||||
ESCAPED_API_BASE_URL=$(escape_sed "$VITE_API_BASE_URL")
|
||||
|
||||
if [ -d /app/dist ]; then
|
||||
find /app/dist -type f \( -name "*.js" -o -name "*.html" \) -exec sed -i \
|
||||
-e "s/__VITE_API_BASE_URL__/${ESCAPED_API_BASE_URL}/g" \
|
||||
{} \;
|
||||
fi
|
||||
|
||||
exec "$@"
|
||||
@@ -8,6 +8,7 @@
|
||||
"build": "run-p type-check \"build-only {@}\" --",
|
||||
"preview": "vite preview",
|
||||
"build-only": "vite build",
|
||||
"pack:docker": "node scripts/pack-docker.mjs",
|
||||
"type-check": "vue-tsc --build",
|
||||
"lint": "run-s \"lint:*\"",
|
||||
"lint:oxlint": "oxlint . --fix",
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import { execSync } from 'node:child_process'
|
||||
import { existsSync } from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
|
||||
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
|
||||
process.chdir(root)
|
||||
|
||||
execSync('node scripts/write-docker-vite-env.mjs', { stdio: 'inherit' })
|
||||
execSync('npm run build-only', { stdio: 'inherit' })
|
||||
|
||||
if (!existsSync(path.join(root, 'dist', 'index.html'))) {
|
||||
throw new Error('dist/index.html ساخته نشد')
|
||||
}
|
||||
|
||||
console.log('dist آماده است. commit و push کنید تا Dokploy بدون npm سرو کند.')
|
||||
@@ -0,0 +1,84 @@
|
||||
import http from 'node:http'
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||
const port = Number(process.env.PORT || 7676)
|
||||
const distDir = path.resolve(process.env.DIST_DIR || path.join(__dirname, '..', 'dist'))
|
||||
const rawBase = String(process.env.VITE_BASE_PATH ?? '/admin/').trim() || '/admin/'
|
||||
const publicBase = rawBase === '/' ? '' : rawBase.replace(/\/+$/, '')
|
||||
|
||||
const MIME = {
|
||||
'.html': 'text/html; charset=utf-8',
|
||||
'.js': 'text/javascript; charset=utf-8',
|
||||
'.mjs': 'text/javascript; charset=utf-8',
|
||||
'.css': 'text/css; charset=utf-8',
|
||||
'.json': 'application/json; charset=utf-8',
|
||||
'.map': 'application/json; charset=utf-8',
|
||||
'.svg': 'image/svg+xml',
|
||||
'.png': 'image/png',
|
||||
'.jpg': 'image/jpeg',
|
||||
'.jpeg': 'image/jpeg',
|
||||
'.gif': 'image/gif',
|
||||
'.webp': 'image/webp',
|
||||
'.ico': 'image/x-icon',
|
||||
'.woff': 'font/woff',
|
||||
'.woff2': 'font/woff2',
|
||||
'.ttf': 'font/ttf',
|
||||
'.txt': 'text/plain; charset=utf-8',
|
||||
'.webmanifest': 'application/manifest+json',
|
||||
}
|
||||
|
||||
function sendFile(res, filePath) {
|
||||
const type = MIME[path.extname(filePath).toLowerCase()] || 'application/octet-stream'
|
||||
res.writeHead(200, { 'Content-Type': type, 'Cache-Control': 'public, max-age=0' })
|
||||
fs.createReadStream(filePath).pipe(res)
|
||||
}
|
||||
|
||||
function sendIndex(res) {
|
||||
sendFile(res, path.join(distDir, 'index.html'))
|
||||
}
|
||||
|
||||
function resolveSafe(urlPath) {
|
||||
const decoded = decodeURIComponent(urlPath.split('?')[0] || '/')
|
||||
const relative = publicBase && decoded.startsWith(`${publicBase}/`)
|
||||
? decoded.slice(publicBase.length)
|
||||
: publicBase && decoded === publicBase
|
||||
? '/'
|
||||
: decoded
|
||||
const target = path.resolve(distDir, `.${relative}`)
|
||||
if (!target.startsWith(distDir)) return null
|
||||
return target
|
||||
}
|
||||
|
||||
const server = http.createServer((req, res) => {
|
||||
const url = req.url || '/'
|
||||
const pathname = decodeURIComponent(url.split('?')[0] || '/')
|
||||
|
||||
if (pathname === '/health' || (publicBase && pathname === `${publicBase}/health`)) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/plain' })
|
||||
return res.end('ok')
|
||||
}
|
||||
|
||||
if (publicBase && pathname === publicBase) {
|
||||
res.writeHead(302, { Location: `${publicBase}/` })
|
||||
return res.end()
|
||||
}
|
||||
|
||||
if (publicBase && pathname === '/') {
|
||||
res.writeHead(302, { Location: `${publicBase}/` })
|
||||
return res.end()
|
||||
}
|
||||
|
||||
const target = resolveSafe(url)
|
||||
if (target && fs.existsSync(target) && fs.statSync(target).isFile()) {
|
||||
return sendFile(res, target)
|
||||
}
|
||||
|
||||
return sendIndex(res)
|
||||
})
|
||||
|
||||
server.listen(port, '0.0.0.0', () => {
|
||||
console.log(`fabric-trade admin listening on ${port} → ${publicBase || ''}/`)
|
||||
})
|
||||
@@ -0,0 +1,56 @@
|
||||
import { existsSync, readFileSync, writeFileSync } from 'node:fs'
|
||||
|
||||
const keys = ['VITE_API_BASE_URL', 'VITE_USE_MOCK_AUTH', 'VITE_BASE_PATH']
|
||||
|
||||
function parseEnv(text) {
|
||||
const out = {}
|
||||
for (const line of text.split(/\r?\n/)) {
|
||||
const trimmed = line.trim()
|
||||
if (!trimmed || trimmed.startsWith('#')) continue
|
||||
const index = trimmed.indexOf('=')
|
||||
if (index <= 0) continue
|
||||
const key = trimmed.slice(0, index).trim()
|
||||
let value = trimmed.slice(index + 1)
|
||||
if (
|
||||
(value.startsWith('"') && value.endsWith('"')) ||
|
||||
(value.startsWith("'") && value.endsWith("'"))
|
||||
) {
|
||||
value = value.slice(1, -1)
|
||||
}
|
||||
out[key] = value
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
const merged = {}
|
||||
|
||||
if (existsSync('.env')) {
|
||||
Object.assign(merged, parseEnv(readFileSync('.env', 'utf8')))
|
||||
}
|
||||
|
||||
for (const key of keys) {
|
||||
const value = process.env[key]
|
||||
if (value) merged[key] = value
|
||||
}
|
||||
|
||||
if (!merged.VITE_API_BASE_URL) {
|
||||
merged.VITE_API_BASE_URL = 'https://nademitex.montest.ir/server/api'
|
||||
}
|
||||
|
||||
if (!merged.VITE_USE_MOCK_AUTH) {
|
||||
merged.VITE_USE_MOCK_AUTH = 'false'
|
||||
}
|
||||
|
||||
if (!merged.VITE_BASE_PATH || merged.VITE_BASE_PATH === '/') {
|
||||
merged.VITE_BASE_PATH = '/admin/'
|
||||
} else if (!merged.VITE_BASE_PATH.endsWith('/')) {
|
||||
merged.VITE_BASE_PATH = `${merged.VITE_BASE_PATH}/`
|
||||
}
|
||||
|
||||
const lines = Object.entries(merged)
|
||||
.filter(([key]) => key.startsWith('VITE_'))
|
||||
.map(([key, value]) => `${key}=${value}`)
|
||||
|
||||
writeFileSync('.env.production', `${lines.join('\n')}\n`)
|
||||
console.log('Vite build env:')
|
||||
for (const line of lines) console.log(` ${line}`)
|
||||
Reference in New Issue
Block a user