111
This commit is contained in:
1
monisuo-admin/dist/assets/Alert-IVeByMOV.js
vendored
1
monisuo-admin/dist/assets/Alert-IVeByMOV.js
vendored
@@ -1 +0,0 @@
|
||||
import{D as e,Dt as t,G as n,H as r,Tt as i,w as a}from"./iconify-DYZHDLa8.js";import{t as o}from"./ui-vendor-Za4p7XTd.js";import{J as s}from"./index-Uji7rFqr.js";var c=e({__name:`AlertDescription`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let o=e;return(e,c)=>(r(),a(`div`,{"data-slot":`alert-description`,class:t(i(s)(`text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed`,o.class))},[n(e.$slots,`default`)],2))}}),l=e({__name:`AlertTitle`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let o=e;return(e,c)=>(r(),a(`div`,{"data-slot":`alert-title`,class:t(i(s)(`col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight`,o.class))},[n(e.$slots,`default`)],2))}}),u=o(`relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current`,{variants:{variant:{default:`bg-card text-card-foreground`,destructive:`text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90`}},defaultVariants:{variant:`default`}}),d=e({__name:`Alert`,props:{class:{type:[Boolean,null,String,Object,Array]},variant:{}},setup(e){let o=e;return(c,l)=>(r(),a(`div`,{"data-slot":`alert`,class:t(i(s)(i(u)({variant:e.variant}),o.class)),role:`alert`},[n(c.$slots,`default`)],2))}});export{l as n,c as r,d as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{C as e,D as t,G as n,H as r,I as i,S as a,Tt as o,gt as s,it as c,tt as l}from"./iconify-DYZHDLa8.js";import{E as u,w as d}from"./vue-vendor-DjtlKxRy.js";import{J as f}from"./index-Uji7rFqr.js";import{r as p}from"./button-BuRmTYve.js";import{t as m}from"./useForwardExpose-B0BXtanw.js";import{r as h}from"./AvatarImage-2cn_wg2h.js";var g=t({__name:`AvatarFallback`,props:{delayMs:{type:Number,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(t){let i=t,u=h();m();let f=s(i.delayMs===void 0);return l(e=>{if(i.delayMs&&d){let t=window.setTimeout(()=>{f.value=!0},i.delayMs);e(()=>{window.clearTimeout(t)})}}),(t,i)=>f.value&&o(u).imageLoadingStatus.value!==`loaded`?(r(),a(o(p),{key:0,"as-child":t.asChild,as:t.as},{default:c(()=>[n(t.$slots,`default`)]),_:3},8,[`as-child`,`as`])):e(`v-if`,!0)}}),_=t({__name:`AvatarFallback`,props:{delayMs:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,s=u(t,`class`);return(e,l)=>(r(),a(o(g),i({"data-slot":`avatar-fallback`},o(s),{class:o(f)(`bg-muted flex size-full items-center justify-center rounded-full`,t.class)}),{default:c(()=>[n(e.$slots,`default`)]),_:3},16,[`class`]))}});export{_ as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{B as e,D as t,Dt as n,G as r,H as i,I as a,S as o,St as s,Tt as c,at as l,b as u,d,et as f,gt as p,it as m,tt as h,z as g}from"./iconify-DYZHDLa8.js";import{w as _}from"./vue-vendor-DjtlKxRy.js";import{J as v}from"./index-Uji7rFqr.js";import{O as y}from"./Teleport-BIYegdAM.js";import{r as b}from"./button-BuRmTYve.js";import{t as x}from"./useForwardExpose-B0BXtanw.js";var[S,C]=y(`AvatarRoot`),w=t({__name:`AvatarRoot`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){return x(),C({imageLoadingStatus:p(`idle`)}),(e,t)=>(i(),o(c(b),{"as-child":e.asChild,as:e.as},{default:m(()=>[r(e.$slots,`default`)]),_:3},8,[`as-child`,`as`]))}});function T(e,t){return e?t?(e.src!==t&&(e.src=t),e.complete&&e.naturalWidth>0?`loaded`:`loading`):`error`:`idle`}function E(t,{referrerPolicy:n,crossOrigin:r}={}){let i=p(!1),a=p(null),o=u(()=>i.value?(!a.value&&_&&(a.value=new window.Image),a.value):null),s=p(T(o.value,t.value)),c=e=>()=>{i.value&&(s.value=e)};return g(()=>{i.value=!0,h(e=>{let i=o.value;if(!i)return;s.value=T(i,t.value);let a=c(`loaded`),l=c(`error`);i.addEventListener(`load`,a),i.addEventListener(`error`,l),n?.value&&(i.referrerPolicy=n.value),typeof r?.value==`string`&&(i.crossOrigin=r.value),e(()=>{i.removeEventListener(`load`,a),i.removeEventListener(`error`,l)})})}),e(()=>{i.value=!1}),s}var D=t({__name:`AvatarImage`,props:{src:{type:String,required:!0},referrerPolicy:{type:null,required:!1},crossOrigin:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`img`}},emits:[`loadingStatusChange`],setup(e,{emit:t}){let n=e,a=t,{src:u,referrerPolicy:p,crossOrigin:h}=s(n);x();let g=S(),_=E(u,{referrerPolicy:p,crossOrigin:h});return f(_,e=>{a(`loadingStatusChange`,e),e!==`idle`&&(g.imageLoadingStatus.value=e)},{immediate:!0}),(e,t)=>l((i(),o(c(b),{role:`img`,"as-child":e.asChild,as:e.as,src:c(u),referrerpolicy:c(p),crossorigin:c(h)},{default:m(()=>[r(e.$slots,`default`)]),_:3},8,[`as-child`,`as`,`src`,`referrerpolicy`,`crossorigin`])),[[d,c(_)===`loaded`]])}}),O=t({__name:`Avatar`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e;return(e,a)=>(i(),o(c(w),{"data-slot":`avatar`,class:n(c(v)(`relative flex size-8 shrink-0 overflow-hidden rounded-full`,t.class))},{default:m(()=>[r(e.$slots,`default`)]),_:3},8,[`class`]))}}),k=t({__name:`AvatarImage`,props:{src:{},referrerPolicy:{},crossOrigin:{},asChild:{type:Boolean},as:{}},setup(e){let t=e;return(e,n)=>(i(),o(c(D),a({"data-slot":`avatar-image`},t,{class:`aspect-square size-full`}),{default:m(()=>[r(e.$slots,`default`)]),_:3},16))}});export{O as n,S as r,k as t};
|
||||
1
monisuo-admin/dist/assets/Badge-RIbvVUq1.js
vendored
1
monisuo-admin/dist/assets/Badge-RIbvVUq1.js
vendored
@@ -1 +0,0 @@
|
||||
import{D as e,G as t,H as n,I as r,S as i,Tt as a,it as o}from"./iconify-DYZHDLa8.js";import{t as s}from"./ui-vendor-Za4p7XTd.js";import{E as c}from"./vue-vendor-DjtlKxRy.js";import{J as l}from"./index-Uji7rFqr.js";import{r as u}from"./button-BuRmTYve.js";var d=s(`inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden`,{variants:{variant:{default:`border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90`,secondary:`border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90`,destructive:`border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60`,outline:`text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground`}},defaultVariants:{variant:`default`}}),f=e({__name:`Badge`,props:{asChild:{type:Boolean},as:{},variant:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e,f=c(s,`class`);return(c,p)=>(n(),i(a(u),r({"data-slot":`badge`,class:a(l)(a(d)({variant:e.variant}),s.class)},a(f)),{default:o(()=>[t(c.$slots,`default`)]),_:3},16,[`class`]))}});export{f as t};
|
||||
1
monisuo-admin/dist/assets/Card-mLutrMBs.js
vendored
1
monisuo-admin/dist/assets/Card-mLutrMBs.js
vendored
@@ -1 +0,0 @@
|
||||
import{D as e,Dt as t,G as n,H as r,Tt as i,w as a}from"./iconify-DYZHDLa8.js";import{J as o}from"./index-Uji7rFqr.js";var s=e({__name:`Card`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),a(`div`,{"data-slot":`card`,class:t(i(o)(`bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm`,s.class))},[n(e.$slots,`default`)],2))}});export{s as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{D as e,Dt as t,G as n,H as r,Tt as i,w as a}from"./iconify-DYZHDLa8.js";import{J as o}from"./index-Uji7rFqr.js";var s=e({__name:`CardContent`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),a(`div`,{"data-slot":`card-content`,class:t(i(o)(`px-6`,s.class))},[n(e.$slots,`default`)],2))}});export{s as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{D as e,Dt as t,G as n,H as r,Tt as i,w as a}from"./iconify-DYZHDLa8.js";import{J as o}from"./index-Uji7rFqr.js";var s=e({__name:`CardHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),a(`div`,{"data-slot":`card-header`,class:t(i(o)(`@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6`,s.class))},[n(e.$slots,`default`)],2))}}),c=e({__name:`CardDescription`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),a(`p`,{"data-slot":`card-description`,class:t(i(o)(`text-muted-foreground text-sm`,s.class))},[n(e.$slots,`default`)],2))}}),l=e({__name:`CardTitle`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let s=e;return(e,c)=>(r(),a(`h3`,{"data-slot":`card-title`,class:t(i(o)(`leading-none font-semibold`,s.class))},[n(e.$slots,`default`)],2))}});export{c as n,s as r,l as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{C as e,D as t,E as n,G as r,H as i,I as a,Ot as o,S as s,Tt as c,b as l,f as u,it as d,k as f,p,q as m}from"./iconify-DYZHDLa8.js";import{o as h}from"./SelectValue-Dhq6ao6U.js";import{E as g,y as _}from"./vue-vendor-DjtlKxRy.js";import{J as v}from"./index-Uji7rFqr.js";import{n as y,r as b}from"./VisuallyHidden-CeN_p2Md.js";import{O as x,T as S,g as C,y as w}from"./Teleport-BIYegdAM.js";import{r as T}from"./button-BuRmTYve.js";import{t as E}from"./useForwardExpose-B0BXtanw.js";import{t as D}from"./VisuallyHiddenInput-dn3LBkPE.js";import{t as O}from"./RovingFocusItem-BIHcXQd-.js";function k(e,t){return S(e)?!1:Array.isArray(e)?e.some(e=>b(e,t)):b(e,t)}var[A,j]=x(`CheckboxGroupRoot`);function M(e){return e===`indeterminate`}function N(e){return M(e)?`indeterminate`:e?`checked`:`unchecked`}var[P,F]=x(`CheckboxRoot`),I=t({inheritAttrs:!1,__name:`CheckboxRoot`,props:{defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},disabled:{type:Boolean,required:!1},value:{type:null,required:!1,default:`on`},id:{type:String,required:!1},trueValue:{type:null,required:!1,default:()=>!0},falseValue:{type:null,required:!1,default:()=>!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:[`update:modelValue`],setup(t,{emit:n}){let o=t,f=n,{forwardRef:h,currentElement:g}=E(),v=A(null),x=_(o,`modelValue`,f,{defaultValue:o.defaultValue??o.falseValue,passive:o.modelValue===void 0}),C=l(()=>v?.disabled.value||o.disabled),w=l(()=>b(x.value,o.trueValue)),j=l(()=>S(v?.modelValue.value)?x.value===`indeterminate`?`indeterminate`:w.value:k(v.modelValue.value,o.value));function P(){if(S(v?.modelValue.value))x.value===`indeterminate`?x.value=o.trueValue:x.value=w.value?o.falseValue:o.trueValue;else{let e=[...v.modelValue.value||[]];if(k(e,o.value)){let t=e.findIndex(e=>b(e,o.value));e.splice(t,1)}else e.push(o.value);v.modelValue.value=e}}let I=y(g),L=l(()=>o.id&&g.value?document.querySelector(`[for="${o.id}"]`)?.innerText:void 0);return F({disabled:C,state:j}),(t,n)=>(i(),s(m(c(v)?.rovingFocus.value?c(O):c(T)),a(t.$attrs,{id:t.id,ref:c(h),role:`checkbox`,"as-child":t.asChild,as:t.as,type:t.as===`button`?`button`:void 0,"aria-checked":c(M)(j.value)?`mixed`:j.value,"aria-required":t.required,"aria-label":t.$attrs[`aria-label`]||L.value,"data-state":c(N)(j.value),"data-disabled":C.value?``:void 0,disabled:C.value,focusable:c(v)?.rovingFocus.value?!C.value:void 0,onKeydown:u(p(()=>{},[`prevent`]),[`enter`]),onClick:P}),{default:d(()=>[r(t.$slots,`default`,{modelValue:c(x),state:j.value}),c(I)&&t.name&&!c(v)?(i(),s(c(D),{key:0,type:`checkbox`,checked:!!j.value,name:t.name,value:t.value,disabled:C.value,required:t.required},null,8,[`checked`,`name`,`value`,`disabled`,`required`])):e(`v-if`,!0)]),_:3},16,[`id`,`as-child`,`as`,`type`,`aria-checked`,`aria-required`,`aria-label`,`data-state`,`data-disabled`,`disabled`,`focusable`,`onKeydown`]))}}),L=t({__name:`CheckboxIndicator`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){let{forwardRef:t}=E(),o=P();return(e,l)=>(i(),s(c(C),{present:e.forceMount||c(M)(c(o).state.value)||c(o).state.value===!0},{default:d(()=>[n(c(T),a({ref:c(t),"data-state":c(N)(c(o).state.value),"data-disabled":c(o).disabled.value?``:void 0,style:{pointerEvents:`none`},"as-child":e.asChild,as:e.as},e.$attrs),{default:d(()=>[r(e.$slots,`default`)]),_:3},16,[`data-state`,`data-disabled`,`as-child`,`as`])]),_:3},8,[`present`]))}}),R=t({__name:`Checkbox`,props:{defaultValue:{},modelValue:{},disabled:{type:Boolean},value:{},id:{},trueValue:{},falseValue:{},asChild:{type:Boolean},as:{},name:{},required:{type:Boolean},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(e,{emit:t}){let l=e,u=t,p=w(g(l,`class`),u);return(e,t)=>(i(),s(c(I),a({"data-slot":`checkbox`},c(p),{class:c(v)(`peer border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50`,l.class)}),{default:d(t=>[n(c(L),{"data-slot":`checkbox-indicator`,class:`grid place-content-center text-current transition-none`},{default:d(()=>[r(e.$slots,`default`,o(f(t)),()=>[n(c(h),{class:`size-3.5`})])]),_:2},1024)]),_:3},16,[`class`]))}});export{R as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{D as e,G as t,H as n,I as r,S as i,Tt as a,it as o}from"./iconify-DYZHDLa8.js";import{u as s}from"./DialogTitle-CMQDEO8n.js";var c=e({__name:`DialogClose`,props:{asChild:{type:Boolean},as:{}},setup(e){let c=e;return(e,l)=>(n(),i(a(s),r({"data-slot":`dialog-close`},c),{default:o(()=>[t(e.$slots,`default`)]),_:3},16))}});export{c as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{D as e,G as t,H as n,I as r,S as i,Tt as a,it as o}from"./iconify-DYZHDLa8.js";import{E as s}from"./vue-vendor-DjtlKxRy.js";import{J as c}from"./index-Uji7rFqr.js";import{b as l}from"./Teleport-BIYegdAM.js";import{r as u}from"./button-BuRmTYve.js";import{t as d}from"./useForwardExpose-B0BXtanw.js";import{f}from"./DialogTitle-CMQDEO8n.js";var p=e({__name:`DialogDescription`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`p`}},setup(e){let s=e;d();let c=f();return(e,l)=>(n(),i(a(u),r(s,{id:a(c).descriptionId}),{default:o(()=>[t(e.$slots,`default`)]),_:3},16,[`id`]))}}),m=e({__name:`DialogDescription`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let u=e,d=l(s(u,`class`));return(e,s)=>(n(),i(a(p),r({"data-slot":`dialog-description`},a(d),{class:a(c)(`text-muted-foreground text-sm`,u.class)}),{default:o(()=>[t(e.$slots,`default`)]),_:3},16,[`class`]))}});export{p as n,m as t};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{D as e,E as t,G as n,H as r,I as i,Ot as a,S as o,Tt as s,gt as c,it as l,k as u}from"./iconify-DYZHDLa8.js";import{E as d}from"./vue-vendor-DjtlKxRy.js";import{J as f}from"./index-Uji7rFqr.js";import{O as p,_ as m,b as h,d as g,g as _,l as v}from"./Teleport-BIYegdAM.js";import{r as y}from"./button-BuRmTYve.js";import{t as b}from"./useForwardExpose-B0BXtanw.js";var[x,S]=p([`MenuCheckboxItem`,`MenuRadioItem`],`MenuItemIndicatorContext`),C=e({__name:`MenuItemIndicator`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){let i=x({modelValue:c(!1)});return(e,a)=>(r(),o(s(_),{present:e.forceMount||s(g)(s(i).modelValue.value)||s(i).modelValue.value===!0},{default:l(()=>[t(s(y),{as:e.as,"as-child":e.asChild,"data-state":s(v)(s(i).modelValue.value)},{default:l(()=>[n(e.$slots,`default`)]),_:3},8,[`as`,`as-child`,`data-state`])]),_:3},8,[`present`]))}}),[w,T]=p(`MenuGroup`),E=e({__name:`MenuGroup`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,a=m(void 0,`reka-menu-group`);return T({id:a}),(e,c)=>(r(),o(s(y),i({role:`group`},t,{"aria-labelledby":s(a)}),{default:l(()=>[n(e.$slots,`default`)]),_:3},16,[`aria-labelledby`]))}}),D=e({__name:`MenuLabel`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`div`}},setup(e){let t=e,a=w({id:``});return(e,c)=>(r(),o(s(y),i(t,{id:s(a).id||void 0}),{default:l(()=>[n(e.$slots,`default`)]),_:3},16,[`id`]))}}),O=e({__name:`MenuSeparator`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e;return(e,a)=>(r(),o(s(y),i(t,{role:`separator`,"aria-orientation":`horizontal`}),{default:l(()=>[n(e.$slots,`default`)]),_:3},16))}}),k=e({__name:`DropdownMenuItemIndicator`,props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e;return b(),(e,i)=>(r(),o(s(C),a(u(t)),{default:l(()=>[n(e.$slots,`default`)]),_:3},16))}}),A=e({__name:`DropdownMenuLabel`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e;return b(),(e,i)=>(r(),o(s(D),a(u(t)),{default:l(()=>[n(e.$slots,`default`)]),_:3},16))}}),j=e({__name:`DropdownMenuSeparator`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e;return b(),(e,i)=>(r(),o(s(O),a(u(t)),{default:l(()=>[n(e.$slots,`default`)]),_:3},16))}}),M=e({__name:`DropdownMenuSeparator`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,n=d(t,`class`);return(e,a)=>(r(),o(s(j),i({"data-slot":`dropdown-menu-separator`},s(n),{class:s(f)(`bg-border -mx-1 my-1 h-px`,t.class)}),null,16,[`class`]))}}),N=e({__name:`DropdownMenuLabel`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},inset:{type:Boolean}},setup(e){let t=e,a=h(d(t,`class`,`inset`));return(c,u)=>(r(),o(s(A),i({"data-slot":`dropdown-menu-label`,"data-inset":e.inset?``:void 0},s(a),{class:s(f)(`px-2 py-1.5 text-sm font-medium data-[inset]:pl-8`,t.class)}),{default:l(()=>[n(c.$slots,`default`)]),_:3},16,[`data-inset`,`class`]))}});export{S as a,E as i,M as n,k as r,N as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{D as e,E as t,G as n,H as r,I as i,Ot as a,S as o,St as s,Tt as c,b as l,it as u,k as d,x as f}from"./iconify-DYZHDLa8.js";import{t as p}from"./circle-CK69KO4g.js";import{E as m,y as h}from"./vue-vendor-DjtlKxRy.js";import{J as g}from"./index-Uji7rFqr.js";import{O as _,b as v,l as y,x as b,y as x}from"./Teleport-BIYegdAM.js";import{a as S}from"./DropdownMenuTrigger-GJTdpRDr.js";import{t as C}from"./useForwardExpose-B0BXtanw.js";import{a as w,i as T,r as E}from"./DropdownMenuLabel-BHmU9FEw.js";var[D,O]=_(`MenuRadioGroup`),k=e({__name:`MenuRadioGroup`,props:{modelValue:{type:null,required:!1,default:``},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let i=e,s=t,l=v(m(i,[`modelValue`])),f=h(i,`modelValue`,s);return O({modelValue:f,onValueChange:e=>{f.value=e}}),(e,t)=>(r(),o(T,a(d(c(l))),{default:u(()=>[n(e.$slots,`default`,{modelValue:c(f)})]),_:3},16))}}),A=e({__name:`MenuRadioItem`,props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`select`],setup(e,{emit:t}){let a=e,d=t,f=v(m(a,[`value`])),{value:p}=s(a),h=D(),g=l(()=>h.modelValue.value===p?.value);return w({modelValue:g}),(e,t)=>(r(),o(S,i({role:`menuitemradio`},c(f),{"aria-checked":g.value,"data-state":c(y)(g.value),onSelect:t[0]||=async e=>{d(`select`,e),c(h).onValueChange(c(p))}}),{default:u(()=>[n(e.$slots,`default`)]),_:3},16,[`aria-checked`,`data-state`]))}}),j=e({__name:`DropdownMenuRadioGroup`,props:{modelValue:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let i=e,s=b(t);return C(),(e,t)=>(r(),o(c(k),a(d({...i,...c(s)})),{default:u(()=>[n(e.$slots,`default`)]),_:3},16))}}),M=e({__name:`DropdownMenuRadioItem`,props:{value:{type:null,required:!0},disabled:{type:Boolean,required:!1},textValue:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`select`],setup(e,{emit:t}){let i=x(e,t);return C(),(e,t)=>(r(),o(c(A),a(d(c(i))),{default:u(()=>[n(e.$slots,`default`)]),_:3},16))}}),N=e({__name:`DropdownMenuRadioGroup`,props:{modelValue:{},asChild:{type:Boolean},as:{}},emits:[`update:modelValue`],setup(e,{emit:t}){let a=x(e,t);return(e,t)=>(r(),o(c(j),i({"data-slot":`dropdown-menu-radio-group`},c(a)),{default:u(()=>[n(e.$slots,`default`)]),_:3},16))}}),P={class:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`},F=e({__name:`DropdownMenuRadioItem`,props:{value:{},disabled:{type:Boolean},textValue:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`select`],setup(e,{emit:a}){let s=e,l=a,d=x(m(s,`class`),l);return(e,a)=>(r(),o(c(M),i({"data-slot":`dropdown-menu-radio-item`},c(d),{class:c(g)(`focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,s.class)}),{default:u(()=>[f(`span`,P,[t(c(E),null,{default:u(()=>[n(e.$slots,`indicator-icon`,{},()=>[t(c(p),{class:`size-2 fill-current`})])]),_:3})]),n(e.$slots,`default`)]),_:3},16,[`class`]))}});export{N as n,F as t};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
monisuo-admin/dist/assets/Input-DFmzhatB.js
vendored
1
monisuo-admin/dist/assets/Input-DFmzhatB.js
vendored
@@ -1 +0,0 @@
|
||||
import{D as e,Dt as t,H as n,Tt as r,at as i,dt as a,u as o,w as s}from"./iconify-DYZHDLa8.js";import{y as c}from"./vue-vendor-DjtlKxRy.js";import{J as l}from"./index-Uji7rFqr.js";var u=e({__name:`Input`,props:{defaultValue:{},modelValue:{},class:{type:[Boolean,null,String,Object,Array]}},emits:[`update:modelValue`],setup(e,{emit:u}){let d=e,f=c(d,`modelValue`,u,{passive:!0,defaultValue:d.defaultValue});return(e,c)=>i((n(),s(`input`,{"onUpdate:modelValue":c[0]||=e=>a(f)?f.value=e:null,"data-slot":`input`,class:t(r(l)(`file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm`,`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,d.class))},null,2)),[[o,r(f)]])}});export{u as t};
|
||||
1
monisuo-admin/dist/assets/Label-BOs1t85p.js
vendored
1
monisuo-admin/dist/assets/Label-BOs1t85p.js
vendored
@@ -1 +0,0 @@
|
||||
import{D as e,G as t,H as n,I as r,S as i,Tt as a,it as o}from"./iconify-DYZHDLa8.js";import{E as s}from"./vue-vendor-DjtlKxRy.js";import{J as c}from"./index-Uji7rFqr.js";import{r as l}from"./button-BuRmTYve.js";import{t as u}from"./useForwardExpose-B0BXtanw.js";var d=e({__name:`Label`,props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`label`}},setup(e){let s=e;return u(),(e,c)=>(n(),i(a(l),r(s,{onMousedown:c[0]||=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()}}),{default:o(()=>[t(e.$slots,`default`)]),_:3},16))}}),f=e({__name:`Label`,props:{for:{},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let l=e,u=s(l,`class`);return(e,s)=>(n(),i(a(d),r({"data-slot":`label`},a(u),{class:a(c)(`flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,l.class)}),{default:o(()=>[t(e.$slots,`default`)]),_:3},16,[`class`]))}});export{f as t};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{D as e,E as t,G as n,H as r,S as i,St as a,Tt as o,gt as s,it as c}from"./iconify-DYZHDLa8.js";import{y as l}from"./vue-vendor-DjtlKxRy.js";import{D as u,O as d}from"./Teleport-BIYegdAM.js";import{r as f}from"./button-BuRmTYve.js";import{o as p,u as m}from"./PopperContent-BqlvlxQe.js";var h=`rovingFocusGroup.onEntryFocus`,g={bubbles:!1,cancelable:!0},_={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function v(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function y(e,t,n){let r=v(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return _[r]}function b(e,t=!1){let n=u();for(let r of e)if(r===n||(r.focus({preventScroll:t}),u()!==n))return}function x(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var[S,C]=d(`RovingFocusGroup`),w=e({__name:`RovingFocusGroup`,props:{orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!1},currentTabStopId:{type:[String,null],required:!1},defaultCurrentTabStopId:{type:String,required:!1},preventScrollOnEntryFocus:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`entryFocus`,`update:currentTabStopId`],setup(e,{expose:u,emit:d}){let _=e,v=d,{loop:y,orientation:x,dir:S}=a(_),w=m(S),T=l(_,`currentTabStopId`,v,{defaultValue:_.defaultCurrentTabStopId,passive:_.currentTabStopId===void 0}),E=s(!1),D=s(!1),O=s(0),{getItems:k,CollectionSlot:A}=p({isProvider:!0});function j(e){let t=!D.value;if(e.currentTarget&&e.target===e.currentTarget&&t&&!E.value){let t=new CustomEvent(h,g);if(e.currentTarget.dispatchEvent(t),v(`entryFocus`,t),!t.defaultPrevented){let e=k().map(e=>e.ref).filter(e=>e.dataset.disabled!==``);b([e.find(e=>e.getAttribute(`data-active`)===``),e.find(e=>e.getAttribute(`data-highlighted`)===``),e.find(e=>e.id===T.value),...e].filter(Boolean),_.preventScrollOnEntryFocus)}}D.value=!1}function M(){setTimeout(()=>{D.value=!1},1)}return u({getItems:k}),C({loop:y,dir:w,orientation:x,currentTabStopId:T,onItemFocus:e=>{T.value=e},onItemShiftTab:()=>{E.value=!0},onFocusableItemAdd:()=>{O.value++},onFocusableItemRemove:()=>{O.value--}}),(e,a)=>(r(),i(o(A),null,{default:c(()=>[t(o(f),{tabindex:E.value||O.value===0?-1:0,"data-orientation":o(x),as:e.as,"as-child":e.asChild,dir:o(w),style:{outline:`none`},onMousedown:a[0]||=e=>D.value=!0,onMouseup:M,onFocus:j,onBlur:a[1]||=e=>E.value=!1},{default:c(()=>[n(e.$slots,`default`)]),_:3},8,[`tabindex`,`data-orientation`,`as`,`as-child`,`dir`])]),_:3}))}});export{x as a,y as i,S as n,b as r,w as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{B as e,D as t,E as n,G as r,H as i,L as a,S as o,Tt as s,b as c,it as l,z as u}from"./iconify-DYZHDLa8.js";import{_ as d}from"./Teleport-BIYegdAM.js";import{r as f}from"./button-BuRmTYve.js";import{o as p}from"./PopperContent-BqlvlxQe.js";import{a as m,i as h,n as g,r as _}from"./RovingFocusGroup-DF8fLFe7.js";var v=t({__name:`RovingFocusItem`,props:{tabStopId:{type:String,required:!1},focusable:{type:Boolean,required:!1,default:!0},active:{type:Boolean,required:!1},allowShiftKey:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(t){let v=t,y=g(),b=d(),x=c(()=>v.tabStopId||b),S=c(()=>y.currentTabStopId.value===x.value),{getItems:C,CollectionItem:w}=p();u(()=>{v.focusable&&y.onFocusableItemAdd()}),e(()=>{v.focusable&&y.onFocusableItemRemove()});function T(e){if(e.key===`Tab`&&e.shiftKey){y.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=h(e,y.orientation.value,y.dir.value);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||!v.allowShiftKey&&e.shiftKey)return;e.preventDefault();let n=[...C().map(e=>e.ref).filter(e=>e.dataset.disabled!==``)];if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=y.loop.value?m(n,r+1):n.slice(r+1)}a(()=>_(n))}}return(e,t)=>(i(),o(s(w),null,{default:l(()=>[n(s(f),{tabindex:S.value?0:-1,"data-orientation":s(y).orientation.value,"data-active":e.active?``:void 0,"data-disabled":e.focusable?void 0:``,as:e.as,"as-child":e.asChild,onMousedown:t[0]||=t=>{e.focusable?s(y).onItemFocus(x.value):t.preventDefault()},onFocus:t[1]||=e=>s(y).onItemFocus(x.value),onKeydown:T},{default:l(()=>[r(e.$slots,`default`)]),_:3},8,[`tabindex`,`data-orientation`,`data-active`,`data-disabled`,`as`,`as-child`])]),_:3}))}});export{v as t};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{D as e,G as t,H as n,I as r,Ot as i,S as a,Tt as o,b as s,it as c,k as l}from"./iconify-DYZHDLa8.js";import{E as u}from"./vue-vendor-DjtlKxRy.js";import{J as d}from"./index-Uji7rFqr.js";import{r as f}from"./button-BuRmTYve.js";var p=e({__name:`BaseSeparator`,props:{orientation:{type:String,required:!1,default:`horizontal`},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let i=e,l=[`horizontal`,`vertical`];function u(e){return l.includes(e)}let d=s(()=>u(i.orientation)?i.orientation:`horizontal`),p=s(()=>d.value===`vertical`?i.orientation:void 0),m=s(()=>i.decorative?{role:`none`}:{"aria-orientation":p.value,role:`separator`});return(e,i)=>(n(),a(o(f),r({as:e.as,"as-child":e.asChild,"data-orientation":d.value},m.value),{default:c(()=>[t(e.$slots,`default`)]),_:3},16,[`as`,`as-child`,`data-orientation`]))}}),m=e({__name:`Separator`,props:{orientation:{type:String,required:!1,default:`horizontal`},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let r=e;return(e,o)=>(n(),a(p,i(l(r)),{default:c(()=>[t(e.$slots,`default`)]),_:3},16))}}),h=e({__name:`Separator`,props:{orientation:{default:`horizontal`},decorative:{type:Boolean,default:!0},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let t=e,i=u(t,`class`);return(e,s)=>(n(),a(o(m),r({"data-slot":`separator`},o(i),{class:o(d)(`bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px`,t.class)}),null,16,[`class`]))}});export{m as n,h as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{D as e,Dt as t,G as n,H as r,Tt as i,w as a,x as o}from"./iconify-DYZHDLa8.js";import{J as s}from"./index-Uji7rFqr.js";var c={"data-slot":`table-container`,class:`relative w-full overflow-auto`},l=e({__name:`Table`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let l=e;return(e,u)=>(r(),a(`div`,c,[o(`table`,{"data-slot":`table`,class:t(i(s)(`w-full caption-bottom text-sm`,l.class))},[n(e.$slots,`default`)],2)]))}}),u=e({__name:`TableBody`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let o=e;return(e,c)=>(r(),a(`tbody`,{"data-slot":`table-body`,class:t(i(s)(`[&_tr:last-child]:border-0`,o.class))},[n(e.$slots,`default`)],2))}}),d=e({__name:`TableCell`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let o=e;return(e,c)=>(r(),a(`td`,{"data-slot":`table-cell`,class:t(i(s)(`p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,o.class))},[n(e.$slots,`default`)],2))}}),f=e({__name:`TableHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let o=e;return(e,c)=>(r(),a(`thead`,{"data-slot":`table-header`,class:t(i(s)(`[&_tr]:border-b`,o.class))},[n(e.$slots,`default`)],2))}}),p=e({__name:`TableRow`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let o=e;return(e,c)=>(r(),a(`tr`,{"data-slot":`table-row`,class:t(i(s)(`hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors`,o.class))},[n(e.$slots,`default`)],2))}}),m=e({__name:`TableHead`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(e){let o=e;return(e,c)=>(r(),a(`th`,{"data-slot":`table-head`,class:t(i(s)(`text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]`,o.class))},[n(e.$slots,`default`)],2))}});export{u as a,d as i,p as n,l as o,f as r,m as t};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{Ct as e,D as t,G as n,H as r,S as i,Tt as a,b as o,it as s}from"./iconify-DYZHDLa8.js";import{u as c}from"./vue-vendor-DjtlKxRy.js";import{r as l}from"./button-BuRmTYve.js";function u(e){return typeof e==`string`?`'${e}'`:new d().serialize(e)}var d=function(){class e{#e=new Map;compare(e,t){let n=typeof e,r=typeof t;return n===`string`&&r===`string`?e.localeCompare(t):n===`number`&&r===`number`?e-t:String.prototype.localeCompare.call(this.serialize(e,!0),this.serialize(t,!0))}serialize(e,t){if(e===null)return`null`;switch(typeof e){case`string`:return t?e:`'${e}'`;case`bigint`:return`${e}n`;case`object`:return this.$object(e);case`function`:return this.$function(e)}return String(e)}serializeObject(e){let t=Object.prototype.toString.call(e);if(t!==`[object Object]`)return this.serializeBuiltInType(t.length<10?`unknown:${t}`:t.slice(8,-1),e);let n=e.constructor,r=n===Object||n===void 0?``:n.name;if(r!==``&&globalThis[r]===n)return this.serializeBuiltInType(r,e);if(typeof e.toJSON==`function`){let t=e.toJSON();return r+(typeof t==`object`&&t?this.$object(t):`(${this.serialize(t)})`)}return this.serializeObjectEntries(r,Object.entries(e))}serializeBuiltInType(e,t){let n=this[`$`+e];if(n)return n.call(this,t);if(typeof t?.entries==`function`)return this.serializeObjectEntries(e,t.entries());throw Error(`Cannot serialize ${e}`)}serializeObjectEntries(e,t){let n=Array.from(t).sort((e,t)=>this.compare(e[0],t[0])),r=`${e}{`;for(let e=0;e<n.length;e++){let[t,i]=n[e];r+=`${this.serialize(t,!0)}:${this.serialize(i)}`,e<n.length-1&&(r+=`,`)}return r+`}`}$object(e){let t=this.#e.get(e);return t===void 0&&(this.#e.set(e,`#${this.#e.size}`),t=this.serializeObject(e),this.#e.set(e,t)),t}$function(e){let t=Function.prototype.toString.call(e);return t.slice(-15)===`[native code] }`?`${e.name||``}()[native]`:`${e.name}(${e.length})${t.replace(/\s*\n\s*/g,``)}`}$Array(e){let t=`[`;for(let n=0;n<e.length;n++)t+=this.serialize(e[n]),n<e.length-1&&(t+=`,`);return t+`]`}$Date(e){try{return`Date(${e.toISOString()})`}catch{return`Date(null)`}}$ArrayBuffer(e){return`ArrayBuffer[${new Uint8Array(e).join(`,`)}]`}$Set(e){return`Set${this.$Array(Array.from(e).sort((e,t)=>this.compare(e,t)))}`}$Map(e){return this.serializeObjectEntries(`Map`,e.entries())}}for(let t of[`Error`,`RegExp`,`URL`])e.prototype[`$`+t]=function(e){return`${t}(${e})`};for(let t of[`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float32Array`,`Float64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`,`)}]`};for(let t of[`BigInt64Array`,`BigUint64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`n,`)}${e.length>0?`n`:``}]`};return e}();function f(e,t){return e===t||u(e)===u(t)}function p(t){return o(()=>e(t)?!!c(t)?.closest(`form`):!0)}var m=t({__name:`VisuallyHidden`,props:{feature:{type:String,required:!1,default:`focusable`},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`span`}},setup(e){return(e,t)=>(r(),i(a(l),{as:e.as,"as-child":e.asChild,"aria-hidden":e.feature===`focusable`?`true`:void 0,"data-hidden":e.feature===`fully-hidden`?``:void 0,tabindex:e.feature===`fully-hidden`?`-1`:void 0,style:{position:`absolute`,border:0,width:`1px`,height:`1px`,padding:0,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,clipPath:`inset(50%)`,whiteSpace:`nowrap`,wordWrap:`normal`,top:`-1px`,left:`-1px`}},{default:s(()=>[n(e.$slots,`default`)]),_:3},8,[`as`,`as-child`,`aria-hidden`,`data-hidden`,`tabindex`]))}});export{p as n,f as r,m as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{C as e,D as t,H as n,I as r,S as i,W as a,b as o,et as s,h as c,w as l}from"./iconify-DYZHDLa8.js";import{t as u}from"./VisuallyHidden-CeN_p2Md.js";import{s as d}from"./PopperContent-BqlvlxQe.js";var f=t({inheritAttrs:!1,__name:`VisuallyHiddenInputBubble`,props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:`fully-hidden`}},setup(e){let t=e,{primitiveElement:a,currentElement:c}=d();return s(o(()=>t.checked??t.value),(e,t)=>{if(!c.value)return;let n=c.value,r=window.HTMLInputElement.prototype,i=Object.getOwnPropertyDescriptor(r,`value`).set;if(i&&e!==t){let t=new Event(`input`,{bubbles:!0}),r=new Event(`change`,{bubbles:!0});i.call(n,e),n.dispatchEvent(t),n.dispatchEvent(r)}}),(e,o)=>(n(),i(u,r({ref_key:`primitiveElement`,ref:a},{...t,...e.$attrs},{as:`input`}),null,16))}}),p=t({inheritAttrs:!1,__name:`VisuallyHiddenInput`,props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:`fully-hidden`}},setup(t){let s=t,u=o(()=>typeof s.value==`object`&&Array.isArray(s.value)&&s.value.length===0&&s.required),d=o(()=>typeof s.value==`string`||typeof s.value==`number`||typeof s.value==`boolean`||s.value===null||s.value===void 0?[{name:s.name,value:s.value}]:typeof s.value==`object`&&Array.isArray(s.value)?s.value.flatMap((e,t)=>typeof e==`object`?Object.entries(e).map(([e,n])=>({name:`${s.name}[${t}][${e}]`,value:n})):{name:`${s.name}[${t}]`,value:e}):s.value!==null&&typeof s.value==`object`&&!Array.isArray(s.value)?Object.entries(s.value).map(([e,t])=>({name:`${s.name}[${e}]`,value:t})):[]);return(t,o)=>(n(),l(c,null,[e(` We render single input if it's required `),u.value?(n(),i(f,r({key:t.name},{...s,...t.$attrs},{name:t.name,value:t.value}),null,16,[`name`,`value`])):(n(!0),l(c,{key:1},a(d.value,e=>(n(),i(f,r({key:e.name},{ref_for:!0},{...s,...t.$attrs},{name:e.name,value:e.value}),null,16,[`name`,`value`]))),128))],2112))}});export{p as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{At as e,D as t,E as n,G as r,H as i,T as a,it as o,w as s,x as c}from"./iconify-DYZHDLa8.js";import{n as l}from"./button-BuRmTYve.js";import{t as u}from"./route-block-DB3S2hJK.js";var d={class:`max-w-2xl mx-auto text-center`},f={class:`font-bold text-8xl`},p={class:`mt-4 text-2xl font-bold`},m={class:`text-stone-400`},h={class:`mt-8`},g={class:`flex justify-center gap-2`},_=t({__name:`custom-error`,props:{code:{},subtitle:{},error:{}},setup(t){return(u,_)=>{let v=l;return i(),s(`div`,d,[c(`h1`,f,e(t.code),1),c(`h2`,p,e(t.subtitle),1),c(`p`,m,e(t.error),1),c(`footer`,h,[r(u.$slots,`default`,{},()=>[c(`div`,g,[n(v,{variant:`outline`,onClick:_[0]||=e=>u.$router.back()},{default:o(()=>[..._[2]||=[a(` Go Back `,-1)]]),_:1}),n(v,{onClick:_[1]||=e=>u.$router.push(`/`)},{default:o(()=>[..._[3]||=[a(` Back to Home `,-1)]]),_:1})])])])])}}}),v={class:`flex items-center justify-center h-screen`},y=t({__name:`[...path]`,setup(e){return(e,t)=>(i(),s(`div`,v,[n(_,{code:404,subtitle:`Page Not Found`,error:`The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.`})]))}});typeof u==`function`&&u(y);var b=y;export{b as default};
|
||||
1
monisuo-admin/dist/assets/admins-BbJ2SqnF.js
vendored
1
monisuo-admin/dist/assets/admins-BbJ2SqnF.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
monisuo-admin/dist/assets/auth-CE0QuSQ0.js
vendored
1
monisuo-admin/dist/assets/auth-CE0QuSQ0.js
vendored
@@ -1 +0,0 @@
|
||||
import{H as e,K as t,S as n}from"./iconify-DYZHDLa8.js";import{K as r}from"./index-Uji7rFqr.js";import{t as i}from"./route-block-DB3S2hJK.js";var a={};function o(r,i){let a=t(`router-view`);return e(),n(a)}typeof i==`function`&&i(a);var s=r(a,[[`render`,o]]);export{s as default};
|
||||
1
monisuo-admin/dist/assets/blank-ByXMvy74.js
vendored
1
monisuo-admin/dist/assets/blank-ByXMvy74.js
vendored
@@ -1 +0,0 @@
|
||||
import{H as e,K as t,S as n}from"./iconify-DYZHDLa8.js";import{K as r}from"./index-Uji7rFqr.js";var i={};function a(r,i){let a=t(`router-view`);return e(),n(a)}var o=r(i,[[`render`,a]]);export{o as default};
|
||||
1
monisuo-admin/dist/assets/button-BuRmTYve.js
vendored
1
monisuo-admin/dist/assets/button-BuRmTYve.js
vendored
@@ -1 +0,0 @@
|
||||
import{A as e,D as t,Dt as n,G as r,H as i,I as a,S as o,Tt as s,h as c,it as l,m as u,y as d}from"./iconify-DYZHDLa8.js";import{t as f}from"./ui-vendor-Za4p7XTd.js";import{J as p}from"./index-Uji7rFqr.js";function m(e){return e?e.flatMap(e=>e.type===c?m(e.children):[e]):[]}var h=t({name:`PrimitiveSlot`,inheritAttrs:!1,setup(e,{attrs:t,slots:n}){return()=>{if(!n.default)return null;let e=m(n.default()),r=e.findIndex(e=>e.type!==u);if(r===-1)return e;let i=e[r];delete i.props?.ref;let o=i.props?a(t,i.props):t,s=d({...i,props:{}},o);return e.length===1?s:(e[r]=s,e)}}}),g=[`area`,`img`,`input`],_=t({name:`Primitive`,inheritAttrs:!1,props:{asChild:{type:Boolean,default:!1},as:{type:[String,Object],default:`div`}},setup(t,{attrs:n,slots:r}){let i=t.asChild?`template`:t.as;return typeof i==`string`&&g.includes(i)?()=>e(i,n):i===`template`?()=>e(h,n,{default:r.default}):()=>e(t.as,n,{default:r.default})}}),v=t({__name:`Button`,props:{variant:{},size:{},class:{type:[Boolean,null,String,Object,Array]},asChild:{type:Boolean},as:{default:`button`}},setup(e){let t=e;return(a,c)=>(i(),o(s(_),{"data-slot":`button`,as:e.as,"as-child":e.asChild,class:n(s(p)(s(y)({variant:e.variant,size:e.size}),t.class))},{default:l(()=>[r(a.$slots,`default`)]),_:3},8,[`as`,`as-child`,`class`]))}}),y=f(`inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary/90`,destructive:`bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60`,outline:`border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-9 px-4 py-2 has-[>svg]:px-3`,sm:`h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5`,lg:`h-10 rounded-md px-6 has-[>svg]:px-4`,icon:`size-9`,"icon-sm":`size-8`,"icon-lg":`size-10`}},defaultVariants:{variant:`default`,size:`default`}});export{m as a,h as i,v as n,_ as r,y as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{t as e}from"./createLucideIcon-KbkxXQD8.js";var t=e(`chevrons-up-down`,[[`path`,{d:`m7 15 5 5 5-5`,key:`1hf1tw`}],[`path`,{d:`m7 9 5-5 5 5`,key:`sgt6xg`}]]);export{t};
|
||||
1
monisuo-admin/dist/assets/circle-CK69KO4g.js
vendored
1
monisuo-admin/dist/assets/circle-CK69KO4g.js
vendored
@@ -1 +0,0 @@
|
||||
import{t as e}from"./createLucideIcon-KbkxXQD8.js";var t=e(`circle`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]);export{t};
|
||||
@@ -1 +0,0 @@
|
||||
import{t as e}from"./createLucideIcon-KbkxXQD8.js";var t=e(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),n=e(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),r=e(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),i=e(`circle-plus`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M8 12h8`,key:`1wcyev`}],[`path`,{d:`M12 8v8`,key:`napkw2`}]]);export{t as i,r as n,n as r,i as t};
|
||||
1
monisuo-admin/dist/assets/coins-BGJqlTvD.js
vendored
1
monisuo-admin/dist/assets/coins-BGJqlTvD.js
vendored
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{A as e}from"./iconify-DYZHDLa8.js";var t=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},n=e=>e===``,r=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),i=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),a=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),o=e=>{let t=a(e);return t.charAt(0).toUpperCase()+t.slice(1)},s={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":2,"stroke-linecap":`round`,"stroke-linejoin":`round`},c=({name:a,iconNode:c,absoluteStrokeWidth:l,"absolute-stroke-width":u,strokeWidth:d,"stroke-width":f,size:p=s.width,color:m=s.stroke,...h},{slots:g})=>e(`svg`,{...s,...h,width:p,height:p,stroke:m,"stroke-width":n(l)||n(u)||l===!0||u===!0?Number(d||f||s[`stroke-width`])*24/Number(p):d||f||s[`stroke-width`],class:r(`lucide`,h.class,...a?[`lucide-${i(o(a))}-icon`,`lucide-${i(a)}`]:[`lucide-icon`]),...!g.default&&!t(h)&&{"aria-hidden":`true`}},[...c.map(t=>e(...t)),...g.default?[g.default()]:[]]),l=(t,n)=>(r,{slots:i,attrs:a})=>e(c,{...a,...r,iconNode:n,name:t},i);export{l as t};
|
||||
316
monisuo-admin/dist/assets/dashboard-NuBCWisZ.js
vendored
316
monisuo-admin/dist/assets/dashboard-NuBCWisZ.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{t as e}from"./createLucideIcon-KbkxXQD8.js";var t=e(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]);export{t};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{At as e,C as t,D as n,Dt as r,E as i,G as a,H as o,K as s,S as c,T as l,Tt as u,W as d,b as f,h as p,it as m,q as h,w as g,x as _}from"./iconify-DYZHDLa8.js";import{t as v}from"./chevrons-up-down-kQRjQJq9.js";import{i as y}from"./vue-vendor-DjtlKxRy.js";import{J as b}from"./index-Uji7rFqr.js";import{n as x}from"./button-BuRmTYve.js";import{i as S,n as C,r as w,t as T}from"./DropdownMenuTrigger-GJTdpRDr.js";var E={class:`text-2xl font-bold`},D={key:0,class:`text-muted-foreground`},O={class:`flex items-center gap-2 flex-wrap`},k=n({__name:`basic-header`,props:{title:{},description:{},sticky:{type:Boolean}},setup(n){return(i,s)=>(o(),g(`header`,{class:r(u(b)(`flex flex-col md:flex-row gap-2 justify-between py-2`,n.sticky?`sticky top-0 z-40 bg-background`:``))},[_(`main`,null,[_(`h1`,E,e(n.title),1),n.description?(o(),g(`p`,D,e(n.description),1)):t(``,!0)]),_(`aside`,O,[a(i.$slots,`actions`)])],2))}}),A={class:`py-4`},j=n({__name:`basic-page`,props:{title:{},description:{},sticky:{type:Boolean}},setup(e){return(t,n)=>(o(),g(`main`,null,[i(k,{title:e.title,description:e.description,sticky:e.sticky},{actions:m(()=>[a(t.$slots,`actions`)]),_:3},8,[`title`,`description`,`sticky`]),_(`main`,A,[a(t.$slots,`default`)])]))}}),M={class:`flex flex-col gap-2`},N=`text-primary font-semibold bg-primary/5`,P=n({__name:`two-col-aside`,props:{nav:{}},setup(t){let n=t,a=y(),b=f(()=>a.path),E=f(()=>n.nav.find(e=>e.url===b.value));return(t,a)=>{let f=s(`router-link`),y=x,D=T,O=C,k=w,A=S;return o(),g(`nav`,M,[(o(!0),g(p,null,d(n.nav,t=>(o(),c(f,{key:t.url,to:t.url,class:r([`items-center hidden px-2 py-1 rounded-md lg:flex hover:bg-primary/5`,t.url===u(b)?N:``])},{default:m(()=>[(o(),c(h(t.icon),{class:`size-4 mr-1`})),_(`span`,null,e(t.title),1)]),_:2},1032,[`to`,`class`]))),128)),i(A,{class:`lg:hidden`},{default:m(()=>[i(D,{"as-child":``},{default:m(()=>[i(y,{variant:`outline`,class:`w-48 lg:hidden`},{default:m(()=>[(o(),c(h(u(E)?.icon),{class:`size-4 mr-1`})),_(`span`,null,e(u(E)?.title),1),i(u(v),{class:`size-4 ml-auto`})]),_:1})]),_:1}),i(k,{class:`w-48`,align:`start`},{default:m(()=>[(o(!0),g(p,null,d(n.nav,n=>(o(),c(O,{key:n.url,onClick:e=>t.$router.push(n.url)},{default:m(()=>[(o(),c(h(n.icon),{class:`size-4 mr-1`})),l(` `+e(n.title),1)]),_:2},1032,[`onClick`]))),128))]),_:1})]),_:1})])}}}),F=n({__name:`two-col`,setup(e){return(e,t)=>(o(),g(`div`,{class:r(u(b)(`grid grid-cols-1 lg:grid-cols-[200px_1fr] gap-4 w-full`))},[_(`aside`,null,[a(e.$slots,`aside`)]),_(`section`,null,[a(e.$slots,`default`)])],2))}});export{P as n,j as r,F as t};
|
||||
File diff suppressed because one or more lines are too long
1
monisuo-admin/dist/assets/index-CUIp_KwK.css
vendored
1
monisuo-admin/dist/assets/index-CUIp_KwK.css
vendored
File diff suppressed because one or more lines are too long
84
monisuo-admin/dist/assets/index-Uji7rFqr.js
vendored
84
monisuo-admin/dist/assets/index-Uji7rFqr.js
vendored
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{At as e,D as t,E as n,H as r,K as i,S as a,T as o,Tt as s,W as c,a as l,h as u,it as d,w as f,x as p}from"./iconify-DYZHDLa8.js";import{n as m,t as h}from"./toggle-theme-DJeMx_CM.js";import{f as g}from"./vue-vendor-DjtlKxRy.js";import{K as _}from"./index-Uji7rFqr.js";import"./Teleport-BIYegdAM.js";import{n as v}from"./button-BuRmTYve.js";import{n as y,t as b}from"./AvatarImage-2cn_wg2h.js";var x={class:`min-h-18 flex items-center justify-between`},S={class:`flex items-center gap-2`},C=t({__name:`the-footer`,setup(e){let t=g(),i=[{name:`bluesky`,icon:`simple-icons:bluesky`,url:`https://bsky.app/profile/bitmc.bsky.social`},{name:`github`,icon:`simple-icons:github`,url:`https://www.github.com/whbbit1999/shadcn-vue-admin`},{name:`bilibili`,icon:`simple-icons:bilibili`,url:`https://space.bilibili.com/104376935`}];return(e,a)=>{let o=b,m=y,h=v;return r(),f(`footer`,x,[n(m,null,{default:d(()=>[n(o,{src:`${s(t)===`dark`?`/logo.svg`:`/logo-black.svg`}`,alt:`Logo`},null,8,[`src`])]),_:1}),a[0]||=p(`div`,null,`© 2025 Whbbit1999`,-1),p(`div`,S,[(r(),f(u,null,c(i,e=>n(h,{key:e.name,variant:`outline`,size:`icon`,as:`a`,href:e.url,target:`_blank`},{default:d(()=>[n(s(l),{icon:e.icon},null,8,[`icon`])]),_:2},1032,[`href`])),64))])])}}}),w={};function T(t,n){let i=v;return r(),a(i,{as:`a`,href:`/auth/sign-in`},{default:d(()=>[o(e(t.$t(`login`)),1)]),_:1})}var E=_(w,[[`render`,T]]),D={};function O(t,n){let i=v;return r(),a(i,{as:`a`,href:`/auth/sign-up`,variant:`outline`},{default:d(()=>[o(e(t.$t(`register`)),1)]),_:1})}var k=_(D,[[`render`,O]]),A={class:`h-14 flex items-center marketing-header sticky top-0 z-99`},j={class:`mr-2 hidden lg:flex lg:gap-2`},M={class:`flex gap-2`},N=_(t({__name:`the-header`,setup(e){let t=g();return(e,a)=>{let o=b,c=y,l=i(`router-link`);return r(),f(`header`,A,[n(l,{to:`/`,class:`flex items-center gap-2`},{default:d(()=>[n(c,null,{default:d(()=>[n(o,{src:`${s(t)===`dark`?`/logo.svg`:`/logo-black.svg`}`,alt:`Logo`},null,8,[`src`])]),_:1}),a[0]||=p(`span`,{class:`text-base font-bold`},`Shadcn Vue Admin`,-1)]),_:1}),a[1]||=p(`div`,{class:`flex-1`},null,-1),p(`div`,j,[n(E),n(k)]),p(`div`,M,[n(m),n(h)])])}}}),[[`__scopeId`,`data-v-bceee906`]]),P={class:`container mx-auto`},F={class:`mx-2 lg:p-0`},I=t({__name:`marketing`,setup(e){return(e,t)=>{let a=i(`router-view`);return r(),f(`div`,P,[p(`div`,F,[n(N),p(`main`,null,[n(a)]),n(C)])])}}});export{I as default};
|
||||
1
monisuo-admin/dist/assets/modal-DDjjVbEC.js
vendored
1
monisuo-admin/dist/assets/modal-DDjjVbEC.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
monisuo-admin/dist/assets/orders-BLDN6uUB.js
vendored
1
monisuo-admin/dist/assets/orders-BLDN6uUB.js
vendored
File diff suppressed because one or more lines are too long
1
monisuo-admin/dist/assets/pages-BQebPoV9.js
vendored
1
monisuo-admin/dist/assets/pages-BQebPoV9.js
vendored
@@ -1 +0,0 @@
|
||||
import{D as e,H as t,w as n}from"./iconify-DYZHDLa8.js";import{t as r}from"./route-block-DB3S2hJK.js";var i=e({__name:`index`,setup(e){return(e,r)=>(t(),n(`div`))}});typeof r==`function`&&r(i);var a=i;export{a as default};
|
||||
@@ -1 +0,0 @@
|
||||
var e={};export{e as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{t as e}from"./createLucideIcon-KbkxXQD8.js";var t=e(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]);export{t};
|
||||
@@ -1 +0,0 @@
|
||||
import{D as e,E as t,G as n,H as r,S as i,Tt as a,it as o}from"./iconify-DYZHDLa8.js";import{t as s}from"./use-sidebar-DLbHg08t.js";import{n as c,r as l,t as u}from"./global-layout-BGXP2p6j.js";var d=e({__name:`settings-layout`,setup(e){let{settingsNavItems:d}=s();return(e,s)=>(r(),i(a(l),{title:`Settings`,description:`Manage your store settings.`},{default:o(()=>[t(a(u),null,{aside:o(()=>[t(a(c),{nav:a(d)},null,8,[`nav`])]),default:o(()=>[n(e.$slots,`default`)]),_:3})]),_:3}))}});export{d as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{At as e,C as t,D as n,E as r,H as i,S as a,T as o,Tt as s,dt as c,gt as l,it as u,p as d,tt as f,w as p,x as m}from"./iconify-DYZHDLa8.js";import{t as h}from"./createLucideIcon-KbkxXQD8.js";import{t as g}from"./eye-off-zNoi7wuS.js";import{a as _}from"./vue-vendor-DjtlKxRy.js";import{q as v}from"./index-Uji7rFqr.js";import{n as y}from"./button-BuRmTYve.js";import{t as b}from"./Label-BOs1t85p.js";import{t as x}from"./Input-DFmzhatB.js";import"./monisuo-admin.api-dPrln-7F.js";import{t as S}from"./use-auth-twSJ0MPL.js";import{t as C}from"./route-block-DB3S2hJK.js";import{t as w}from"./Card-mLutrMBs.js";import{t as T}from"./CardContent-CfcCWlf4.js";import{r as E,t as D}from"./Alert-IVeByMOV.js";import{n as O,r as k,t as A}from"./CardTitle-DKqKY8Zs.js";var j=h(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),M=h(`lock`,[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]),N=h(`user`,[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]),P={class:`min-h-screen flex items-center justify-center bg-gradient-to-br from-background to-muted p-4`},F={class:`flex justify-center mb-4`},I={class:`size-12 rounded-xl bg-primary flex items-center justify-center`},L={class:`space-y-2`},R={class:`relative`},z={class:`space-y-2`},B={class:`relative`},V=n({__name:`sign-in`,setup(n){let h=l(``),C=l(``),V=l(!1),{login:H,loading:U,error:W,isLogin:G}=S(),K=_();f(()=>{s(G)&&K.push(`/monisuo/dashboard`)});async function q(){!h.value||!C.value||await H(h.value,C.value)}return(n,l)=>{let f=A,_=O,S=k,H=b,G=x,K=E,J=D,Y=v,X=y,Z=T,Q=w;return i(),p(`div`,P,[r(Q,{class:`w-full max-w-lg`},{default:u(()=>[r(S,{class:`space-y-1 text-center`},{default:u(()=>[m(`div`,F,[m(`div`,I,[r(s(M),{class:`size-6 text-primary-foreground`})])]),r(f,{class:`text-2xl font-bold`},{default:u(()=>[...l[3]||=[o(` Monisuo Admin `,-1)]]),_:1}),r(_,null,{default:u(()=>[...l[4]||=[o(` 管理员登录 `,-1)]]),_:1})]),_:1}),r(Z,null,{default:u(()=>[m(`form`,{onSubmit:d(q,[`prevent`]),class:`space-y-4`},[m(`div`,L,[r(H,{for:`username`},{default:u(()=>[...l[5]||=[o(`用户名`,-1)]]),_:1}),m(`div`,R,[r(s(N),{class:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),r(G,{id:`username`,modelValue:s(h),"onUpdate:modelValue":l[0]||=e=>c(h)?h.value=e:null,type:`text`,placeholder:`请输入用户名`,class:`pl-9`,disabled:s(U)},null,8,[`modelValue`,`disabled`])])]),m(`div`,z,[r(H,{for:`password`},{default:u(()=>[...l[6]||=[o(`密码`,-1)]]),_:1}),m(`div`,B,[r(s(M),{class:`absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground`}),r(G,{id:`password`,modelValue:s(C),"onUpdate:modelValue":l[1]||=e=>c(C)?C.value=e:null,type:s(V)?`text`:`password`,placeholder:`请输入密码`,class:`pl-9 pr-9`,disabled:s(U)},null,8,[`modelValue`,`type`,`disabled`]),m(`button`,{type:`button`,class:`absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground`,onClick:l[2]||=e=>V.value=!s(V)},[s(V)?(i(),a(s(g),{key:1,class:`size-4`})):(i(),a(s(j),{key:0,class:`size-4`}))])])]),s(W)?(i(),a(J,{key:0,variant:`destructive`},{default:u(()=>[r(K,null,{default:u(()=>[o(e(s(W)),1)]),_:1})]),_:1})):t(``,!0),r(X,{type:`submit`,class:`w-full`,disabled:s(U)},{default:u(()=>[s(U)?(i(),a(Y,{key:0,class:`size-4 mr-2`})):t(``,!0),o(` `+e(s(U)?`登录中...`:`登录`),1)]),_:1},8,[`disabled`])],32)]),_:1})]),_:1})])}}});typeof C==`function`&&C(V);var H=V;export{H as default};
|
||||
1
monisuo-admin/dist/assets/system-CSgi4ZN1.js
vendored
1
monisuo-admin/dist/assets/system-CSgi4ZN1.js
vendored
@@ -1 +0,0 @@
|
||||
import{At as e,C as t,D as n,E as r,H as i,S as a,T as o,Tt as s,b as c,dt as l,et as u,gt as d,h as f,it as p,w as m,x as h}from"./iconify-DYZHDLa8.js";import"./use-sidebar-DLbHg08t.js";import"./vue-vendor-DjtlKxRy.js";import{G as g}from"./index-Uji7rFqr.js";import"./Teleport-BIYegdAM.js";import{n as _}from"./button-BuRmTYve.js";import{t as v}from"./Input-DFmzhatB.js";import{g as y,w as b}from"./monisuo-admin.api-dPrln-7F.js";import"./global-layout-BGXP2p6j.js";import{t as x}from"./settings-layout-C49P92lm.js";var S={class:`space-y-6`},C={key:0,class:`text-muted-foreground`},w={key:1,class:`space-y-4`},T={class:`grid gap-2`},E={class:`flex items-center justify-between`},D={class:`flex gap-2`},O={key:1,class:`text-sm text-muted-foreground bg-muted px-3 py-2 rounded-md`},k=n({__name:`system`,setup(n){let{data:k,isLoading:A}=y(`customer_service_contact`),j=b(),M=c({get:()=>k.value?.data?.value??``,set:e=>{}}),N=d(``),P=d(!1);u(k,e=>{e?.data?.value!==void 0&&(N.value=e.data.value)},{immediate:!0});function F(){N.value=M.value,P.value=!0}function I(){j.mutate({key:`customer_service_contact`,value:N.value,description:`客服联系账号`},{onSuccess:()=>{g.success(`保存成功`),P.value=!1},onError:()=>{g.error(`保存失败`)}})}return(n,c)=>{let u=_,d=v;return i(),a(x,null,{default:p(()=>[h(`div`,S,[c[5]||=h(`div`,null,[h(`h3`,{class:`text-lg font-semibold`},` 客服设置 `),h(`p`,{class:`text-sm text-muted-foreground`},` 配置前端用户可见的客服联系信息(如 Telegram、微信等) `)],-1),s(A)?(i(),m(`div`,C,` 加载中... `)):(i(),m(`div`,w,[h(`div`,T,[h(`div`,E,[c[3]||=h(`label`,{class:`text-sm font-medium`},`客服联系账号`,-1),s(P)?t(``,!0):(i(),a(u,{key:0,variant:`outline`,size:`sm`,onClick:F},{default:p(()=>[...c[2]||=[o(` 编辑 `,-1)]]),_:1}))]),s(P)?(i(),m(f,{key:0},[r(d,{modelValue:s(N),"onUpdate:modelValue":c[0]||=e=>l(N)?N.value=e:null,placeholder:`输入客服联系账号(Telegram/微信等)`},null,8,[`modelValue`]),h(`div`,D,[r(u,{size:`sm`,disabled:s(j).isPending.value,onClick:I},{default:p(()=>[o(e(s(j).isPending.value?`保存中...`:`保存`),1)]),_:1},8,[`disabled`]),r(u,{variant:`outline`,size:`sm`,onClick:c[1]||=e=>P.value=!1},{default:p(()=>[...c[4]||=[o(` 取消 `,-1)]]),_:1})])],64)):(i(),m(`p`,O,e(s(M)||`未设置`),1))])]))])]),_:1})}}});export{k as default};
|
||||
@@ -1 +0,0 @@
|
||||
import{A as e,At as t,D as n,E as r,H as i,T as a,Tt as o,it as s,w as c}from"./iconify-DYZHDLa8.js";import"./vue-vendor-DjtlKxRy.js";import{G as l}from"./index-Uji7rFqr.js";import"./Teleport-BIYegdAM.js";import{n as u}from"./button-BuRmTYve.js";import{a as d,i as f,n as p,r as m,s as h}from"./modal-DDjjVbEC.js";var g=n({__name:`task-delete`,props:{task:{}},setup(n){let g=n;function _(){l(`The following task has been deleted:`,{description:e(`pre`,{class:`mt-2 w-[340px] rounded-md bg-slate-950 p-4`},e(`code`,{class:`text-white`},JSON.stringify(g.task,null,2)))})}return(e,l)=>{let g=u;return i(),c(`div`,null,[r(o(m),null,{default:s(()=>[r(o(p),null,{default:s(()=>[a(` Delete this task: `+t(n.task.id)+` ? `,1)]),_:1}),r(o(d),null,{default:s(()=>[a(` You are about to delete a task with the ID `+t(n.task.id)+`. This action cannot be undone. `,1)]),_:1})]),_:1}),r(o(f),null,{default:s(()=>[r(o(h),{"as-child":``},{default:s(()=>[r(g,{variant:`outline`},{default:s(()=>[...l[0]||=[a(` Cancel `,-1)]]),_:1})]),_:1}),r(o(h),{"as-child":``},{default:s(()=>[r(g,{variant:`destructive`,onClick:_},{default:s(()=>[...l[1]||=[a(` Delete `,-1)]]),_:1})]),_:1})]),_:1})])}}});export{g as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import"./iconify-DYZHDLa8.js";import{t as e}from"./task-resource-dialog-CNnuYfue.js";import"./vue-vendor-DjtlKxRy.js";import"./Teleport-BIYegdAM.js";import"./button-BuRmTYve.js";import"./modal-DDjjVbEC.js";export{e as default};
|
||||
2
monisuo-admin/dist/assets/tasks-C2RDSdwB.js
vendored
2
monisuo-admin/dist/assets/tasks-C2RDSdwB.js
vendored
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{At as e,D as t,E as n,H as r,S as i,T as a,Tt as o,a as s,dt as c,it as l,x as u}from"./iconify-DYZHDLa8.js";import{t as d}from"./createLucideIcon-KbkxXQD8.js";import{f}from"./vue-vendor-DjtlKxRy.js";import{I as p,L as m,R as h}from"./index-Uji7rFqr.js";import{n as g}from"./button-BuRmTYve.js";import{i as _,n as v,r as y,t as b}from"./DropdownMenuTrigger-GJTdpRDr.js";import{n as x,t as S}from"./DropdownMenuLabel-BHmU9FEw.js";import{n as C,t as w}from"./DropdownMenuRadioItem-rRjwCXWS.js";var T=d(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),E=d(`sun-moon`,[[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715`,key:`xlf6rm`}],[`path`,{d:`M16 12a4 4 0 0 0-4-4`,key:`6vsxu`}],[`path`,{d:`m19 5-1.256 1.256`,key:`1yg6a6`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}]]),D=d(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),O=t({__name:`language-change`,setup(t){let{locale:d}=h();function f(){d.value=`en`,m.value=`en`}function v(e){if(typeof e!=`string`||!p.has(e)){f();return}d.value=e,m.value=e}return(t,f)=>{let p=g,m=b,h=S,T=x,E=w,D=C,O=y,k=_;return r(),i(k,null,{default:l(()=>[n(m,{"as-child":``},{default:l(()=>[n(p,{variant:`outline`},{default:l(()=>[n(o(s),{icon:`mdi:translate`,class:`mr-2`}),a(` `+e(t.$t(`language`)),1)]),_:1})]),_:1}),n(O,null,{default:l(()=>[n(h,null,{default:l(()=>[a(e(t.$t(`changeLanguage`)),1)]),_:1}),n(T),n(D,{modelValue:o(d),"onUpdate:modelValue":[f[0]||=e=>c(d)?d.value=e:null,v]},{default:l(()=>[n(E,{value:`en`},{default:l(()=>[n(o(s),{icon:`flag:us-4x3`}),f[1]||=u(`span`,{class:`ml-2`},`English`,-1)]),_:1}),n(E,{value:`zh`},{default:l(()=>[n(o(s),{icon:`flag:cn-4x3`}),f[2]||=u(`span`,{class:`ml-2`},`中文`,-1)]),_:1})]),_:1},8,[`modelValue`])]),_:1})]),_:1})}}}),k=t({__name:`toggle-theme`,setup(e){let t=f();return(e,s)=>{let c=g,d=b,f=v,p=y,m=_;return r(),i(m,null,{default:l(()=>[n(d,{"as-child":``},{default:l(()=>[n(c,{variant:`outline`,size:`icon`},{default:l(()=>[n(o(T),{class:`rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0`}),n(o(D),{class:`absolute rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100`}),s[3]||=u(`span`,{class:`sr-only`},`Toggle theme`,-1)]),_:1})]),_:1}),n(p,{align:`end`},{default:l(()=>[n(f,{onClick:s[0]||=e=>t.value=`light`},{default:l(()=>[n(o(D)),s[4]||=a(` Light `,-1)]),_:1}),n(f,{onClick:s[1]||=e=>t.value=`dark`},{default:l(()=>[n(o(T)),s[5]||=a(` Dark `,-1)]),_:1}),n(f,{onClick:s[2]||=e=>t.value=`auto`},{default:l(()=>[n(o(E)),s[6]||=a(` System `,-1)]),_:1})]),_:1})]),_:1})}}});export{T as a,E as i,O as n,D as r,k as t};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{gt as e}from"./iconify-DYZHDLa8.js";import{N as t,a as n}from"./vue-vendor-DjtlKxRy.js";import{r}from"./useMutation-VMyHxPGH.js";import{P as i}from"./index-Uji7rFqr.js";import{t as a}from"./monisuo-admin.api-dPrln-7F.js";function o(){let o=n(),s=r(),c=i(),{isLogin:l,adminInfo:u}=t(c),d=e(!1),f=e(null),p=a();function m(){c.logout(),s.clear(),o.push({path:`/auth/sign-in`})}function h(){o.push({path:`/monisuo/dashboard`})}async function g(e,t){d.value=!0,f.value=null;try{let n=await p.mutateAsync({username:e,password:t});if(console.log(`Login result:`,n),n.code===`0000`&&n.data){console.log(`Setting token and adminInfo...`),c.setToken(n.data.token),c.setAdminInfo(n.data.adminInfo),console.log(`isLogin after setToken:`,c.isLogin);let e=o.currentRoute.value.query.redirect;console.log(`Redirecting to:`,e||`/monisuo/dashboard`),!e||e.startsWith(`//`)?h():o.push(e)}else console.log(`Login failed:`,n.code,n.msg),f.value=n.msg||`登录失败`}catch(e){console.error(`Login error:`,e),f.value=e.message||e.response?.data?.msg||`网络错误,请稍后重试`}finally{d.value=!1}}return{loading:d,error:f,isLogin:l,adminInfo:u,logout:m,login:g}}export{o as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{b as e,gt as t}from"./iconify-DYZHDLa8.js";import{t as n}from"./createLucideIcon-KbkxXQD8.js";import{t as r}from"./settings-2-S4frxvwx.js";import{P as i}from"./index-Uji7rFqr.js";var a=n(`circle-dollar-sign`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8`,key:`1h4pet`}],[`path`,{d:`M12 18V6`,key:`zqpxq5`}]]),o=n(`coins`,[[`path`,{d:`M13.744 17.736a6 6 0 1 1-7.48-7.48`,key:`bq4yh3`}],[`path`,{d:`M15 6h1v4`,key:`11y1tn`}],[`path`,{d:`m6.134 14.768.866-.5 2 3.464`,key:`17snzx`}],[`circle`,{cx:`16`,cy:`8`,r:`6`,key:`14bfc9`}]]),s=n(`dollar-sign`,[[`line`,{x1:`12`,x2:`12`,y1:`2`,y2:`22`,key:`7eqyqh`}],[`path`,{d:`M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6`,key:`1b0p4s`}]]),c=n(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),l=n(`receipt`,[[`path`,{d:`M12 17V7`,key:`pyj7ub`}],[`path`,{d:`M16 8h-6a2 2 0 0 0 0 4h4a2 2 0 0 1 0 4H8`,key:`1elt7d`}],[`path`,{d:`M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z`,key:`ycz6yz`}]]),u=n(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),d=n(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),f=n(`trending-up`,[[`path`,{d:`M16 7h6v6`,key:`box55l`}],[`path`,{d:`m22 7-8.5 8.5-5-5L2 17`,key:`1t1m79`}]]),p=n(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),m=n(`wallet`,[[`path`,{d:`M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1`,key:`18etb6`}],[`path`,{d:`M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4`,key:`xoc0q4`}]]);function h(){let n=i(),h=e(()=>n.adminInfo?.role??2),g=e(()=>h.value===1),_=[{title:`外观设置`,url:`/settings/appearance`,icon:c},{title:`系统设置`,url:`/settings/system`,icon:r}],v=[{title:`Monisuo 管理`,items:[{title:`数据看板`,url:`/monisuo/dashboard`,icon:s,roles:[1]},{title:`用户管理`,url:`/monisuo/users`,icon:p,roles:[1]},{title:`币种管理`,url:`/monisuo/coins`,icon:o,roles:[1]},{title:`钱包管理`,url:`/monisuo/wallets`,icon:m,roles:[1]},{title:`订单审批`,url:`/monisuo/orders`,icon:l,roles:[1,2]},{title:`财务审批`,url:`/monisuo/finance-orders`,icon:a,roles:[1,3]},{title:`业务分析`,url:`/monisuo/analytics`,icon:f,roles:[1]},{title:`管理员管理`,url:`/monisuo/admins`,icon:d,roles:[1]}]},{title:`Other`,items:[{title:`Settings`,icon:u,items:_}]}];return{navData:e(()=>v.map(e=>({title:e.title,items:e.items.filter(e=>{let t=e.roles;return t?t.includes(h.value):!0})})).filter(e=>e.items.length>0)),otherPages:t([]),settingsNavItems:_,isSuperAdmin:g}}export{h as t};
|
||||
@@ -1 +0,0 @@
|
||||
import{O as e,V as t,b as n,gt as r,wt as i}from"./iconify-DYZHDLa8.js";import{u as a}from"./vue-vendor-DjtlKxRy.js";function o(){let o=e(),s=r(),c=n(()=>l());t(()=>{c.value!==l()&&i(s)});function l(){return s.value&&`$el`in s.value&&[`#text`,`#comment`].includes(s.value.$el.nodeName)?s.value.$el.nextElementSibling:a(s)}let u=Object.assign({},o.exposed),d={};for(let e in o.props)Object.defineProperty(d,e,{enumerable:!0,configurable:!0,get:()=>o.props[e]});if(Object.keys(u).length>0)for(let e in u)Object.defineProperty(d,e,{enumerable:!0,configurable:!0,get:()=>u[e]});Object.defineProperty(d,`$el`,{enumerable:!0,configurable:!0,get:()=>o.vnode.el}),o.exposed=d;function f(e){if(s.value=e,e&&(Object.defineProperty(d,`$el`,{enumerable:!0,configurable:!0,get:()=>e instanceof Element?e:e.$el}),!(e instanceof Element)&&!Object.prototype.hasOwnProperty.call(e,`$el`))){let t=e.$.exposed,n=Object.assign({},d);for(let e in t)Object.defineProperty(n,e,{enumerable:!0,configurable:!0,get:()=>t[e]});o.exposed=n}}return{forwardRef:f,currentRef:s,currentElement:c}}export{o as t};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
import{A as e,At as t,D as n,E as r,H as i,T as a,Tt as o,it as s,w as c}from"./iconify-DYZHDLa8.js";import"./vue-vendor-DjtlKxRy.js";import{G as l}from"./index-Uji7rFqr.js";import"./Teleport-BIYegdAM.js";import{n as u}from"./button-BuRmTYve.js";import{a as d,i as f,n as p,r as m,s as h}from"./modal-DDjjVbEC.js";var g=n({__name:`user-delete`,props:{user:{}},emits:[`remove`],setup(n,{emit:g}){let _=g;function v(){l(`The following task has been deleted:`,{description:e(`pre`,{class:`mt-2 w-[340px] rounded-md bg-slate-950 p-4`},e(`code`,{class:`text-white`},JSON.stringify(n.user,null,2)))}),_(`remove`)}return(e,l)=>{let g=u;return i(),c(`div`,null,[r(o(m),null,{default:s(()=>[r(o(p),null,{default:s(()=>[a(` Delete this user: `+t(n.user.username)+` ? `,1)]),_:1}),r(o(d),null,{default:s(()=>[a(` You are about to delete a user with the ID `+t(n.user.id)+`. This action cannot be undone. `,1)]),_:1})]),_:1}),r(o(f),null,{default:s(()=>[r(o(h),{"as-child":``},{default:s(()=>[r(g,{variant:`outline`},{default:s(()=>[...l[0]||=[a(` Cancel `,-1)]]),_:1})]),_:1}),r(o(h),{"as-child":``},{default:s(()=>[r(g,{variant:`destructive`,onClick:v},{default:s(()=>[...l[1]||=[a(` Delete `,-1)]]),_:1})]),_:1})]),_:1})])}}});export{g as default};
|
||||
@@ -1 +0,0 @@
|
||||
import{A as e,At as t,D as n,E as r,H as i,I as a,Ot as o,T as s,Tt as c,W as l,b as u,h as d,it as f,k as p,mt as m,w as h,x as g}from"./iconify-DYZHDLa8.js";import{a as _,i as v,n as y,r as b,t as x}from"./SelectValue-Dhq6ao6U.js";import{G as S,a as C,d as w,f as T,l as E,p as D,u as O}from"./index-Uji7rFqr.js";import{n as k}from"./button-BuRmTYve.js";import{a as A,n as j,r as M}from"./modal-DDjjVbEC.js";import{a as N,c as P,i as F,l as I,n as L,r as R,s as z,t as B}from"./vee-validate-zod-CSNgsVeg.js";import{t as V}from"./Input-DFmzhatB.js";var H=E([`active`,`inactive`,`invited`,`suspended`]),U=E([`superadmin`,`admin`,`cashier`,`manager`]);O(T({id:D(),firstName:D(),lastName:D(),username:D(),email:D(),phoneNumber:D(),status:H,role:U,createdAt:C(),updatedAt:C()}));var W=T({id:D().optional(),firstName:D().min(1),lastName:D().min(1),username:D().min(1),email:w().min(1),phoneNumber:D().min(1),status:H,role:U}),G={class:`max-h-[500px] overflow-y-auto`},K=n({__name:`user-form`,props:{user:{}},emits:[`close`],setup(n,{emit:u}){let C=u,w=[`superadmin`,`admin`,`cashier`,`manager`],T=[`active`,`inactive`,`invited`,`suspended`],E=m({firstName:n.user?.firstName||``,lastName:n.user?.lastName||``,username:n.user?.username||``,email:n.user?.email||``,phoneNumber:n.user?.phoneNumber||``,status:n.user?.status||`active`,role:n.user?.role||`cashier`}),{handleSubmit:D}=P({validationSchema:B(W),initialValues:E}),O=D(t=>{let r={...t};n.user&&(r.id=n.user.id),S(`You submitted the following values:`,{description:e(`pre`,{class:`mt-2 w-[340px] rounded-md bg-slate-950 p-4`},e(`code`,{class:`text-white`},JSON.stringify(r,null,2)))}),C(`close`)});return(e,n)=>(i(),h(`div`,G,[g(`form`,{class:`space-y-8`,onSubmit:n[0]||=(...e)=>c(O)&&c(O)(...e)},[r(c(z),{name:`firstName`},{default:f(({componentField:e})=>[r(c(F),null,{default:f(()=>[r(c(R),null,{default:f(()=>[...n[1]||=[s(`First Name`,-1)]]),_:1}),r(c(N),null,{default:f(()=>[r(c(V),a({type:`text`},e),null,16)]),_:2},1024),r(c(L))]),_:2},1024)]),_:1}),r(c(z),{name:`lastName`},{default:f(({componentField:e})=>[r(c(F),null,{default:f(()=>[r(c(R),null,{default:f(()=>[...n[2]||=[s(`Last Name`,-1)]]),_:1}),r(c(N),null,{default:f(()=>[r(c(V),a({type:`text`},e),null,16)]),_:2},1024),r(c(L))]),_:2},1024)]),_:1}),r(c(z),{name:`username`},{default:f(({componentField:e})=>[r(c(F),null,{default:f(()=>[r(c(R),null,{default:f(()=>[...n[3]||=[s(`User Name`,-1)]]),_:1}),r(c(N),null,{default:f(()=>[r(c(V),a({type:`text`},e),null,16)]),_:2},1024),r(c(L))]),_:2},1024)]),_:1}),r(c(z),{name:`email`},{default:f(({componentField:e})=>[r(c(F),null,{default:f(()=>[r(c(R),null,{default:f(()=>[...n[4]||=[s(`Email address`,-1)]]),_:1}),r(c(N),null,{default:f(()=>[r(c(V),a({type:`text`},e),null,16)]),_:2},1024),r(c(L))]),_:2},1024)]),_:1}),r(c(z),{name:`phoneNumber`},{default:f(({componentField:e})=>[r(c(F),null,{default:f(()=>[r(c(R),null,{default:f(()=>[...n[5]||=[s(`Phone Number`,-1)]]),_:1}),r(c(N),null,{default:f(()=>[r(c(V),a({type:`text`},e),null,16)]),_:2},1024),r(c(L))]),_:2},1024)]),_:1}),r(c(z),{name:`status`},{default:f(({componentField:e})=>[r(c(F),null,{default:f(()=>[r(c(R),null,{default:f(()=>[...n[6]||=[s(`Status`,-1)]]),_:1}),r(c(N),null,{default:f(()=>[r(c(_),o(p(e)),{default:f(()=>[r(c(N),null,{default:f(()=>[r(c(y),{class:`w-full`},{default:f(()=>[r(c(x),{placeholder:`Select a status`})]),_:1})]),_:1}),r(c(v),null,{default:f(()=>[r(c(I),null,{default:f(()=>[(i(),h(d,null,l(T,e=>r(c(b),{key:e,value:e},{default:f(()=>[s(t(e),1)]),_:2},1032,[`value`])),64))]),_:1})]),_:1})]),_:1},16)]),_:2},1024),r(c(L))]),_:2},1024)]),_:1}),r(c(z),{name:`role`},{default:f(({componentField:e})=>[r(c(F),null,{default:f(()=>[r(c(R),null,{default:f(()=>[...n[7]||=[s(`Role`,-1)]]),_:1}),r(c(N),null,{default:f(()=>[r(c(_),o(p(e)),{default:f(()=>[r(c(N),null,{default:f(()=>[r(c(y),{class:`w-full`},{default:f(()=>[r(c(x),{placeholder:`Select a role`})]),_:1})]),_:1}),r(c(v),null,{default:f(()=>[r(c(I),null,{default:f(()=>[(i(),h(d,null,l(w,e=>r(c(b),{key:e,value:e},{default:f(()=>[s(t(e),1)]),_:2},1032,[`value`])),64))]),_:1})]),_:1})]),_:1},16)]),_:2},1024),r(c(L))]),_:2},1024)]),_:1}),r(c(k),{type:`submit`,class:`w-full`},{default:f(()=>[...n[8]||=[s(` SaveChanges `,-1)]]),_:1})],32)]))}}),q=n({__name:`user-resource`,props:{user:{}},emits:[`close`],setup(e){let n=e,a=u(()=>n.user),o=u(()=>a.value?.id?`Edit User`:`New User`),l=u(()=>a.value?.id?`Edit user ${a.value.username}`:`Create new user`);return(e,n)=>(i(),h(`div`,null,[r(c(M),null,{default:f(()=>[r(c(j),null,{default:f(()=>[s(t(c(o)),1)]),_:1}),r(c(A),null,{default:f(()=>[s(t(c(l)),1)]),_:1})]),_:1}),r(K,{user:c(a),onClose:n[0]||=t=>e.$emit(`close`)},null,8,[`user`])]))}});export{q as t};
|
||||
@@ -1 +0,0 @@
|
||||
import"./iconify-DYZHDLa8.js";import"./vue-vendor-DjtlKxRy.js";import"./Teleport-BIYegdAM.js";import"./button-BuRmTYve.js";import"./modal-DDjjVbEC.js";import{t as e}from"./user-resource-4TUrecRM.js";export{e as default};
|
||||
10
monisuo-admin/dist/assets/users-CzyP-sh3.js
vendored
10
monisuo-admin/dist/assets/users-CzyP-sh3.js
vendored
File diff suppressed because one or more lines are too long
1
monisuo-admin/dist/assets/users-uk3DTdY0.js
vendored
1
monisuo-admin/dist/assets/users-uk3DTdY0.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
14
monisuo-admin/dist/index.html
vendored
14
monisuo-admin/dist/index.html
vendored
@@ -14,13 +14,15 @@
|
||||
name="keywords"
|
||||
content="vue,vue-router,vite,typescript,tailwindcss,shadcn-vue,tanstack-vue-query,tanstack-table,eslint,pinia,pnpm"
|
||||
/>
|
||||
<script type="module" crossorigin src="/assets/index-Uji7rFqr.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-DfpqRhmZ.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Dw2cE7zH.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/iconify-DYZHDLa8.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/vue-vendor-DjtlKxRy.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/ui-vendor-Za4p7XTd.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-KbkxXQD8.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-CUIp_KwK.css">
|
||||
<link rel="modulepreload" crossorigin href="/assets/iconify-DZhaWUcP.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/tanstack-DCA-W282.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/vue-vendor-scK6fGv1.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/axios-CAMzs3B1.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/ui-vendor-DEKg_cPQ.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-Z3H64jz2.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-DRcMemqx.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -81,11 +81,6 @@
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "^7.7.2",
|
||||
"@faker-js/faker": "^10.3.0",
|
||||
"@iconify-json/carbon": "^1.2.20",
|
||||
"@iconify-json/flag": "^1.2.11",
|
||||
"@iconify-json/lucide": "^1.2.100",
|
||||
"@iconify-json/mdi": "^1.2.3",
|
||||
"@iconify-json/simple-icons": "^1.2.74",
|
||||
"@iconify/vue": "^5.0.0",
|
||||
"@tanstack/eslint-plugin-query": "^5.91.4",
|
||||
"@tanstack/vue-query-devtools": "^6.1.5",
|
||||
|
||||
52
monisuo-admin/pnpm-lock.yaml
generated
52
monisuo-admin/pnpm-lock.yaml
generated
@@ -129,21 +129,6 @@ importers:
|
||||
'@faker-js/faker':
|
||||
specifier: ^10.3.0
|
||||
version: 10.3.0
|
||||
'@iconify-json/carbon':
|
||||
specifier: ^1.2.20
|
||||
version: 1.2.20
|
||||
'@iconify-json/flag':
|
||||
specifier: ^1.2.11
|
||||
version: 1.2.11
|
||||
'@iconify-json/lucide':
|
||||
specifier: ^1.2.100
|
||||
version: 1.2.100
|
||||
'@iconify-json/mdi':
|
||||
specifier: ^1.2.3
|
||||
version: 1.2.3
|
||||
'@iconify-json/simple-icons':
|
||||
specifier: ^1.2.74
|
||||
version: 1.2.74
|
||||
'@iconify/vue':
|
||||
specifier: ^5.0.0
|
||||
version: 5.0.0(vue@3.5.30(typescript@5.9.3))
|
||||
@@ -935,21 +920,6 @@ packages:
|
||||
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
|
||||
engines: {node: '>=18.18'}
|
||||
|
||||
'@iconify-json/carbon@1.2.20':
|
||||
resolution: {integrity: sha512-wqyxKEbIRdzGdfCAwQqn8iSfO6jx0m1toZAAQdx1NFjxd6iFl1YY4eKI1woWt7XOxs7s7phMW530kDD867JZGw==}
|
||||
|
||||
'@iconify-json/flag@1.2.11':
|
||||
resolution: {integrity: sha512-yqaID0FXzdXSXBBVi+/huqxrBWc0tySVvOsAmO/Vu/5UW+A3MNAOzXMIUfzA1SEiaZaxUHE9dDo6/wno3zggyw==}
|
||||
|
||||
'@iconify-json/lucide@1.2.100':
|
||||
resolution: {integrity: sha512-vCrhQ/6T530HEMkWOkSyedvMiuQdVU1tMHEs32k4tklJmCmjokH3Dej6ycvfLt7kftBSQ2kPSUiyOpoW3uOF5g==}
|
||||
|
||||
'@iconify-json/mdi@1.2.3':
|
||||
resolution: {integrity: sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg==}
|
||||
|
||||
'@iconify-json/simple-icons@1.2.74':
|
||||
resolution: {integrity: sha512-yqaohfY6jnYjTVpuTkaBQHrWbdUrQyWXhau0r/0EZiNWYXPX/P8WWwl1DoLH5CbvDjjcWQw5J0zADhgCUklOqA==}
|
||||
|
||||
'@iconify/types@2.0.0':
|
||||
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
|
||||
|
||||
@@ -7397,26 +7367,6 @@ snapshots:
|
||||
|
||||
'@humanwhocodes/retry@0.4.3': {}
|
||||
|
||||
'@iconify-json/carbon@1.2.20':
|
||||
dependencies:
|
||||
'@iconify/types': 2.0.0
|
||||
|
||||
'@iconify-json/flag@1.2.11':
|
||||
dependencies:
|
||||
'@iconify/types': 2.0.0
|
||||
|
||||
'@iconify-json/lucide@1.2.100':
|
||||
dependencies:
|
||||
'@iconify/types': 2.0.0
|
||||
|
||||
'@iconify-json/mdi@1.2.3':
|
||||
dependencies:
|
||||
'@iconify/types': 2.0.0
|
||||
|
||||
'@iconify-json/simple-icons@1.2.74':
|
||||
dependencies:
|
||||
'@iconify/types': 2.0.0
|
||||
|
||||
'@iconify/types@2.0.0': {}
|
||||
|
||||
'@iconify/utils@3.1.0':
|
||||
@@ -12624,7 +12574,7 @@ snapshots:
|
||||
pkg-types@1.3.1:
|
||||
dependencies:
|
||||
confbox: 0.1.8
|
||||
mlly: 1.8.0
|
||||
mlly: 1.8.1
|
||||
pathe: 2.0.3
|
||||
|
||||
pkg-types@2.3.0:
|
||||
|
||||
@@ -12,7 +12,7 @@ const { contentLayout } = storeToRefs(themeStore)
|
||||
<template>
|
||||
<div class="space-y-1.5 pt-6">
|
||||
<UiLabel for="radius" class="text-xs">
|
||||
Content Layout
|
||||
内容布局
|
||||
</UiLabel>
|
||||
<div class="grid grid-cols-2 gap-2 py-1.5">
|
||||
<UiButton
|
||||
|
||||
@@ -4,6 +4,17 @@ import { storeToRefs } from 'pinia'
|
||||
import { THEME_PRIMARY_COLORS, THEMES } from '@/constants/themes'
|
||||
import { useThemeStore } from '@/stores/theme'
|
||||
|
||||
const THEME_NAMES: Record<string, string> = {
|
||||
zinc: '灰',
|
||||
red: '红',
|
||||
rose: '玫红',
|
||||
orange: '橙',
|
||||
green: '绿',
|
||||
blue: '蓝',
|
||||
yellow: '黄',
|
||||
violet: '紫',
|
||||
}
|
||||
|
||||
const themeStore = useThemeStore()
|
||||
const { setTheme } = themeStore
|
||||
const { theme: t } = storeToRefs(themeStore)
|
||||
@@ -17,7 +28,7 @@ watchEffect(() => {
|
||||
<template>
|
||||
<div class="space-y-1.5 pt-6">
|
||||
<UiLabel for="radius" class="text-xs">
|
||||
Color
|
||||
颜色
|
||||
</UiLabel>
|
||||
<div class="grid grid-cols-2 gap-2 py-1.5">
|
||||
<UiButton
|
||||
@@ -33,7 +44,7 @@ watchEffect(() => {
|
||||
}"
|
||||
class="size-2 rounded-full bg-(--theme-primary)"
|
||||
/>
|
||||
<span class="text-xs">{{ theme.theme[0].toUpperCase() }}{{ theme.theme.slice(1) }}</span>
|
||||
<span class="text-xs">{{ THEME_NAMES[theme.theme] ?? theme.theme }}</span>
|
||||
</UiButton>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,7 +16,7 @@ watchEffect(() => {
|
||||
<template>
|
||||
<div class="space-y-1.5 pt-6">
|
||||
<UiLabel for="radius" class="text-xs">
|
||||
Radius
|
||||
圆角
|
||||
</UiLabel>
|
||||
<div class="grid grid-cols-5 gap-2 py-1.5">
|
||||
<UiButton
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
<template>
|
||||
<div class="grid space-y-1">
|
||||
<h1 class="font-semibold text-md text-foreground">
|
||||
Customize
|
||||
主题定制
|
||||
</h1>
|
||||
<p class="text-xs text-muted-foreground">
|
||||
Pick a style and color for your components.
|
||||
选择组件样式和颜色。
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -24,7 +24,7 @@ function setColorMode(colorMode: BasicColorSchema) {
|
||||
<template>
|
||||
<div class="space-y-1.5 pt-6">
|
||||
<UiLabel for="radius" class="text-xs">
|
||||
Color Mode
|
||||
颜色模式
|
||||
</UiLabel>
|
||||
<div class="grid grid-cols-3 gap-2 py-1.5">
|
||||
<UiButton
|
||||
@@ -35,7 +35,7 @@ function setColorMode(colorMode: BasicColorSchema) {
|
||||
@click="setColorMode(item.colorMode)"
|
||||
>
|
||||
<component :is="item.icon" />
|
||||
<span class="text-xs">{{ item.colorMode }}</span>
|
||||
<span class="text-xs">{{ item.colorMode === 'light' ? '浅色' : item.colorMode === 'dark' ? '深色' : '自动' }}</span>
|
||||
</UiButton>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,29 +1,16 @@
|
||||
<script lang="ts" setup>
|
||||
import { cn } from '@/lib/utils'
|
||||
|
||||
import type { LayoutHeaderProps } from './types'
|
||||
|
||||
defineProps<LayoutHeaderProps>()
|
||||
defineProps<{ sticky?: boolean }>()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<header
|
||||
:class="cn(
|
||||
'flex flex-col md:flex-row gap-2 justify-between py-2',
|
||||
'flex items-center justify-end gap-2',
|
||||
sticky ? 'sticky top-0 z-40 bg-background' : '',
|
||||
)"
|
||||
>
|
||||
<main>
|
||||
<h1 class="text-2xl font-bold">
|
||||
{{ title }}
|
||||
</h1>
|
||||
<p v-if="description" class="text-muted-foreground">
|
||||
{{ description }}
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<aside class="flex items-center gap-2 flex-wrap">
|
||||
<slot name="actions" />
|
||||
</aside>
|
||||
<slot name="actions" />
|
||||
</header>
|
||||
</template>
|
||||
|
||||
@@ -1,24 +1,18 @@
|
||||
<script lang="ts" setup>
|
||||
import type { LayoutHeaderProps } from './types'
|
||||
|
||||
import BasicHeader from './basic-header.vue'
|
||||
|
||||
defineProps<LayoutHeaderProps>()
|
||||
defineProps<{ sticky?: boolean }>()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<main>
|
||||
<BasicHeader
|
||||
:title="title"
|
||||
:description="description"
|
||||
:sticky="sticky"
|
||||
>
|
||||
<BasicHeader :sticky="sticky">
|
||||
<template #actions>
|
||||
<slot name="actions" />
|
||||
</template>
|
||||
</BasicHeader>
|
||||
|
||||
<main class="py-4">
|
||||
<main>
|
||||
<slot />
|
||||
</main>
|
||||
</main>
|
||||
|
||||
@@ -1,11 +1,5 @@
|
||||
import type { Component } from 'vue'
|
||||
|
||||
export interface LayoutHeaderProps {
|
||||
title: string
|
||||
description: string
|
||||
sticky?: boolean
|
||||
}
|
||||
|
||||
export interface TwoColAsideNavItem {
|
||||
title: string
|
||||
url: string
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { CircleDollarSign, Coins, DollarSign, Palette, Receipt, Settings, Settings2, ShieldCheck, TrendingUp, Users, Wallet } from 'lucide-vue-next'
|
||||
import { CircleDollarSign, Coins, DollarSign, Palette, Receipt, Settings, Settings2, ShieldCheck, Ticket, TrendingUp, Users, Wallet } from 'lucide-vue-next'
|
||||
|
||||
import type { NavGroup } from '@/components/app-sidebar/types'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
@@ -23,14 +23,15 @@ export function useSidebar() {
|
||||
{ title: '钱包管理', url: '/monisuo/wallets', icon: Wallet, roles: [1] },
|
||||
{ title: '订单审批', url: '/monisuo/orders', icon: Receipt, roles: [1, 2] },
|
||||
{ title: '财务审批', url: '/monisuo/finance-orders', icon: CircleDollarSign, roles: [1, 3] },
|
||||
{ title: '交易码管理', url: '/monisuo/trade-codes', icon: Ticket, roles: [1, 2] },
|
||||
{ title: '业务分析', url: '/monisuo/analytics', icon: TrendingUp, roles: [1] },
|
||||
{ title: '管理员管理', url: '/monisuo/admins', icon: ShieldCheck, roles: [1] },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Other',
|
||||
title: '系统',
|
||||
items: [
|
||||
{ title: 'Settings', icon: Settings, items: settingsNavItems },
|
||||
{ title: '设置', icon: Settings, items: settingsNavItems },
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
@@ -19,6 +19,6 @@ export const RADIUS = [0, 0.25, 0.5, 0.75, 1] as const
|
||||
|
||||
export type ContentLayout = 'full' | 'centered'
|
||||
export const CONTENT_LAYOUTS = [
|
||||
{ label: 'Full', value: 'full', icon: UnfoldHorizontal },
|
||||
{ label: 'Centered', value: 'centered', icon: MoveHorizontal },
|
||||
{ label: '全宽', value: 'full', icon: UnfoldHorizontal },
|
||||
{ label: '居中', value: 'centered', icon: MoveHorizontal },
|
||||
] as const
|
||||
|
||||
@@ -3,9 +3,7 @@ import { useCookies } from '@vueuse/integrations/useCookies'
|
||||
import { storeToRefs } from 'pinia'
|
||||
|
||||
import AppSidebar from '@/components/app-sidebar/index.vue'
|
||||
import CommandMenuPanel from '@/components/command-menu-panel/index.vue'
|
||||
import ThemePopover from '@/components/custom-theme/theme-popover.vue'
|
||||
import LanguageChange from '@/components/language-change.vue'
|
||||
import ToggleTheme from '@/components/toggle-theme.vue'
|
||||
import { SIDEBAR_COOKIE_NAME } from '@/components/ui/sidebar/utils'
|
||||
import { cn } from '@/lib/utils'
|
||||
@@ -21,14 +19,11 @@ const { contentLayout } = storeToRefs(themeStore)
|
||||
<AppSidebar />
|
||||
<UiSidebarInset class="w-full max-w-full peer-data-[state=collapsed]:w-[calc(100%-var(--sidebar-width-icon)-1rem)] peer-data-[state=expanded]:w-[calc(100%-var(--sidebar-width))]">
|
||||
<header
|
||||
class="flex items-center gap-3 sm:gap-4 h-16 p-4 shrink-0 transition-[width,height] ease-linear"
|
||||
class="flex items-center gap-3 sm:gap-4 h-12 p-4 shrink-0 transition-[width,height] ease-linear"
|
||||
>
|
||||
<UiSidebarTrigger class="-ml-1" />
|
||||
<UiSeparator orientation="vertical" class="h-6" />
|
||||
<CommandMenuPanel />
|
||||
<div class="flex-1" />
|
||||
<div class="ml-auto flex items-center space-x-4">
|
||||
<LanguageChange />
|
||||
<ToggleTheme />
|
||||
<ThemePopover />
|
||||
</div>
|
||||
|
||||
@@ -1,20 +1,8 @@
|
||||
import { createApp } from 'vue'
|
||||
import { addCollection } from '@iconify/vue'
|
||||
|
||||
import App from './App.vue'
|
||||
import { setupPlugins } from './plugins'
|
||||
|
||||
// 使用本地图标数据,避免远程 API 调用
|
||||
import { icons as mdiIcons } from '@iconify-json/mdi'
|
||||
import { icons as lucideIcons } from '@iconify-json/lucide'
|
||||
import { icons as flagIcons } from '@iconify-json/flag'
|
||||
import { icons as carbonIcons } from '@iconify-json/carbon'
|
||||
|
||||
addCollection(mdiIcons)
|
||||
addCollection(lucideIcons)
|
||||
addCollection(flagIcons)
|
||||
addCollection(carbonIcons)
|
||||
|
||||
import '@/assets/index.css'
|
||||
import '@/assets/scrollbar.css'
|
||||
import '@/assets/themes.css'
|
||||
|
||||
@@ -1,273 +0,0 @@
|
||||
<script setup lang="ts">
|
||||
import { VisArea, VisAxis, VisLine, VisXYContainer } from '@unovis/vue'
|
||||
|
||||
import type { ChartConfig } from '@/components/ui/chart'
|
||||
|
||||
import {
|
||||
Card,
|
||||
CardContent,
|
||||
CardDescription,
|
||||
CardHeader,
|
||||
CardTitle,
|
||||
} from '@/components/ui/card'
|
||||
import {
|
||||
|
||||
ChartContainer,
|
||||
ChartCrosshair,
|
||||
ChartLegendContent,
|
||||
ChartTooltip,
|
||||
ChartTooltipContent,
|
||||
componentToString,
|
||||
} from '@/components/ui/chart'
|
||||
import {
|
||||
Select,
|
||||
SelectContent,
|
||||
SelectItem,
|
||||
SelectTrigger,
|
||||
SelectValue,
|
||||
} from '@/components/ui/select'
|
||||
|
||||
const chartData = [
|
||||
{ date: new Date('2024-04-01'), desktop: 222, mobile: 150 },
|
||||
{ date: new Date('2024-04-02'), desktop: 97, mobile: 180 },
|
||||
{ date: new Date('2024-04-03'), desktop: 167, mobile: 120 },
|
||||
{ date: new Date('2024-04-04'), desktop: 242, mobile: 260 },
|
||||
{ date: new Date('2024-04-05'), desktop: 373, mobile: 290 },
|
||||
{ date: new Date('2024-04-06'), desktop: 301, mobile: 340 },
|
||||
{ date: new Date('2024-04-07'), desktop: 245, mobile: 180 },
|
||||
{ date: new Date('2024-04-08'), desktop: 409, mobile: 320 },
|
||||
{ date: new Date('2024-04-09'), desktop: 59, mobile: 110 },
|
||||
{ date: new Date('2024-04-10'), desktop: 261, mobile: 190 },
|
||||
{ date: new Date('2024-04-11'), desktop: 327, mobile: 350 },
|
||||
{ date: new Date('2024-04-12'), desktop: 292, mobile: 210 },
|
||||
{ date: new Date('2024-04-13'), desktop: 342, mobile: 380 },
|
||||
{ date: new Date('2024-04-14'), desktop: 137, mobile: 220 },
|
||||
{ date: new Date('2024-04-15'), desktop: 120, mobile: 170 },
|
||||
{ date: new Date('2024-04-16'), desktop: 138, mobile: 190 },
|
||||
{ date: new Date('2024-04-17'), desktop: 446, mobile: 360 },
|
||||
{ date: new Date('2024-04-18'), desktop: 364, mobile: 410 },
|
||||
{ date: new Date('2024-04-19'), desktop: 243, mobile: 180 },
|
||||
{ date: new Date('2024-04-20'), desktop: 89, mobile: 150 },
|
||||
{ date: new Date('2024-04-21'), desktop: 137, mobile: 200 },
|
||||
{ date: new Date('2024-04-22'), desktop: 224, mobile: 170 },
|
||||
{ date: new Date('2024-04-23'), desktop: 138, mobile: 230 },
|
||||
{ date: new Date('2024-04-24'), desktop: 387, mobile: 290 },
|
||||
{ date: new Date('2024-04-25'), desktop: 215, mobile: 250 },
|
||||
{ date: new Date('2024-04-26'), desktop: 75, mobile: 130 },
|
||||
{ date: new Date('2024-04-27'), desktop: 383, mobile: 420 },
|
||||
{ date: new Date('2024-04-28'), desktop: 122, mobile: 180 },
|
||||
{ date: new Date('2024-04-29'), desktop: 315, mobile: 240 },
|
||||
{ date: new Date('2024-04-30'), desktop: 454, mobile: 380 },
|
||||
{ date: new Date('2024-05-01'), desktop: 165, mobile: 220 },
|
||||
{ date: new Date('2024-05-02'), desktop: 293, mobile: 310 },
|
||||
{ date: new Date('2024-05-03'), desktop: 247, mobile: 190 },
|
||||
{ date: new Date('2024-05-04'), desktop: 385, mobile: 420 },
|
||||
{ date: new Date('2024-05-05'), desktop: 481, mobile: 390 },
|
||||
{ date: new Date('2024-05-06'), desktop: 498, mobile: 520 },
|
||||
{ date: new Date('2024-05-07'), desktop: 388, mobile: 300 },
|
||||
{ date: new Date('2024-05-08'), desktop: 149, mobile: 210 },
|
||||
{ date: new Date('2024-05-09'), desktop: 227, mobile: 180 },
|
||||
{ date: new Date('2024-05-10'), desktop: 293, mobile: 330 },
|
||||
{ date: new Date('2024-05-11'), desktop: 335, mobile: 270 },
|
||||
{ date: new Date('2024-05-12'), desktop: 197, mobile: 240 },
|
||||
{ date: new Date('2024-05-13'), desktop: 197, mobile: 160 },
|
||||
{ date: new Date('2024-05-14'), desktop: 448, mobile: 490 },
|
||||
{ date: new Date('2024-05-15'), desktop: 473, mobile: 380 },
|
||||
{ date: new Date('2024-05-16'), desktop: 338, mobile: 400 },
|
||||
{ date: new Date('2024-05-17'), desktop: 499, mobile: 420 },
|
||||
{ date: new Date('2024-05-18'), desktop: 315, mobile: 350 },
|
||||
{ date: new Date('2024-05-19'), desktop: 235, mobile: 180 },
|
||||
{ date: new Date('2024-05-20'), desktop: 177, mobile: 230 },
|
||||
{ date: new Date('2024-05-21'), desktop: 82, mobile: 140 },
|
||||
{ date: new Date('2024-05-22'), desktop: 81, mobile: 120 },
|
||||
{ date: new Date('2024-05-23'), desktop: 252, mobile: 290 },
|
||||
{ date: new Date('2024-05-24'), desktop: 294, mobile: 220 },
|
||||
{ date: new Date('2024-05-25'), desktop: 201, mobile: 250 },
|
||||
{ date: new Date('2024-05-26'), desktop: 213, mobile: 170 },
|
||||
{ date: new Date('2024-05-27'), desktop: 420, mobile: 460 },
|
||||
{ date: new Date('2024-05-28'), desktop: 233, mobile: 190 },
|
||||
{ date: new Date('2024-05-29'), desktop: 78, mobile: 130 },
|
||||
{ date: new Date('2024-05-30'), desktop: 340, mobile: 280 },
|
||||
{ date: new Date('2024-05-31'), desktop: 178, mobile: 230 },
|
||||
{ date: new Date('2024-06-01'), desktop: 178, mobile: 200 },
|
||||
{ date: new Date('2024-06-02'), desktop: 470, mobile: 410 },
|
||||
{ date: new Date('2024-06-03'), desktop: 103, mobile: 160 },
|
||||
{ date: new Date('2024-06-04'), desktop: 439, mobile: 380 },
|
||||
{ date: new Date('2024-06-05'), desktop: 88, mobile: 140 },
|
||||
{ date: new Date('2024-06-06'), desktop: 294, mobile: 250 },
|
||||
{ date: new Date('2024-06-07'), desktop: 323, mobile: 370 },
|
||||
{ date: new Date('2024-06-08'), desktop: 385, mobile: 320 },
|
||||
{ date: new Date('2024-06-09'), desktop: 438, mobile: 480 },
|
||||
{ date: new Date('2024-06-10'), desktop: 155, mobile: 200 },
|
||||
{ date: new Date('2024-06-11'), desktop: 92, mobile: 150 },
|
||||
{ date: new Date('2024-06-12'), desktop: 492, mobile: 420 },
|
||||
{ date: new Date('2024-06-13'), desktop: 81, mobile: 130 },
|
||||
{ date: new Date('2024-06-14'), desktop: 426, mobile: 380 },
|
||||
{ date: new Date('2024-06-15'), desktop: 307, mobile: 350 },
|
||||
{ date: new Date('2024-06-16'), desktop: 371, mobile: 310 },
|
||||
{ date: new Date('2024-06-17'), desktop: 475, mobile: 520 },
|
||||
{ date: new Date('2024-06-18'), desktop: 107, mobile: 170 },
|
||||
{ date: new Date('2024-06-19'), desktop: 341, mobile: 290 },
|
||||
{ date: new Date('2024-06-20'), desktop: 408, mobile: 450 },
|
||||
{ date: new Date('2024-06-21'), desktop: 169, mobile: 210 },
|
||||
{ date: new Date('2024-06-22'), desktop: 317, mobile: 270 },
|
||||
{ date: new Date('2024-06-23'), desktop: 480, mobile: 530 },
|
||||
{ date: new Date('2024-06-24'), desktop: 132, mobile: 180 },
|
||||
{ date: new Date('2024-06-25'), desktop: 141, mobile: 190 },
|
||||
{ date: new Date('2024-06-26'), desktop: 434, mobile: 380 },
|
||||
{ date: new Date('2024-06-27'), desktop: 448, mobile: 490 },
|
||||
{ date: new Date('2024-06-28'), desktop: 149, mobile: 200 },
|
||||
{ date: new Date('2024-06-29'), desktop: 103, mobile: 160 },
|
||||
{ date: new Date('2024-06-30'), desktop: 446, mobile: 400 },
|
||||
]
|
||||
type Data = typeof chartData[number]
|
||||
|
||||
const chartConfig = {
|
||||
// visitors: {
|
||||
// label: 'Visitors',
|
||||
// },
|
||||
mobile: {
|
||||
label: 'Mobile',
|
||||
color: 'var(--chart-2)',
|
||||
},
|
||||
desktop: {
|
||||
label: 'Desktop',
|
||||
color: 'var(--chart-1)',
|
||||
},
|
||||
} satisfies ChartConfig
|
||||
|
||||
const svgDefs = `
|
||||
<linearGradient id="fillDesktop" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop
|
||||
offset="5%"
|
||||
stop-color="var(--color-desktop)"
|
||||
stop-opacity="0.8"
|
||||
/>
|
||||
<stop
|
||||
offset="95%"
|
||||
stop-color="var(--color-desktop)"
|
||||
stop-opacity="0.1"
|
||||
/>
|
||||
</linearGradient>
|
||||
<linearGradient id="fillMobile" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop
|
||||
offset="5%"
|
||||
stop-color="var(--color-mobile)"
|
||||
stop-opacity="0.8"
|
||||
/>
|
||||
<stop
|
||||
offset="95%"
|
||||
stop-color="var(--color-mobile)"
|
||||
stop-opacity="0.1"
|
||||
/>
|
||||
</linearGradient>
|
||||
`
|
||||
|
||||
const timeRange = ref('90d')
|
||||
const filterRange = computed(() => {
|
||||
return chartData.filter((item) => {
|
||||
const date = new Date(item.date)
|
||||
const referenceDate = new Date('2024-06-30')
|
||||
let daysToSubtract = 90
|
||||
if (timeRange.value === '30d') {
|
||||
daysToSubtract = 30
|
||||
}
|
||||
else if (timeRange.value === '7d') {
|
||||
daysToSubtract = 7
|
||||
}
|
||||
const startDate = new Date(referenceDate)
|
||||
startDate.setDate(startDate.getDate() - daysToSubtract)
|
||||
return date >= startDate
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Card class="pt-0">
|
||||
<CardHeader class="flex items-center gap-2 space-y-0 border-b py-5 sm:flex-row">
|
||||
<div class="grid flex-1 gap-1">
|
||||
<CardTitle>Area Chart - Interactive</CardTitle>
|
||||
<CardDescription>
|
||||
Showing total visitors for the last 3 months
|
||||
</CardDescription>
|
||||
</div>
|
||||
<Select v-model="timeRange">
|
||||
<SelectTrigger
|
||||
class="hidden w-[160px] rounded-lg sm:ml-auto sm:flex"
|
||||
aria-label="Select a value"
|
||||
>
|
||||
<SelectValue placeholder="Last 3 months" />
|
||||
</SelectTrigger>
|
||||
<SelectContent class="rounded-xl">
|
||||
<SelectItem value="90d" class="rounded-lg">
|
||||
Last 3 months
|
||||
</SelectItem>
|
||||
<SelectItem value="30d" class="rounded-lg">
|
||||
Last 30 days
|
||||
</SelectItem>
|
||||
<SelectItem value="7d" class="rounded-lg">
|
||||
Last 7 days
|
||||
</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</CardHeader>
|
||||
<CardContent class="px-2 pt-4 sm:px-6 sm:pt-6 pb-4">
|
||||
<ChartContainer :config="chartConfig" class="aspect-auto h-[250px] w-full" :cursor="false">
|
||||
<VisXYContainer
|
||||
:data="filterRange"
|
||||
:svg-defs="svgDefs"
|
||||
:margin="{ left: -40 }"
|
||||
:y-domain="[0, 1200]"
|
||||
>
|
||||
<VisArea
|
||||
:x="(d: Data) => d.date"
|
||||
:y="[(d: Data) => d.mobile, (d: Data) => d.desktop]"
|
||||
:color="(_d: Data, i: number) => ['url(#fillMobile)', 'url(#fillDesktop)'][i]"
|
||||
:opacity="0.6"
|
||||
/>
|
||||
<VisLine
|
||||
:x="(d: Data) => d.date"
|
||||
:y="[(d: Data) => d.mobile, (d: Data) => d.mobile + d.desktop]"
|
||||
:color="(_d: Data, i: number) => [chartConfig.mobile.color, chartConfig.desktop.color][i]"
|
||||
:line-width="1"
|
||||
/>
|
||||
<VisAxis
|
||||
type="x"
|
||||
:x="(d: Data) => d.date"
|
||||
:tick-line="false"
|
||||
:domain-line="false"
|
||||
:grid-line="false"
|
||||
:num-ticks="6"
|
||||
:tick-format="(d: number, _index: number) => {
|
||||
const date = new Date(d)
|
||||
return date.toLocaleDateString('en-US', {
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
})
|
||||
}"
|
||||
/>
|
||||
<VisAxis
|
||||
type="y"
|
||||
:num-ticks="3"
|
||||
:tick-line="false"
|
||||
:domain-line="false"
|
||||
/>
|
||||
<ChartTooltip />
|
||||
<ChartCrosshair
|
||||
:template="componentToString(chartConfig, ChartTooltipContent, {
|
||||
labelFormatter: (d) => {
|
||||
return new Date(d).toLocaleDateString('en-US', {
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
})
|
||||
},
|
||||
})"
|
||||
:color="(_d: Data, i: number) => [chartConfig.mobile.color, chartConfig.desktop.color][i % 2]"
|
||||
/>
|
||||
</VisXYContainer>
|
||||
|
||||
<ChartLegendContent />
|
||||
</ChartContainer>
|
||||
</CardContent>
|
||||
</Card>
|
||||
</template>
|
||||
@@ -1,135 +0,0 @@
|
||||
<script lang="ts" setup>
|
||||
import OverviewChart from './overview-chart.vue'
|
||||
import RecentSales from './recent-sales.vue'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
|
||||
<UiCard>
|
||||
<UiCardHeader class="flex flex-row items-center justify-between pb-2 space-y-0">
|
||||
<UiCardTitle class="text-sm font-medium">
|
||||
Total Revenue
|
||||
</UiCardTitle>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
strokeWidth="2"
|
||||
class="size-4 text-muted-foreground"
|
||||
>
|
||||
<path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" />
|
||||
</svg>
|
||||
</UiCardHeader>
|
||||
<UiCardContent>
|
||||
<div class="text-2xl font-bold">
|
||||
$45,231.89
|
||||
</div>
|
||||
<p class="text-xs text-muted-foreground">
|
||||
+20.1% from last month
|
||||
</p>
|
||||
</UiCardContent>
|
||||
</UiCard>
|
||||
<UiCard>
|
||||
<UiCardHeader class="flex flex-row items-center justify-between pb-2 space-y-0">
|
||||
<UiCardTitle class="text-sm font-medium">
|
||||
Subscriptions
|
||||
</UiCardTitle>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
strokeWidth="2"
|
||||
class="size-4 text-muted-foreground"
|
||||
>
|
||||
<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" />
|
||||
<circle cx="9" cy="7" r="4" />
|
||||
<path d="M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75" />
|
||||
</svg>
|
||||
</UiCardHeader>
|
||||
<UiCardContent>
|
||||
<div class="text-2xl font-bold">
|
||||
+2350
|
||||
</div>
|
||||
<p class="text-xs text-muted-foreground">
|
||||
+180.1% from last month
|
||||
</p>
|
||||
</UiCardContent>
|
||||
</UiCard>
|
||||
<UiCard>
|
||||
<UiCardHeader class="flex flex-row items-center justify-between pb-2 space-y-0">
|
||||
<UiCardTitle class="text-sm font-medium">
|
||||
Sales
|
||||
</UiCardTitle>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
strokeWidth="2"
|
||||
class="size-4 text-muted-foreground"
|
||||
>
|
||||
<rect width="20" height="14" x="2" y="5" rx="2" />
|
||||
<path d="M2 10h20" />
|
||||
</svg>
|
||||
</UiCardHeader>
|
||||
<UiCardContent>
|
||||
<div class="text-2xl font-bold">
|
||||
+12,234
|
||||
</div>
|
||||
<p class="text-xs text-muted-foreground">
|
||||
+19% from last month
|
||||
</p>
|
||||
</UiCardContent>
|
||||
</UiCard>
|
||||
<UiCard>
|
||||
<UiCardHeader class="flex flex-row items-center justify-between pb-2 space-y-0">
|
||||
<UiCardTitle class="text-sm font-medium">
|
||||
Active Now
|
||||
</UiCardTitle>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
strokeWidth="2"
|
||||
class="size-4 text-muted-foreground"
|
||||
>
|
||||
<path d="M22 12h-4l-3 9L9 3l-3 9H2" />
|
||||
</svg>
|
||||
</UiCardHeader>
|
||||
<UiCardContent>
|
||||
<div class="text-2xl font-bold">
|
||||
+573
|
||||
</div>
|
||||
<p class="text-xs text-muted-foreground">
|
||||
+201 since last hour
|
||||
</p>
|
||||
</UiCardContent>
|
||||
</UiCard>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 gap-4 lg:grid-cols-7">
|
||||
<OverviewChart class="col-span-1 lg:col-span-4" />
|
||||
<UiCard class="col-span-1 lg:col-span-3">
|
||||
<UiCardHeader>
|
||||
<UiCardTitle>Recent Sales</UiCardTitle>
|
||||
<UiCardDescription>
|
||||
You made 265 sales this month.
|
||||
</UiCardDescription>
|
||||
</UiCardHeader>
|
||||
<UiCardContent>
|
||||
<RecentSales />
|
||||
</UiCardContent>
|
||||
</UiCard>
|
||||
</div>
|
||||
</template>
|
||||
@@ -1,42 +0,0 @@
|
||||
<script lang="ts" setup>
|
||||
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'
|
||||
|
||||
interface User {
|
||||
avatar: string
|
||||
name: string
|
||||
email: string
|
||||
amount: string
|
||||
}
|
||||
|
||||
const list = ref<User[]>([
|
||||
{ avatar: '', name: 'Olivia Martin', email: 'olivia.martin@email.com', amount: '$1,999.00' },
|
||||
{ avatar: '', name: 'Jackson Lee', email: 'jackson.lee@email.com', amount: '$39.00' },
|
||||
{ avatar: '', name: 'Isabella Nguyen', email: 'isabella.nguyen@email.com', amount: '$299.00' },
|
||||
{ avatar: '', name: 'William Kim', email: 'will@email.com', amount: '$99.00' },
|
||||
{ avatar: '', name: 'Sofia Davis', email: 'sofia.davis@email.com', amount: '$39.00' },
|
||||
])
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="space-y-8">
|
||||
<div v-for="item in list" :key="item.name" class="flex items-center gap-4">
|
||||
<Avatar class-name="h-9 w-9">
|
||||
<AvatarImage :src="item.avatar" alt="Avatar" />
|
||||
<AvatarFallback>{{ item.name[0].toUpperCase() }}</AvatarFallback>
|
||||
</Avatar>
|
||||
<div class="flex flex-wrap items-center justify-between flex-1">
|
||||
<div class="space-y-1">
|
||||
<p class="text-sm font-medium leading-none">
|
||||
{{ item.name }}
|
||||
</p>
|
||||
<p class="text-sm text-muted-foreground">
|
||||
{{ item.email }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="font-medium">
|
||||
{{ item.amount }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -1,50 +0,0 @@
|
||||
<script lang="ts" setup>
|
||||
import { toast } from 'vue-sonner'
|
||||
|
||||
import { BasicPage } from '@/components/global-layout'
|
||||
import { Button } from '@/components/ui/button'
|
||||
|
||||
import OverviewContent from './components/overview-content.vue'
|
||||
|
||||
const tabs = ref([
|
||||
{ name: 'Overview', value: 'overview' },
|
||||
{ name: 'Analytics', value: 'analytics', disabled: true },
|
||||
{ name: 'Reports', value: 'reports', disabled: true },
|
||||
{ name: 'Notifications', value: 'notifications', disabled: true },
|
||||
])
|
||||
|
||||
const activeTab = ref(tabs.value[0].value)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<BasicPage
|
||||
title="workspace"
|
||||
description="workspace description"
|
||||
sticky
|
||||
>
|
||||
<template #actions>
|
||||
<Button
|
||||
@click="() => toast('hello', {
|
||||
position: 'top-center',
|
||||
})"
|
||||
>
|
||||
{{ $t('download') }}
|
||||
</Button>
|
||||
</template>
|
||||
|
||||
<UiTabs :default-value="activeTab" class="w-full">
|
||||
<UiTabsList>
|
||||
<UiTabsTrigger
|
||||
v-for="tab in tabs" :key="tab.value"
|
||||
:value="tab.value"
|
||||
:disabled="tab.disabled"
|
||||
>
|
||||
{{ tab.name }}
|
||||
</UiTabsTrigger>
|
||||
</UiTabsList>
|
||||
<UiTabsContent value="overview" class="space-y-4">
|
||||
<OverviewContent />
|
||||
</UiTabsContent>
|
||||
</UiTabs>
|
||||
</BasicPage>
|
||||
</template>
|
||||
@@ -75,7 +75,7 @@ function roleBadge(role: number) {
|
||||
<BasicPage title="管理员管理" description="管理系统管理员和财务账号">
|
||||
<div class="space-y-4">
|
||||
<div class="flex justify-end">
|
||||
<UiButton @click="openCreateDialog">
|
||||
<UiButton size="sm" @click="openCreateDialog">
|
||||
<Icon icon="lucide:plus" class="size-4 mr-2" />
|
||||
新增账号
|
||||
</UiButton>
|
||||
|
||||
@@ -14,11 +14,10 @@ const statusMutation = useUpdateCoinStatusMutation()
|
||||
const simConfigMutation = useUpdateCoinSimulationConfigMutation()
|
||||
|
||||
const coins = computed(() => {
|
||||
const list = data.value?.data?.list || [] as Coin[]
|
||||
const list: Coin[] = data.value?.data?.list || []
|
||||
return [...list].sort((a, b) => {
|
||||
// 平台代币优先
|
||||
const aPlatform = (a as any).isPlatform === 1 ? 0 : 1
|
||||
const bPlatform = (b as any).isPlatform === 1 ? 0 : 1
|
||||
const aPlatform = a.isPlatform === 1 ? 0 : 1
|
||||
const bPlatform = b.isPlatform === 1 ? 0 : 1
|
||||
if (aPlatform !== bPlatform) return aPlatform - bPlatform
|
||||
return (b.sort || 0) - (a.sort || 0)
|
||||
})
|
||||
@@ -297,7 +296,7 @@ async function saveSimConfig() {
|
||||
<BasicPage title="币种管理" description="管理交易币种">
|
||||
<div class="space-y-4">
|
||||
<div class="flex justify-end">
|
||||
<UiButton @click="openEditDialog()">
|
||||
<UiButton size="sm" @click="openEditDialog()">
|
||||
<Icon icon="lucide:plus" class="size-4 mr-2" />
|
||||
新增币种
|
||||
</UiButton>
|
||||
|
||||
@@ -15,11 +15,15 @@ const filterStatus = ref<number | string>('all')
|
||||
const allPageNum = ref(1)
|
||||
const allPageSize = ref(10)
|
||||
|
||||
const authStore = useAuthStore()
|
||||
const adminRole = computed(() => authStore.adminInfo?.role ?? 2)
|
||||
|
||||
const pendingParams = computed(() => ({
|
||||
pageNum: pageNum.value,
|
||||
pageSize: pageSize.value,
|
||||
type: 2,
|
||||
status: 5,
|
||||
// 财务页只查充值待确认和提现待财务审核
|
||||
// 传 role=3 让后端走财务路由,即使超管也能看到正确的待审核列表
|
||||
role: adminRole.value === 1 ? 3 : undefined,
|
||||
}))
|
||||
|
||||
const allParams = computed(() => ({
|
||||
@@ -103,9 +107,11 @@ async function handleApprove() {
|
||||
|
||||
// 立即更新本地订单状态,防止旧状态仍显示操作按钮
|
||||
if (approveStatus.value === 2) {
|
||||
currentOrder.value.status = 2 // 财务通过→已出款
|
||||
// 充值通过→已完成(3),提现通过→已出款(2)
|
||||
currentOrder.value.status = isDeposit(currentOrder.value) ? 3 : 2
|
||||
} else {
|
||||
currentOrder.value.status = 3 // 驳回
|
||||
// 充值驳回→已驳回(4),提现驳回→已驳回(3)
|
||||
currentOrder.value.status = isDeposit(currentOrder.value) ? 4 : 3
|
||||
}
|
||||
|
||||
toast.success(`订单已${action}`)
|
||||
@@ -147,6 +153,19 @@ function formatAmount(amount: number): string {
|
||||
return amount.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })
|
||||
}
|
||||
|
||||
function isDeposit(order: OrderFund): boolean {
|
||||
return order.type === 1
|
||||
}
|
||||
|
||||
function orderTypeLabel(order: OrderFund): string {
|
||||
return isDeposit(order) ? '充值' : '提现'
|
||||
}
|
||||
|
||||
function pendingBadgeText(order: OrderFund): string {
|
||||
if (isDeposit(order)) return '待确认'
|
||||
return '待财务审核'
|
||||
}
|
||||
|
||||
function copyToClipboard(text: string) {
|
||||
navigator.clipboard.writeText(text)
|
||||
toast.success('已复制到剪贴板')
|
||||
@@ -154,7 +173,7 @@ function copyToClipboard(text: string) {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<BasicPage title="财务审批" description="审批提现订单">
|
||||
<BasicPage title="财务审批" description="审批充值与提现订单">
|
||||
<UiTabs v-model="activeTab" class="space-y-4">
|
||||
<UiTabsList>
|
||||
<UiTabsTrigger value="pending">
|
||||
@@ -174,31 +193,22 @@ function copyToClipboard(text: string) {
|
||||
<UiTableRow>
|
||||
<UiTableHead>订单号</UiTableHead>
|
||||
<UiTableHead>用户</UiTableHead>
|
||||
<UiTableHead class="text-right">
|
||||
提现金额
|
||||
</UiTableHead>
|
||||
<UiTableHead class="text-right">
|
||||
手续费
|
||||
</UiTableHead>
|
||||
<UiTableHead class="text-right">
|
||||
应出款
|
||||
</UiTableHead>
|
||||
<UiTableHead class="hidden xl:table-cell">
|
||||
时间
|
||||
</UiTableHead>
|
||||
<UiTableHead class="text-right">
|
||||
操作
|
||||
</UiTableHead>
|
||||
<UiTableHead>类型</UiTableHead>
|
||||
<UiTableHead class="text-right">金额</UiTableHead>
|
||||
<UiTableHead v-if="pendingOrders.some(o => !isDeposit(o))" class="text-right">手续费</UiTableHead>
|
||||
<UiTableHead v-if="pendingOrders.some(o => !isDeposit(o))" class="text-right">应出款</UiTableHead>
|
||||
<UiTableHead class="hidden xl:table-cell">时间</UiTableHead>
|
||||
<UiTableHead class="text-right">操作</UiTableHead>
|
||||
</UiTableRow>
|
||||
</UiTableHeader>
|
||||
<UiTableBody>
|
||||
<UiTableRow v-if="pendingLoading">
|
||||
<UiTableCell :col-span="7" class="text-center py-8">
|
||||
<UiTableCell :col-span="8" class="text-center py-8">
|
||||
<UiSpinner class="mx-auto" />
|
||||
</UiTableCell>
|
||||
</UiTableRow>
|
||||
<UiTableRow v-else-if="pendingOrders.length === 0">
|
||||
<UiTableCell :col-span="7" class="text-center py-8 text-muted-foreground">
|
||||
<UiTableCell :col-span="8" class="text-center py-8 text-muted-foreground">
|
||||
<Icon icon="lucide:inbox" class="size-8 mx-auto mb-2 opacity-50" />
|
||||
<p>暂无待审核订单</p>
|
||||
</UiTableCell>
|
||||
@@ -208,14 +218,19 @@ function copyToClipboard(text: string) {
|
||||
{{ order.orderNo }}
|
||||
</UiTableCell>
|
||||
<UiTableCell>{{ order.username }}</UiTableCell>
|
||||
<UiTableCell class="text-right font-mono font-medium">
|
||||
{{ formatAmount(order.amount) }}
|
||||
<UiTableCell>
|
||||
<UiBadge :variant="isDeposit(order) ? 'default' : 'destructive'">
|
||||
{{ orderTypeLabel(order) }}
|
||||
</UiBadge>
|
||||
</UiTableCell>
|
||||
<UiTableCell class="text-right font-mono text-muted-foreground">
|
||||
-{{ formatAmount(order.fee || 0) }}
|
||||
<UiTableCell class="text-right font-mono font-medium" :class="isDeposit(order) ? 'text-green-600 dark:text-green-400' : 'text-red-600 dark:text-red-400'">
|
||||
{{ isDeposit(order) ? '+' : '-' }}{{ formatAmount(order.amount) }}
|
||||
</UiTableCell>
|
||||
<UiTableCell class="text-right font-mono font-bold text-green-600">
|
||||
{{ formatAmount(order.receivableAmount || 0) }}
|
||||
<UiTableCell v-if="pendingOrders.some(o => !isDeposit(o))" class="text-right font-mono text-muted-foreground">
|
||||
{{ isDeposit(order) ? '-' : `-${formatAmount(order.fee || 0)}` }}
|
||||
</UiTableCell>
|
||||
<UiTableCell v-if="pendingOrders.some(o => !isDeposit(o))" class="text-right font-mono font-bold text-green-600">
|
||||
{{ isDeposit(order) ? '-' : formatAmount(order.receivableAmount || 0) }}
|
||||
</UiTableCell>
|
||||
<UiTableCell class="hidden xl:table-cell text-muted-foreground text-sm">
|
||||
{{ order.createTime }}
|
||||
@@ -263,24 +278,40 @@ function copyToClipboard(text: string) {
|
||||
{{ order.username }}
|
||||
</div>
|
||||
</div>
|
||||
<UiBadge variant="secondary">
|
||||
待财务审核
|
||||
</UiBadge>
|
||||
<div class="text-right">
|
||||
<UiBadge :variant="isDeposit(order) ? 'default' : 'destructive'" class="mb-1">
|
||||
{{ orderTypeLabel(order) }}
|
||||
</UiBadge>
|
||||
<UiBadge variant="secondary" class="block">
|
||||
{{ pendingBadgeText(order) }}
|
||||
</UiBadge>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-3 pt-3 border-t">
|
||||
<div class="text-xl font-mono font-bold text-red-600 dark:text-red-400">
|
||||
-{{ formatAmount(order.amount) }}
|
||||
<div class="text-xl font-mono font-bold" :class="isDeposit(order) ? 'text-green-600 dark:text-green-400' : 'text-red-600 dark:text-red-400'">
|
||||
{{ isDeposit(order) ? '+' : '-' }}{{ formatAmount(order.amount) }} USDT
|
||||
</div>
|
||||
<div class="text-sm text-muted-foreground mt-1">
|
||||
手续费: -{{ formatAmount(order.fee || 0) }} | 实际到账: {{ formatAmount(order.receivableAmount || 0) }}
|
||||
</div>
|
||||
<div v-if="order.walletAddress" class="mt-2 text-sm">
|
||||
<span class="text-muted-foreground">提现地址:</span>
|
||||
<div class="font-mono text-xs break-all mt-1 flex items-center gap-1">
|
||||
{{ order.walletAddress }}
|
||||
<Icon icon="lucide:copy" class="size-3 cursor-pointer" @click="copyToClipboard(order.walletAddress!)" />
|
||||
<template v-if="!isDeposit(order)">
|
||||
<div class="text-sm text-muted-foreground mt-1">
|
||||
手续费: -{{ formatAmount(order.fee || 0) }} | 应出款: {{ formatAmount(order.receivableAmount || 0) }}
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="order.walletAddress" class="mt-2 text-sm">
|
||||
<span class="text-muted-foreground">提现地址:</span>
|
||||
<div class="font-mono text-xs break-all mt-1 flex items-center gap-1">
|
||||
{{ order.walletAddress }}
|
||||
<Icon icon="lucide:copy" class="size-3 cursor-pointer" @click="copyToClipboard(order.walletAddress!)" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div v-if="order.walletAddress" class="mt-2 text-sm">
|
||||
<span class="text-muted-foreground">充值地址:</span>
|
||||
<div class="font-mono text-xs break-all mt-1 flex items-center gap-1">
|
||||
{{ order.walletAddress }}
|
||||
<Icon icon="lucide:copy" class="size-3 cursor-pointer" @click="copyToClipboard(order.walletAddress!)" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="text-sm text-muted-foreground mt-1">
|
||||
{{ order.createTime }}
|
||||
</div>
|
||||
@@ -292,6 +323,9 @@ function copyToClipboard(text: string) {
|
||||
<UiButton size="sm" variant="destructive" class="flex-1" @click="openApproveDialog(order, 3)">
|
||||
驳回
|
||||
</UiButton>
|
||||
<UiButton size="sm" variant="outline" class="flex-1" @click="viewOrderDetail(order)">
|
||||
详情
|
||||
</UiButton>
|
||||
</div>
|
||||
</UiCard>
|
||||
</template>
|
||||
@@ -412,6 +446,63 @@ function copyToClipboard(text: string) {
|
||||
</UiTable>
|
||||
</UiCard>
|
||||
|
||||
<div class="md:hidden space-y-3">
|
||||
<div v-if="allLoading" class="text-center py-8">
|
||||
<UiSpinner class="mx-auto" />
|
||||
</div>
|
||||
<template v-else-if="allOrders.length > 0">
|
||||
<UiCard v-for="order in allOrders" :key="order.id" class="p-4">
|
||||
<div class="flex items-start justify-between">
|
||||
<div class="space-y-1">
|
||||
<div class="font-mono text-xs text-muted-foreground">
|
||||
{{ order.orderNo }}
|
||||
</div>
|
||||
<div class="font-medium">
|
||||
{{ order.username }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-right">
|
||||
<UiBadge :variant="order.type === 1 ? 'default' : 'destructive'" class="mb-1">
|
||||
{{ order.type === 1 ? '充值' : '提现' }}
|
||||
</UiBadge>
|
||||
<UiBadge variant="outline" class="block">
|
||||
{{ getOrderStatusText(order.type, order.status) }}
|
||||
</UiBadge>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-3 pt-3 border-t">
|
||||
<div class="text-xl font-mono font-bold">
|
||||
{{ formatAmount(order.amount) }}
|
||||
</div>
|
||||
<div v-if="order.walletAddress" class="mt-2 text-sm">
|
||||
<span class="text-muted-foreground">{{ order.type === 1 ? '充值地址' : '提现地址' }}:</span>
|
||||
<div class="font-mono text-xs break-all mt-1 flex items-center gap-1">
|
||||
{{ order.walletAddress }}
|
||||
<Icon icon="lucide:copy" class="size-3 cursor-pointer" @click="copyToClipboard(order.walletAddress!)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-sm text-muted-foreground mt-1">
|
||||
{{ order.createTime }}
|
||||
</div>
|
||||
<div v-if="order.approveAdminName" class="text-xs text-muted-foreground">
|
||||
审批人: {{ order.approveAdminName }}
|
||||
</div>
|
||||
<div v-if="order.rejectReason || order.adminRemark" class="text-sm text-muted-foreground mt-1">
|
||||
备注: {{ order.rejectReason || order.adminRemark }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-3">
|
||||
<UiButton size="sm" variant="outline" class="w-full" @click="viewOrderDetail(order)">
|
||||
查看详情
|
||||
</UiButton>
|
||||
</div>
|
||||
</UiCard>
|
||||
</template>
|
||||
<div v-else class="text-center py-8 text-muted-foreground">
|
||||
暂无数据
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 全部订单分页 -->
|
||||
<div v-if="allTotal > 0" class="flex items-center justify-between gap-4 px-2">
|
||||
<div class="text-sm text-muted-foreground">共 {{ allTotal }} 条记录</div>
|
||||
@@ -432,13 +523,20 @@ function copyToClipboard(text: string) {
|
||||
<UiDialog v-model:open="showDetailDialog">
|
||||
<UiDialogContent class="w-full max-w-md max-h-[90vh] overflow-y-auto">
|
||||
<UiDialogHeader>
|
||||
<UiDialogTitle>提现订单详情</UiDialogTitle>
|
||||
<UiDialogTitle>{{ currentOrder ? `${orderTypeLabel(currentOrder)}订单详情` : '订单详情' }}</UiDialogTitle>
|
||||
</UiDialogHeader>
|
||||
<div v-if="currentOrder" class="space-y-4">
|
||||
<div class="grid grid-cols-3 gap-2 text-sm">
|
||||
<div class="text-muted-foreground">订单号</div>
|
||||
<div class="col-span-2 font-mono">{{ currentOrder.orderNo }}</div>
|
||||
|
||||
<div class="text-muted-foreground">类型</div>
|
||||
<div class="col-span-2">
|
||||
<UiBadge :variant="isDeposit(currentOrder) ? 'default' : 'destructive'">
|
||||
{{ orderTypeLabel(currentOrder) }}
|
||||
</UiBadge>
|
||||
</div>
|
||||
|
||||
<div class="text-muted-foreground">用户</div>
|
||||
<div class="col-span-2 font-medium">
|
||||
{{ currentOrder.username }}
|
||||
@@ -458,107 +556,77 @@ function copyToClipboard(text: string) {
|
||||
</div>
|
||||
<div class="grid grid-cols-3 gap-2 text-center">
|
||||
<div>
|
||||
<div class="text-xs text-muted-foreground">
|
||||
资金余额
|
||||
</div>
|
||||
<div class="font-mono font-bold">
|
||||
{{ formatVal(userStats.fundAccount?.balance) }}
|
||||
</div>
|
||||
<div class="text-xs text-muted-foreground">资金余额</div>
|
||||
<div class="font-mono font-bold">{{ formatVal(userStats.fundAccount?.balance) }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-xs text-muted-foreground">
|
||||
累计充值
|
||||
</div>
|
||||
<div class="font-mono font-bold text-green-600 dark:text-green-400">
|
||||
{{ formatVal(userStats.fundAccount?.totalDeposit) }}
|
||||
</div>
|
||||
<div class="text-xs text-muted-foreground">累计充值</div>
|
||||
<div class="font-mono font-bold text-green-600 dark:text-green-400">{{ formatVal(userStats.fundAccount?.totalDeposit) }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-xs text-muted-foreground">
|
||||
累计提现
|
||||
</div>
|
||||
<div class="font-mono font-bold text-red-600 dark:text-red-400">
|
||||
{{ formatVal(userStats.fundAccount?.totalWithdraw) }}
|
||||
</div>
|
||||
<div class="text-xs text-muted-foreground">累计提现</div>
|
||||
<div class="font-mono font-bold text-red-600 dark:text-red-400">{{ formatVal(userStats.fundAccount?.totalWithdraw) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-2 text-center pt-2 border-t">
|
||||
<div>
|
||||
<div class="text-xs text-muted-foreground">
|
||||
冻结金额
|
||||
</div>
|
||||
<div class="font-mono">
|
||||
{{ formatVal(userStats.fundAccount?.frozen) }}
|
||||
</div>
|
||||
<div class="text-xs text-muted-foreground">冻结金额</div>
|
||||
<div class="font-mono">{{ formatVal(userStats.fundAccount?.frozen) }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-xs text-muted-foreground">
|
||||
交易账户
|
||||
</div>
|
||||
<div class="font-mono font-bold text-blue-600 dark:text-blue-400">
|
||||
{{ formatVal(tradeTotalValue(userStats)) }}
|
||||
</div>
|
||||
<div class="text-xs text-muted-foreground">交易账户</div>
|
||||
<div class="font-mono font-bold text-blue-600 dark:text-blue-400">{{ formatVal(tradeTotalValue(userStats)) }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-xs text-muted-foreground">
|
||||
推广人数
|
||||
</div>
|
||||
<div class="font-mono">
|
||||
{{ userStats.referralStats?.directCount || 0 }}
|
||||
</div>
|
||||
<div class="text-xs text-muted-foreground">推广人数</div>
|
||||
<div class="font-mono">{{ userStats.referralStats?.directCount || 0 }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-xs text-muted-foreground">
|
||||
累计福利
|
||||
</div>
|
||||
<div class="font-mono text-amber-600 dark:text-amber-400">
|
||||
{{ formatVal(userStats.bonusStats?.totalBonusClaimed) }}
|
||||
</div>
|
||||
<div class="text-xs text-muted-foreground">累计福利</div>
|
||||
<div class="font-mono text-amber-600 dark:text-amber-400">{{ formatVal(userStats.bonusStats?.totalBonusClaimed) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-xs text-muted-foreground">
|
||||
注册时间: {{ userStats.user?.createTime || '-' }}
|
||||
</div>
|
||||
<!-- 45天规则提示(仅提现订单) -->
|
||||
<template v-if="!isDeposit(currentOrder) && userStats.isWithin45Days">
|
||||
<div class="p-3 rounded-lg bg-amber-50 dark:bg-amber-950/20 border border-amber-200 dark:border-amber-800 space-y-1.5">
|
||||
<div class="flex items-center gap-2 text-amber-700 dark:text-amber-400 font-medium text-sm">
|
||||
<Icon icon="lucide:alert-triangle" class="size-4" />
|
||||
<span>本金未满45天(已{{ userStats.depositDays }}天)</span>
|
||||
</div>
|
||||
<div class="text-xs space-y-0.5 text-amber-600 dark:text-amber-300">
|
||||
<div>累计盈利: {{ formatVal(userStats.totalProfit) }} USDT</div>
|
||||
<div>累计奖励: {{ formatVal(userStats.totalBonus) }} USDT</div>
|
||||
<div>已提现盈利+奖励: {{ formatVal(userStats.alreadyWithdrawnProfit) }} USDT</div>
|
||||
<div class="font-bold">可提现盈利+奖励: {{ formatVal(userStats.availableProfit) }} USDT</div>
|
||||
</div>
|
||||
<div class="text-xs font-medium text-amber-700 dark:text-amber-300 pt-1 border-t border-amber-200 dark:border-amber-800">
|
||||
应出款 = {{ formatVal(currentOrder.receivableAmount) }} - 已提盈利 {{ formatVal(userStats.alreadyWithdrawnProfit) }} = {{ formatVal(Number(currentOrder.receivableAmount || 0) - Number(userStats.alreadyWithdrawnProfit || 0)) }} USDT
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<!-- 成功充值记录 -->
|
||||
<template v-if="userStats.recentFundOrders?.filter(o => o.type === 1 && o.status === 3).length">
|
||||
<div class="font-medium text-muted-foreground pt-2 border-t">
|
||||
成功充值记录
|
||||
</div>
|
||||
<div class="font-medium text-muted-foreground pt-2 border-t">成功充值记录</div>
|
||||
<div class="max-h-[200px] overflow-y-auto">
|
||||
<div class="rounded border">
|
||||
<UiTable>
|
||||
<UiTableHeader>
|
||||
<UiTableRow>
|
||||
<UiTableHead class="text-xs h-8">
|
||||
时间
|
||||
</UiTableHead>
|
||||
<UiTableHead class="text-xs h-8 text-right">
|
||||
金额
|
||||
</UiTableHead>
|
||||
<UiTableHead class="text-xs h-8 text-right">
|
||||
距今
|
||||
</UiTableHead>
|
||||
<UiTableHead class="text-xs h-8">
|
||||
状态
|
||||
</UiTableHead>
|
||||
<UiTableHead class="text-xs h-8">时间</UiTableHead>
|
||||
<UiTableHead class="text-xs h-8 text-right">金额</UiTableHead>
|
||||
<UiTableHead class="text-xs h-8 text-right">距今</UiTableHead>
|
||||
<UiTableHead class="text-xs h-8">状态</UiTableHead>
|
||||
</UiTableRow>
|
||||
</UiTableHeader>
|
||||
<UiTableBody>
|
||||
<UiTableRow v-for="dep in userStats.recentFundOrders.filter(o => o.type === 1 && o.status === 3)" :key="dep.orderNo">
|
||||
<UiTableCell class="text-xs py-1">
|
||||
{{ dep.createTime?.replace('T', ' ').substring(0, 16) }}
|
||||
</UiTableCell>
|
||||
<UiTableCell class="text-xs py-1 text-right font-mono text-green-600 dark:text-green-400">
|
||||
+{{ formatVal(dep.amount) }}
|
||||
</UiTableCell>
|
||||
<UiTableCell class="text-xs py-1 text-right text-muted-foreground">
|
||||
{{ daysAgo(dep.createTime) }}天
|
||||
</UiTableCell>
|
||||
<UiTableCell class="text-xs py-1">
|
||||
<UiBadge variant="default" class="text-xs">
|
||||
已完成
|
||||
</UiBadge>
|
||||
</UiTableCell>
|
||||
<UiTableCell class="text-xs py-1">{{ dep.createTime?.replace('T', ' ').substring(0, 16) }}</UiTableCell>
|
||||
<UiTableCell class="text-xs py-1 text-right font-mono text-green-600 dark:text-green-400">+{{ formatVal(dep.amount) }}</UiTableCell>
|
||||
<UiTableCell class="text-xs py-1 text-right text-muted-foreground">{{ daysAgo(dep.createTime) }}天</UiTableCell>
|
||||
<UiTableCell class="text-xs py-1"><UiBadge variant="default" class="text-xs">已完成</UiBadge></UiTableCell>
|
||||
</UiTableRow>
|
||||
</UiTableBody>
|
||||
</UiTable>
|
||||
@@ -568,16 +636,21 @@ function copyToClipboard(text: string) {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-muted-foreground">提现金额</div>
|
||||
<div class="col-span-2 font-mono font-bold text-lg">{{ formatAmount(currentOrder.amount) }}</div>
|
||||
<!-- 充值金额 / 提现金额 -->
|
||||
<div class="text-muted-foreground">{{ isDeposit(currentOrder) ? '充值金额' : '提现金额' }}</div>
|
||||
<div class="col-span-2 font-mono font-bold text-lg">{{ formatAmount(currentOrder.amount) }} USDT</div>
|
||||
|
||||
<div class="text-muted-foreground">手续费(10%)</div>
|
||||
<div class="col-span-2 font-mono">-{{ formatAmount(currentOrder.fee || 0) }}</div>
|
||||
<!-- 提现专属字段 -->
|
||||
<template v-if="!isDeposit(currentOrder)">
|
||||
<div class="text-muted-foreground">手续费(10%)</div>
|
||||
<div class="col-span-2 font-mono">-{{ formatAmount(currentOrder.fee || 0) }}</div>
|
||||
|
||||
<div class="text-muted-foreground">应出款</div>
|
||||
<div class="col-span-2 font-mono font-bold text-green-600">{{ formatAmount(currentOrder.receivableAmount || 0) }}</div>
|
||||
<div class="text-muted-foreground">应出款</div>
|
||||
<div class="col-span-2 font-mono font-bold text-green-600">{{ formatAmount(currentOrder.receivableAmount || 0) }}</div>
|
||||
</template>
|
||||
|
||||
<div class="text-muted-foreground">提现地址</div>
|
||||
<!-- 地址 -->
|
||||
<div class="text-muted-foreground">{{ isDeposit(currentOrder) ? '充值地址' : '提现地址' }}</div>
|
||||
<div class="col-span-2">
|
||||
<div v-if="currentOrder.walletAddress" class="flex items-start gap-1">
|
||||
<span class="font-mono text-xs break-all">{{ currentOrder.walletAddress }}</span>
|
||||
@@ -586,12 +659,14 @@ function copyToClipboard(text: string) {
|
||||
<span v-else class="text-muted-foreground">-</span>
|
||||
</div>
|
||||
|
||||
<template v-if="currentOrder.network">
|
||||
<!-- 提现网络 -->
|
||||
<template v-if="!isDeposit(currentOrder) && currentOrder.network">
|
||||
<div class="text-muted-foreground">提现网络</div>
|
||||
<div class="col-span-2">{{ currentOrder.network }}</div>
|
||||
</template>
|
||||
|
||||
<template v-if="currentOrder.withdrawContact">
|
||||
<!-- 提现联系方式 -->
|
||||
<template v-if="!isDeposit(currentOrder) && currentOrder.withdrawContact">
|
||||
<div class="text-muted-foreground">联系方式</div>
|
||||
<div class="col-span-2">{{ currentOrder.withdrawContact }}</div>
|
||||
</template>
|
||||
@@ -599,26 +674,24 @@ function copyToClipboard(text: string) {
|
||||
<div class="text-muted-foreground">发起时间</div>
|
||||
<div class="col-span-2">{{ currentOrder.createTime }}</div>
|
||||
|
||||
<div v-if="currentOrder.financeApproveTime" class="text-muted-foreground">到账时间</div>
|
||||
<div v-if="currentOrder.financeApproveTime" class="col-span-2">{{ currentOrder.financeApproveTime }}</div>
|
||||
<div v-if="currentOrder.payTime" class="text-muted-foreground">打款时间</div>
|
||||
<div v-if="currentOrder.payTime" class="col-span-2">{{ currentOrder.payTime }}</div>
|
||||
|
||||
<div v-if="currentOrder.confirmTime" class="text-muted-foreground">{{ isDeposit(currentOrder) ? '确认时间' : '到账时间' }}</div>
|
||||
<div v-if="currentOrder.confirmTime" class="col-span-2">{{ currentOrder.confirmTime }}</div>
|
||||
|
||||
<div v-if="currentOrder.approveAdminName" class="text-muted-foreground">审批人</div>
|
||||
<div v-if="currentOrder.approveAdminName" class="col-span-2">
|
||||
{{ currentOrder.approveAdminName }}
|
||||
</div>
|
||||
<div v-if="currentOrder.approveAdminName" class="col-span-2">{{ currentOrder.approveAdminName }}</div>
|
||||
|
||||
<div v-if="currentOrder.financeAdminName" class="text-muted-foreground">财务审批人</div>
|
||||
<div v-if="currentOrder.financeAdminName" class="col-span-2">{{ currentOrder.financeAdminName }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<UiDialogFooter>
|
||||
<template v-if="currentOrder">
|
||||
<UiButton variant="outline" @click="showDetailDialog = false">
|
||||
关闭
|
||||
</UiButton>
|
||||
<UiButton @click="openApproveDialog(currentOrder, 2); showDetailDialog = false">
|
||||
通过
|
||||
</UiButton>
|
||||
<UiButton variant="destructive" @click="openApproveDialog(currentOrder, 3); showDetailDialog = false">
|
||||
驳回
|
||||
</UiButton>
|
||||
<UiButton variant="outline" @click="showDetailDialog = false">关闭</UiButton>
|
||||
<UiButton @click="openApproveDialog(currentOrder, 2); showDetailDialog = false">通过</UiButton>
|
||||
<UiButton variant="destructive" @click="openApproveDialog(currentOrder, 3); showDetailDialog = false">驳回</UiButton>
|
||||
</template>
|
||||
</UiDialogFooter>
|
||||
</UiDialogContent>
|
||||
@@ -628,7 +701,14 @@ function copyToClipboard(text: string) {
|
||||
<UiDialog v-model:open="showApproveDialog">
|
||||
<UiDialogContent class="w-full max-w-md max-h-[90vh] overflow-y-auto">
|
||||
<UiDialogHeader>
|
||||
<UiDialogTitle>{{ approveStatus === 2 ? '通过提现' : '驳回提现' }}</UiDialogTitle>
|
||||
<UiDialogTitle>
|
||||
{{ currentOrder
|
||||
? (approveStatus === 2
|
||||
? `确认${orderTypeLabel(currentOrder)}`
|
||||
: `驳回${orderTypeLabel(currentOrder)}`)
|
||||
: '审批'
|
||||
}}
|
||||
</UiDialogTitle>
|
||||
</UiDialogHeader>
|
||||
<div v-if="currentOrder" class="grid gap-4 py-4">
|
||||
<div class="p-3 rounded-lg bg-muted/50 text-sm space-y-2">
|
||||
@@ -636,6 +716,14 @@ function copyToClipboard(text: string) {
|
||||
<div class="text-muted-foreground">订单号</div>
|
||||
<div class="font-mono">{{ currentOrder.orderNo }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-muted-foreground">类型</div>
|
||||
<div>
|
||||
<UiBadge :variant="isDeposit(currentOrder) ? 'default' : 'destructive'">
|
||||
{{ orderTypeLabel(currentOrder) }}
|
||||
</UiBadge>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-muted-foreground">用户</div>
|
||||
<div class="font-medium">
|
||||
@@ -650,28 +738,16 @@ function copyToClipboard(text: string) {
|
||||
<div v-else-if="userStats" class="p-2 rounded bg-background text-xs space-y-1">
|
||||
<div class="grid grid-cols-3 gap-1 text-center">
|
||||
<div>
|
||||
<div class="text-muted-foreground">
|
||||
资金余额
|
||||
</div>
|
||||
<div class="font-mono font-bold">
|
||||
{{ formatVal(userStats.fundAccount?.balance) }}
|
||||
</div>
|
||||
<div class="text-muted-foreground">资金余额</div>
|
||||
<div class="font-mono font-bold">{{ formatVal(userStats.fundAccount?.balance) }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-muted-foreground">
|
||||
累计充值
|
||||
</div>
|
||||
<div class="font-mono font-bold text-green-600 dark:text-green-400">
|
||||
{{ formatVal(userStats.fundAccount?.totalDeposit) }}
|
||||
</div>
|
||||
<div class="text-muted-foreground">累计充值</div>
|
||||
<div class="font-mono font-bold text-green-600 dark:text-green-400">{{ formatVal(userStats.fundAccount?.totalDeposit) }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-muted-foreground">
|
||||
累计提现
|
||||
</div>
|
||||
<div class="font-mono font-bold text-red-600 dark:text-red-400">
|
||||
{{ formatVal(userStats.fundAccount?.totalWithdraw) }}
|
||||
</div>
|
||||
<div class="text-muted-foreground">累计提现</div>
|
||||
<div class="font-mono font-bold text-red-600 dark:text-red-400">{{ formatVal(userStats.fundAccount?.totalWithdraw) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-muted-foreground text-center">
|
||||
@@ -679,13 +755,15 @@ function copyToClipboard(text: string) {
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-muted-foreground">提现金额</div>
|
||||
<div class="font-mono font-bold text-lg">{{ formatAmount(currentOrder.amount) }}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-muted-foreground">应出款</div>
|
||||
<div class="font-mono text-green-600">{{ formatAmount(currentOrder.receivableAmount || 0) }}</div>
|
||||
<div class="text-muted-foreground">{{ isDeposit(currentOrder) ? '充值金额' : '提现金额' }}</div>
|
||||
<div class="font-mono font-bold text-lg">{{ formatAmount(currentOrder.amount) }} USDT</div>
|
||||
</div>
|
||||
<template v-if="!isDeposit(currentOrder)">
|
||||
<div>
|
||||
<div class="text-muted-foreground">应出款</div>
|
||||
<div class="font-mono text-green-600">{{ formatAmount(currentOrder.receivableAmount || 0) }}</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<div v-if="approveStatus === 3" class="grid gap-2">
|
||||
<UiLabel>驳回原因 <span class="text-red-500">*</span></UiLabel>
|
||||
@@ -697,9 +775,7 @@ function copyToClipboard(text: string) {
|
||||
</div>
|
||||
</div>
|
||||
<UiDialogFooter>
|
||||
<UiButton variant="outline" @click="showApproveDialog = false">
|
||||
取消
|
||||
</UiButton>
|
||||
<UiButton variant="outline" @click="showApproveDialog = false">取消</UiButton>
|
||||
<UiButton
|
||||
:variant="approveStatus === 3 ? 'destructive' : 'default'"
|
||||
:disabled="approveMutation.isPending.value || (approveStatus === 3 && !rejectReason.trim())"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user