mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-29 06:36:38 +08:00
185 lines
6.3 KiB
JavaScript
185 lines
6.3 KiB
JavaScript
import PropTypes from 'prop-types';
|
|
import { useTheme } from '@mui/material/styles';
|
|
import { IconUser, IconKey, IconBrandGithubCopilot, IconSitemap } from '@tabler/icons-react';
|
|
import { InputAdornment, OutlinedInput, Stack, FormControl, InputLabel, Select, MenuItem } from '@mui/material';
|
|
import { LocalizationProvider, DateTimePicker } from '@mui/x-date-pickers';
|
|
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
|
import dayjs from 'dayjs';
|
|
import LogType from '../type/LogType';
|
|
require('dayjs/locale/zh-cn');
|
|
// ----------------------------------------------------------------------
|
|
|
|
export default function TableToolBar({ filterName, handleFilterName, userIsAdmin }) {
|
|
const theme = useTheme();
|
|
const grey500 = theme.palette.grey[500];
|
|
|
|
return (
|
|
<>
|
|
<Stack direction={{ xs: 'column', sm: 'row' }} spacing={{ xs: 3, sm: 2, md: 4 }} padding={'24px'} paddingBottom={'0px'}>
|
|
<FormControl>
|
|
<InputLabel htmlFor="channel-token_name-label">令牌名称</InputLabel>
|
|
<OutlinedInput
|
|
id="token_name"
|
|
name="token_name"
|
|
sx={{
|
|
minWidth: '100%'
|
|
}}
|
|
label="令牌名称"
|
|
value={filterName.token_name}
|
|
onChange={handleFilterName}
|
|
placeholder="令牌名称"
|
|
startAdornment={
|
|
<InputAdornment position="start">
|
|
<IconKey stroke={1.5} size="20px" color={grey500} />
|
|
</InputAdornment>
|
|
}
|
|
/>
|
|
</FormControl>
|
|
<FormControl>
|
|
<InputLabel htmlFor="channel-model_name-label">模型名称</InputLabel>
|
|
<OutlinedInput
|
|
id="model_name"
|
|
name="model_name"
|
|
sx={{
|
|
minWidth: '100%'
|
|
}}
|
|
label="模型名称"
|
|
value={filterName.model_name}
|
|
onChange={handleFilterName}
|
|
placeholder="模型名称"
|
|
startAdornment={
|
|
<InputAdornment position="start">
|
|
<IconBrandGithubCopilot stroke={1.5} size="20px" color={grey500} />
|
|
</InputAdornment>
|
|
}
|
|
/>
|
|
</FormControl>
|
|
|
|
<FormControl>
|
|
<LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={'zh-cn'}>
|
|
<DateTimePicker
|
|
label="起始时间"
|
|
ampm={false}
|
|
name="start_timestamp"
|
|
value={filterName.start_timestamp === 0 ? null : dayjs.unix(filterName.start_timestamp)}
|
|
onChange={(value) => {
|
|
if (value === null) {
|
|
handleFilterName({ target: { name: 'start_timestamp', value: 0 } });
|
|
return;
|
|
}
|
|
handleFilterName({ target: { name: 'start_timestamp', value: value.unix() } });
|
|
}}
|
|
slotProps={{
|
|
actionBar: {
|
|
actions: ['clear', 'today', 'accept']
|
|
}
|
|
}}
|
|
/>
|
|
</LocalizationProvider>
|
|
</FormControl>
|
|
|
|
<FormControl>
|
|
<LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={'zh-cn'}>
|
|
<DateTimePicker
|
|
label="结束时间"
|
|
name="end_timestamp"
|
|
ampm={false}
|
|
value={filterName.end_timestamp === 0 ? null : dayjs.unix(filterName.end_timestamp)}
|
|
onChange={(value) => {
|
|
if (value === null) {
|
|
handleFilterName({ target: { name: 'end_timestamp', value: 0 } });
|
|
return;
|
|
}
|
|
handleFilterName({ target: { name: 'end_timestamp', value: value.unix() } });
|
|
}}
|
|
slotProps={{
|
|
actionBar: {
|
|
actions: ['clear', 'today', 'accept']
|
|
}
|
|
}}
|
|
/>
|
|
</LocalizationProvider>
|
|
</FormControl>
|
|
<FormControl sx={{ minWidth: '22%' }}>
|
|
<InputLabel htmlFor="channel-log_type-label">类型</InputLabel>
|
|
<Select
|
|
id="channel-type-label"
|
|
label="类型"
|
|
value={filterName.log_type}
|
|
name="log_type"
|
|
onChange={handleFilterName}
|
|
sx={{
|
|
minWidth: '100%'
|
|
}}
|
|
MenuProps={{
|
|
PaperProps: {
|
|
style: {
|
|
maxHeight: 200
|
|
}
|
|
}
|
|
}}
|
|
>
|
|
{Object.values(LogType).map((option) => {
|
|
return (
|
|
<MenuItem key={option.value} value={option.value}>
|
|
{option.text}
|
|
</MenuItem>
|
|
);
|
|
})}
|
|
</Select>
|
|
</FormControl>
|
|
</Stack>
|
|
|
|
{userIsAdmin && (
|
|
<Stack direction={{ xs: 'column', sm: 'row' }} spacing={{ xs: 3, sm: 2, md: 4 }} padding={'24px'}>
|
|
<FormControl>
|
|
<InputLabel htmlFor="channel-channel_id-label">渠道ID</InputLabel>
|
|
<OutlinedInput
|
|
id="channel_id"
|
|
name="channel_id"
|
|
sx={{
|
|
minWidth: '100%'
|
|
}}
|
|
label="渠道ID"
|
|
value={filterName.channel_id}
|
|
onChange={handleFilterName}
|
|
placeholder="渠道ID"
|
|
startAdornment={
|
|
<InputAdornment position="start">
|
|
<IconSitemap stroke={1.5} size="20px" color={grey500} />
|
|
</InputAdornment>
|
|
}
|
|
/>
|
|
</FormControl>
|
|
|
|
<FormControl>
|
|
<InputLabel htmlFor="channel-username-label">用户名称</InputLabel>
|
|
<OutlinedInput
|
|
id="username"
|
|
name="username"
|
|
sx={{
|
|
minWidth: '100%'
|
|
}}
|
|
label="用户名称"
|
|
value={filterName.username}
|
|
onChange={handleFilterName}
|
|
placeholder="用户名称"
|
|
startAdornment={
|
|
<InputAdornment position="start">
|
|
<IconUser stroke={1.5} size="20px" color={grey500} />
|
|
</InputAdornment>
|
|
}
|
|
/>
|
|
</FormControl>
|
|
</Stack>
|
|
)}
|
|
</>
|
|
);
|
|
}
|
|
|
|
TableToolBar.propTypes = {
|
|
filterName: PropTypes.object,
|
|
handleFilterName: PropTypes.func,
|
|
userIsAdmin: PropTypes.bool
|
|
};
|