This commit is contained in:
stakeswky
2023-06-09 14:13:25 +08:00
committed by GitHub
parent ba9d9c3d5f
commit 2378615887
14 changed files with 794 additions and 0 deletions

72
admin/src/App.tsx Normal file
View File

@@ -0,0 +1,72 @@
import {
createTextField,
jsonServerProvider,
ListTable,
Resource,
Tushan,
} from 'tushan';
import { authProvider } from './auth';
import { userFields,payFields,kbFields,ModelFields } from './fields';
const dataProvider = jsonServerProvider('http://localhost:3001');
function App() {
return (
<Tushan
basename="/"
header={'fastgpt-admin'}
footer={'Build with stakeswky'}
dataProvider={dataProvider}
authProvider={authProvider}
>
<Resource
name="users"
label="用户信息"
list={
<ListTable
filter={[
createTextField('q', {
label: 'Query',
}),
]}
fields={userFields}
action={{ create: true, detail: true, edit: true, delete: true }}
/>
}
/>
<Resource
name="pays"
label="支付记录"
list={
<ListTable
fields={payFields}
action={{ detail: true }}
/>
}
/>
<Resource
name="kbs"
label="知识库"
list={
<ListTable
fields={kbFields}
action={{ detail: true }}
/>
}
/>
<Resource
name="models"
label="Ai模型"
list={
<ListTable
fields={ModelFields}
action={{ detail: true }}
/>
}
/>
</Tushan>
);
}
export default App;

33
admin/src/auth.ts Normal file
View File

@@ -0,0 +1,33 @@
import { AuthProvider } from 'tushan';
export const authProvider: AuthProvider = {
login: ({ username, password }) => {
if (username !== 'tushan' || password !== 'tushan') {
return Promise.reject();
}
localStorage.setItem('username', username);
return Promise.resolve();
},
logout: () => {
localStorage.removeItem('username');
return Promise.resolve();
},
checkAuth: () =>
localStorage.getItem('username') ? Promise.resolve() : Promise.reject(),
checkError: (error) => {
const status = error.status;
if (status === 401 || status === 403) {
localStorage.removeItem('username');
return Promise.reject();
}
return Promise.resolve();
},
getIdentity: () =>
Promise.resolve({
id: '0',
fullName: 'Admin',
}),
getPermissions: () => Promise.resolve(''),
};

46
admin/src/fields.ts Normal file
View File

@@ -0,0 +1,46 @@
import {
createTextField,
createUrlField,
createNumberField,
createAvatarField
} from 'tushan';
export const userFields = [
createTextField('id', { label: 'ID' }),
createTextField('username', { label: '用户名', list: { sort: true } }),
createTextField('password', { label: '密码(加密)' }),
createNumberField('balance', { label: '余额' }),
createTextField('openaiKey', { label: 'OpenAI Key' }),
createTextField('createTime', { label: 'Create Time' }),
createAvatarField('avatar', { label: 'Avatar' }),
];
export const payFields = [
createTextField('id', { label: 'ID' }),
createTextField('name', { label: '用户名', list: { sort: true } }),
createNumberField('price', { label: '支付金额' }),
createTextField('orderId', { label: 'orderId' }),
createTextField('status', { label: '状态' }),
createTextField('createTime', { label: 'Create Time' }),
];
export const kbFields = [
createTextField('id', { label: 'ID' }),
createTextField('user', { label: '所属用户' }),
createTextField('name', { label: '知识库', list: { sort: true } }),
createTextField('tags', { label: 'Tags' }),
createAvatarField('avatar', { label: 'Avatar' }),
];
export const ModelFields = [
createTextField('id', { label: 'ID' }),
createTextField('name', { label: 'Ai助手', list: { sort: true } }),
createTextField('user', { label: '所属用户' }),
createTextField('relatedKbs', { label: '引用的知识库' }),
createTextField('searchMode', { label: '搜索模式' }),
createTextField('systemPrompt', { label: '提示词' }),
createTextField('temperature', { label: '温度' }),
createTextField('isShare', { label: '是否分享' }),
createTextField('isShareDetail', { label: '分享详情' }),
createAvatarField('avatar', { label: 'Avatar' }),
];

7
admin/src/main.tsx Normal file
View File

@@ -0,0 +1,7 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
<App />
);

1
admin/src/vite-env.d.ts vendored Normal file
View File

@@ -0,0 +1 @@
/// <reference types="vite/client" />