mirror of
https://github.com/labring/FastGPT.git
synced 2025-08-03 05:19:51 +00:00
feat: admin image
This commit is contained in:
@@ -4,18 +4,34 @@ import {
|
||||
ListTable,
|
||||
Resource,
|
||||
Tushan,
|
||||
fetchJSON
|
||||
} from 'tushan';
|
||||
import { authProvider } from './auth';
|
||||
import { userFields,payFields,kbFields,ModelFields } from './fields';
|
||||
import { userFields, payFields, kbFields, ModelFields } from './fields';
|
||||
|
||||
const dataProvider = jsonServerProvider('http://localhost:3001');
|
||||
const authStorageKey = 'tushan:auth';
|
||||
|
||||
const httpClient: typeof fetchJSON = (url, options = {}) => {
|
||||
try {
|
||||
if (!options.headers) {
|
||||
options.headers = new Headers({ Accept: 'application/json' });
|
||||
}
|
||||
const { token } = JSON.parse(window.localStorage.getItem(authStorageKey) ?? '{}');
|
||||
(options.headers as Headers).set('Authorization', `Bearer ${token}`);
|
||||
|
||||
return fetchJSON(url, options);
|
||||
} catch (err) {
|
||||
return Promise.reject();
|
||||
}
|
||||
};
|
||||
|
||||
const dataProvider = jsonServerProvider(import.meta.env.VITE_PUBLIC_SERVER_URL, httpClient);
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<Tushan
|
||||
basename="/"
|
||||
header={'fastgpt-admin'}
|
||||
footer={'Build with stakeswky'}
|
||||
header={'FastGpt-Admin'}
|
||||
dataProvider={dataProvider}
|
||||
authProvider={authProvider}
|
||||
>
|
||||
@@ -25,12 +41,12 @@ function App() {
|
||||
list={
|
||||
<ListTable
|
||||
filter={[
|
||||
createTextField('q', {
|
||||
label: 'Query',
|
||||
}),
|
||||
createTextField('username', {
|
||||
label: 'username'
|
||||
})
|
||||
]}
|
||||
fields={userFields}
|
||||
action={{ create: true, detail: true, edit: true, delete: true }}
|
||||
action={{ create: true, detail: true, edit: true }}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@@ -40,6 +56,11 @@ function App() {
|
||||
label="支付记录"
|
||||
list={
|
||||
<ListTable
|
||||
filter={[
|
||||
createTextField('userId', {
|
||||
label: 'userId'
|
||||
})
|
||||
]}
|
||||
fields={payFields}
|
||||
action={{ detail: true }}
|
||||
/>
|
||||
@@ -50,6 +71,11 @@ function App() {
|
||||
label="知识库"
|
||||
list={
|
||||
<ListTable
|
||||
filter={[
|
||||
createTextField('tag', {
|
||||
label: 'tag'
|
||||
})
|
||||
]}
|
||||
fields={kbFields}
|
||||
action={{ detail: true }}
|
||||
/>
|
||||
@@ -57,13 +83,8 @@ function App() {
|
||||
/>
|
||||
<Resource
|
||||
name="models"
|
||||
label="Ai模型"
|
||||
list={
|
||||
<ListTable
|
||||
fields={ModelFields}
|
||||
action={{ detail: true }}
|
||||
/>
|
||||
}
|
||||
label="应用"
|
||||
list={<ListTable fields={ModelFields} action={{ detail: true }} />}
|
||||
/>
|
||||
</Tushan>
|
||||
);
|
||||
|
@@ -1,33 +1,5 @@
|
||||
import { AuthProvider } from 'tushan';
|
||||
import { createAuthProvider, type 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(''),
|
||||
};
|
||||
export const authProvider: AuthProvider = createAuthProvider({
|
||||
loginUrl: `${import.meta.env.VITE_PUBLIC_SERVER_URL}api/login`
|
||||
});
|
||||
|
@@ -1,46 +1,39 @@
|
||||
import {
|
||||
createTextField,
|
||||
createUrlField,
|
||||
createNumberField,
|
||||
createAvatarField
|
||||
} from 'tushan';
|
||||
import { createTextField, createNumberField } 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' }),
|
||||
createTextField('username', { label: '用户名' }),
|
||||
createNumberField('balance', { label: '余额', list: { sort: true } }),
|
||||
createTextField('createTime', { label: 'Create Time', list: { sort: true } })
|
||||
];
|
||||
|
||||
export const payFields = [
|
||||
createTextField('id', { label: 'ID' }),
|
||||
createTextField('name', { label: '用户名', list: { sort: true } }),
|
||||
createTextField('userId', { label: '用户Id' }),
|
||||
createNumberField('price', { label: '支付金额' }),
|
||||
createTextField('orderId', { label: 'orderId' }),
|
||||
createTextField('status', { label: '状态' }),
|
||||
createTextField('createTime', { label: 'Create Time' }),
|
||||
createTextField('createTime', { label: 'Create Time', list: { sort: true } })
|
||||
];
|
||||
|
||||
export const kbFields = [
|
||||
createTextField('id', { label: 'ID' }),
|
||||
createTextField('user', { label: '所属用户' }),
|
||||
createTextField('name', { label: '知识库', list: { sort: true } }),
|
||||
createTextField('tags', { label: 'Tags' }),
|
||||
createAvatarField('avatar', { label: 'Avatar' }),
|
||||
createTextField('userId', { label: '所属用户' }),
|
||||
createTextField('name', { label: '知识库' }),
|
||||
createTextField('tags', { label: 'Tags' })
|
||||
];
|
||||
|
||||
export const ModelFields = [
|
||||
createTextField('id', { label: 'ID' }),
|
||||
createTextField('name', { label: 'Ai助手', list: { sort: true } }),
|
||||
createTextField('user', { label: '所属用户' }),
|
||||
createTextField('userId', { label: '所属用户' }),
|
||||
createTextField('name', { label: '名字' }),
|
||||
createTextField('relatedKbs', { label: '引用的知识库' }),
|
||||
createTextField('searchMode', { label: '搜索模式' }),
|
||||
createTextField('systemPrompt', { label: '提示词' }),
|
||||
createTextField('temperature', { label: '温度' }),
|
||||
createTextField('isShare', { label: '是否分享' }),
|
||||
createTextField('isShareDetail', { label: '分享详情' }),
|
||||
createAvatarField('avatar', { label: 'Avatar' }),
|
||||
];
|
||||
createTextField('systemPrompt', {
|
||||
label: '提示词',
|
||||
list: {
|
||||
width: 400
|
||||
}
|
||||
}),
|
||||
createTextField('temperature', { label: '温度' })
|
||||
];
|
||||
|
@@ -2,6 +2,4 @@ import React from 'react';
|
||||
import ReactDOM from 'react-dom/client';
|
||||
import App from './App';
|
||||
|
||||
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
|
||||
<App />
|
||||
);
|
||||
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(<App />);
|
||||
|
Reference in New Issue
Block a user