Fix for production

This commit is contained in:
mahmood
2026-09-10 22:37:29 +03:30
parent efb0051ab9
commit ec899defb9
95 changed files with 219589 additions and 110 deletions
+1
View File
@@ -0,0 +1 @@
VITE_API_BASE_URL=https://api.wheel.montzar.ir/api
+5 -25
View File
@@ -1,30 +1,10 @@
FROM node:20-alpine AS builder
FROM docker.arvancloud.ir/nginx:latest
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable pnpm
# بیلد لوکال: pnpm --filter @lucky-wheel/admin build
# (با apps/admin/.env.production)
WORKDIR /app
COPY . .
RUN pnpm install --frozen-lockfile
RUN pnpm --filter @lucky-wheel/admin build
FROM nginx:alpine
COPY --from=builder /app/apps/admin/dist /usr/share/nginx/html
# Configure Nginx for Single Page Application
RUN echo 'server { \
listen 80; \
server_name localhost; \
location / { \
root /usr/share/nginx/html; \
index index.html index.htm; \
try_files $uri $uri/ /index.html; \
} \
}' > /etc/nginx/conf.d/default.conf
COPY apps/admin/nginx.conf /etc/nginx/conf.d/default.conf
COPY apps/admin/dist /usr/share/nginx/html
EXPOSE 80
+1
View File
@@ -0,0 +1 @@
.page-header-title[data-v-ec85b8e1]{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:12px}.page-header-title .title[data-v-ec85b8e1]{font-size:20px;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.3px}.page-header-title .subtitle[data-v-ec85b8e1]{font-size:13px;color:#64748b;margin:4px 0 0}.main-card[data-v-ec85b8e1]{border-radius:12px;box-shadow:0 1px 3px #0000000a;border:1px solid #f1f5f9}.table-header[data-v-ec85b8e1]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.filters[data-v-ec85b8e1]{display:flex;gap:12px}.admin-name[data-v-ec85b8e1]{font-weight:500;color:#1e293b}.code-badge[data-v-ec85b8e1]{background:#f8fafc;border:1px solid #e2e8f0;padding:2px 6px;border-radius:4px;font-family:monospace;font-size:11px;color:#64748b}.date-cell[data-v-ec85b8e1]{color:#334155;font-size:13px}.text-muted[data-v-ec85b8e1]{color:#94a3b8;font-size:12px}.action-more-btn[data-v-ec85b8e1]{color:#64748b;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;transition:all .2s ease}.action-more-btn[data-v-ec85b8e1]:hover{background-color:#eef2ff!important}.json-box[data-v-ec85b8e1]{background:#0f172a;color:#38bdf8;padding:14px;border-radius:8px;font-family:monospace;font-size:12px;max-height:240px;overflow-y:auto;direction:ltr;text-align:left;border:1px solid #1e293b}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.wheel-picker-grid[data-v-31298959]{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;margin-top:10px}.design-card[data-v-31298959]{border:2px solid #e2e8f0;border-radius:12px;overflow:hidden;cursor:pointer;transition:all .25s ease;background:#fff;display:flex;flex-direction:column}.design-card[data-v-31298959]:hover{border-color:#1677ff;transform:translateY(-3px);box-shadow:0 8px 20px #0000001a}.design-card.is-selected[data-v-31298959]{border-color:#1677ff;box-shadow:0 0 0 2px #1677ff40}.preview-stage[data-v-31298959]{height:140px;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;border-bottom:1px solid rgba(0,0,0,.08)}.theme-tag[data-v-31298959]{position:absolute;top:10px;right:10px;z-index:10;margin:0;font-weight:600}.stage-tools[data-v-31298959]{position:absolute;bottom:8px;left:8px;display:flex;gap:6px;z-index:10}.tool-btn[data-v-31298959]{background:#ffffffd9;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border:none;box-shadow:0 2px 6px #00000026}.tool-btn[data-v-31298959]:hover{background:#fff;color:#1677ff}.wheel-wrapper[data-v-31298959]{position:relative;width:96px;height:96px;display:flex;align-items:center;justify-content:center}.pointer-wrapper[data-v-31298959]{position:absolute;top:-8px;left:50%;transform:translate(-50%);z-index:20;filter:drop-shadow(0 2px 4px rgba(0,0,0,.4))}.mini-wheel-svg[data-v-31298959]{width:100%;height:100%;border-radius:50%;filter:drop-shadow(0 4px 10px rgba(0,0,0,.3))}.card-body[data-v-31298959]{padding:14px 16px;flex:1;display:flex;flex-direction:column}.card-title-row[data-v-31298959]{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.title-text[data-v-31298959]{font-weight:700;font-size:13.5px;color:#1e293b}.selected-icon[data-v-31298959]{color:#1677ff;font-size:18px}.card-desc[data-v-31298959]{font-size:11.5px;color:#64748b;line-height:1.6;margin:0}.modal-preview-container[data-v-31298959]{padding:30px 20px;border-radius:12px;display:flex;flex-direction:column;align-items:center}.modal-wheel-box[data-v-31298959]{position:relative;width:240px;height:240px}.large-pointer[data-v-31298959]{position:absolute;top:-12px;left:50%;transform:translate(-50%);z-index:20;filter:drop-shadow(0 3px 6px rgba(0,0,0,.5))}.large-wheel-svg[data-v-31298959]{width:100%;height:100%;border-radius:50%;filter:drop-shadow(0 8px 24px rgba(0,0,0,.4))}.submit-btn[data-v-c11ffb22]{font-weight:600;border-radius:8px}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.page-header-title[data-v-d90ae09e]{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:12px}.page-header-title .title[data-v-d90ae09e]{font-size:20px;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.3px}.page-header-title .subtitle[data-v-d90ae09e]{font-size:13px;color:#64748b;margin:4px 0 0}.create-btn[data-v-d90ae09e]{font-weight:600;border-radius:8px;box-shadow:0 2px 4px #4f46e533}.main-card[data-v-d90ae09e]{border-radius:12px;box-shadow:0 1px 3px #0000000a;border:1px solid #f1f5f9}.table-header[data-v-d90ae09e]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:12px}.filters[data-v-d90ae09e]{display:flex;gap:12px}.campaign-title[data-v-d90ae09e]{font-weight:600;color:#1e293b;cursor:pointer;transition:color .15s ease}.campaign-title[data-v-d90ae09e]:hover{color:#4f46e5}.slug-badge[data-v-d90ae09e]{background:#f8fafc;border:1px solid #e2e8f0;padding:2px 8px;border-radius:6px;color:#475569;font-size:12px;font-family:monospace}.date-cell[data-v-d90ae09e],.num-cell[data-v-d90ae09e]{color:#334155;font-size:13px}.status-tag[data-v-d90ae09e]{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:20px;font-weight:500}.status-dot[data-v-d90ae09e]{width:6px;height:6px;border-radius:50%;display:inline-block}.action-more-btn[data-v-d90ae09e]{color:#64748b;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;transition:all .2s ease}.action-more-btn[data-v-d90ae09e]:hover{color:#4f46e5!important;background-color:#eef2ff!important}.dropdown-action-item[data-v-d90ae09e]{display:flex;align-items:center;gap:8px;color:#334155;text-decoration:none;font-size:13px}.dropdown-item-icon[data-v-d90ae09e]{font-size:14px}.text-success[data-v-d90ae09e]{color:#10b981}.text-warning[data-v-d90ae09e]{color:#f59e0b}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
import{c as f,I as u}from"./index-Dx9ODHpC.js";var l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 310H732.4c13.6-21.4 21.6-46.8 21.6-74 0-76.1-61.9-138-138-138-41.4 0-78.7 18.4-104 47.4-25.3-29-62.6-47.4-104-47.4-76.1 0-138 61.9-138 138 0 27.2 7.9 52.6 21.6 74H144c-17.7 0-32 14.3-32 32v200c0 4.4 3.6 8 8 8h40v344c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V550h40c4.4 0 8-3.6 8-8V342c0-17.7-14.3-32-32-32zm-334-74c0-38.6 31.4-70 70-70s70 31.4 70 70-31.4 70-70 70h-70v-70zm-138-70c38.6 0 70 31.4 70 70v70h-70c-38.6 0-70-31.4-70-70s31.4-70 70-70zM180 482V378h298v104H180zm48 68h250v308H228V550zm568 308H546V550h250v308zm48-376H546V378h298v104z"}}]},name:"gift",theme:"outlined"};function a(r){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?Object(arguments[t]):{},n=Object.keys(e);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(e).filter(function(c){return Object.getOwnPropertyDescriptor(e,c).enumerable}))),n.forEach(function(c){o(r,c,e[c])})}return r}function o(r,t,e){return t in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}var i=function(t,e){var n=a({},t,e.attrs);return f(u,a({},n,{icon:l}),null)};i.displayName="GiftOutlined";i.inheritAttrs=!1;export{i as G};
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
import{c as i,I as l}from"./index-Dx9ODHpC.js";var u={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM332 240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224H332V240zm460 600H232V536h560v304zM484 701v53c0 4.4 3.6 8 8 8h40c4.4 0 8-3.6 8-8v-53a48.01 48.01 0 10-56 0z"}}]},name:"lock",theme:"outlined"};function a(r){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?Object(arguments[t]):{},n=Object.keys(e);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(e).filter(function(c){return Object.getOwnPropertyDescriptor(e,c).enumerable}))),n.forEach(function(c){f(r,c,e[c])})}return r}function f(r,t,e){return t in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}var o=function(t,e){var n=a({},t,e.attrs);return i(l,a({},n,{icon:u}),null)};o.displayName="LockOutlined";o.inheritAttrs=!1;export{o as L};
+1
View File
@@ -0,0 +1 @@
.login-container[data-v-20e1793e]{min-height:100vh;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 20%,#1e1b4b,#0f172a 70%,#020617);padding:24px;position:relative;overflow:hidden}.login-bg-decorations[data-v-20e1793e]{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.decor-circle[data-v-20e1793e]{position:absolute;border-radius:50%;filter:blur(80px);opacity:.15}.circle-1[data-v-20e1793e]{width:400px;height:400px;background:#6366f1;top:10%;left:20%}.circle-2[data-v-20e1793e]{width:350px;height:350px;background:#a855f7;bottom:10%;right:20%}.login-card[data-v-20e1793e]{width:100%;max-width:420px;background:#fff;border-radius:16px;padding:40px 36px;box-shadow:0 25px 50px -12px #00000073,0 0 0 1px #ffffff1a;position:relative;z-index:1}.header[data-v-20e1793e]{text-align:center;margin-bottom:32px}.logo-wrapper[data-v-20e1793e]{width:68px;height:68px;margin:0 auto 16px;background:#eef2ff;border-radius:16px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #4f46e51f}.logo[data-v-20e1793e]{font-size:34px;line-height:1}h1[data-v-20e1793e]{font-size:20px;font-weight:700;margin:0;color:#0f172a;letter-spacing:-.3px}p[data-v-20e1793e]{font-size:13px;color:#64748b;margin-top:6px;margin-bottom:0}.login-submit-btn[data-v-20e1793e]{height:44px;font-size:15px;font-weight:600;border-radius:8px;background:#4f46e5;box-shadow:0 4px 14px #4f46e559;transition:all .2s ease}.login-submit-btn[data-v-20e1793e]:hover{background:#4338ca!important;box-shadow:0 6px 18px #4f46e573}
+1
View File
@@ -0,0 +1 @@
import{c as l,I as h,d as O,u as x,a as V,b as n,w as i,r as c,o as S,e as p,f as z,g as L,h as M,i as P,_ as j}from"./index-Dx9ODHpC.js";import{L as B}from"./LockOutlined-ihCI0sD8.js";var N={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 110.8V792H136V270.8l-27.6-21.5 39.3-50.5 42.8 33.3h643.1l42.8-33.3 39.3 50.5-27.7 21.5zM833.6 232L512 482 190.4 232l-42.8-33.3-39.3 50.5 27.6 21.5 341.6 265.6a55.99 55.99 0 0068.7 0L888 270.8l27.6-21.5-39.3-50.5-42.7 33.2z"}}]},name:"mail",theme:"outlined"};function f(r){for(var a=1;a<arguments.length;a++){var t=arguments[a]!=null?Object(arguments[a]):{},e=Object.keys(t);typeof Object.getOwnPropertySymbols=="function"&&(e=e.concat(Object.getOwnPropertySymbols(t).filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable}))),e.forEach(function(s){k(r,s,t[s])})}return r}function k(r,a,t){return a in r?Object.defineProperty(r,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[a]=t,r}var m=function(a,t){var e=f({},a,t.attrs);return l(h,f({},e,{icon:N}),null)};m.displayName="MailOutlined";m.inheritAttrs=!1;const A={class:"login-container"},C={class:"login-card"},I=O({__name:"LoginView",setup(r){const a=P(),t=x(),e=L({email:"admin@luckywheel.local",password:"Admin@SecurePass2026"}),s=M(!1);async function _(){s.value=!0;try{await t.login({email:e.email,password:e.password}),a.push("/dashboard")}catch{}finally{s.value=!1}}return(g,o)=>{const v=c("a-input"),u=c("a-form-item"),b=c("a-input-password"),w=c("a-button"),y=c("a-form");return S(),V("div",A,[o[4]||(o[4]=n("div",{class:"login-bg-decorations"},[n("div",{class:"decor-circle circle-1"}),n("div",{class:"decor-circle circle-2"})],-1)),n("div",C,[o[3]||(o[3]=n("div",{class:"header"},[n("div",{class:"logo-wrapper"},[n("span",{class:"logo"},"🎡")]),n("h1",null,"ورود به پنل مدیریت"),n("p",null,"سامانه گردونه شانس و قرعه‌کشی")],-1)),l(y,{model:e,layout:"vertical",onFinish:_},{default:i(()=>[l(u,{label:"ایمیل مدیریت",name:"email",rules:[{required:!0,message:"لطفاً ایمیل را وارد کنید"},{type:"email",message:"فرمت ایمیل نامعتبر است"}]},{default:i(()=>[l(v,{value:e.email,"onUpdate:value":o[0]||(o[0]=d=>e.email=d),size:"large",placeholder:"admin@example.com"},{prefix:i(()=>[l(p(m),{style:{color:"#6366f1"}})]),_:1},8,["value"])]),_:1}),l(u,{label:"کلمه عبور",name:"password",rules:[{required:!0,message:"لطفاً کلمه عبور را وارد کنید"}]},{default:i(()=>[l(b,{value:e.password,"onUpdate:value":o[1]||(o[1]=d=>e.password=d),size:"large",placeholder:"••••••••"},{prefix:i(()=>[l(p(B),{style:{color:"#6366f1"}})]),_:1},8,["value"])]),_:1}),l(u,{style:{"margin-top":"28px"}},{default:i(()=>[l(w,{type:"primary","html-type":"submit",size:"large",block:"",loading:s.value,class:"login-submit-btn"},{default:i(()=>[...o[2]||(o[2]=[z(" ورود به پنل ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])])])}}}),H=j(I,[["__scopeId","data-v-20e1793e"]]);export{H as default};
+1
View File
@@ -0,0 +1 @@
import{c as u,I as l}from"./index-Dx9ODHpC.js";var c={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M456 231a56 56 0 10112 0 56 56 0 10-112 0zm0 280a56 56 0 10112 0 56 56 0 10-112 0zm0 280a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"more",theme:"outlined"};function o(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(t);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(t).filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable}))),n.forEach(function(a){f(r,a,t[a])})}return r}function f(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var i=function(e,t){var n=o({},e,t.attrs);return u(l,o({},n,{icon:c}),null)};i.displayName="MoreOutlined";i.inheritAttrs=!1;export{i as M};
@@ -0,0 +1 @@
import{c as u,I as l}from"./index-Dx9ODHpC.js";var o={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 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm-88-532h-48c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zm224 0h-48c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"}}]},name:"pause-circle",theme:"outlined"};function a(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(t);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(t).filter(function(c){return Object.getOwnPropertyDescriptor(t,c).enumerable}))),n.forEach(function(c){s(r,c,t[c])})}return r}function s(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var i=function(e,t){var n=a({},e,t.attrs);return u(l,a({},n,{icon:o}),null)};i.displayName="PauseCircleOutlined";i.inheritAttrs=!1;export{i as P};
+1
View File
@@ -0,0 +1 @@
import{c as i,I as u}from"./index-Dx9ODHpC.js";var s={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{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 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"plus-circle",theme:"outlined"};function a(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?Object(arguments[e]):{},n=Object.keys(t);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(t).filter(function(c){return Object.getOwnPropertyDescriptor(t,c).enumerable}))),n.forEach(function(c){o(r,c,t[c])})}return r}function o(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var l=function(e,t){var n=a({},e,t.attrs);return i(u,a({},n,{icon:s}),null)};l.displayName="PlusCircleOutlined";l.inheritAttrs=!1;export{l as P};
+1
View File
@@ -0,0 +1 @@
.action-more-btn[data-v-b0ebd2d6]{color:#64748b;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;transition:all .2s ease}.action-more-btn[data-v-b0ebd2d6]:hover{color:#4f46e5!important;background-color:#eef2ff!important}.dropdown-action-item[data-v-b0ebd2d6]{display:flex;align-items:center;gap:8px;color:#334155;text-decoration:none;font-size:13px}.dropdown-item-icon[data-v-b0ebd2d6]{font-size:14px}.text-danger[data-v-b0ebd2d6]{color:#ef4444}.prize-modal-form[data-v-b0ebd2d6] .ant-form-item{margin-bottom:12px}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.page-header-title[data-v-ee1ef293]{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:12px}.page-header-title .title[data-v-ee1ef293]{font-size:20px;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.3px}.page-header-title .subtitle[data-v-ee1ef293]{font-size:13px;color:#64748b;margin:4px 0 0}.main-card[data-v-ee1ef293]{border-radius:12px;box-shadow:0 1px 3px #0000000a;border:1px solid #f1f5f9}.kpi-card[data-v-ee1ef293]{border-radius:12px;box-shadow:0 1px 3px #0000000a;border:1px solid #f1f5f9;transition:all .25s ease}.kpi-card[data-v-ee1ef293]:hover{transform:translateY(-2px);box-shadow:0 6px 16px #00000012}.kpi-flex[data-v-ee1ef293]{display:flex;align-items:center;gap:16px}.kpi-icon-box[data-v-ee1ef293]{width:52px;height:52px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:24px;flex-shrink:0}.icon-indigo[data-v-ee1ef293]{background:#eef2ff;color:#4f46e5}.icon-sky[data-v-ee1ef293]{background:#f0f9ff;color:#0284c7}.icon-emerald[data-v-ee1ef293]{background:#ecfdf5;color:#059669}.icon-purple[data-v-ee1ef293]{background:#faf5ff;color:#9333ea}.icon-amber[data-v-ee1ef293]{background:#fffbeb;color:#d97706}.icon-rose[data-v-ee1ef293]{background:#fff1f2;color:#e11d48}.icon-teal[data-v-ee1ef293]{background:#f0fdfa;color:#0d9488}.kpi-details[data-v-ee1ef293]{display:flex;flex-direction:column}.kpi-label[data-v-ee1ef293]{font-size:13px;color:#64748b;font-weight:500}.kpi-value[data-v-ee1ef293]{font-size:22px;font-weight:700;color:#0f172a;line-height:1.2;margin:2px 0 0}.filters-header[data-v-ee1ef293]{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px}.filters[data-v-ee1ef293]{display:flex;gap:12px}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.page-header-title[data-v-1ae7a208]{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:12px}.page-header-title .title[data-v-1ae7a208]{font-size:20px;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.3px}.page-header-title .subtitle[data-v-1ae7a208]{font-size:13px;color:#64748b;margin:4px 0 0}.main-card[data-v-1ae7a208]{border-radius:12px;box-shadow:0 1px 3px #0000000a;border:1px solid #f1f5f9}.table-header[data-v-1ae7a208]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.filters[data-v-1ae7a208]{display:flex;gap:12px}.code-badge[data-v-1ae7a208]{background:#f8fafc;border:1px solid #e2e8f0;padding:2px 6px;border-radius:4px;font-family:monospace;font-size:11px;color:#64748b}.num-cell[data-v-1ae7a208],.date-cell[data-v-1ae7a208]{color:#334155;font-size:13px}.text-danger[data-v-1ae7a208]{color:#ef4444;font-size:12px}.text-muted[data-v-1ae7a208]{color:#94a3b8}.status-tag[data-v-1ae7a208]{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:20px;font-weight:500}.status-dot[data-v-1ae7a208]{width:6px;height:6px;border-radius:50%;display:inline-block}.action-more-btn[data-v-1ae7a208]{color:#64748b;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;transition:all .2s ease}.action-more-btn[data-v-1ae7a208]:hover{background-color:#eef2ff!important}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.page-header-title[data-v-aaf12675]{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:12px}.page-header-title .title[data-v-aaf12675]{font-size:20px;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.3px}.page-header-title .subtitle[data-v-aaf12675]{font-size:13px;color:#64748b;margin:4px 0 0}.main-card[data-v-aaf12675]{border-radius:12px;box-shadow:0 1px 3px #0000000a;border:1px solid #f1f5f9}.table-header[data-v-aaf12675]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:12px}.filters[data-v-aaf12675]{display:flex;gap:12px}.mobile-cell[data-v-aaf12675]{font-weight:600;color:#1e293b}.user-mobile-link[data-v-aaf12675]{cursor:pointer;transition:color .15s ease}.user-mobile-link[data-v-aaf12675]:hover{color:#4f46e5}.user-name[data-v-aaf12675],.prize-text[data-v-aaf12675]{font-weight:500;color:#1e293b}.code-badge[data-v-aaf12675]{background:#f8fafc;border:1px solid #e2e8f0;padding:2px 6px;border-radius:4px;font-family:monospace;font-size:11px;color:#64748b}.num-cell[data-v-aaf12675],.date-cell[data-v-aaf12675]{color:#334155;font-size:13px}.text-muted[data-v-aaf12675]{color:#94a3b8}.status-tag[data-v-aaf12675]{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:20px;font-weight:500}.status-dot[data-v-aaf12675]{width:6px;height:6px;border-radius:50%;display:inline-block}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
import{c as u,I as l}from"./index-Dx9ODHpC.js";var o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M824.2 699.9a301.55 301.55 0 00-86.4-60.4C783.1 602.8 812 546.8 812 484c0-110.8-92.4-201.7-203.2-200-109.1 1.7-197 90.6-197 200 0 62.8 29 118.8 74.2 155.5a300.95 300.95 0 00-86.4 60.4C345 754.6 314 826.8 312 903.8a8 8 0 008 8.2h56c4.3 0 7.9-3.4 8-7.7 1.9-58 25.4-112.3 66.7-153.5A226.62 226.62 0 01612 684c60.9 0 118.2 23.7 161.3 66.8C814.5 792 838 846.3 840 904.3c.1 4.3 3.7 7.7 8 7.7h56a8 8 0 008-8.2c-2-77-33-149.2-87.8-203.9zM612 612c-34.2 0-66.4-13.3-90.5-37.5a126.86 126.86 0 01-37.5-91.8c.3-32.8 13.4-64.5 36.3-88 24-24.6 56.1-38.3 90.4-38.7 33.9-.3 66.8 12.9 91 36.6 24.8 24.3 38.4 56.8 38.4 91.4 0 34.2-13.3 66.3-37.5 90.5A127.3 127.3 0 01612 612zM361.5 510.4c-.9-8.7-1.4-17.5-1.4-26.4 0-15.9 1.5-31.4 4.3-46.5.7-3.6-1.2-7.3-4.5-8.8-13.6-6.1-26.1-14.5-36.9-25.1a127.54 127.54 0 01-38.7-95.4c.9-32.1 13.8-62.6 36.3-85.6 24.7-25.3 57.9-39.1 93.2-38.7 31.9.3 62.7 12.6 86 34.4 7.9 7.4 14.7 15.6 20.4 24.4 2 3.1 5.9 4.4 9.3 3.2 17.6-6.1 36.2-10.4 55.3-12.4 5.6-.6 8.8-6.6 6.3-11.6-32.5-64.3-98.9-108.7-175.7-109.9-110.9-1.7-203.3 89.2-203.3 199.9 0 62.8 28.9 118.8 74.2 155.5-31.8 14.7-61.1 35-86.5 60.4-54.8 54.7-85.8 126.9-87.8 204a8 8 0 008 8.2h56.1c4.3 0 7.9-3.4 8-7.7 1.9-58 25.4-112.3 66.7-153.5 29.4-29.4 65.4-49.8 104.7-59.7 3.9-1 6.5-4.7 6-8.7z"}}]},name:"team",theme:"outlined"};function c(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?Object(arguments[e]):{},a=Object.keys(t);typeof Object.getOwnPropertySymbols=="function"&&(a=a.concat(Object.getOwnPropertySymbols(t).filter(function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),a.forEach(function(n){f(r,n,t[n])})}return r}function f(r,e,t){return e in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}var i=function(e,t){var a=c({},e,t.attrs);return u(l,c({},a,{icon:o}),null)};i.displayName="TeamOutlined";i.inheritAttrs=!1;export{i as T};
+1
View File
@@ -0,0 +1 @@
import{c as o,I as i}from"./index-Dx9ODHpC.js";var u={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"upload",theme:"outlined"};function c(r){for(var t=1;t<arguments.length;t++){var e=arguments[t]!=null?Object(arguments[t]):{},n=Object.keys(e);typeof Object.getOwnPropertySymbols=="function"&&(n=n.concat(Object.getOwnPropertySymbols(e).filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),n.forEach(function(a){f(r,a,e[a])})}return r}function f(r,t,e){return t in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}var l=function(t,e){var n=c({},t,e.attrs);return o(i,c({},n,{icon:u}),null)};l.displayName="UploadOutlined";l.inheritAttrs=!1;export{l as U};
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.detail-header[data-v-331e5087]{background:#fff;margin-bottom:20px;border-radius:12px;padding:16px 24px;border:1px solid #f1f5f9;box-shadow:0 1px 3px #0000000a}.section-card[data-v-331e5087]{border-radius:12px;border:1px solid #f1f5f9;box-shadow:0 1px 3px #0000000a}.detail-tabs[data-v-331e5087]{background:#fff;padding:16px;border-radius:12px;border:1px solid #f1f5f9;box-shadow:0 1px 3px #0000000a}.code-badge[data-v-331e5087]{background:#f1f5f9;padding:2px 6px;border-radius:4px;font-family:monospace;font-size:12px;color:#334155}.num-cell[data-v-331e5087],.date-cell[data-v-331e5087]{color:#334155;font-size:13px}.action-text-btn[data-v-331e5087]{color:#4f46e5!important;font-size:12px;font-weight:500;border-radius:6px;transition:all .2s ease}.action-text-btn[data-v-331e5087]:hover{background-color:#eef2ff!important}.text-muted[data-v-331e5087]{color:#cbd5e1}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.page-header-title[data-v-fd1c9633]{margin-bottom:20px}.page-header-title .title[data-v-fd1c9633]{font-size:20px;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.3px}.page-header-title .subtitle[data-v-fd1c9633]{font-size:13px;color:#64748b;margin:4px 0 0}.main-card[data-v-fd1c9633]{border-radius:12px;box-shadow:0 1px 3px #0000000a;border:1px solid #f1f5f9}.table-header[data-v-fd1c9633]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.filters[data-v-fd1c9633]{display:flex;gap:12px}.user-mobile-link[data-v-fd1c9633]{font-weight:600;color:#1e293b;cursor:pointer;transition:color .15s ease}.user-mobile-link[data-v-fd1c9633]:hover{color:#4f46e5}.user-name[data-v-fd1c9633]{font-weight:500;color:#334155}.num-cell[data-v-fd1c9633],.date-cell[data-v-fd1c9633]{color:#334155;font-size:13px}.status-tag[data-v-fd1c9633]{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:20px;font-weight:500}.status-dot[data-v-fd1c9633]{width:6px;height:6px;border-radius:50%;display:inline-block}.action-more-btn[data-v-fd1c9633]{color:#64748b;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;transition:all .2s ease}.action-more-btn[data-v-fd1c9633]:hover{color:#4f46e5!important;background-color:#eef2ff!important}.dropdown-action-item[data-v-fd1c9633]{display:flex;align-items:center;gap:8px;color:#334155;text-decoration:none;font-size:13px}.dropdown-item-icon[data-v-fd1c9633]{font-size:14px}.text-success[data-v-fd1c9633]{color:#10b981}.text-danger[data-v-fd1c9633]{color:#ef4444}
+1
View File
@@ -0,0 +1 @@
.page-header-title[data-v-b623e0ea]{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:12px}.page-header-title .title[data-v-b623e0ea]{font-size:20px;font-weight:700;color:#0f172a;margin:0;letter-spacing:-.3px}.page-header-title .subtitle[data-v-b623e0ea]{font-size:13px;color:#64748b;margin:4px 0 0}.main-card[data-v-b623e0ea]{border-radius:12px;box-shadow:0 1px 3px #0000000a;border:1px solid #f1f5f9}.table-header[data-v-b623e0ea]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:12px}.filters[data-v-b623e0ea]{display:flex;gap:12px}.mobile-cell[data-v-b623e0ea]{font-weight:600;color:#1e293b}.user-link[data-v-b623e0ea]{cursor:pointer;transition:color .15s ease}.user-link[data-v-b623e0ea]:hover{color:#4f46e5}.user-name[data-v-b623e0ea]{font-weight:500;color:#334155}.campaign-cell[data-v-b623e0ea]{color:#475569}.prize-text[data-v-b623e0ea]{font-weight:600;color:#1e293b}.code-badge[data-v-b623e0ea]{background:#f8fafc;border:1px solid #e2e8f0;padding:2px 6px;border-radius:4px;font-family:monospace;font-size:12px;color:#475569}.clickable-code[data-v-b623e0ea]{cursor:pointer;transition:all .15s ease}.clickable-code[data-v-b623e0ea]:hover{background:#eef2ff;border-color:#c7d2fe;color:#4f46e5}.date-cell[data-v-b623e0ea]{color:#334155;font-size:13px}.text-muted[data-v-b623e0ea]{color:#94a3b8}.status-tag[data-v-b623e0ea]{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:20px;font-weight:500}.status-dot[data-v-b623e0ea]{width:6px;height:6px;border-radius:50%;display:inline-block}.action-more-btn[data-v-b623e0ea]{color:#64748b;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;transition:all .2s ease}.action-more-btn[data-v-b623e0ea]:hover{color:#4f46e5!important;background-color:#eef2ff!important}.dropdown-action-item[data-v-b623e0ea]{display:flex;align-items:center;gap:8px;color:#334155;text-decoration:none;font-size:13px}.dropdown-item-icon[data-v-b623e0ea]{font-size:14px}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
const i=["۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"];function o(r){return r==null||typeof r=="object"&&r!==null&&"value"in r&&(r=r.value,r==null)||typeof r=="object"?"":String(r).replace(/[0-9]/g,t=>i[+t]).replace(/[٠-٩]/g,t=>i[t.charCodeAt(0)-1632])}function f(r){if(r==null||r===""||typeof r=="object"&&r!==null&&"value"in r&&(r=r.value,r==null||r==="")||typeof r=="object")return"";const t=typeof r=="string"?parseFloat(u(r)):r;if(isNaN(t))return o(r);const e=new Intl.NumberFormat("fa-IR").format(t);return o(e)}function u(r){return r==null?"":String(r).replace(/[۰-۹]/g,t=>String(t.charCodeAt(0)-1776)).replace(/[٠-٩]/g,t=>String(t.charCodeAt(0)-1632))}function s(r,t=0){if(r==null||r==="")return t;if(typeof r=="number")return isNaN(r)?t:r;const e=u(r).replace(/[^0-9.-]/g,""),n=Number(e);return isNaN(n)?t:n}export{u as a,f,s as p,o as t};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+27
View File
@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>پنل مدیریت گردونه شانس و قرعه‌کشی</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<style>
* {
font-family: 'Vazirmatn', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
body {
margin: 0;
background-color: #f0f2f5;
direction: rtl;
}
</style>
<script type="module" crossorigin src="/assets/index-Dx9ODHpC.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-C1RGR6WN.css">
</head>
<body>
<div id="app"></div>␍
</body>
</html>
+18
View File
@@ -0,0 +1,18 @@
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 7d;
add_header Cache-Control "public";
}
}
+4 -2
View File
@@ -12,8 +12,10 @@ declare module 'axios' {
}
}
const apiBaseURL = import.meta.env.VITE_API_BASE_URL || '/api';
export const apiClient = axios.create({
baseURL: '/api',
baseURL: apiBaseURL,
headers: {
'Content-Type': 'application/json',
},
@@ -96,7 +98,7 @@ apiClient.interceptors.response.use(
}
try {
const { data } = await axios.post('/api/admin/auth/refresh', { refreshToken });
const { data } = await axios.post(`${apiBaseURL}/admin/auth/refresh`, { refreshToken });
const newToken = data.data?.accessToken || data.accessToken;
localStorage.setItem('admin_access_token', newToken);
apiClient.defaults.headers.common.Authorization = `Bearer ${newToken}`;
+9
View File
@@ -0,0 +1,9 @@
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_API_BASE_URL?: string;
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}