feat(admin-next): add reset password

pull/90/head
moonrailgun 2 years ago
parent 769f1f9b6c
commit 26f4c6a864

@ -24,7 +24,7 @@
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"tailchat-server-sdk": "workspace:^", "tailchat-server-sdk": "workspace:^",
"tushan": "^0.2.4", "tushan": "^0.2.6",
"vite-express": "^0.5.4" "vite-express": "^0.5.4"
}, },
"devDependencies": { "devDependencies": {

@ -17,15 +17,10 @@ import {
IconWifi, IconWifi,
} from 'tushan/icon'; } from 'tushan/icon';
import { authProvider } from './auth'; import { authProvider } from './auth';
import { import { fileFields, groupFields, mailFields, messageFields } from './fields';
fileFields,
groupFields,
mailFields,
messageFields,
userFields,
} from './fields';
import { i18n } from './i18n'; import { i18n } from './i18n';
import { httpClient } from './request'; import { httpClient } from './request';
import { UserList } from './resources/user';
import { TailchatNetwork } from './routes/network'; import { TailchatNetwork } from './routes/network';
import { SocketIOAdmin } from './routes/socketio'; import { SocketIOAdmin } from './routes/socketio';
import { SystemConfig } from './routes/system'; import { SystemConfig } from './routes/system';
@ -40,27 +35,7 @@ function App() {
authProvider={authProvider} authProvider={authProvider}
i18n={i18n} i18n={i18n}
> >
<Resource <Resource name="users" icon={<IconUser />} list={<UserList />} />
name="users"
icon={<IconUser />}
list={
<ListTable
filter={[
createTextField('q', {
label: 'Search',
}),
]}
fields={userFields}
action={{
create: true,
detail: true,
edit: true,
delete: true,
export: true,
}}
/>
}
/>
<Resource <Resource
name="messages" name="messages"

@ -10,6 +10,9 @@ export const i18n: TushanContextProps['i18n'] = {
translation: { translation: {
...i18nEnTranslation, ...i18nEnTranslation,
custom: { custom: {
action: {
resetPassword: 'Reset Password',
},
network: { network: {
nodeList: 'Node List', nodeList: 'Node List',
id: 'ID', id: 'ID',
@ -121,6 +124,9 @@ export const i18n: TushanContextProps['i18n'] = {
}, },
}, },
custom: { custom: {
action: {
resetPassword: '重置密码',
},
network: { network: {
nodeList: '节点列表', nodeList: '节点列表',
id: 'ID', id: 'ID',

@ -0,0 +1,64 @@
import React from 'react';
import {
createTextField,
ListTable,
Message,
Modal,
useResourceContext,
useTranslation,
useUpdate,
} from 'tushan';
import { userFields } from '../fields';
export const UserList: React.FC = React.memo(() => {
const { t } = useTranslation();
const [update] = useUpdate();
const resource = useResourceContext();
return (
<ListTable
filter={[
createTextField('q', {
label: 'Search',
}),
]}
fields={userFields}
action={{
create: true,
detail: true,
edit: true,
delete: true,
export: true,
custom: [
{
key: 'resetPassword',
label: t('custom.action.resetPassword'),
onClick: (record: any) => {
const { close } = Modal.confirm({
title: t('tushan.common.confirmTitle'),
content: t('tushan.common.confirmContent'),
onConfirm: async (e) => {
try {
await update(resource, {
id: record.id,
data: {
password:
'$2a$10$eSebpg0CEvsbDC7j1NxB2epMUkYwKhfT8vGdPQYkfeXYMqM8HjnpW', // 123456789
},
});
Message.success(t('tushan.common.success'));
close();
} catch (err) {
console.error(err);
Message.error(String(err));
}
},
});
},
},
],
}}
/>
);
});
UserList.displayName = 'UserList';
Loading…
Cancel
Save