@@ -7,12 +7,17 @@ import {
77 DropdownMenuContent ,
88 DropdownMenuItem ,
99 DropdownMenuLabel ,
10- DropdownMenuRadioGroup ,
11- DropdownMenuRadioItem ,
1210 DropdownMenuSeparator ,
13- DropdownMenuTrigger ,
11+ DropdownMenuTrigger
1412} from "@/components/ui/dropdown-menu" ;
1513import { Input } from "@/components/ui/input" ;
14+ import {
15+ Select ,
16+ SelectContent ,
17+ SelectItem ,
18+ SelectTrigger ,
19+ SelectValue ,
20+ } from "@/components/ui/select" ;
1621import {
1722 Table ,
1823 TableBody ,
@@ -40,7 +45,6 @@ import { useEffect, useState } from "react";
4045import { useIntl } from "react-intl" ;
4146import { toast } from "sonner" ;
4247
43-
4448export default function User ( ) {
4549 const intl = useIntl ( ) ;
4650 const statusEnum = new Map ( [ [ "0" , "停用" ] , [ "1" , "启用" ] ] ) ;
@@ -50,21 +54,21 @@ export default function User() {
5054 filterField : string
5155 filterValue : string
5256 group : string
53- groupName :string
57+ groupName : string
5458 }
5559 const [ params , setParams ] = useState ( {
5660 page : 1 ,
5761 size : 10 ,
5862 filterField : 'name' ,
5963 filterValue : '' ,
6064 group : '' ,
61- groupName :''
65+ groupName : ''
6266 } as TableParams ) ;
6367
6468 useEffect ( ( ) => {
6569 function fetchData ( params : TableParams ) {
6670 axios . post ( "/system/users" , params ) . then ( res => {
67- setData ( res . data ) ;
71+ setData ( res . data . data ) ;
6872 } )
6973 }
7074 fetchData ( params ) ; // 初次加载
@@ -89,10 +93,8 @@ export default function User() {
8993 }
9094 function handleDelete ( row : User ) {
9195 axios . delete ( "/system/users/" + row . id ) . then ( res => {
92- if ( res . data . code === "S" ) {
93- setParams ( { ...params , page : 1 } ) ;
94- toast . success ( res . data . message ) ;
95- }
96+ setParams ( { ...params , page : 1 } ) ;
97+ toast . success ( res . data . message ) ;
9698 } )
9799
98100 }
@@ -249,56 +251,37 @@ export default function User() {
249251 rowSelection,
250252 } ,
251253 } )
252-
253254 return (
254255 < div className = "w-full" >
255- < div className = "flex items-center py-3" >
256+ < div className = "flex items-center py-3 gap-4 " >
256257 < GroupTreeSelectPopover
257- onSelect = { ( node ) => {
258- if ( node . length > 0 ) {
259- setParams ( { ...params , group : node [ 0 ] . data . id , groupName :node [ 0 ] . data . name } )
260- }
261- } } />
262- < DropdownMenu >
263- < DropdownMenuTrigger asChild >
264- < Button variant = "outline" className = "ml-auto" >
265- { table
266- . getAllColumns ( ) . filter ( ( column ) => column . id == params . filterField ) . map ( ( column ) => {
267- const header = column . columnDef . header ;
268- const meta = column . columnDef . meta as { title : string } ;
269- const headerText = typeof header === 'string' || typeof header === 'number' ? header : meta . title ;
270- return (
271- < div key = { column . id } >
272- { headerText }
273- </ div >
274- )
275- } ) } < ChevronDown />
276- </ Button >
277- </ DropdownMenuTrigger >
278- < DropdownMenuContent align = "start" >
279- < DropdownMenuRadioGroup value = { params . filterField } onValueChange = { ( value ) =>
280- setParams ( { ...params , filterField : value } )
281- } >
282- { table
283- . getAllColumns ( )
284- . filter ( ( column ) => ! [ 'select' , 'actions' , 'groupName' ] . includes ( column . id ) )
285- . map ( ( column ) => {
286- const header = column . columnDef . header ;
287- const meta = column . columnDef . meta as { title : string } ;
288- const headerText = typeof header === 'string' || typeof header === 'number' ? header : meta . title ;
289- return (
290- < DropdownMenuRadioItem
291- key = { column . id }
292- className = "capitalize"
293- value = { column . id }
294- >
295- { headerText }
296- </ DropdownMenuRadioItem >
297- )
298- } ) }
299- </ DropdownMenuRadioGroup >
300- </ DropdownMenuContent >
301- </ DropdownMenu >
258+ onChange = { ( node ) => {
259+ if ( node . length > 0 ) {
260+ setParams ( { ...params , group : node [ 0 ] . id , groupName : node [ 0 ] . name } )
261+ }
262+ } }
263+ />
264+ < Select
265+ onValueChange = { ( value ) =>
266+ setParams ( { ...params , filterField : value } )
267+ } defaultValue = { params . filterField } >
268+ < SelectTrigger className = "flex items-center" >
269+ < SelectValue placeholder = "FilterField" />
270+ </ SelectTrigger >
271+ < SelectContent >
272+ { table
273+ . getAllColumns ( )
274+ . filter ( ( column ) => [ 'name' , 'username' , 'email' , 'phone' ] . includes ( column . id ) )
275+ . map ( ( column ) => {
276+ const header = column . columnDef . header ;
277+ const meta = column . columnDef . meta as { title : string } ;
278+ const headerText = typeof header === 'string' || typeof header === 'number' ? header : meta . title ;
279+ return (
280+ < SelectItem key = { column . id } value = { column . id } > { headerText } </ SelectItem >
281+ )
282+ } ) }
283+ </ SelectContent >
284+ </ Select >
302285 < Input
303286 placeholder = { intl . formatMessage ( { id : 'table.filterField' } ) }
304287 value = { params . filterValue }
0 commit comments