@@ -14,37 +14,38 @@ const loading = ref(false)
1414const show = ref (false )
1515const handleSaving = ref (false )
1616const userRef = ref (new UserInfo ([UserRole .User ]))
17+ const searchKeyword = ref (' ' )
1718
1819const users = ref ([])
1920
2021function createColumns(): DataTableColumns {
2122 return [
2223 {
23- title: ' Email ' ,
24+ title: t ( ' setting.user.email ' ) ,
2425 key: ' email' ,
2526 resizable: true ,
2627 width: 200 ,
2728 minWidth: 80 ,
2829 maxWidth: 200 ,
2930 },
3031 {
31- title: ' Register Time ' ,
32+ title: t ( ' setting.user.registerTime ' ) ,
3233 key: ' createTime' ,
3334 resizable: true ,
3435 width: 200 ,
3536 minWidth: 80 ,
3637 maxWidth: 200 ,
3738 },
3839 {
39- title: ' Verify Time ' ,
40+ title: t ( ' setting.user.verifyTime ' ) ,
4041 key: ' verifyTime' ,
4142 resizable: true ,
4243 width: 200 ,
4344 minWidth: 80 ,
4445 maxWidth: 200 ,
4546 },
4647 {
47- title: ' Roles ' ,
48+ title: t ( ' setting.user.roles ' ) ,
4849 key: ' status' ,
4950 resizable: true ,
5051 width: 200 ,
@@ -70,15 +71,15 @@ function createColumns(): DataTableColumns {
7071 },
7172 },
7273 {
73- title: ' Status ' ,
74+ title: t ( ' setting.user.status ' ) ,
7475 key: ' status' ,
7576 width: 80 ,
7677 render(row : any ) {
7778 return Status [row .status ]
7879 },
7980 },
8081 {
81- title: ' Remark ' ,
82+ title: t ( ' setting.user.remark ' ) ,
8283 key: ' remark' ,
8384 resizable: true ,
8485 width: 200 ,
@@ -87,7 +88,7 @@ function createColumns(): DataTableColumns {
8788 },
8889 // switch off amt limit
8990 {
90- title: ' Limit Enabled ' ,
91+ title: t ( ' setting.user.limitEnabled ' ) ,
9192 key: ' limit_switch' ,
9293 resizable: true ,
9394 width: 100 ,
@@ -99,15 +100,15 @@ function createColumns(): DataTableColumns {
99100 },
100101 // 新增额度信息
101102 {
102- title: ' Amounts ' ,
103+ title: t ( ' setting.user.amounts ' ) ,
103104 key: ' useAmount' ,
104105 resizable: true ,
105106 width: 80 ,
106107 minWidth: 30 ,
107108 maxWidth: 100 ,
108109 },
109110 {
110- title: ' Action ' ,
111+ title: t ( ' setting.user.action ' ) ,
111112 key: ' _id' ,
112113 width: 220 ,
113114 fixed: ' right' ,
@@ -136,7 +137,7 @@ function createColumns(): DataTableColumns {
136137 },
137138 onClick : () => handleEditUser (row ),
138139 },
139- { default : () => t (' chat .editUser' ) },
140+ { default : () => t (' setting.user .editUser' ) },
140141 ))
141142 }
142143 if (row .status === Status .PreVerify || row .status === Status .AdminVerify ) {
@@ -147,7 +148,7 @@ function createColumns(): DataTableColumns {
147148 type: ' info' ,
148149 onClick : () => handleUpdateUserStatus (row ._id , Status .Normal ),
149150 },
150- { default : () => t (' chat .verifiedUser' ) },
151+ { default : () => t (' setting.user .verifiedUser' ) },
151152 ))
152153 }
153154 if (row .secretKey ) {
@@ -158,7 +159,7 @@ function createColumns(): DataTableColumns {
158159 type: ' warning' ,
159160 onClick : () => handleDisable2FA (row ._id ),
160161 },
161- { default : () => t (' chat .disable2FA' ) },
162+ { default : () => t (' setting.user .disable2FA' ) },
162163 ))
163164 }
164165 return actions
@@ -175,7 +176,7 @@ const pagination = reactive ({
175176 pageCount: 1 ,
176177 itemCount: 1 ,
177178 prefix({ itemCount }: { itemCount: number | undefined }) {
178- return ` Total is ${itemCount }. `
179+ return ` ${ t ( ' setting.user.total ' )}: ${itemCount }`
179180 },
180181 showSizePicker: true ,
181182 pageSizes: [25 , 50 , 100 ],
@@ -196,7 +197,7 @@ async function handleGetUsers(page: number) {
196197 users .value .length = 0
197198 loading .value = true
198199 const size = pagination .pageSize
199- const data = (await fetchGetUsers (page , size )).data
200+ const data = (await fetchGetUsers (page , size , searchKeyword . value || undefined )).data
200201 data .users .forEach ((user : never ) => {
201202 users .value .push (user )
202203 })
@@ -206,11 +207,16 @@ async function handleGetUsers(page: number) {
206207 loading .value = false
207208}
208209
210+ function handleSearch() {
211+ pagination .page = 1
212+ handleGetUsers (1 )
213+ }
214+
209215async function handleUpdateUserStatus(userId : string , status : Status ) {
210216 if (status === Status .Deleted ) {
211217 dialog .warning ({
212- title: t (' chat .deleteUser' ),
213- content: t (' chat .deleteUserConfirm' ),
218+ title: t (' setting.user .deleteUser' ),
219+ content: t (' setting.user .deleteUserConfirm' ),
214220 positiveText: t (' common.yes' ),
215221 negativeText: t (' common.no' ),
216222 onPositiveClick : async () => {
@@ -229,8 +235,8 @@ async function handleUpdateUserStatus(userId: string, status: Status) {
229235
230236async function handleDisable2FA(userId : string ) {
231237 dialog .warning ({
232- title: t (' chat .disable2FA' ),
233- content: t (' chat .disable2FAConfirm' ),
238+ title: t (' setting.user .disable2FA' ),
239+ content: t (' setting.user .disable2FAConfirm' ),
234240 positiveText: t (' common.yes' ),
235241 negativeText: t (' common.no' ),
236242 onPositiveClick : async () => {
@@ -273,9 +279,21 @@ onMounted(async () => {
273279 <div class =" p-4 space-y-5 min-h-[200px]" >
274280 <div class =" space-y-6" >
275281 <NSpace vertical :size =" 12" >
276- <NSpace >
277- <NButton @click =" handleNewUser()" >
278- New User
282+ <NSpace justify =" space-between" align =" center" >
283+ <NSpace >
284+ <NInput
285+ v-model:value =" searchKeyword"
286+ :placeholder =" t('setting.user.searchUserPlaceholder')"
287+ clearable
288+ style =" width : 280px "
289+ @keyup.enter =" handleSearch"
290+ />
291+ <NButton type =" primary" @click =" handleSearch" >
292+ {{ t('setting.user.searchUser') }}
293+ </NButton >
294+ </NSpace >
295+ <NButton type =" primary" @click =" handleNewUser()" >
296+ {{ t('setting.user.newUser') }}
279297 </NButton >
280298 </NSpace >
281299 <NDataTable
0 commit comments