From fe94d7ebc68d6e1dcb36aa5ade2acc3a7b48c61a Mon Sep 17 00:00:00 2001 From: xboard Date: Tue, 2 Sep 2025 23:54:21 +0800 Subject: [PATCH] fix: remove dependency on job_batches table for batch email sending --- .../Controllers/V2/Admin/UserController.php | 23 ++++--------- app/Jobs/SendEmailJob.php | 5 ++- public/assets/admin/assets/index.js | 2 +- public/assets/admin/locales/en-US.js | 33 ++++++++++++++++--- public/assets/admin/locales/zh-CN.js | 33 ++++++++++++++++--- 5 files changed, 65 insertions(+), 31 deletions(-) diff --git a/app/Http/Controllers/V2/Admin/UserController.php b/app/Http/Controllers/V2/Admin/UserController.php index 61c1159..3e5e341 100644 --- a/app/Http/Controllers/V2/Admin/UserController.php +++ b/app/Http/Controllers/V2/Admin/UserController.php @@ -16,7 +16,7 @@ use App\Utils\Helper; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Bus; + use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; @@ -443,7 +443,7 @@ class UserController extends Controller $sort = $request->input('sort') ? $request->input('sort') : 'created_at'; $builder = User::orderBy($sort, $sortType); $this->applyFiltersAndSorts($request, $builder); - + $subject = $request->input('subject'); $content = $request->input('content'); $templateValue = [ @@ -451,29 +451,18 @@ class UserController extends Controller 'url' => admin_setting('app_url'), 'content' => $content ]; - + $chunkSize = 1000; - $totalProcessed = 0; - + $builder->chunk($chunkSize, function ($users) use ($subject, $templateValue, &$totalProcessed) { - $jobs = []; - foreach ($users as $user) { - $jobs[] = new SendEmailJob([ + dispatch(new SendEmailJob([ 'email' => $user->email, 'subject' => $subject, 'template_name' => 'notify', 'template_value' => $templateValue - ], 'send_email_mass'); + ], 'send_email_mass')); } - - if (!empty($jobs)) { - Bus::batch($jobs) - ->allowFailures() - ->dispatch(); - } - - $totalProcessed += $users->count(); }); return $this->success(true); diff --git a/app/Jobs/SendEmailJob.php b/app/Jobs/SendEmailJob.php index bda7c77..d998f41 100644 --- a/app/Jobs/SendEmailJob.php +++ b/app/Jobs/SendEmailJob.php @@ -3,7 +3,6 @@ namespace App\Jobs; use App\Services\MailService; -use Illuminate\Bus\Batchable; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; @@ -12,7 +11,7 @@ use Illuminate\Queue\SerializesModels; class SendEmailJob implements ShouldQueue { - use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, Batchable; + use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $params; public $tries = 3; @@ -36,7 +35,7 @@ class SendEmailJob implements ShouldQueue public function handle() { $mailLog = MailService::sendEmail($this->params); - if($mailLog['error']){ + if ($mailLog['error']) { $this->release(); //发送失败将触发重试 } } diff --git a/public/assets/admin/assets/index.js b/public/assets/admin/assets/index.js index 97834a1..21c428a 100644 --- a/public/assets/admin/assets/index.js +++ b/public/assets/admin/assets/index.js @@ -17,5 +17,5 @@ stop=8 `+a("columns.online_status.offline_duration.days",{count:C}):T>0?u+=` `+a("columns.online_status.offline_duration.hours",{count:T}):F>0?u+=` `+a("columns.online_status.offline_duration.minutes",{count:F}):u+=` -`+a("columns.online_status.offline_duration.seconds",{count:x})}const[i,c]=ka.useState(!1),p=o.original.email;return e.jsx(pe,{delayDuration:100,children:e.jsxs(ue,{children:[e.jsx(xe,{children:e.jsxs("div",{className:"group flex items-center gap-2.5",onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),children:[e.jsx("div",{className:_("size-2.5 rounded-full ring-2 ring-offset-2",d?"bg-green-500 ring-green-500/20":"bg-gray-300 ring-gray-300/20","transition-all duration-300")}),e.jsx(Sg,{user:o.original,trigger:e.jsx("span",{className:"cursor-pointer font-medium text-foreground/90 transition-colors hover:text-primary hover:underline",children:p})}),e.jsx("button",{type:"button",className:_("ml-1 rounded bg-transparent p-1 transition-opacity hover:bg-muted",i?"opacity-100":"pointer-events-none opacity-0","group-hover:pointer-events-auto group-hover:opacity-100"),tabIndex:-1,"aria-label":a("columns.actions_menu.copy_email",{defaultValue:"Copy Email"}),onClick:F=>{F.stopPropagation(),Et(p),$.success(a("common:copy.success"))},style:{lineHeight:0},children:e.jsx($n,{className:"h-4 w-4 text-muted-foreground"})})]})}),e.jsx(ce,{side:"bottom",className:"max-w-[280px]",children:e.jsx("p",{className:"whitespace-pre-line text-sm",children:u})})]})})},enableSorting:!1,enableHiding:!1},{accessorKey:"online_count",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.online_count")}),cell:({row:o})=>{const l=o.original.device_limit,d=o.original.online_count||0;return e.jsx(pe,{delayDuration:100,children:e.jsxs(ue,{children:[e.jsx(xe,{children:e.jsx("div",{className:"flex items-center gap-1.5",children:e.jsxs(U,{variant:"outline",className:_("min-w-[4rem] justify-center",l!==null&&d>=l?"border-destructive/50 bg-destructive/10 text-destructive":"border-primary/40 bg-primary/5 text-primary/90"),children:[d," / ",l===null?"∞":l]})})}),e.jsx(ce,{side:"bottom",children:e.jsx("p",{className:"text-sm",children:l===null?a("columns.device_limit.unlimited"):a("columns.device_limit.limited",{count:l})})})]})})},enableSorting:!0,enableHiding:!1},{accessorKey:"banned",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.status")}),cell:({row:o})=>{const l=o.original.banned;return e.jsx("div",{className:"flex justify-center",children:e.jsx(U,{className:_("min-w-20 justify-center transition-colors",l?"bg-destructive/15 text-destructive hover:bg-destructive/25":"bg-success/15 text-success hover:bg-success/25"),children:a(l?"columns.status_text.banned":"columns.status_text.normal")})})},enableSorting:!0,filterFn:(o,l,d)=>d.includes(o.getValue(l))},{accessorKey:"plan_id",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.subscription")}),cell:({row:o})=>e.jsx("div",{className:"min-w-[10em] break-all",children:o.original?.plan?.name||"-"}),enableSorting:!1,enableHiding:!1},{accessorKey:"group_id",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.group")}),cell:({row:o})=>e.jsx("div",{className:"flex flex-wrap gap-1",children:e.jsx(U,{variant:"outline",className:_("px-2 py-0.5 font-medium","bg-secondary/50 hover:bg-secondary/70","border border-border/50","transition-all duration-200","cursor-default select-none","flex items-center gap-1.5 whitespace-nowrap"),children:o.original?.group?.name||"-"})}),enableSorting:!1},{accessorKey:"total_used",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.used_traffic")}),cell:({row:o})=>{const l=Le(o.original?.total_used),d=Le(o.original?.transfer_enable),x=o.original?.total_used/o.original?.transfer_enable*100||0;return e.jsx(pe,{delayDuration:100,children:e.jsxs(ue,{children:[e.jsx(xe,{className:"w-full",children:e.jsxs("div",{className:"w-full space-y-1",children:[e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:l}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[x.toFixed(1),"%"]})]}),e.jsx("div",{className:"h-1.5 w-full rounded-full bg-secondary",children:e.jsx("div",{className:_("h-full rounded-full transition-all",x>90?"bg-destructive":"bg-primary"),style:{width:`${Math.min(x,100)}%`}})})]})}),e.jsx(ce,{side:"bottom",children:e.jsxs("p",{className:"text-sm",children:[a("columns.total_traffic"),": ",d]})})]})})}},{accessorKey:"transfer_enable",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.total_traffic")}),cell:({row:o})=>e.jsx("div",{className:"font-medium text-muted-foreground",children:Le(o.original?.transfer_enable)})},{accessorKey:"expired_at",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.expire_time")}),cell:({row:o})=>{const l=o.original.expired_at,d=Date.now()/1e3,x=l!=null&&le.jsx(z,{column:o,title:a("columns.balance")}),cell:({row:o})=>{const l=pr(o.original?.balance);return e.jsxs("div",{className:"flex items-center gap-1 font-medium",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:"¥"}),e.jsx("span",{className:"tabular-nums text-foreground",children:l})]})}},{accessorKey:"commission_balance",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.commission")}),cell:({row:o})=>{const l=pr(o.original?.commission_balance);return e.jsxs("div",{className:"flex items-center gap-1 font-medium",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:"¥"}),e.jsx("span",{className:"tabular-nums text-foreground",children:l})]})}},{accessorKey:"created_at",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.register_time")}),cell:({row:o})=>e.jsx("div",{className:"truncate",children:ne(o.original?.created_at)}),size:1e3},{id:"actions",header:({column:o})=>e.jsx(z,{column:o,className:"justify-end",title:a("columns.actions")}),cell:({row:o,table:l})=>e.jsxs(Hs,{modal:!1,children:[e.jsx(Gs,{asChild:!0,children:e.jsx("div",{className:"text-center",children:e.jsx(G,{variant:"ghost",className:"h-8 w-8 p-0 hover:bg-muted","aria-label":a("columns.actions"),children:e.jsx(Ra,{className:"size-4"})})})}),e.jsxs(qs,{align:"end",className:"min-w-[40px]",children:[e.jsx(Se,{onSelect:d=>{d.preventDefault(),t(o.original),r(!0)},className:"p-0",children:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5",children:[e.jsx(kg,{className:"mr-2"}),a("columns.actions_menu.edit")]})}),e.jsx(Se,{onSelect:d=>d.preventDefault(),className:"p-0",children:e.jsx(Si,{defaultValues:{email:o.original.email},trigger:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5",children:[e.jsx(Tg,{className:"mr-2"}),a("columns.actions_menu.assign_order")]})})}),e.jsx(Se,{onSelect:()=>{Et(o.original.subscribe_url).then(()=>{$.success(a("common:copy.success"))})},className:"p-0",children:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5",children:[e.jsx(Dg,{className:"mr-2"}),a("columns.actions_menu.copy_url")]})}),e.jsxs(Se,{className:"",onSelect:()=>{Us.resetSecret(o.original.id).then(({data:d})=>{d&&$.success("重置成功")})},children:[e.jsx(Dr,{className:"mr-4"}),a("columns.actions_menu.reset_secret")]}),e.jsx(Se,{onSelect:d=>d.preventDefault(),className:"p-0",children:e.jsx(G,{variant:"ghost",className:"h-auto w-full justify-start px-2 py-1.5 font-normal",asChild:!0,children:e.jsxs(Bs,{to:`/finance/order?user_id=eq:${o.original.id}`,children:[e.jsx(Fg,{className:"mr-2"}),a("columns.actions_menu.orders")]})})}),e.jsxs(Se,{onSelect:()=>{l.setColumnFilters([{id:"invite_user_id",value:"eq:"+o.original?.id}])},children:[e.jsx(Pg,{className:"mr-4"}),a("columns.actions_menu.invites")]}),e.jsx(Se,{onSelect:d=>d.preventDefault(),className:"p-0",children:e.jsx(Mi,{user_id:o.original?.id,dialogTrigger:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5",children:[e.jsx(Lg,{className:"mr-2"}),a("columns.actions_menu.traffic_records")]})})}),e.jsx(Se,{onSelect:d=>d.preventDefault(),className:"p-0",children:e.jsx(Ng,{user:o.original,onSuccess:s,trigger:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5",children:[e.jsx(Dr,{className:"mr-2"}),a("columns.actions_menu.reset_traffic")]})})}),e.jsx(Se,{onSelect:d=>d.preventDefault(),className:"p-0",children:e.jsx(wg,{title:a("columns.actions_menu.delete_confirm_title"),description:a("columns.actions_menu.delete_confirm_description",{email:o.original.email}),cancelText:a("common:cancel"),confirmText:a("common:confirm"),variant:"destructive",onConfirm:async()=>{try{const{data:d}=await Us.destroy(o.original.id);d&&($.success(a("common:delete.success")),s())}catch{$.error(a("common:delete.failed"))}},children:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5 text-destructive hover:text-destructive",children:[e.jsx(Rg,{className:"mr-2"}),a("columns.actions_menu.delete")]})})})]})]})}]},Oi=m.createContext(void 0),Qn=()=>{const s=m.useContext(Oi);if(!s)throw new Error("useUserEdit must be used within an UserEditProvider");return s},zi=({children:s,refreshData:n})=>{const[t,r]=m.useState(!1),[a,o]=m.useState(null),l={isOpen:t,setIsOpen:r,editingUser:a,setEditingUser:o,refreshData:n};return e.jsx(Oi.Provider,{value:l,children:s})},Ig=h.object({id:h.number().default(0),email:h.string().email().default(""),invite_user_email:h.string().email().nullable().optional().default(null),password:h.string().optional().nullable().default(null),balance:h.coerce.number().default(0),commission_balance:h.coerce.number().default(0),u:h.coerce.number().default(0),d:h.coerce.number().default(0),transfer_enable:h.number().default(0),expired_at:h.number().nullable().default(null),plan_id:h.number().nullable().default(null),banned:h.boolean().default(!1),commission_type:h.number().default(0),commission_rate:h.number().nullable().default(null),discount:h.number().nullable().default(null),speed_limit:h.number().nullable().default(null),device_limit:h.number().nullable().default(null),is_admin:h.boolean().default(!1),is_staff:h.boolean().default(!1),remarks:h.string().nullable().default(null)});function $i(){const{t:s}=V("user"),{isOpen:n,setIsOpen:t,editingUser:r,refreshData:a}=Qn(),[o,l]=m.useState(!1),[d,x]=m.useState([]),u=Ce({resolver:Te(Ig)});return m.useEffect(()=>{n&&_s.getList().then(({data:i})=>{x(i)})},[n]),m.useEffect(()=>{if(r){const i=r.invite_user?.email,{invite_user:c,...p}=r;u.reset({...p,invite_user_email:i||null,password:null,u:p.u?(p.u/1024/1024/1024).toFixed(3):"",d:p.d?(p.d/1024/1024/1024).toFixed(3):""})}},[r,u]),e.jsx(Jn,{open:n,onOpenChange:t,children:e.jsxs(nn,{className:"max-w-[90%] space-y-4",children:[e.jsxs(rn,{children:[e.jsx(ln,{children:s("edit.title")}),e.jsx(on,{})]}),e.jsxs(De,{...u,children:[e.jsx(j,{control:u.control,name:"email",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.email")}),e.jsx(b,{children:e.jsx(D,{...i,placeholder:s("edit.form.email_placeholder"),autoComplete:"off","data-form-type":"other"})}),e.jsx(R,{...i})]})}),e.jsx(j,{control:u.control,name:"invite_user_email",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.inviter_email")}),e.jsx(b,{children:e.jsx(D,{value:i.value||"",onChange:c=>i.onChange(c.target.value?c.target.value:null),placeholder:s("edit.form.inviter_email_placeholder"),autoComplete:"off","data-form-type":"other"})}),e.jsx(R,{...i})]})}),e.jsx(j,{control:u.control,name:"password",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.password")}),e.jsx(b,{children:e.jsx(D,{type:"password",value:i.value||"",onChange:i.onChange,placeholder:s("edit.form.password_placeholder"),autoComplete:"off","data-form-type":"other"})}),e.jsx(R,{...i})]})}),e.jsxs("div",{className:"grid gap-2 md:grid-cols-2",children:[e.jsx(j,{control:u.control,name:"balance",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.balance")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:i.onChange,placeholder:s("edit.form.balance_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"¥"})]})}),e.jsx(R,{...i})]})}),e.jsx(j,{control:u.control,name:"commission_balance",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.commission_balance")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:i.onChange,placeholder:s("edit.form.commission_balance_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"¥"})]})}),e.jsx(R,{...i})]})}),e.jsx(j,{control:u.control,name:"u",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.upload")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",step:"any",value:i.value??"",onChange:c=>i.onChange(c.target.value),placeholder:s("edit.form.upload_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"GB"})]})}),e.jsx(R,{...i})]})}),e.jsx(j,{control:u.control,name:"d",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.download")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",step:"any",value:i.value??"",onChange:c=>i.onChange(c.target.value),placeholder:s("edit.form.download_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"GB"})]})}),e.jsx(R,{...i})]})})]}),e.jsx(j,{control:u.control,name:"transfer_enable",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.total_traffic")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value/1024/1024/1024||"",onChange:c=>i.onChange(parseInt(c.target.value)*1024*1024*1024),placeholder:s("edit.form.total_traffic_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"GB"})]})}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"expired_at",render:({field:i})=>e.jsxs(f,{className:"flex flex-col",children:[e.jsx(v,{children:s("edit.form.expire_time")}),e.jsxs(es,{open:o,onOpenChange:l,children:[e.jsx(ss,{asChild:!0,children:e.jsx(b,{children:e.jsxs(L,{type:"button",variant:"outline",className:_("w-full pl-3 text-left font-normal",!i.value&&"text-muted-foreground"),onClick:()=>l(!0),children:[i.value?ne(i.value):e.jsx("span",{children:s("edit.form.expire_time_placeholder")}),e.jsx(Ss,{className:"ml-auto h-4 w-4 opacity-50"})]})})}),e.jsx(We,{className:"w-auto p-0",align:"start",side:"top",sideOffset:4,onInteractOutside:c=>{c.preventDefault()},onEscapeKeyDown:c=>{c.preventDefault()},children:e.jsxs("div",{className:"flex flex-col space-y-3 p-3",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(L,{type:"button",variant:"outline",className:"flex-1",onClick:()=>{i.onChange(null),l(!1)},children:s("edit.form.expire_time_permanent")}),e.jsx(L,{type:"button",variant:"outline",className:"flex-1",onClick:()=>{const c=new Date;c.setMonth(c.getMonth()+1),c.setHours(23,59,59,999),i.onChange(Math.floor(c.getTime()/1e3)),l(!1)},children:s("edit.form.expire_time_1month")}),e.jsx(L,{type:"button",variant:"outline",className:"flex-1",onClick:()=>{const c=new Date;c.setMonth(c.getMonth()+3),c.setHours(23,59,59,999),i.onChange(Math.floor(c.getTime()/1e3)),l(!1)},children:s("edit.form.expire_time_3months")})]}),e.jsx("div",{className:"rounded-md border",children:e.jsx(ks,{mode:"single",selected:i.value?new Date(i.value*1e3):void 0,onSelect:c=>{if(c){const p=new Date(i.value?i.value*1e3:Date.now());c.setHours(p.getHours(),p.getMinutes(),p.getSeconds()),i.onChange(Math.floor(c.getTime()/1e3))}},disabled:c=>c{const c=new Date;c.setHours(23,59,59,999),i.onChange(Math.floor(c.getTime()/1e3))},className:"h-6 px-2 text-xs",children:s("edit.form.expire_time_today")})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(D,{type:"datetime-local",step:"1",value:ne(i.value,"YYYY-MM-DDTHH:mm:ss"),onChange:c=>{const p=new Date(c.target.value);isNaN(p.getTime())||i.onChange(Math.floor(p.getTime()/1e3))},className:"flex-1"}),e.jsx(L,{type:"button",variant:"outline",onClick:()=>l(!1),children:s("edit.form.expire_time_confirm")})]})]})]})})]}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"plan_id",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.subscription")}),e.jsx(b,{children:e.jsxs(X,{value:i.value!==null?String(i.value):"null",onValueChange:c=>i.onChange(c==="null"?null:parseInt(c)),children:[e.jsx(J,{children:e.jsx(Z,{placeholder:s("edit.form.subscription_none")})}),e.jsxs(Q,{children:[e.jsx(q,{value:"null",children:s("edit.form.subscription_none")}),d.map(c=>e.jsx(q,{value:String(c.id),children:c.name},c.id))]})]})})]})}),e.jsx(j,{control:u.control,name:"banned",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.account_status")}),e.jsx(b,{children:e.jsxs(X,{value:i.value.toString(),onValueChange:c=>i.onChange(c==="true"),children:[e.jsx(J,{children:e.jsx(Z,{})}),e.jsxs(Q,{children:[e.jsx(q,{value:"true",children:s("columns.status_text.banned")}),e.jsx(q,{value:"false",children:s("columns.status_text.normal")})]})]})})]})}),e.jsx(j,{control:u.control,name:"commission_type",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.commission_type")}),e.jsx(b,{children:e.jsxs(X,{value:i.value.toString(),onValueChange:c=>i.onChange(parseInt(c)),children:[e.jsx(J,{children:e.jsx(Z,{placeholder:s("edit.form.subscription_none")})}),e.jsxs(Q,{children:[e.jsx(q,{value:"0",children:s("edit.form.commission_type_system")}),e.jsx(q,{value:"1",children:s("edit.form.commission_type_cycle")}),e.jsx(q,{value:"2",children:s("edit.form.commission_type_onetime")})]})]})})]})}),e.jsx(j,{control:u.control,name:"commission_rate",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.commission_rate")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:c=>i.onChange(parseInt(c.currentTarget.value)||null),placeholder:s("edit.form.commission_rate_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"%"})]})})]})}),e.jsx(j,{control:u.control,name:"discount",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.discount")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:c=>i.onChange(parseInt(c.currentTarget.value)||null),placeholder:s("edit.form.discount_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"%"})]})}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"speed_limit",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.speed_limit")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:c=>i.onChange(parseInt(c.currentTarget.value)||null),placeholder:s("edit.form.speed_limit_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"Mbps"})]})}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"device_limit",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.device_limit")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:c=>i.onChange(parseInt(c.currentTarget.value)||null),placeholder:s("edit.form.device_limit_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"台"})]})}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"is_admin",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.is_admin")}),e.jsx("div",{className:"py-2",children:e.jsx(b,{children:e.jsx(ee,{checked:i.value,onCheckedChange:c=>i.onChange(c)})})}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"is_staff",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.is_staff")}),e.jsx("div",{className:"py-2",children:e.jsx(b,{children:e.jsx(ee,{checked:i.value,onCheckedChange:c=>i.onChange(c)})})})]})}),e.jsx(j,{control:u.control,name:"remarks",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.remarks")}),e.jsx(b,{children:e.jsx(Es,{className:"h-24",value:i.value||"",onChange:c=>i.onChange(c.currentTarget.value??null),placeholder:s("edit.form.remarks_placeholder")})}),e.jsx(R,{})]})}),e.jsxs(Ei,{children:[e.jsx(L,{variant:"outline",onClick:()=>t(!1),children:s("edit.form.cancel")}),e.jsx(L,{type:"submit",onClick:()=>{u.handleSubmit(i=>{const c={id:i.id};u.formState.dirtyFields.u&&(c.u=Math.round(parseFloat(i.u)*1024*1024*1024)),u.formState.dirtyFields.d&&(c.d=Math.round(parseFloat(i.d)*1024*1024*1024)),Object.keys(i).forEach(p=>{p!=="u"&&p!=="d"&&p!=="id"&&u.formState.dirtyFields[p]&&(c[p]=i[p])}),Us.update(c).then(({data:p})=>{p&&($.success(s("edit.form.success")),t(!1),a())})})()},children:s("edit.form.submit")})]})]})]})})}function Vg(){const[s]=Ml(),[n,t]=m.useState({}),[r,a]=m.useState({is_admin:!1,is_staff:!1}),[o,l]=m.useState([]),[d,x]=m.useState([]),[u,i]=m.useState({pageIndex:0,pageSize:20});m.useEffect(()=>{const N=s.get("email");N&&l(S=>S.some(E=>E.id==="email")?S:[...S,{id:"email",value:N}])},[s]);const{refetch:c,data:p,isLoading:F}=re({queryKey:["userList",u,o,d],queryFn:()=>Us.getList({pageSize:u.pageSize,current:u.pageIndex+1,filter:o,sort:d})}),[T,C]=m.useState([]),[P,w]=m.useState([]);m.useEffect(()=>{_t.getList().then(({data:N})=>{C(N)}),_s.getList().then(({data:N})=>{w(N)})},[]);const I=T.map(N=>({label:N.name,value:N.id})),y=P.map(N=>({label:N.name,value:N.id}));return e.jsxs(zi,{refreshData:c,children:[e.jsx(Mg,{data:p?.data||[],rowCount:p?.total??0,sorting:d,setSorting:x,columnVisibility:r,setColumnVisibility:a,rowSelection:n,setRowSelection:t,columnFilters:o,setColumnFilters:l,pagination:u,setPagination:i,refetch:c,serverGroupList:T,permissionGroups:I,subscriptionPlans:y,isLoading:F}),e.jsx($i,{})]})}function Mg({data:s,rowCount:n,sorting:t,setSorting:r,columnVisibility:a,setColumnVisibility:o,rowSelection:l,setRowSelection:d,columnFilters:x,setColumnFilters:u,pagination:i,setPagination:c,refetch:p,serverGroupList:F,permissionGroups:T,subscriptionPlans:C,isLoading:P}){const{setIsOpen:w,setEditingUser:I}=Qn(),y=Ye({data:s,columns:Eg(p,F,I,w),state:{sorting:t,columnVisibility:a,rowSelection:l,columnFilters:x,pagination:i},rowCount:n,manualPagination:!0,manualFiltering:!0,manualSorting:!0,enableRowSelection:!0,onRowSelectionChange:d,onSortingChange:r,onColumnFiltersChange:u,onColumnVisibilityChange:o,getCoreRowModel:Je(),getFilteredRowModel:fs(),getPaginationRowModel:ts(),onPaginationChange:c,getSortedRowModel:js(),getFacetedRowModel:Ls(),getFacetedUniqueValues:Rs(),initialState:{columnVisibility:{commission_balance:!1,created_at:!1,is_admin:!1,is_staff:!1,permission_group:!1,plan_id:!1},columnPinning:{right:["actions"]}}});return e.jsxs("div",{className:"space-y-4",children:[e.jsx(bg,{table:y,refetch:p,serverGroupList:F,permissionGroups:T,subscriptionPlans:C}),e.jsx(rs,{table:y,isLoading:P})]})}function Og(){const{t:s}=V("user");return e.jsxs(Ue,{children:[e.jsxs(He,{children:[e.jsx(ds,{}),e.jsxs("div",{className:"ml-auto flex items-center space-x-4",children:[e.jsx(as,{}),e.jsx(ns,{})]})]}),e.jsxs(Qe,{className:"flex flex-col",fixedHeight:!0,children:[e.jsx("div",{className:"mb-2 flex items-center justify-between space-y-2",children:e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold tracking-tight",children:s("manage.title")}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:s("manage.description")})]})}),e.jsx("div",{className:"-mx-4 flex-1 overflow-auto px-4 py-1 lg:flex-row lg:space-x-12 lg:space-y-0",children:e.jsx("div",{className:"w-full",children:e.jsx(Vg,{})})})]})]})}const zg=Object.freeze(Object.defineProperty({__proto__:null,default:Og},Symbol.toStringTag,{value:"Module"})),$g=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M19 11H5a1 1 0 0 0 0 2h14a1 1 0 0 0 0-2"})});function Ag({table:s}){const{t:n}=V("ticket");return e.jsx("div",{className:"flex items-center justify-between",children:e.jsxs("div",{className:"flex flex-1 flex-col-reverse items-start gap-y-2 sm:flex-row sm:items-center sm:space-x-4",children:[e.jsx(yt,{defaultValue:s.getColumn("status")?.getFilterValue(),onValueChange:t=>s.getColumn("status")?.setFilterValue(t),children:e.jsxs(lt,{className:"grid w-full grid-cols-2",children:[e.jsx(Ge,{value:"0",children:n("status.pending")}),e.jsx(Ge,{value:"1",children:n("status.closed")})]})}),s.getColumn("level")&&e.jsx(Oa,{column:s.getColumn("level"),title:n("columns.level"),options:[{label:n("level.low"),value:us.LOW,icon:$g,color:"gray"},{label:n("level.medium"),value:us.MIDDLE,icon:Ii,color:"yellow"},{label:n("level.high"),value:us.HIGH,icon:Vi,color:"red"}]})]})})}function qg(){return e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",className:"text-foreground",children:[e.jsx("circle",{cx:"4",cy:"12",r:"2",fill:"currentColor",children:e.jsx("animate",{id:"spinner_qFRN",begin:"0;spinner_OcgL.end+0.25s",attributeName:"cy",calcMode:"spline",dur:"0.6s",values:"12;6;12",keySplines:".33,.66,.66,1;.33,0,.66,.33"})}),e.jsx("circle",{cx:"12",cy:"12",r:"2",fill:"currentColor",children:e.jsx("animate",{begin:"spinner_qFRN.begin+0.1s",attributeName:"cy",calcMode:"spline",dur:"0.6s",values:"12;6;12",keySplines:".33,.66,.66,1;.33,0,.66,.33"})}),e.jsx("circle",{cx:"20",cy:"12",r:"2",fill:"currentColor",children:e.jsx("animate",{id:"spinner_OcgL",begin:"spinner_qFRN.begin+0.2s",attributeName:"cy",calcMode:"spline",dur:"0.6s",values:"12;6;12",keySplines:".33,.66,.66,1;.33,0,.66,.33"})})]})}const Ug=vt("flex gap-2 max-w-[60%] items-end relative group",{variants:{variant:{received:"self-start",sent:"self-end flex-row-reverse"},layout:{default:"",ai:"max-w-full w-full items-center"}},defaultVariants:{variant:"received",layout:"default"}}),Ai=m.forwardRef(({className:s,variant:n,layout:t,children:r,...a},o)=>e.jsx("div",{className:_(Ug({variant:n,layout:t,className:s}),"relative group"),ref:o,...a,children:m.Children.map(r,l=>m.isValidElement(l)&&typeof l.type!="string"?m.cloneElement(l,{variant:n,layout:t}):l)}));Ai.displayName="ChatBubble";const Hg=vt("p-4",{variants:{variant:{received:"bg-secondary text-secondary-foreground rounded-r-lg rounded-tl-lg",sent:"bg-primary text-primary-foreground rounded-l-lg rounded-tr-lg"},layout:{default:"",ai:"border-t w-full rounded-none bg-transparent"}},defaultVariants:{variant:"received",layout:"default"}}),qi=m.forwardRef(({className:s,variant:n,layout:t,isLoading:r=!1,children:a,...o},l)=>e.jsx("div",{className:_(Hg({variant:n,layout:t,className:s}),"break-words max-w-full whitespace-pre-wrap"),ref:l,...o,children:r?e.jsx("div",{className:"flex items-center space-x-2",children:e.jsx(qg,{})}):a}));qi.displayName="ChatBubbleMessage";const Kg=m.forwardRef(({variant:s,className:n,children:t,...r},a)=>e.jsx("div",{ref:a,className:_("absolute top-1/2 -translate-y-1/2 flex opacity-0 group-hover:opacity-100 transition-opacity duration-200",s==="sent"?"-left-1 -translate-x-full flex-row-reverse":"-right-1 translate-x-full",n),...r,children:t}));Kg.displayName="ChatBubbleActionWrapper";const Ui=m.forwardRef(({className:s,...n},t)=>e.jsx(Es,{autoComplete:"off",ref:t,name:"message",className:_("max-h-12 px-4 py-3 bg-background text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 w-full rounded-md flex items-center h-16 resize-none",s),...n}));Ui.displayName="ChatInput";const Hi=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"m13.41 12l4.3-4.29a1 1 0 1 0-1.42-1.42L12 10.59l-4.29-4.3a1 1 0 0 0-1.42 1.42l4.3 4.29l-4.3 4.29a1 1 0 0 0 0 1.42a1 1 0 0 0 1.42 0l4.29-4.3l4.29 4.3a1 1 0 0 0 1.42 0a1 1 0 0 0 0-1.42Z"})}),Ki=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M15.098 12.634L13 11.423V7a1 1 0 0 0-2 0v5a1 1 0 0 0 .5.866l2.598 1.5a1 1 0 1 0 1-1.732M12 2a10 10 0 1 0 10 10A10.01 10.01 0 0 0 12 2m0 18a8 8 0 1 1 8-8a8.01 8.01 0 0 1-8 8"})}),Fr=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"m11.29 12l3.54-3.54a1 1 0 0 0 0-1.41a1 1 0 0 0-1.42 0l-4.24 4.24a1 1 0 0 0 0 1.42L13.41 17a1 1 0 0 0 .71.29a1 1 0 0 0 .71-.29a1 1 0 0 0 0-1.41Z"})}),Bg=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M21.71 20.29L18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a1 1 0 0 0 1.42 0a1 1 0 0 0 0-1.39M11 18a7 7 0 1 1 7-7a7 7 0 0 1-7 7"})}),Gg=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M3.71 16.29a1 1 0 0 0-.33-.21a1 1 0 0 0-.76 0a1 1 0 0 0-.33.21a1 1 0 0 0-.21.33a1 1 0 0 0 .21 1.09a1.2 1.2 0 0 0 .33.21a.94.94 0 0 0 .76 0a1.2 1.2 0 0 0 .33-.21a1 1 0 0 0 .21-1.09a1 1 0 0 0-.21-.33M7 8h14a1 1 0 0 0 0-2H7a1 1 0 0 0 0 2m-3.29 3.29a1 1 0 0 0-1.09-.21a1.2 1.2 0 0 0-.33.21a1 1 0 0 0-.21.33a.94.94 0 0 0 0 .76a1.2 1.2 0 0 0 .21.33a1.2 1.2 0 0 0 .33.21a.94.94 0 0 0 .76 0a1.2 1.2 0 0 0 .33-.21a1.2 1.2 0 0 0 .21-.33a.94.94 0 0 0 0-.76a1 1 0 0 0-.21-.33M21 11H7a1 1 0 0 0 0 2h14a1 1 0 0 0 0-2M3.71 6.29a1 1 0 0 0-.33-.21a1 1 0 0 0-1.09.21a1.2 1.2 0 0 0-.21.33a.94.94 0 0 0 0 .76a1.2 1.2 0 0 0 .21.33a1.2 1.2 0 0 0 .33.21a1 1 0 0 0 1.09-.21a1.2 1.2 0 0 0 .21-.33a.94.94 0 0 0 0-.76a1.2 1.2 0 0 0-.21-.33M21 16H7a1 1 0 0 0 0 2h14a1 1 0 0 0 0-2"})}),Wg=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M9 12H7a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2m-1-2h4a1 1 0 0 0 0-2H8a1 1 0 0 0 0 2m1 6H7a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2m12-4h-3V3a1 1 0 0 0-.5-.87a1 1 0 0 0-1 0l-3 1.72l-3-1.72a1 1 0 0 0-1 0l-3 1.72l-3-1.72a1 1 0 0 0-1 0A1 1 0 0 0 2 3v16a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-6a1 1 0 0 0-1-1M5 20a1 1 0 0 1-1-1V4.73l2 1.14a1.08 1.08 0 0 0 1 0l3-1.72l3 1.72a1.08 1.08 0 0 0 1 0l2-1.14V19a3 3 0 0 0 .18 1Zm15-1a1 1 0 0 1-2 0v-5h2Zm-6.44-2.83a.8.8 0 0 0-.18-.09a.6.6 0 0 0-.19-.06a1 1 0 0 0-.9.27A1.05 1.05 0 0 0 12 17a1 1 0 0 0 .07.38a1.2 1.2 0 0 0 .22.33a1.2 1.2 0 0 0 .33.21a.94.94 0 0 0 .76 0a1.2 1.2 0 0 0 .33-.21A1 1 0 0 0 14 17a1.05 1.05 0 0 0-.29-.71a2 2 0 0 0-.15-.12m.14-3.88a1 1 0 0 0-1.62.33A1 1 0 0 0 13 14a1 1 0 0 0 1-1a1 1 0 0 0-.08-.38a.9.9 0 0 0-.22-.33"})});function Yg(){return e.jsxs("div",{className:"flex h-full flex-col space-y-4 p-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(be,{className:"h-8 w-3/4"}),e.jsx(be,{className:"h-4 w-1/2"})]}),e.jsx("div",{className:"flex-1 space-y-4",children:[1,2,3].map(s=>e.jsx(be,{className:"h-20 w-2/3"},s))})]})}function Jg(){return e.jsx("div",{className:"space-y-4 p-4",children:[1,2,3,4].map(s=>e.jsxs("div",{className:"space-y-2",children:[e.jsx(be,{className:"h-5 w-4/5"}),e.jsx(be,{className:"h-4 w-2/3"}),e.jsx(be,{className:"h-3 w-1/2"})]},s))})}function Qg({ticket:s,isActive:n,onClick:t}){const{t:r}=V("ticket"),a=o=>{switch(o){case us.HIGH:return"bg-red-50 text-red-600 border-red-200";case us.MIDDLE:return"bg-yellow-50 text-yellow-600 border-yellow-200";case us.LOW:return"bg-green-50 text-green-600 border-green-200";default:return"bg-gray-50 text-gray-600 border-gray-200"}};return e.jsxs("div",{className:_("flex cursor-pointer flex-col border-b p-4 hover:bg-accent/50",n&&"bg-accent"),onClick:t,children:[e.jsxs("div",{className:"flex max-w-[280px] items-center justify-between gap-2",children:[e.jsx("h4",{className:"flex-1 truncate font-medium",children:s.subject}),e.jsx(U,{variant:s.status===tt.CLOSED?"secondary":"default",className:"shrink-0",children:s.status===tt.CLOSED?r("status.closed"):r("status.processing")})]}),e.jsx("div",{className:"mt-1 max-w-[280px] truncate text-sm text-muted-foreground",children:s.user?.email}),e.jsxs("div",{className:"mt-2 flex items-center justify-between text-xs",children:[e.jsx("time",{className:"text-muted-foreground",children:ne(s.updated_at)}),e.jsx("div",{className:_("rounded-full border px-2 py-0.5 text-xs font-medium",a(s.level)),children:r(`level.${s.level===us.LOW?"low":s.level===us.MIDDLE?"medium":"high"}`)})]})]})}function Xg({ticketId:s,dialogTrigger:n}){const{t}=V("ticket"),r=Ws(),a=m.useRef(null),o=m.useRef(null),[l,d]=m.useState(!1),[x,u]=m.useState(""),[i,c]=m.useState(!1),[p,F]=m.useState(s),[T,C]=m.useState(""),[P,w]=m.useState(!1),{setIsOpen:I,setEditingUser:y}=Qn(),{data:N,isLoading:S,refetch:O}=re({queryKey:["tickets",l],queryFn:()=>l?Pt.getList({filter:[{id:"status",value:[tt.OPENING]}]}):Promise.resolve(null),enabled:l}),{data:E,refetch:g,isLoading:k}=re({queryKey:["ticket",p,l],queryFn:()=>l?Pt.getInfo(p):Promise.resolve(null),refetchInterval:l?5e3:!1,retry:3}),W=E?.data,ae=(N?.data||[]).filter(le=>le.subject.toLowerCase().includes(T.toLowerCase())||le.user?.email.toLowerCase().includes(T.toLowerCase())),B=(le="smooth")=>{if(a.current){const{scrollHeight:Ts,clientHeight:Ns}=a.current;a.current.scrollTo({top:Ts-Ns,behavior:le})}};m.useEffect(()=>{if(!l)return;const le=requestAnimationFrame(()=>{B("instant"),setTimeout(()=>B(),1e3)});return()=>{cancelAnimationFrame(le)}},[l,W?.messages]);const se=async()=>{const le=x.trim();!le||i||(c(!0),Pt.reply({id:p,message:le}).then(()=>{u(""),g(),B(),setTimeout(()=>{o.current?.focus()},0)}).finally(()=>{c(!1)}))},je=async()=>{Pt.close(p).then(()=>{$.success(t("actions.close_success")),g(),O()})},ms=()=>{W?.user&&r("/finance/order?user_id="+W.user.id)},ze=W?.status===tt.CLOSED;return e.jsxs(de,{open:l,onOpenChange:d,children:[e.jsx(cs,{asChild:!0,children:n??e.jsx(G,{variant:"outline",children:t("actions.view_ticket")})}),e.jsxs(oe,{className:"flex h-[90vh] max-w-6xl flex-col gap-0 p-0",children:[e.jsx(me,{}),e.jsxs("div",{className:"flex h-full",children:[e.jsx(G,{variant:"ghost",size:"icon",className:"absolute left-2 top-2 z-50 md:hidden",onClick:()=>w(!P),children:e.jsx(Fr,{className:_("h-4 w-4 transition-transform",!P&&"rotate-180")})}),e.jsxs("div",{className:_("absolute inset-y-0 left-0 z-40 flex flex-col border-r bg-background transition-transform duration-200 ease-in-out md:relative",P?"-translate-x-full":"translate-x-0","w-80 md:w-80 md:translate-x-0"),children:[e.jsxs("div",{className:"space-y-4 border-b p-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"font-semibold",children:t("list.title")}),e.jsx(G,{variant:"ghost",size:"icon",className:"hidden h-8 w-8 md:flex",onClick:()=>w(!P),children:e.jsx(Fr,{className:_("h-4 w-4 transition-transform",!P&&"rotate-180")})})]}),e.jsxs("div",{className:"relative",children:[e.jsx(Bg,{className:"absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 transform text-muted-foreground"}),e.jsx(D,{placeholder:t("list.search_placeholder"),value:T,onChange:le=>C(le.target.value),className:"pl-8"})]})]}),e.jsx(jt,{className:"flex-1",children:e.jsx("div",{className:"w-full",children:S?e.jsx(Jg,{}):ae.length===0?e.jsx("div",{className:"flex h-full items-center justify-center p-4 text-muted-foreground",children:t(T?"list.no_search_results":"list.no_tickets")}):ae.map(le=>e.jsx(Qg,{ticket:le,isActive:le.id===p,onClick:()=>{F(le.id),window.innerWidth<768&&w(!0)}},le.id))})})]}),e.jsxs("div",{className:"relative flex flex-1 flex-col",children:[!P&&e.jsx("div",{className:"absolute inset-0 z-30 bg-black/20 md:hidden",onClick:()=>w(!0)}),k?e.jsx(Yg,{}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex flex-col space-y-4 border-b p-6",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("h2",{className:"text-2xl font-semibold",children:W?.subject}),e.jsx(U,{variant:ze?"secondary":"default",children:t(ze?"status.closed":"status.processing")}),!ze&&e.jsx(hs,{title:t("actions.close_confirm_title"),description:t("actions.close_confirm_description"),confirmText:t("actions.close_confirm_button"),variant:"destructive",onConfirm:je,children:e.jsxs(G,{variant:"ghost",size:"sm",className:"gap-1 text-muted-foreground hover:text-destructive",children:[e.jsx(Hi,{className:"h-4 w-4"}),t("actions.close_ticket")]})})]}),e.jsxs("div",{className:"flex items-center space-x-4 text-sm text-muted-foreground",children:[e.jsxs("div",{className:"flex items-center space-x-1",children:[e.jsx(Ma,{className:"h-4 w-4"}),e.jsx("span",{children:W?.user?.email})]}),e.jsx(Re,{orientation:"vertical",className:"h-4"}),e.jsxs("div",{className:"flex items-center space-x-1",children:[e.jsx(Ki,{className:"h-4 w-4"}),e.jsxs("span",{children:[t("detail.created_at")," ",ne(W?.created_at)]})]}),e.jsx(Re,{orientation:"vertical",className:"h-4"}),e.jsx(U,{variant:"outline",children:W?.level!=null&&t(`level.${W.level===us.LOW?"low":W.level===us.MIDDLE?"medium":"high"}`)})]})]}),W?.user&&e.jsxs("div",{className:"flex space-x-2",children:[e.jsx(G,{variant:"outline",size:"icon",className:"h-8 w-8",title:t("detail.user_info"),onClick:()=>{y(W.user),I(!0)},children:e.jsx(Ma,{className:"h-4 w-4"})}),e.jsx(Mi,{user_id:W.user.id,dialogTrigger:e.jsx(G,{variant:"outline",size:"icon",className:"h-8 w-8",title:t("detail.traffic_records"),children:e.jsx(Gg,{className:"h-4 w-4"})})}),e.jsx(G,{variant:"outline",size:"icon",className:"h-8 w-8",title:t("detail.order_records"),onClick:ms,children:e.jsx(Wg,{className:"h-4 w-4"})})]})]})}),e.jsx("div",{className:"flex-1 overflow-hidden",children:e.jsx("div",{ref:a,className:"h-full space-y-4 overflow-y-auto p-6",children:W?.messages?.length===0?e.jsx("div",{className:"flex h-full items-center justify-center text-muted-foreground",children:t("detail.no_messages")}):W?.messages?.map(le=>e.jsx(Ai,{variant:le.is_from_admin?"sent":"received",className:le.is_from_admin?"ml-auto":"mr-auto",children:e.jsx(qi,{children:e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"whitespace-pre-wrap break-words",children:le.message}),e.jsx("div",{className:"text-right",children:e.jsx("time",{className:"text-[10px] text-muted-foreground",children:ne(le.created_at)})})]})})},le.id))})}),e.jsx("div",{className:"border-t p-4",children:e.jsxs("div",{className:"relative flex items-center space-x-2",children:[e.jsx(Ui,{ref:o,disabled:ze||i,placeholder:t(ze?"detail.input.closed_placeholder":"detail.input.reply_placeholder"),className:"flex-1 resize-none rounded-lg border bg-background p-3 focus-visible:ring-1",value:x,onChange:le=>u(le.target.value),onKeyDown:le=>{le.key==="Enter"&&!le.shiftKey&&(le.preventDefault(),se())}}),e.jsx(G,{disabled:ze||i||!x.trim(),onClick:se,children:t(i?"detail.input.sending":"detail.input.send")})]})})]})]})]})]})]})}const Zg=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M19 4H5a3 3 0 0 0-3 3v10a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3m-.41 2l-5.88 5.88a1 1 0 0 1-1.42 0L5.41 6ZM20 17a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7.41l5.88 5.88a3 3 0 0 0 4.24 0L20 7.41Z"})}),ep=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M21.92 11.6C19.9 6.91 16.1 4 12 4s-7.9 2.91-9.92 7.6a1 1 0 0 0 0 .8C4.1 17.09 7.9 20 12 20s7.9-2.91 9.92-7.6a1 1 0 0 0 0-.8M12 18c-3.17 0-6.17-2.29-7.9-6C5.83 8.29 8.83 6 12 6s6.17 2.29 7.9 6c-1.73 3.71-4.73 6-7.9 6m0-10a4 4 0 1 0 4 4a4 4 0 0 0-4-4m0 6a2 2 0 1 1 2-2a2 2 0 0 1-2 2"})}),sp=s=>{const{t:n}=V("ticket");return[{accessorKey:"id",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.id")}),cell:({row:t})=>e.jsx(U,{variant:"outline",children:t.getValue("id")}),enableSorting:!1,enableHiding:!1},{accessorKey:"subject",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.subject")}),cell:({row:t})=>e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Zg,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"max-w-[500px] truncate font-medium",children:t.getValue("subject")})]}),enableSorting:!1,enableHiding:!1,size:4e3},{accessorKey:"level",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.level")}),cell:({row:t})=>{const r=t.getValue("level"),a=r===us.LOW?"default":r===us.MIDDLE?"secondary":"destructive";return e.jsx(U,{variant:a,className:"whitespace-nowrap",children:n(`level.${r===us.LOW?"low":r===us.MIDDLE?"medium":"high"}`)})},filterFn:(t,r,a)=>a.includes(t.getValue(r))},{accessorKey:"status",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.status")}),cell:({row:t})=>{const r=t.getValue("status"),a=t.original.reply_status,o=r===tt.CLOSED?n("status.closed"):n(a===0?"status.replied":"status.pending"),l=r===tt.CLOSED?"default":a===0?"secondary":"destructive";return e.jsx(U,{variant:l,className:"whitespace-nowrap",children:o})}},{accessorKey:"updated_at",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.updated_at")}),cell:({row:t})=>e.jsxs("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[e.jsx(Ki,{className:"h-4 w-4"}),e.jsx("span",{className:"text-sm",children:ne(t.getValue("updated_at"))})]}),enableSorting:!0},{accessorKey:"created_at",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.created_at")}),cell:({row:t})=>e.jsx("div",{className:"text-sm text-muted-foreground",children:ne(t.getValue("created_at"))}),enableSorting:!0,meta:{isFlexGrow:!0}},{id:"actions",header:({column:t})=>e.jsx(z,{className:"justify-end",column:t,title:n("columns.actions")}),cell:({row:t})=>{const r=t.original.status!==tt.CLOSED;return e.jsxs("div",{className:"flex items-center justify-center",children:[e.jsx(Xg,{ticketId:t.original.id,dialogTrigger:e.jsx(G,{variant:"ghost",size:"icon",className:"h-8 w-8",title:n("actions.view_details"),children:e.jsx(ep,{className:"h-4 w-4"})})}),r&&e.jsx(hs,{title:n("actions.close_confirm_title"),description:n("actions.close_confirm_description"),confirmText:n("actions.close_confirm_button"),variant:"destructive",onConfirm:async()=>{Pt.close(t.original.id).then(()=>{$.success(n("actions.close_success")),s()})},children:e.jsx(G,{variant:"ghost",size:"icon",className:"h-8 w-8",title:n("actions.close_ticket"),children:e.jsx(Hi,{className:"h-4 w-4"})})})]})}}]};function tp(){const[s,n]=m.useState({}),[t,r]=m.useState({}),[a,o]=m.useState([{id:"status",value:"0"}]),[l,d]=m.useState([]),[x,u]=m.useState({pageIndex:0,pageSize:20}),{refetch:i,data:c}=re({queryKey:["orderList",x,a,l],queryFn:()=>Pt.getList({pageSize:x.pageSize,current:x.pageIndex+1,filter:a,sort:l})}),p=Ye({data:c?.data??[],columns:sp(i),state:{sorting:l,columnVisibility:t,rowSelection:s,columnFilters:a,pagination:x},rowCount:c?.total??0,manualPagination:!0,manualFiltering:!0,manualSorting:!0,enableRowSelection:!0,onRowSelectionChange:n,onSortingChange:d,onColumnFiltersChange:o,onColumnVisibilityChange:r,getCoreRowModel:Je(),getFilteredRowModel:fs(),getPaginationRowModel:ts(),onPaginationChange:u,getSortedRowModel:js(),getFacetedRowModel:Ls(),getFacetedUniqueValues:Rs(),initialState:{columnPinning:{right:["actions"]}}});return e.jsxs("div",{className:"space-y-4",children:[e.jsx(Ag,{table:p,refetch:i}),e.jsx(rs,{table:p,showPagination:!0})]})}function ap(){const{t:s}=V("ticket");return e.jsxs(zi,{refreshData:()=>{},children:[e.jsxs(Ue,{children:[e.jsxs(He,{children:[e.jsx(ds,{}),e.jsxs("div",{className:"ml-auto flex items-center space-x-4",children:[e.jsx(as,{}),e.jsx(ns,{})]})]}),e.jsxs(Qe,{className:"flex flex-col",fixedHeight:!0,children:[e.jsx("div",{className:"mb-2 flex items-center justify-between space-y-2",children:e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold tracking-tight",children:s("title")}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:s("description")})]})}),e.jsx("div",{className:"-mx-4 flex-1 overflow-auto px-4 py-1 lg:flex-row lg:space-x-12 lg:space-y-0",children:e.jsx(tp,{})})]})]}),e.jsx($i,{})]})}const np=Object.freeze(Object.defineProperty({__proto__:null,default:ap},Symbol.toStringTag,{value:"Module"}));function rp({table:s,refetch:n}){const{t}=V("user"),r=s.getState().columnFilters.length>0,[a,o]=m.useState(),[l,d]=m.useState(),[x,u]=m.useState(!1),i=[{value:"monthly",label:t("traffic_reset_logs.filters.reset_types.monthly")},{value:"first_day_month",label:t("traffic_reset_logs.filters.reset_types.first_day_month")},{value:"yearly",label:t("traffic_reset_logs.filters.reset_types.yearly")},{value:"first_day_year",label:t("traffic_reset_logs.filters.reset_types.first_day_year")},{value:"manual",label:t("traffic_reset_logs.filters.reset_types.manual")}],c=[{value:"auto",label:t("traffic_reset_logs.filters.trigger_sources.auto")},{value:"manual",label:t("traffic_reset_logs.filters.trigger_sources.manual")},{value:"cron",label:t("traffic_reset_logs.filters.trigger_sources.cron")}],p=()=>{let P=s.getState().columnFilters.filter(w=>w.id!=="date_range");(a||l)&&P.push({id:"date_range",value:{start:a?Ee(a,"yyyy-MM-dd"):null,end:l?Ee(l,"yyyy-MM-dd"):null}}),s.setColumnFilters(P)},F=async()=>{try{u(!0);const P=s.getState().columnFilters.reduce((g,k)=>{if(k.value)if(k.id==="date_range"){const W=k.value;W.start&&(g.start_date=W.start),W.end&&(g.end_date=W.end)}else g[k.id]=k.value;return g},{}),I=(await la.getLogs({...P,page:1,per_page:1e4})).data.map(g=>({ID:g.id,用户邮箱:g.user_email,用户ID:g.user_id,重置类型:g.reset_type_name,触发源:g.trigger_source_name,清零流量:g.old_traffic.formatted,"上传流量(GB)":(g.old_traffic.upload/1024**3).toFixed(2),"下载流量(GB)":(g.old_traffic.download/1024**3).toFixed(2),重置时间:Ee(new Date(g.reset_time),"yyyy-MM-dd HH:mm:ss"),记录时间:Ee(new Date(g.created_at),"yyyy-MM-dd HH:mm:ss"),原因:g.reason||""})),y=Object.keys(I[0]||{}),N=[y.join(","),...I.map(g=>y.map(k=>{const W=g[k];return typeof W=="string"&&W.includes(",")?`"${W}"`:W}).join(","))].join(` +`+a("columns.online_status.offline_duration.seconds",{count:x})}const[i,c]=ka.useState(!1),p=o.original.email;return e.jsx(pe,{delayDuration:100,children:e.jsxs(ue,{children:[e.jsx(xe,{children:e.jsxs("div",{className:"group flex items-center gap-2.5",onMouseEnter:()=>c(!0),onMouseLeave:()=>c(!1),children:[e.jsx("div",{className:_("size-2.5 rounded-full ring-2 ring-offset-2",d?"bg-green-500 ring-green-500/20":"bg-gray-300 ring-gray-300/20","transition-all duration-300")}),e.jsx(Sg,{user:o.original,trigger:e.jsx("span",{className:"cursor-pointer font-medium text-foreground/90 transition-colors hover:text-primary hover:underline",children:p})}),e.jsx("button",{type:"button",className:_("ml-1 rounded bg-transparent p-1 transition-opacity hover:bg-muted",i?"opacity-100":"pointer-events-none opacity-0","group-hover:pointer-events-auto group-hover:opacity-100"),tabIndex:-1,"aria-label":a("columns.actions_menu.copy_email",{defaultValue:"Copy Email"}),onClick:F=>{F.stopPropagation(),Et(p),$.success(a("common:copy.success"))},style:{lineHeight:0},children:e.jsx($n,{className:"h-4 w-4 text-muted-foreground"})})]})}),e.jsx(ce,{side:"bottom",className:"max-w-[280px]",children:e.jsx("p",{className:"whitespace-pre-line text-sm",children:u})})]})})},enableSorting:!1,enableHiding:!1},{accessorKey:"online_count",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.online_count")}),cell:({row:o})=>{const l=o.original.device_limit,d=o.original.online_count||0;return e.jsx(pe,{delayDuration:100,children:e.jsxs(ue,{children:[e.jsx(xe,{children:e.jsx("div",{className:"flex items-center gap-1.5",children:e.jsxs(U,{variant:"outline",className:_("min-w-[4rem] justify-center",l!==null&&d>=l?"border-destructive/50 bg-destructive/10 text-destructive":"border-primary/40 bg-primary/5 text-primary/90"),children:[d," / ",l===null?"∞":l]})})}),e.jsx(ce,{side:"bottom",children:e.jsx("p",{className:"text-sm",children:l===null?a("columns.device_limit.unlimited"):a("columns.device_limit.limited",{count:l})})})]})})},enableSorting:!0,enableHiding:!1},{accessorKey:"banned",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.status")}),cell:({row:o})=>{const l=o.original.banned;return e.jsx("div",{className:"flex justify-center",children:e.jsx(U,{className:_("min-w-20 justify-center transition-colors",l?"bg-destructive/15 text-destructive hover:bg-destructive/25":"bg-success/15 text-success hover:bg-success/25"),children:a(l?"columns.status_text.banned":"columns.status_text.normal")})})},enableSorting:!0,filterFn:(o,l,d)=>d.includes(o.getValue(l))},{accessorKey:"plan_id",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.subscription")}),cell:({row:o})=>e.jsx("div",{className:"min-w-[10em] break-all",children:o.original?.plan?.name||"-"}),enableSorting:!1,enableHiding:!1},{accessorKey:"group_id",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.group")}),cell:({row:o})=>e.jsx("div",{className:"flex flex-wrap gap-1",children:e.jsx(U,{variant:"outline",className:_("px-2 py-0.5 font-medium","bg-secondary/50 hover:bg-secondary/70","border border-border/50","transition-all duration-200","cursor-default select-none","flex items-center gap-1.5 whitespace-nowrap"),children:o.original?.group?.name||"-"})}),enableSorting:!1},{accessorKey:"total_used",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.used_traffic")}),cell:({row:o})=>{const l=Le(o.original?.total_used),d=Le(o.original?.transfer_enable),x=o.original?.total_used/o.original?.transfer_enable*100||0;return e.jsx(pe,{delayDuration:100,children:e.jsxs(ue,{children:[e.jsx(xe,{className:"w-full",children:e.jsxs("div",{className:"w-full space-y-1",children:[e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:l}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[x.toFixed(1),"%"]})]}),e.jsx("div",{className:"h-1.5 w-full rounded-full bg-secondary",children:e.jsx("div",{className:_("h-full rounded-full transition-all",x>90?"bg-destructive":"bg-primary"),style:{width:`${Math.min(x,100)}%`}})})]})}),e.jsx(ce,{side:"bottom",children:e.jsxs("p",{className:"text-sm",children:[a("columns.total_traffic"),": ",d]})})]})})}},{accessorKey:"transfer_enable",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.total_traffic")}),cell:({row:o})=>e.jsx("div",{className:"font-medium text-muted-foreground",children:Le(o.original?.transfer_enable)})},{accessorKey:"expired_at",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.expire_time")}),cell:({row:o})=>{const l=o.original.expired_at,d=Date.now()/1e3,x=l!=null&&le.jsx(z,{column:o,title:a("columns.balance")}),cell:({row:o})=>{const l=pr(o.original?.balance);return e.jsxs("div",{className:"flex items-center gap-1 font-medium",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:"¥"}),e.jsx("span",{className:"tabular-nums text-foreground",children:l})]})}},{accessorKey:"commission_balance",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.commission")}),cell:({row:o})=>{const l=pr(o.original?.commission_balance);return e.jsxs("div",{className:"flex items-center gap-1 font-medium",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:"¥"}),e.jsx("span",{className:"tabular-nums text-foreground",children:l})]})}},{accessorKey:"created_at",header:({column:o})=>e.jsx(z,{column:o,title:a("columns.register_time")}),cell:({row:o})=>e.jsx("div",{className:"truncate",children:ne(o.original?.created_at)}),size:1e3},{id:"actions",header:({column:o})=>e.jsx(z,{column:o,className:"justify-end",title:a("columns.actions")}),cell:({row:o,table:l})=>e.jsxs(Hs,{modal:!1,children:[e.jsx(Gs,{asChild:!0,children:e.jsx("div",{className:"text-center",children:e.jsx(G,{variant:"ghost",className:"h-8 w-8 p-0 hover:bg-muted","aria-label":a("columns.actions"),children:e.jsx(Ra,{className:"size-4"})})})}),e.jsxs(qs,{align:"end",className:"min-w-[40px]",children:[e.jsx(Se,{onSelect:d=>{d.preventDefault(),t(o.original),r(!0)},className:"p-0",children:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5",children:[e.jsx(kg,{className:"mr-2"}),a("columns.actions_menu.edit")]})}),e.jsx(Se,{onSelect:d=>d.preventDefault(),className:"p-0",children:e.jsx(Si,{defaultValues:{email:o.original.email},trigger:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5",children:[e.jsx(Tg,{className:"mr-2"}),a("columns.actions_menu.assign_order")]})})}),e.jsx(Se,{onSelect:()=>{Et(o.original.subscribe_url).then(()=>{$.success(a("common:copy.success"))})},className:"p-0",children:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5",children:[e.jsx(Dg,{className:"mr-2"}),a("columns.actions_menu.copy_url")]})}),e.jsxs(Se,{className:"",onSelect:()=>{Us.resetSecret(o.original.id).then(({data:d})=>{d&&$.success("重置成功")})},children:[e.jsx(Dr,{className:"mr-4"}),a("columns.actions_menu.reset_secret")]}),e.jsx(Se,{onSelect:d=>d.preventDefault(),className:"p-0",children:e.jsx(G,{variant:"ghost",className:"h-auto w-full justify-start px-2 py-1.5 font-normal",asChild:!0,children:e.jsxs(Bs,{to:`/finance/order?user_id=eq:${o.original.id}`,children:[e.jsx(Fg,{className:"mr-2"}),a("columns.actions_menu.orders")]})})}),e.jsxs(Se,{onSelect:()=>{l.setColumnFilters([{id:"invite_user_id",value:"eq:"+o.original?.id}])},children:[e.jsx(Pg,{className:"mr-4"}),a("columns.actions_menu.invites")]}),e.jsx(Se,{onSelect:d=>d.preventDefault(),className:"p-0",children:e.jsx(Mi,{user_id:o.original?.id,dialogTrigger:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5",children:[e.jsx(Lg,{className:"mr-2"}),a("columns.actions_menu.traffic_records")]})})}),e.jsx(Se,{onSelect:d=>d.preventDefault(),className:"p-0",children:e.jsx(Ng,{user:o.original,onSuccess:s,trigger:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5",children:[e.jsx(Dr,{className:"mr-2"}),a("columns.actions_menu.reset_traffic")]})})}),e.jsx(Se,{onSelect:d=>d.preventDefault(),className:"p-0",children:e.jsx(wg,{title:a("columns.actions_menu.delete_confirm_title"),description:a("columns.actions_menu.delete_confirm_description",{email:o.original.email}),cancelText:a("common:cancel"),confirmText:a("common:confirm"),variant:"destructive",onConfirm:async()=>{try{const{data:d}=await Us.destroy(o.original.id);d&&($.success(a("common:delete.success")),s())}catch{$.error(a("common:delete.failed"))}},children:e.jsxs(G,{variant:"ghost",className:"w-full justify-start px-2 py-1.5 text-destructive hover:text-destructive",children:[e.jsx(Rg,{className:"mr-2"}),a("columns.actions_menu.delete")]})})})]})]})}]},Oi=m.createContext(void 0),Qn=()=>{const s=m.useContext(Oi);if(!s)throw new Error("useUserEdit must be used within an UserEditProvider");return s},zi=({children:s,refreshData:n})=>{const[t,r]=m.useState(!1),[a,o]=m.useState(null),l={isOpen:t,setIsOpen:r,editingUser:a,setEditingUser:o,refreshData:n};return e.jsx(Oi.Provider,{value:l,children:s})},Ig=h.object({id:h.number().default(0),email:h.string().email().default(""),invite_user_email:h.string().email().nullable().optional().default(null),password:h.string().optional().nullable().default(null),balance:h.coerce.number().default(0),commission_balance:h.coerce.number().default(0),u:h.coerce.number().default(0),d:h.coerce.number().default(0),transfer_enable:h.number().default(0),expired_at:h.number().nullable().default(null),plan_id:h.number().nullable().default(null),banned:h.boolean().default(!1),commission_type:h.number().default(0),commission_rate:h.number().nullable().default(null),discount:h.number().nullable().default(null),speed_limit:h.number().nullable().default(null),device_limit:h.number().nullable().default(null),is_admin:h.boolean().default(!1),is_staff:h.boolean().default(!1),remarks:h.string().nullable().default(null)});function $i(){const{t:s}=V("user"),{isOpen:n,setIsOpen:t,editingUser:r,refreshData:a}=Qn(),[o,l]=m.useState(!1),[d,x]=m.useState([]),u=Ce({resolver:Te(Ig)});return m.useEffect(()=>{n&&_s.getList().then(({data:i})=>{x(i)})},[n]),m.useEffect(()=>{if(r){const i=r.invite_user?.email,{invite_user:c,...p}=r;u.reset({...p,invite_user_email:i||null,password:null,u:p.u?(p.u/1024/1024/1024).toFixed(3):"",d:p.d?(p.d/1024/1024/1024).toFixed(3):""})}},[r,u]),e.jsx(Jn,{open:n,onOpenChange:t,children:e.jsxs(nn,{className:"max-w-[90%] space-y-4",children:[e.jsxs(rn,{children:[e.jsx(ln,{children:s("edit.title")}),e.jsx(on,{})]}),e.jsxs(De,{...u,children:[e.jsx(j,{control:u.control,name:"email",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.email")}),e.jsx(b,{children:e.jsx(D,{...i,placeholder:s("edit.form.email_placeholder"),autoComplete:"off","data-form-type":"other"})}),e.jsx(R,{...i})]})}),e.jsx(j,{control:u.control,name:"invite_user_email",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.inviter_email")}),e.jsx(b,{children:e.jsx(D,{value:i.value||"",onChange:c=>i.onChange(c.target.value?c.target.value:null),placeholder:s("edit.form.inviter_email_placeholder"),autoComplete:"off","data-form-type":"other"})}),e.jsx(R,{...i})]})}),e.jsx(j,{control:u.control,name:"password",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.password")}),e.jsx(b,{children:e.jsx(D,{type:"password",value:i.value||"",onChange:i.onChange,placeholder:s("edit.form.password_placeholder"),autoComplete:"off","data-form-type":"other"})}),e.jsx(R,{...i})]})}),e.jsxs("div",{className:"grid gap-2 md:grid-cols-2",children:[e.jsx(j,{control:u.control,name:"balance",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.balance")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:i.onChange,placeholder:s("edit.form.balance_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"¥"})]})}),e.jsx(R,{...i})]})}),e.jsx(j,{control:u.control,name:"commission_balance",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.commission_balance")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:i.onChange,placeholder:s("edit.form.commission_balance_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"¥"})]})}),e.jsx(R,{...i})]})}),e.jsx(j,{control:u.control,name:"u",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.upload")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",step:"any",value:i.value??"",onChange:c=>i.onChange(c.target.value),placeholder:s("edit.form.upload_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"GB"})]})}),e.jsx(R,{...i})]})}),e.jsx(j,{control:u.control,name:"d",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.download")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",step:"any",value:i.value??"",onChange:c=>i.onChange(c.target.value),placeholder:s("edit.form.download_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"GB"})]})}),e.jsx(R,{...i})]})})]}),e.jsx(j,{control:u.control,name:"transfer_enable",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.total_traffic")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value/1024/1024/1024||"",onChange:c=>i.onChange(parseInt(c.target.value)*1024*1024*1024),placeholder:s("edit.form.total_traffic_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"GB"})]})}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"expired_at",render:({field:i})=>e.jsxs(f,{className:"flex flex-col",children:[e.jsx(v,{children:s("edit.form.expire_time")}),e.jsxs(es,{open:o,onOpenChange:l,children:[e.jsx(ss,{asChild:!0,children:e.jsx(b,{children:e.jsxs(L,{type:"button",variant:"outline",className:_("w-full pl-3 text-left font-normal",!i.value&&"text-muted-foreground"),onClick:()=>l(!0),children:[i.value?ne(i.value):e.jsx("span",{children:s("edit.form.expire_time_placeholder")}),e.jsx(Ss,{className:"ml-auto h-4 w-4 opacity-50"})]})})}),e.jsx(We,{className:"w-auto p-0",align:"start",side:"top",sideOffset:4,onInteractOutside:c=>{c.preventDefault()},onEscapeKeyDown:c=>{c.preventDefault()},children:e.jsxs("div",{className:"flex flex-col space-y-3 p-3",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(L,{type:"button",variant:"outline",className:"flex-1",onClick:()=>{i.onChange(null),l(!1)},children:s("edit.form.expire_time_permanent")}),e.jsx(L,{type:"button",variant:"outline",className:"flex-1",onClick:()=>{const c=new Date;c.setMonth(c.getMonth()+1),c.setHours(23,59,59,999),i.onChange(Math.floor(c.getTime()/1e3)),l(!1)},children:s("edit.form.expire_time_1month")}),e.jsx(L,{type:"button",variant:"outline",className:"flex-1",onClick:()=>{const c=new Date;c.setMonth(c.getMonth()+3),c.setHours(23,59,59,999),i.onChange(Math.floor(c.getTime()/1e3)),l(!1)},children:s("edit.form.expire_time_3months")})]}),e.jsx("div",{className:"rounded-md border",children:e.jsx(ks,{mode:"single",selected:i.value?new Date(i.value*1e3):void 0,onSelect:c=>{if(c){const p=new Date(i.value?i.value*1e3:Date.now());c.setHours(p.getHours(),p.getMinutes(),p.getSeconds()),i.onChange(Math.floor(c.getTime()/1e3))}},disabled:c=>c{const c=new Date;c.setHours(23,59,59,999),i.onChange(Math.floor(c.getTime()/1e3))},className:"h-6 px-2 text-xs",children:s("edit.form.expire_time_today")})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(D,{type:"datetime-local",step:"1",value:ne(i.value,"YYYY-MM-DDTHH:mm:ss"),onChange:c=>{const p=new Date(c.target.value);isNaN(p.getTime())||i.onChange(Math.floor(p.getTime()/1e3))},className:"flex-1"}),e.jsx(L,{type:"button",variant:"outline",onClick:()=>l(!1),children:s("edit.form.expire_time_confirm")})]})]})]})})]}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"plan_id",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.subscription")}),e.jsx(b,{children:e.jsxs(X,{value:i.value!==null?String(i.value):"null",onValueChange:c=>i.onChange(c==="null"?null:parseInt(c)),children:[e.jsx(J,{children:e.jsx(Z,{placeholder:s("edit.form.subscription_none")})}),e.jsxs(Q,{children:[e.jsx(q,{value:"null",children:s("edit.form.subscription_none")}),d.map(c=>e.jsx(q,{value:String(c.id),children:c.name},c.id))]})]})})]})}),e.jsx(j,{control:u.control,name:"banned",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.account_status")}),e.jsx(b,{children:e.jsxs(X,{value:i.value.toString(),onValueChange:c=>i.onChange(c==="true"),children:[e.jsx(J,{children:e.jsx(Z,{})}),e.jsxs(Q,{children:[e.jsx(q,{value:"true",children:s("columns.status_text.banned")}),e.jsx(q,{value:"false",children:s("columns.status_text.normal")})]})]})})]})}),e.jsx(j,{control:u.control,name:"commission_type",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.commission_type")}),e.jsx(b,{children:e.jsxs(X,{value:i.value.toString(),onValueChange:c=>i.onChange(parseInt(c)),children:[e.jsx(J,{children:e.jsx(Z,{placeholder:s("edit.form.subscription_none")})}),e.jsxs(Q,{children:[e.jsx(q,{value:"0",children:s("edit.form.commission_type_system")}),e.jsx(q,{value:"1",children:s("edit.form.commission_type_cycle")}),e.jsx(q,{value:"2",children:s("edit.form.commission_type_onetime")})]})]})})]})}),e.jsx(j,{control:u.control,name:"commission_rate",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.commission_rate")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:c=>i.onChange(parseInt(c.currentTarget.value)||null),placeholder:s("edit.form.commission_rate_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"%"})]})})]})}),e.jsx(j,{control:u.control,name:"discount",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.discount")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:c=>i.onChange(parseInt(c.currentTarget.value)||null),placeholder:s("edit.form.discount_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"%"})]})}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"speed_limit",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.speed_limit")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:c=>i.onChange(parseInt(c.currentTarget.value)||null),placeholder:s("edit.form.speed_limit_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"Mbps"})]})}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"device_limit",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.device_limit")}),e.jsx(b,{children:e.jsxs("div",{className:"flex",children:[e.jsx(D,{type:"number",value:i.value||"",onChange:c=>i.onChange(parseInt(c.currentTarget.value)||null),placeholder:s("edit.form.device_limit_placeholder"),className:"rounded-r-none"}),e.jsx("div",{className:"z-[-1] rounded-md rounded-l-none border border-l-0 border-input px-3 py-1 shadow-sm",children:"台"})]})}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"is_admin",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.is_admin")}),e.jsx("div",{className:"py-2",children:e.jsx(b,{children:e.jsx(ee,{checked:i.value,onCheckedChange:c=>i.onChange(c)})})}),e.jsx(R,{})]})}),e.jsx(j,{control:u.control,name:"is_staff",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.is_staff")}),e.jsx("div",{className:"py-2",children:e.jsx(b,{children:e.jsx(ee,{checked:i.value,onCheckedChange:c=>i.onChange(c)})})})]})}),e.jsx(j,{control:u.control,name:"remarks",render:({field:i})=>e.jsxs(f,{children:[e.jsx(v,{children:s("edit.form.remarks")}),e.jsx(b,{children:e.jsx(Es,{className:"h-24",value:i.value||"",onChange:c=>i.onChange(c.currentTarget.value??null),placeholder:s("edit.form.remarks_placeholder")})}),e.jsx(R,{})]})}),e.jsxs(Ei,{children:[e.jsx(L,{variant:"outline",onClick:()=>t(!1),children:s("edit.form.cancel")}),e.jsx(L,{type:"submit",onClick:()=>{u.handleSubmit(i=>{const c={id:i.id};u.formState.dirtyFields.u&&(c.u=Math.round(parseFloat(i.u)*1024*1024*1024)),u.formState.dirtyFields.d&&(c.d=Math.round(parseFloat(i.d)*1024*1024*1024)),Object.keys(i).forEach(p=>{p!=="u"&&p!=="d"&&p!=="id"&&u.formState.dirtyFields[p]&&(c[p]=i[p])}),Us.update(c).then(({data:p})=>{p&&($.success(s("edit.form.success")),t(!1),a())})})()},children:s("edit.form.submit")})]})]})]})})}function Vg(){const[s]=Ml(),[n,t]=m.useState({}),[r,a]=m.useState({is_admin:!1,is_staff:!1}),[o,l]=m.useState([]),[d,x]=m.useState([]),[u,i]=m.useState({pageIndex:0,pageSize:20});m.useEffect(()=>{const N=s.get("email");N&&l(S=>S.some(E=>E.id==="email")?S:[...S,{id:"email",value:N}])},[s]);const{refetch:c,data:p,isLoading:F}=re({queryKey:["userList",u,o,d],queryFn:()=>Us.getList({pageSize:u.pageSize,current:u.pageIndex+1,filter:o,sort:d})}),[T,C]=m.useState([]),[P,w]=m.useState([]);m.useEffect(()=>{_t.getList().then(({data:N})=>{C(N)}),_s.getList().then(({data:N})=>{w(N)})},[]);const I=T.map(N=>({label:N.name,value:N.id})),y=P.map(N=>({label:N.name,value:N.id}));return e.jsxs(zi,{refreshData:c,children:[e.jsx(Mg,{data:p?.data||[],rowCount:p?.total??0,sorting:d,setSorting:x,columnVisibility:r,setColumnVisibility:a,rowSelection:n,setRowSelection:t,columnFilters:o,setColumnFilters:l,pagination:u,setPagination:i,refetch:c,serverGroupList:T,permissionGroups:I,subscriptionPlans:y,isLoading:F}),e.jsx($i,{})]})}function Mg({data:s,rowCount:n,sorting:t,setSorting:r,columnVisibility:a,setColumnVisibility:o,rowSelection:l,setRowSelection:d,columnFilters:x,setColumnFilters:u,pagination:i,setPagination:c,refetch:p,serverGroupList:F,permissionGroups:T,subscriptionPlans:C,isLoading:P}){const{setIsOpen:w,setEditingUser:I}=Qn(),y=Ye({data:s,columns:Eg(p,F,I,w),state:{sorting:t,columnVisibility:a,rowSelection:l,columnFilters:x,pagination:i},rowCount:n,manualPagination:!0,manualFiltering:!0,manualSorting:!0,enableRowSelection:!0,onRowSelectionChange:d,onSortingChange:r,onColumnFiltersChange:u,onColumnVisibilityChange:o,getCoreRowModel:Je(),getFilteredRowModel:fs(),getPaginationRowModel:ts(),onPaginationChange:c,getSortedRowModel:js(),getFacetedRowModel:Ls(),getFacetedUniqueValues:Rs(),initialState:{columnVisibility:{commission_balance:!1,created_at:!1,is_admin:!1,is_staff:!1,permission_group:!1,plan_id:!1},columnPinning:{right:["actions"]}}});return e.jsxs("div",{className:"space-y-4",children:[e.jsx(bg,{table:y,refetch:p,serverGroupList:F,permissionGroups:T,subscriptionPlans:C}),e.jsx(rs,{table:y,isLoading:P})]})}function Og(){const{t:s}=V("user");return e.jsxs(Ue,{children:[e.jsxs(He,{children:[e.jsx(ds,{}),e.jsxs("div",{className:"ml-auto flex items-center space-x-4",children:[e.jsx(as,{}),e.jsx(ns,{})]})]}),e.jsxs(Qe,{className:"flex flex-col",fixedHeight:!0,children:[e.jsx("div",{className:"mb-2 flex items-center justify-between space-y-2",children:e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold tracking-tight",children:s("manage.title")}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:s("manage.description")})]})}),e.jsx("div",{className:"-mx-4 flex-1 overflow-auto px-4 py-1 lg:flex-row lg:space-x-12 lg:space-y-0",children:e.jsx("div",{className:"w-full",children:e.jsx(Vg,{})})})]})]})}const zg=Object.freeze(Object.defineProperty({__proto__:null,default:Og},Symbol.toStringTag,{value:"Module"})),$g=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M19 11H5a1 1 0 0 0 0 2h14a1 1 0 0 0 0-2"})});function Ag({table:s}){const{t:n}=V("ticket");return e.jsx("div",{className:"flex items-center justify-between",children:e.jsxs("div",{className:"flex flex-1 flex-col-reverse items-start gap-y-2 sm:flex-row sm:items-center sm:space-x-4",children:[e.jsx(yt,{defaultValue:s.getColumn("status")?.getFilterValue(),onValueChange:t=>s.getColumn("status")?.setFilterValue(t),children:e.jsxs(lt,{className:"grid w-full grid-cols-2",children:[e.jsx(Ge,{value:"0",children:n("status.pending")}),e.jsx(Ge,{value:"1",children:n("status.closed")})]})}),s.getColumn("level")&&e.jsx(Oa,{column:s.getColumn("level"),title:n("columns.level"),options:[{label:n("level.low"),value:us.LOW,icon:$g,color:"gray"},{label:n("level.medium"),value:us.MIDDLE,icon:Ii,color:"yellow"},{label:n("level.high"),value:us.HIGH,icon:Vi,color:"red"}]})]})})}function qg(){return e.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",className:"text-foreground",children:[e.jsx("circle",{cx:"4",cy:"12",r:"2",fill:"currentColor",children:e.jsx("animate",{id:"spinner_qFRN",begin:"0;spinner_OcgL.end+0.25s",attributeName:"cy",calcMode:"spline",dur:"0.6s",values:"12;6;12",keySplines:".33,.66,.66,1;.33,0,.66,.33"})}),e.jsx("circle",{cx:"12",cy:"12",r:"2",fill:"currentColor",children:e.jsx("animate",{begin:"spinner_qFRN.begin+0.1s",attributeName:"cy",calcMode:"spline",dur:"0.6s",values:"12;6;12",keySplines:".33,.66,.66,1;.33,0,.66,.33"})}),e.jsx("circle",{cx:"20",cy:"12",r:"2",fill:"currentColor",children:e.jsx("animate",{id:"spinner_OcgL",begin:"spinner_qFRN.begin+0.2s",attributeName:"cy",calcMode:"spline",dur:"0.6s",values:"12;6;12",keySplines:".33,.66,.66,1;.33,0,.66,.33"})})]})}const Ug=vt("flex gap-2 max-w-[60%] items-end relative group",{variants:{variant:{received:"self-start",sent:"self-end flex-row-reverse"},layout:{default:"",ai:"max-w-full w-full items-center"}},defaultVariants:{variant:"received",layout:"default"}}),Ai=m.forwardRef(({className:s,variant:n,layout:t,children:r,...a},o)=>e.jsx("div",{className:_(Ug({variant:n,layout:t,className:s}),"relative group"),ref:o,...a,children:m.Children.map(r,l=>m.isValidElement(l)&&typeof l.type!="string"?m.cloneElement(l,{variant:n,layout:t}):l)}));Ai.displayName="ChatBubble";const Hg=vt("p-4",{variants:{variant:{received:"bg-secondary text-secondary-foreground rounded-r-lg rounded-tl-lg",sent:"bg-primary text-primary-foreground rounded-l-lg rounded-tr-lg"},layout:{default:"",ai:"border-t w-full rounded-none bg-transparent"}},defaultVariants:{variant:"received",layout:"default"}}),qi=m.forwardRef(({className:s,variant:n,layout:t,isLoading:r=!1,children:a,...o},l)=>e.jsx("div",{className:_(Hg({variant:n,layout:t,className:s}),"break-words max-w-full whitespace-pre-wrap"),ref:l,...o,children:r?e.jsx("div",{className:"flex items-center space-x-2",children:e.jsx(qg,{})}):a}));qi.displayName="ChatBubbleMessage";const Kg=m.forwardRef(({variant:s,className:n,children:t,...r},a)=>e.jsx("div",{ref:a,className:_("absolute top-1/2 -translate-y-1/2 flex opacity-0 group-hover:opacity-100 transition-opacity duration-200",s==="sent"?"-left-1 -translate-x-full flex-row-reverse":"-right-1 translate-x-full",n),...r,children:t}));Kg.displayName="ChatBubbleActionWrapper";const Ui=m.forwardRef(({className:s,...n},t)=>e.jsx(Es,{autoComplete:"off",ref:t,name:"message",className:_("max-h-12 px-4 py-3 bg-background text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 w-full rounded-md flex items-center h-16 resize-none",s),...n}));Ui.displayName="ChatInput";const Hi=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"m13.41 12l4.3-4.29a1 1 0 1 0-1.42-1.42L12 10.59l-4.29-4.3a1 1 0 0 0-1.42 1.42l4.3 4.29l-4.3 4.29a1 1 0 0 0 0 1.42a1 1 0 0 0 1.42 0l4.29-4.3l4.29 4.3a1 1 0 0 0 1.42 0a1 1 0 0 0 0-1.42Z"})}),Ki=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M15.098 12.634L13 11.423V7a1 1 0 0 0-2 0v5a1 1 0 0 0 .5.866l2.598 1.5a1 1 0 1 0 1-1.732M12 2a10 10 0 1 0 10 10A10.01 10.01 0 0 0 12 2m0 18a8 8 0 1 1 8-8a8.01 8.01 0 0 1-8 8"})}),Fr=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"m11.29 12l3.54-3.54a1 1 0 0 0 0-1.41a1 1 0 0 0-1.42 0l-4.24 4.24a1 1 0 0 0 0 1.42L13.41 17a1 1 0 0 0 .71.29a1 1 0 0 0 .71-.29a1 1 0 0 0 0-1.41Z"})}),Bg=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M21.71 20.29L18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a1 1 0 0 0 1.42 0a1 1 0 0 0 0-1.39M11 18a7 7 0 1 1 7-7a7 7 0 0 1-7 7"})}),Gg=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M3.71 16.29a1 1 0 0 0-.33-.21a1 1 0 0 0-.76 0a1 1 0 0 0-.33.21a1 1 0 0 0-.21.33a1 1 0 0 0 .21 1.09a1.2 1.2 0 0 0 .33.21a.94.94 0 0 0 .76 0a1.2 1.2 0 0 0 .33-.21a1 1 0 0 0 .21-1.09a1 1 0 0 0-.21-.33M7 8h14a1 1 0 0 0 0-2H7a1 1 0 0 0 0 2m-3.29 3.29a1 1 0 0 0-1.09-.21a1.2 1.2 0 0 0-.33.21a1 1 0 0 0-.21.33a.94.94 0 0 0 0 .76a1.2 1.2 0 0 0 .21.33a1.2 1.2 0 0 0 .33.21a.94.94 0 0 0 .76 0a1.2 1.2 0 0 0 .33-.21a1.2 1.2 0 0 0 .21-.33a.94.94 0 0 0 0-.76a1 1 0 0 0-.21-.33M21 11H7a1 1 0 0 0 0 2h14a1 1 0 0 0 0-2M3.71 6.29a1 1 0 0 0-.33-.21a1 1 0 0 0-1.09.21a1.2 1.2 0 0 0-.21.33a.94.94 0 0 0 0 .76a1.2 1.2 0 0 0 .21.33a1.2 1.2 0 0 0 .33.21a1 1 0 0 0 1.09-.21a1.2 1.2 0 0 0 .21-.33a.94.94 0 0 0 0-.76a1.2 1.2 0 0 0-.21-.33M21 16H7a1 1 0 0 0 0 2h14a1 1 0 0 0 0-2"})}),Wg=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M9 12H7a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2m-1-2h4a1 1 0 0 0 0-2H8a1 1 0 0 0 0 2m1 6H7a1 1 0 0 0 0 2h2a1 1 0 0 0 0-2m12-4h-3V3a1 1 0 0 0-.5-.87a1 1 0 0 0-1 0l-3 1.72l-3-1.72a1 1 0 0 0-1 0l-3 1.72l-3-1.72a1 1 0 0 0-1 0A1 1 0 0 0 2 3v16a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-6a1 1 0 0 0-1-1M5 20a1 1 0 0 1-1-1V4.73l2 1.14a1.08 1.08 0 0 0 1 0l3-1.72l3 1.72a1.08 1.08 0 0 0 1 0l2-1.14V19a3 3 0 0 0 .18 1Zm15-1a1 1 0 0 1-2 0v-5h2Zm-6.44-2.83a.8.8 0 0 0-.18-.09a.6.6 0 0 0-.19-.06a1 1 0 0 0-.9.27A1.05 1.05 0 0 0 12 17a1 1 0 0 0 .07.38a1.2 1.2 0 0 0 .22.33a1.2 1.2 0 0 0 .33.21a.94.94 0 0 0 .76 0a1.2 1.2 0 0 0 .33-.21A1 1 0 0 0 14 17a1.05 1.05 0 0 0-.29-.71a2 2 0 0 0-.15-.12m.14-3.88a1 1 0 0 0-1.62.33A1 1 0 0 0 13 14a1 1 0 0 0 1-1a1 1 0 0 0-.08-.38a.9.9 0 0 0-.22-.33"})});function Yg(){return e.jsxs("div",{className:"flex h-full flex-col space-y-4 p-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(be,{className:"h-8 w-3/4"}),e.jsx(be,{className:"h-4 w-1/2"})]}),e.jsx("div",{className:"flex-1 space-y-4",children:[1,2,3].map(s=>e.jsx(be,{className:"h-20 w-2/3"},s))})]})}function Jg(){return e.jsx("div",{className:"space-y-4 p-4",children:[1,2,3,4].map(s=>e.jsxs("div",{className:"space-y-2",children:[e.jsx(be,{className:"h-5 w-4/5"}),e.jsx(be,{className:"h-4 w-2/3"}),e.jsx(be,{className:"h-3 w-1/2"})]},s))})}function Qg({ticket:s,isActive:n,onClick:t}){const{t:r}=V("ticket"),a=o=>{switch(o){case us.HIGH:return"bg-red-50 text-red-600 border-red-200";case us.MIDDLE:return"bg-yellow-50 text-yellow-600 border-yellow-200";case us.LOW:return"bg-green-50 text-green-600 border-green-200";default:return"bg-gray-50 text-gray-600 border-gray-200"}};return e.jsxs("div",{className:_("flex cursor-pointer flex-col border-b p-4 hover:bg-accent/50",n&&"bg-accent"),onClick:t,children:[e.jsxs("div",{className:"flex max-w-[280px] items-center justify-between gap-2",children:[e.jsx("h4",{className:"flex-1 truncate font-medium",children:s.subject}),e.jsx(U,{variant:s.status===tt.CLOSED?"secondary":"default",className:"shrink-0",children:s.status===tt.CLOSED?r("status.closed"):r("status.processing")})]}),e.jsx("div",{className:"mt-1 max-w-[280px] truncate text-sm text-muted-foreground",children:s.user?.email}),e.jsxs("div",{className:"mt-2 flex items-center justify-between text-xs",children:[e.jsx("time",{className:"text-muted-foreground",children:ne(s.updated_at)}),e.jsx("div",{className:_("rounded-full border px-2 py-0.5 text-xs font-medium",a(s.level)),children:r(`level.${s.level===us.LOW?"low":s.level===us.MIDDLE?"medium":"high"}`)})]})]})}function Xg({ticketId:s,dialogTrigger:n}){const{t}=V("ticket"),r=Ws(),a=m.useRef(null),o=m.useRef(null),[l,d]=m.useState(!1),[x,u]=m.useState(""),[i,c]=m.useState(!1),[p,F]=m.useState(s),[T,C]=m.useState(""),[P,w]=m.useState(!1),{setIsOpen:I,setEditingUser:y}=Qn(),{data:N,isLoading:S,refetch:O}=re({queryKey:["tickets",l],queryFn:()=>l?Pt.getList({filter:[{id:"status",value:[tt.OPENING]}]}):Promise.resolve(null),enabled:l}),{data:E,refetch:g,isLoading:k}=re({queryKey:["ticket",p,l],queryFn:()=>l?Pt.getInfo(p):Promise.resolve(null),refetchInterval:l?5e3:!1,retry:3}),W=E?.data,ae=(N?.data||[]).filter(le=>le.subject.toLowerCase().includes(T.toLowerCase())||le.user?.email.toLowerCase().includes(T.toLowerCase())),B=(le="smooth")=>{if(a.current){const{scrollHeight:Ts,clientHeight:Ns}=a.current;a.current.scrollTo({top:Ts-Ns,behavior:le})}};m.useEffect(()=>{if(!l)return;const le=requestAnimationFrame(()=>{B("instant"),setTimeout(()=>B(),1e3)});return()=>{cancelAnimationFrame(le)}},[l,W?.messages]);const se=async()=>{const le=x.trim();!le||i||(c(!0),Pt.reply({id:p,message:le}).then(()=>{u(""),g(),B(),setTimeout(()=>{o.current?.focus()},0)}).finally(()=>{c(!1)}))},je=async()=>{Pt.close(p).then(()=>{$.success(t("actions.close_success")),g(),O()})},ms=()=>{W?.user&&r("/finance/order?user_id="+W.user.id)},ze=W?.status===tt.CLOSED;return e.jsxs(de,{open:l,onOpenChange:d,children:[e.jsx(cs,{asChild:!0,children:n??e.jsx(G,{variant:"outline",children:t("actions.view_ticket")})}),e.jsxs(oe,{className:"flex h-[90vh] max-w-6xl flex-col gap-0 p-0",children:[e.jsx(me,{}),e.jsxs("div",{className:"flex h-full",children:[e.jsx(G,{variant:"ghost",size:"icon",className:"absolute left-2 top-2 z-50 md:hidden",onClick:()=>w(!P),children:e.jsx(Fr,{className:_("h-4 w-4 transition-transform",!P&&"rotate-180")})}),e.jsxs("div",{className:_("absolute inset-y-0 left-0 z-40 flex flex-col border-r bg-background transition-transform duration-200 ease-in-out md:relative",P?"-translate-x-full":"translate-x-0","w-80 md:w-80 md:translate-x-0"),children:[e.jsxs("div",{className:"space-y-4 border-b p-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"font-semibold",children:t("list.title")}),e.jsx(G,{variant:"ghost",size:"icon",className:"hidden h-8 w-8 md:flex",onClick:()=>w(!P),children:e.jsx(Fr,{className:_("h-4 w-4 transition-transform",!P&&"rotate-180")})})]}),e.jsxs("div",{className:"relative",children:[e.jsx(Bg,{className:"absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 transform text-muted-foreground"}),e.jsx(D,{placeholder:t("list.search_placeholder"),value:T,onChange:le=>C(le.target.value),className:"pl-8"})]})]}),e.jsx(jt,{className:"flex-1",children:e.jsx("div",{className:"w-full",children:S?e.jsx(Jg,{}):ae.length===0?e.jsx("div",{className:"flex h-full items-center justify-center p-4 text-muted-foreground",children:t(T?"list.no_search_results":"list.no_tickets")}):ae.map(le=>e.jsx(Qg,{ticket:le,isActive:le.id===p,onClick:()=>{F(le.id),window.innerWidth<768&&w(!0)}},le.id))})})]}),e.jsxs("div",{className:"relative flex flex-1 flex-col",children:[!P&&e.jsx("div",{className:"absolute inset-0 z-30 bg-black/20 md:hidden",onClick:()=>w(!0)}),k?e.jsx(Yg,{}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex flex-col space-y-4 border-b p-6",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("h2",{className:"text-2xl font-semibold",children:W?.subject}),e.jsx(U,{variant:ze?"secondary":"default",children:t(ze?"status.closed":"status.processing")}),!ze&&e.jsx(hs,{title:t("actions.close_confirm_title"),description:t("actions.close_confirm_description"),confirmText:t("actions.close_confirm_button"),variant:"destructive",onConfirm:je,children:e.jsxs(G,{variant:"ghost",size:"sm",className:"gap-1 text-muted-foreground hover:text-destructive",children:[e.jsx(Hi,{className:"h-4 w-4"}),t("actions.close_ticket")]})})]}),e.jsxs("div",{className:"flex items-center space-x-4 text-sm text-muted-foreground",children:[e.jsxs("div",{className:"flex items-center space-x-1",children:[e.jsx(Ma,{className:"h-4 w-4"}),e.jsx("span",{children:W?.user?.email})]}),e.jsx(Re,{orientation:"vertical",className:"h-4"}),e.jsxs("div",{className:"flex items-center space-x-1",children:[e.jsx(Ki,{className:"h-4 w-4"}),e.jsxs("span",{children:[t("detail.created_at")," ",ne(W?.created_at)]})]}),e.jsx(Re,{orientation:"vertical",className:"h-4"}),e.jsx(U,{variant:"outline",children:W?.level!=null&&t(`level.${W.level===us.LOW?"low":W.level===us.MIDDLE?"medium":"high"}`)})]})]}),W?.user&&e.jsxs("div",{className:"flex space-x-2",children:[e.jsx(G,{variant:"outline",size:"icon",className:"h-8 w-8",title:t("detail.user_info"),onClick:()=>{y(W.user),I(!0)},children:e.jsx(Ma,{className:"h-4 w-4"})}),e.jsx(Mi,{user_id:W.user.id,dialogTrigger:e.jsx(G,{variant:"outline",size:"icon",className:"h-8 w-8",title:t("detail.traffic_records"),children:e.jsx(Gg,{className:"h-4 w-4"})})}),e.jsx(G,{variant:"outline",size:"icon",className:"h-8 w-8",title:t("detail.order_records"),onClick:ms,children:e.jsx(Wg,{className:"h-4 w-4"})})]})]})}),e.jsx("div",{className:"flex-1 overflow-hidden",children:e.jsx("div",{ref:a,className:"h-full space-y-4 overflow-y-auto p-6",children:W?.messages?.length===0?e.jsx("div",{className:"flex h-full items-center justify-center text-muted-foreground",children:t("detail.no_messages")}):W?.messages?.map(le=>e.jsx(Ai,{variant:le.is_from_admin?"sent":"received",className:le.is_from_admin?"ml-auto":"mr-auto",children:e.jsx(qi,{children:e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"whitespace-pre-wrap break-words",children:le.message}),e.jsx("div",{className:"text-right",children:e.jsx("time",{className:"text-[10px] text-muted-foreground",children:ne(le.created_at)})})]})})},le.id))})}),e.jsx("div",{className:"border-t p-4",children:e.jsxs("div",{className:"relative flex items-center space-x-2",children:[e.jsx(Ui,{ref:o,disabled:ze||i,placeholder:t(ze?"detail.input.closed_placeholder":"detail.input.reply_placeholder"),className:"flex-1 resize-none rounded-lg border bg-background p-3 focus-visible:ring-1",value:x,onChange:le=>u(le.target.value),onKeyDown:le=>{le.key==="Enter"&&!le.shiftKey&&(le.preventDefault(),se())}}),e.jsx(G,{disabled:ze||i||!x.trim(),onClick:se,children:t(i?"detail.input.sending":"detail.input.send")})]})})]})]})]})]})]})}const Zg=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M19 4H5a3 3 0 0 0-3 3v10a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3m-.41 2l-5.88 5.88a1 1 0 0 1-1.42 0L5.41 6ZM20 17a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7.41l5.88 5.88a3 3 0 0 0 4.24 0L20 7.41Z"})}),ep=s=>e.jsx("svg",{className:"inline-block",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em",...s,children:e.jsx("path",{fill:"currentColor",d:"M21.92 11.6C19.9 6.91 16.1 4 12 4s-7.9 2.91-9.92 7.6a1 1 0 0 0 0 .8C4.1 17.09 7.9 20 12 20s7.9-2.91 9.92-7.6a1 1 0 0 0 0-.8M12 18c-3.17 0-6.17-2.29-7.9-6C5.83 8.29 8.83 6 12 6s6.17 2.29 7.9 6c-1.73 3.71-4.73 6-7.9 6m0-10a4 4 0 1 0 4 4a4 4 0 0 0-4-4m0 6a2 2 0 1 1 2-2a2 2 0 0 1-2 2"})}),sp=s=>{const{t:n}=V("ticket");return[{accessorKey:"id",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.id")}),cell:({row:t})=>e.jsx(U,{variant:"outline",children:t.getValue("id")}),enableSorting:!1,enableHiding:!1},{accessorKey:"subject",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.subject")}),cell:({row:t})=>e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Zg,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"max-w-[500px] truncate font-medium",children:t.getValue("subject")})]}),enableSorting:!1,enableHiding:!1,size:4e3},{accessorKey:"level",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.level")}),cell:({row:t})=>{const r=t.getValue("level"),a=r===us.LOW?"default":r===us.MIDDLE?"secondary":"destructive";return e.jsx(U,{variant:a,className:"whitespace-nowrap",children:n(`level.${r===us.LOW?"low":r===us.MIDDLE?"medium":"high"}`)})},filterFn:(t,r,a)=>a.includes(t.getValue(r))},{accessorKey:"status",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.status")}),cell:({row:t})=>{const r=t.getValue("status"),a=t.original.reply_status,o=r===tt.CLOSED?n("status.closed"):n(a===0?"status.replied":"status.pending"),l=r===tt.CLOSED?"default":a===0?"secondary":"destructive";return e.jsx(U,{variant:l,className:"whitespace-nowrap",children:o})}},{accessorKey:"updated_at",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.updated_at")}),cell:({row:t})=>e.jsxs("div",{className:"flex items-center space-x-2 text-muted-foreground",children:[e.jsx(Ki,{className:"h-4 w-4"}),e.jsx("span",{className:"text-sm",children:ne(t.getValue("updated_at"))})]}),enableSorting:!0},{accessorKey:"created_at",header:({column:t})=>e.jsx(z,{column:t,title:n("columns.created_at")}),cell:({row:t})=>e.jsx("div",{className:"text-sm text-muted-foreground",children:ne(t.getValue("created_at"))}),enableSorting:!0,meta:{isFlexGrow:!0}},{id:"actions",header:({column:t})=>e.jsx(z,{className:"justify-end",column:t,title:n("columns.actions")}),cell:({row:t})=>{const r=t.original.status!==tt.CLOSED;return e.jsxs("div",{className:"flex items-center justify-center",children:[e.jsx(Xg,{ticketId:t.original.id,dialogTrigger:e.jsx(G,{variant:"ghost",size:"icon",className:"h-8 w-8",title:n("actions.view_details"),children:e.jsx(ep,{className:"h-4 w-4"})})}),r&&e.jsx(hs,{title:n("actions.close_confirm_title"),description:n("actions.close_confirm_description"),confirmText:n("actions.close_confirm_button"),cancelText:n("common:cancel"),variant:"destructive",onConfirm:async()=>{Pt.close(t.original.id).then(()=>{$.success(n("actions.close_success")),s()})},children:e.jsx(G,{variant:"ghost",size:"icon",className:"h-8 w-8",title:n("actions.close_ticket"),children:e.jsx(Hi,{className:"h-4 w-4"})})})]})}}]};function tp(){const[s,n]=m.useState({}),[t,r]=m.useState({}),[a,o]=m.useState([{id:"status",value:"0"}]),[l,d]=m.useState([]),[x,u]=m.useState({pageIndex:0,pageSize:20}),{refetch:i,data:c}=re({queryKey:["orderList",x,a,l],queryFn:()=>Pt.getList({pageSize:x.pageSize,current:x.pageIndex+1,filter:a,sort:l})}),p=Ye({data:c?.data??[],columns:sp(i),state:{sorting:l,columnVisibility:t,rowSelection:s,columnFilters:a,pagination:x},rowCount:c?.total??0,manualPagination:!0,manualFiltering:!0,manualSorting:!0,enableRowSelection:!0,onRowSelectionChange:n,onSortingChange:d,onColumnFiltersChange:o,onColumnVisibilityChange:r,getCoreRowModel:Je(),getFilteredRowModel:fs(),getPaginationRowModel:ts(),onPaginationChange:u,getSortedRowModel:js(),getFacetedRowModel:Ls(),getFacetedUniqueValues:Rs(),initialState:{columnPinning:{right:["actions"]}}});return e.jsxs("div",{className:"space-y-4",children:[e.jsx(Ag,{table:p,refetch:i}),e.jsx(rs,{table:p,showPagination:!0})]})}function ap(){const{t:s}=V("ticket");return e.jsxs(zi,{refreshData:()=>{},children:[e.jsxs(Ue,{children:[e.jsxs(He,{children:[e.jsx(ds,{}),e.jsxs("div",{className:"ml-auto flex items-center space-x-4",children:[e.jsx(as,{}),e.jsx(ns,{})]})]}),e.jsxs(Qe,{className:"flex flex-col",fixedHeight:!0,children:[e.jsx("div",{className:"mb-2 flex items-center justify-between space-y-2",children:e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold tracking-tight",children:s("title")}),e.jsx("p",{className:"mt-2 text-muted-foreground",children:s("description")})]})}),e.jsx("div",{className:"-mx-4 flex-1 overflow-auto px-4 py-1 lg:flex-row lg:space-x-12 lg:space-y-0",children:e.jsx(tp,{})})]})]}),e.jsx($i,{})]})}const np=Object.freeze(Object.defineProperty({__proto__:null,default:ap},Symbol.toStringTag,{value:"Module"}));function rp({table:s,refetch:n}){const{t}=V("user"),r=s.getState().columnFilters.length>0,[a,o]=m.useState(),[l,d]=m.useState(),[x,u]=m.useState(!1),i=[{value:"monthly",label:t("traffic_reset_logs.filters.reset_types.monthly")},{value:"first_day_month",label:t("traffic_reset_logs.filters.reset_types.first_day_month")},{value:"yearly",label:t("traffic_reset_logs.filters.reset_types.yearly")},{value:"first_day_year",label:t("traffic_reset_logs.filters.reset_types.first_day_year")},{value:"manual",label:t("traffic_reset_logs.filters.reset_types.manual")}],c=[{value:"auto",label:t("traffic_reset_logs.filters.trigger_sources.auto")},{value:"manual",label:t("traffic_reset_logs.filters.trigger_sources.manual")},{value:"cron",label:t("traffic_reset_logs.filters.trigger_sources.cron")}],p=()=>{let P=s.getState().columnFilters.filter(w=>w.id!=="date_range");(a||l)&&P.push({id:"date_range",value:{start:a?Ee(a,"yyyy-MM-dd"):null,end:l?Ee(l,"yyyy-MM-dd"):null}}),s.setColumnFilters(P)},F=async()=>{try{u(!0);const P=s.getState().columnFilters.reduce((g,k)=>{if(k.value)if(k.id==="date_range"){const W=k.value;W.start&&(g.start_date=W.start),W.end&&(g.end_date=W.end)}else g[k.id]=k.value;return g},{}),I=(await la.getLogs({...P,page:1,per_page:1e4})).data.map(g=>({ID:g.id,用户邮箱:g.user_email,用户ID:g.user_id,重置类型:g.reset_type_name,触发源:g.trigger_source_name,清零流量:g.old_traffic.formatted,"上传流量(GB)":(g.old_traffic.upload/1024**3).toFixed(2),"下载流量(GB)":(g.old_traffic.download/1024**3).toFixed(2),重置时间:Ee(new Date(g.reset_time),"yyyy-MM-dd HH:mm:ss"),记录时间:Ee(new Date(g.created_at),"yyyy-MM-dd HH:mm:ss"),原因:g.reason||""})),y=Object.keys(I[0]||{}),N=[y.join(","),...I.map(g=>y.map(k=>{const W=g[k];return typeof W=="string"&&W.includes(",")?`"${W}"`:W}).join(","))].join(` `),S=new Blob([N],{type:"text/csv;charset=utf-8;"}),O=document.createElement("a"),E=URL.createObjectURL(S);O.setAttribute("href",E),O.setAttribute("download",`traffic-reset-logs-${Ee(new Date,"yyyy-MM-dd")}.csv`),O.style.visibility="hidden",document.body.appendChild(O),O.click(),document.body.removeChild(O),$.success(t("traffic_reset_logs.actions.export_success"))}catch(C){console.error("导出失败:",C),$.error(t("traffic_reset_logs.actions.export_failed"))}finally{u(!1)}},T=()=>e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:t("traffic_reset_logs.filters.search_user")}),e.jsx(D,{placeholder:t("traffic_reset_logs.filters.search_user"),value:s.getColumn("user_email")?.getFilterValue()??"",onChange:C=>s.getColumn("user_email")?.setFilterValue(C.target.value),className:"h-9"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:t("traffic_reset_logs.filters.reset_type")}),e.jsxs(X,{value:s.getColumn("reset_type")?.getFilterValue()??"",onValueChange:C=>s.getColumn("reset_type")?.setFilterValue(C==="all"?"":C),children:[e.jsx(J,{className:"h-9",children:e.jsx(Z,{placeholder:t("traffic_reset_logs.filters.reset_type")})}),e.jsxs(Q,{children:[e.jsx(q,{value:"all",children:t("traffic_reset_logs.filters.all_types")}),i.map(C=>e.jsx(q,{value:C.value,children:C.label},C.value))]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:t("traffic_reset_logs.filters.trigger_source")}),e.jsxs(X,{value:s.getColumn("trigger_source")?.getFilterValue()??"",onValueChange:C=>s.getColumn("trigger_source")?.setFilterValue(C==="all"?"":C),children:[e.jsx(J,{className:"h-9",children:e.jsx(Z,{placeholder:t("traffic_reset_logs.filters.trigger_source")})}),e.jsxs(Q,{children:[e.jsx(q,{value:"all",children:t("traffic_reset_logs.filters.all_sources")}),c.map(C=>e.jsx(q,{value:C.value,children:C.label},C.value))]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:t("traffic_reset_logs.filters.start_date")}),e.jsxs(es,{children:[e.jsx(ss,{asChild:!0,children:e.jsxs(L,{variant:"outline",className:_("h-9 w-full justify-start text-left font-normal",!a&&"text-muted-foreground"),children:[e.jsx(Ss,{className:"mr-2 h-4 w-4"}),a?Ee(a,"MM-dd"):t("traffic_reset_logs.filters.start_date")]})}),e.jsx(We,{className:"w-auto p-0",align:"start",children:e.jsx(ks,{mode:"single",selected:a,onSelect:o,initialFocus:!0})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:t("traffic_reset_logs.filters.end_date")}),e.jsxs(es,{children:[e.jsx(ss,{asChild:!0,children:e.jsxs(L,{variant:"outline",className:_("h-9 w-full justify-start text-left font-normal",!l&&"text-muted-foreground"),children:[e.jsx(Ss,{className:"mr-2 h-4 w-4"}),l?Ee(l,"MM-dd"):t("traffic_reset_logs.filters.end_date")]})}),e.jsx(We,{className:"w-auto p-0",align:"start",children:e.jsx(ks,{mode:"single",selected:l,onSelect:d,initialFocus:!0})})]})]})]}),(a||l)&&e.jsxs(L,{variant:"outline",className:"w-full",onClick:p,children:[e.jsx(ur,{className:"mr-2 h-4 w-4"}),t("traffic_reset_logs.filters.apply_date")]}),r&&e.jsxs(L,{variant:"ghost",onClick:()=>{s.resetColumnFilters(),o(void 0),d(void 0)},className:"w-full",children:[t("traffic_reset_logs.filters.reset"),e.jsx(os,{className:"ml-2 h-4 w-4"})]})]});return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between md:hidden",children:[e.jsx("div",{className:"flex items-center space-x-2",children:e.jsxs(Jn,{children:[e.jsx(Li,{asChild:!0,children:e.jsxs(L,{variant:"outline",size:"sm",className:"h-8",children:[e.jsx(Pd,{className:"mr-2 h-4 w-4"}),t("traffic_reset_logs.filters.reset_type"),r&&e.jsx("div",{className:"ml-1 flex h-4 w-4 items-center justify-center rounded-full bg-primary text-xs text-primary-foreground",children:s.getState().columnFilters.length})]})}),e.jsxs(nn,{side:"bottom",className:"h-[85vh]",children:[e.jsxs(rn,{className:"mb-4",children:[e.jsx(ln,{children:t("traffic_reset_logs.filters.filter_title")}),e.jsx(on,{children:t("traffic_reset_logs.filters.filter_description")})]}),e.jsx("div",{className:"max-h-[calc(85vh-120px)] overflow-y-auto",children:e.jsx(T,{})})]})]})}),e.jsxs(L,{variant:"outline",size:"sm",className:"h-8",onClick:F,disabled:x,children:[e.jsx(ta,{className:"mr-2 h-4 w-4"}),t(x?"traffic_reset_logs.actions.exporting":"traffic_reset_logs.actions.export")]})]}),e.jsxs("div",{className:"hidden items-center justify-between md:flex",children:[e.jsxs("div",{className:"flex flex-1 items-center space-x-2",children:[e.jsx(D,{placeholder:t("traffic_reset_logs.filters.search_user"),value:s.getColumn("user_email")?.getFilterValue()??"",onChange:C=>s.getColumn("user_email")?.setFilterValue(C.target.value),className:"h-8 w-[150px] lg:w-[250px]"}),e.jsxs(X,{value:s.getColumn("reset_type")?.getFilterValue()??"",onValueChange:C=>s.getColumn("reset_type")?.setFilterValue(C==="all"?"":C),children:[e.jsx(J,{className:"h-8 w-[180px]",children:e.jsx(Z,{placeholder:t("traffic_reset_logs.filters.reset_type")})}),e.jsxs(Q,{children:[e.jsx(q,{value:"all",children:t("traffic_reset_logs.filters.all_types")}),i.map(C=>e.jsx(q,{value:C.value,children:C.label},C.value))]})]}),e.jsxs(X,{value:s.getColumn("trigger_source")?.getFilterValue()??"",onValueChange:C=>s.getColumn("trigger_source")?.setFilterValue(C==="all"?"":C),children:[e.jsx(J,{className:"h-8 w-[180px]",children:e.jsx(Z,{placeholder:t("traffic_reset_logs.filters.trigger_source")})}),e.jsxs(Q,{children:[e.jsx(q,{value:"all",children:t("traffic_reset_logs.filters.all_sources")}),c.map(C=>e.jsx(q,{value:C.value,children:C.label},C.value))]})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsxs(es,{children:[e.jsx(ss,{asChild:!0,children:e.jsxs(L,{variant:"outline",size:"sm",className:_("h-8 w-[140px] justify-start text-left font-normal",!a&&"text-muted-foreground"),children:[e.jsx(Ss,{className:"mr-2 h-4 w-4"}),a?Ee(a,"yyyy-MM-dd"):t("traffic_reset_logs.filters.start_date")]})}),e.jsx(We,{className:"w-auto p-0",align:"start",children:e.jsx(ks,{mode:"single",selected:a,onSelect:o,initialFocus:!0})})]}),e.jsxs(es,{children:[e.jsx(ss,{asChild:!0,children:e.jsxs(L,{variant:"outline",size:"sm",className:_("h-8 w-[140px] justify-start text-left font-normal",!l&&"text-muted-foreground"),children:[e.jsx(Ss,{className:"mr-2 h-4 w-4"}),l?Ee(l,"yyyy-MM-dd"):t("traffic_reset_logs.filters.end_date")]})}),e.jsx(We,{className:"w-auto p-0",align:"start",children:e.jsx(ks,{mode:"single",selected:l,onSelect:d,initialFocus:!0})})]}),(a||l)&&e.jsxs(L,{variant:"outline",size:"sm",className:"h-8",onClick:p,children:[e.jsx(ur,{className:"mr-2 h-4 w-4"}),t("traffic_reset_logs.filters.apply_date")]})]}),r&&e.jsxs(L,{variant:"ghost",onClick:()=>{s.resetColumnFilters(),o(void 0),d(void 0)},className:"h-8 px-2 lg:px-3",children:[t("traffic_reset_logs.filters.reset"),e.jsx(os,{className:"ml-2 h-4 w-4"})]})]}),e.jsx("div",{className:"flex items-center space-x-2",children:e.jsxs(L,{variant:"outline",size:"sm",className:"h-8 border-dashed",onClick:F,disabled:x,children:[e.jsx(ta,{className:"mr-2 h-4 w-4"}),t(x?"traffic_reset_logs.actions.exporting":"traffic_reset_logs.actions.export")]})})]})]})}const lp=()=>{const{t:s}=V("user"),n=a=>{switch(a){case"manual":return"bg-blue-100 text-blue-800 border-blue-200";case"monthly":return"bg-green-100 text-green-800 border-green-200";case"yearly":return"bg-purple-100 text-purple-800 border-purple-200";case"first_day_month":return"bg-orange-100 text-orange-800 border-orange-200";case"first_day_year":return"bg-indigo-100 text-indigo-800 border-indigo-200";default:return"bg-gray-100 text-gray-800 border-gray-200"}},t=a=>{switch(a){case"manual":return"bg-orange-100 text-orange-800 border-orange-200";case"cron":return"bg-indigo-100 text-indigo-800 border-indigo-200";case"auto":return"bg-emerald-100 text-emerald-800 border-emerald-200";default:return"bg-gray-100 text-gray-800 border-gray-200"}},r=a=>{switch(a){case"manual":return e.jsx(Pa,{className:"h-3 w-3"});case"cron":return e.jsx(Rd,{className:"h-3 w-3"});case"auto":return e.jsx(Ld,{className:"h-3 w-3"});default:return e.jsx(Pa,{className:"h-3 w-3"})}};return[{accessorKey:"id",header:({column:a})=>e.jsx(z,{column:a,title:s("traffic_reset_logs.columns.id"),className:"w-[60px]"}),cell:({row:a})=>e.jsx("div",{className:"w-[60px]",children:e.jsx(U,{variant:"outline",className:"text-xs",children:a.original.id})}),enableSorting:!0,enableHiding:!0,size:60},{accessorKey:"user_email",header:({column:a})=>e.jsx(z,{column:a,title:s("traffic_reset_logs.columns.user"),className:"min-w-[200px]"}),cell:({row:a})=>e.jsxs("div",{className:"flex min-w-[200px] items-start gap-2",children:[e.jsx($l,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-muted-foreground"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-sm font-medium",children:a.original.user_email}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:["ID: ",a.original.user_id]})]})]}),enableSorting:!1,enableHiding:!1,size:100},{accessorKey:"trigger_source",header:({column:a})=>e.jsx(z,{column:a,title:s("traffic_reset_logs.columns.trigger_source"),className:"w-[120px]"}),cell:({row:a})=>e.jsx("div",{className:"w-[120px]",children:e.jsx(pe,{delayDuration:100,children:e.jsxs(ue,{children:[e.jsx(xe,{asChild:!0,children:e.jsx("div",{className:"cursor-pointer",children:e.jsxs(U,{variant:"outline",className:_("flex items-center gap-1.5 border text-xs",t(a.original.trigger_source)),children:[r(a.original.trigger_source),e.jsx("span",{className:"truncate",children:a.original.trigger_source_name})]})})}),e.jsx(ce,{side:"bottom",className:"max-w-[200px]",children:e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:"text-sm font-medium",children:a.original.trigger_source_name}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[a.original.trigger_source==="manual"&&s("traffic_reset_logs.trigger_descriptions.manual"),a.original.trigger_source==="cron"&&s("traffic_reset_logs.trigger_descriptions.cron"),a.original.trigger_source==="auto"&&s("traffic_reset_logs.trigger_descriptions.auto"),!["manual","cron","auto"].includes(a.original.trigger_source)&&s("traffic_reset_logs.trigger_descriptions.other")]})]})})]})})}),enableSorting:!0,enableHiding:!1,filterFn:(a,o,l)=>l.includes(a.getValue(o)),size:120},{accessorKey:"reset_type",header:({column:a})=>e.jsx(z,{column:a,title:s("traffic_reset_logs.columns.reset_type"),className:"w-[120px]"}),cell:({row:a})=>e.jsx("div",{className:"w-[120px]",children:e.jsx(U,{className:_("border text-xs",n(a.original.reset_type)),children:e.jsx("span",{className:"truncate",children:a.original.reset_type_name})})}),enableSorting:!0,enableHiding:!1,filterFn:(a,o,l)=>l.includes(a.getValue(o)),size:120},{accessorKey:"old_traffic",header:({column:a})=>e.jsx(z,{column:a,title:s("traffic_reset_logs.columns.cleared_traffic"),className:"w-[120px]"}),cell:({row:a})=>{const o=a.original.old_traffic;return e.jsx("div",{className:"w-[120px]",children:e.jsx(pe,{delayDuration:100,children:e.jsxs(ue,{children:[e.jsx(xe,{asChild:!0,children:e.jsxs("div",{className:"cursor-pointer text-center",children:[e.jsx("div",{className:"text-sm font-medium text-destructive",children:o.formatted}),e.jsx("div",{className:"text-xs text-muted-foreground",children:s("traffic_reset_logs.columns.cleared")})]})}),e.jsxs(ce,{side:"bottom",className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(Rt,{className:"h-3 w-3"}),e.jsxs("span",{children:[s("traffic_reset_logs.columns.upload"),":"," ",(o.upload/1024**3).toFixed(2)," GB"]})]}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(ta,{className:"h-3 w-3"}),e.jsxs("span",{children:[s("traffic_reset_logs.columns.download"),":"," ",(o.download/1024**3).toFixed(2)," GB"]})]})]})]})})})},enableSorting:!1,enableHiding:!1,size:120},{accessorKey:"reset_time",header:({column:a})=>e.jsx(z,{column:a,title:s("traffic_reset_logs.columns.reset_time"),className:"w-[140px]"}),cell:({row:a})=>e.jsx("div",{className:"w-[140px]",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(Jt,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-muted-foreground"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-sm font-medium",children:ne(a.original.reset_time,"MM-DD")}),e.jsx("div",{className:"text-xs text-muted-foreground",children:ne(a.original.reset_time,"HH:mm")})]})]})}),enableSorting:!0,enableHiding:!0,size:140},{accessorKey:"created_at",header:({column:a})=>e.jsx(z,{column:a,title:s("traffic_reset_logs.columns.log_time"),className:"w-[140px]"}),cell:({row:a})=>e.jsx("div",{className:"w-[140px]",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(An,{className:"mt-0.5 h-4 w-4 flex-shrink-0 text-muted-foreground"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-sm font-medium",children:ne(a.original.created_at,"YYYY-MM-DD")}),e.jsx("div",{className:"text-xs text-muted-foreground",children:ne(a.original.created_at,"H:m:s")})]})]})}),enableSorting:!0,enableHiding:!1,size:1400}]};function ip(){const[s,n]=m.useState({}),[t,r]=m.useState({reset_time:!1}),[a,o]=m.useState([]),[l,d]=m.useState([{id:"created_at",desc:!0}]),[x,u]=m.useState({pageIndex:0,pageSize:20}),i={page:x.pageIndex+1,per_page:x.pageSize,...a.reduce((T,C)=>{if(C.value)if(C.id==="date_range"){const P=C.value;P.start&&(T.start_date=P.start),P.end&&(T.end_date=P.end)}else T[C.id]=C.value;return T},{})},{refetch:c,data:p,isLoading:F}=re({queryKey:["trafficResetLogs",x,a,l],queryFn:()=>la.getLogs(i)});return e.jsx(op,{data:p?.data??[],rowCount:p?.total??0,sorting:l,setSorting:d,columnVisibility:t,setColumnVisibility:r,rowSelection:s,setRowSelection:n,columnFilters:a,setColumnFilters:o,pagination:x,setPagination:u,refetch:c,isLoading:F})}function op({data:s,rowCount:n,sorting:t,setSorting:r,columnVisibility:a,setColumnVisibility:o,rowSelection:l,setRowSelection:d,columnFilters:x,setColumnFilters:u,pagination:i,setPagination:c,refetch:p,isLoading:F}){const T=Ye({data:s,columns:lp(),state:{sorting:t,columnVisibility:a,rowSelection:l,columnFilters:x,pagination:i},rowCount:n,manualPagination:!0,manualFiltering:!0,manualSorting:!0,enableRowSelection:!0,onRowSelectionChange:d,onSortingChange:r,onColumnFiltersChange:u,onColumnVisibilityChange:o,getCoreRowModel:Je(),getFilteredRowModel:fs(),getPaginationRowModel:ts(),onPaginationChange:c,getSortedRowModel:js(),getFacetedRowModel:Ls(),getFacetedUniqueValues:Rs(),initialState:{columnVisibility:{reset_time:!1}}});return e.jsxs("div",{className:"h-full space-y-4",children:[e.jsx(rp,{table:T,refetch:p}),e.jsx(rs,{table:T,isLoading:F})]})}function cp(){const{t:s}=V("user");return e.jsxs(Ue,{children:[e.jsxs(He,{children:[e.jsx("div",{className:"hidden md:block",children:e.jsx(ds,{})}),e.jsxs("div",{className:"ml-auto flex items-center space-x-4",children:[e.jsx(as,{}),e.jsx(ns,{})]})]}),e.jsxs(Qe,{className:"flex flex-col",fixedHeight:!0,children:[e.jsx("div",{className:"mb-4 space-y-2 md:mb-2 md:flex md:items-center md:justify-between md:space-y-0",children:e.jsxs("div",{className:"space-y-1",children:[e.jsx("h2",{className:"text-xl font-bold tracking-tight md:text-2xl",children:s("traffic_reset_logs.title")}),e.jsx("p",{className:"text-sm text-muted-foreground md:mt-2",children:s("traffic_reset_logs.description")})]})}),e.jsx("div",{className:"-mx-4 flex-1 overflow-hidden px-4 py-1",children:e.jsx("div",{className:"h-full w-full",children:e.jsx(ip,{})})})]})]})}const dp=Object.freeze(Object.defineProperty({__proto__:null,default:cp},Symbol.toStringTag,{value:"Module"}));export{we as _,pp as a,hp as c,gp as g,fp as r}; diff --git a/public/assets/admin/locales/en-US.js b/public/assets/admin/locales/en-US.js index 066dcec..4a9a2c1 100644 --- a/public/assets/admin/locales/en-US.js +++ b/public/assets/admin/locales/en-US.js @@ -2632,13 +2632,36 @@ window.XBOARD_TRANSLATIONS['en-US'] = { } }, "actions": { - "unbind": "Unbind", - "unbindTelegramTitle": "Confirm Unbind Telegram", - "unbindTelegramDescription": "This action will unbind the user's Telegram account. The user will need to rebind to receive notifications. Are you sure you want to continue?" + "title": "Actions", + "send_email": "Send Email", + "export_csv": "Export CSV", + "traffic_reset_stats": "Traffic Reset Stats", + "batch_ban": "Batch Ban", + "confirm_ban": { + "title": "Confirm Batch Ban", + "filtered_description": "This action will ban all users that match your current filters. This action cannot be undone.", + "all_description": "This action will ban all users in the system. This action cannot be undone.", + "cancel": "Cancel", + "confirm": "Confirm Ban", + "banning": "Banning..." + } }, "messages": { - "telegramUnbound": "Telegram unbound successfully", - "telegramUnbindFailed": "Failed to unbind Telegram" + "success": "Success", + "error": "Error", + "export": { + "success": "Export successful", + "failed": "Export failed" + }, + "batch_ban": { + "success": "Batch ban successful", + "failed": "Batch ban failed" + }, + "send_mail": { + "success": "Email sent successfully", + "failed": "Failed to send email", + "required_fields": "Please fill in all required fields" + } }, "traffic_reset": { "title": "Traffic Reset", diff --git a/public/assets/admin/locales/zh-CN.js b/public/assets/admin/locales/zh-CN.js index 18ef9ec..ee32a34 100644 --- a/public/assets/admin/locales/zh-CN.js +++ b/public/assets/admin/locales/zh-CN.js @@ -2598,9 +2598,19 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = { } }, "actions": { - "unbind": "解绑", - "unbindTelegramTitle": "确认解绑Telegram", - "unbindTelegramDescription": "此操作将解绑用户的Telegram账号,用户需要重新绑定才能接收通知。确定要继续吗?" + "title": "操作", + "send_email": "发送邮件", + "export_csv": "导出 CSV", + "traffic_reset_stats": "流量重置统计", + "batch_ban": "批量封禁", + "confirm_ban": { + "title": "确认批量封禁", + "filtered_description": "此操作将封禁所有符合当前筛选条件的用户。此操作无法撤销。", + "all_description": "此操作将封禁系统中的所有用户。此操作无法撤销。", + "cancel": "取消", + "confirm": "确认封禁", + "banning": "封禁中..." + } }, "traffic_reset": { "title": "流量重置", @@ -2714,8 +2724,21 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = { } }, "messages": { - "telegramUnbound": "Telegram解绑成功", - "telegramUnbindFailed": "Telegram解绑失败" + "success": "成功", + "error": "错误", + "export": { + "success": "导出成功", + "failed": "导出失败" + }, + "batch_ban": { + "success": "批量封禁成功", + "failed": "批量封禁失败" + }, + "send_mail": { + "success": "邮件发送成功", + "failed": "邮件发送失败", + "required_fields": "请填写所有必填字段" + } }, "send_mail": { "title": "发送邮件",