diff --git a/web/berry/src/views/Token/component/EditModal.js b/web/berry/src/views/Token/component/EditModal.js
index a5e08be1..2685eab3 100644
--- a/web/berry/src/views/Token/component/EditModal.js
+++ b/web/berry/src/views/Token/component/EditModal.js
@@ -1,9 +1,9 @@
-import PropTypes from "prop-types";
-import * as Yup from "yup";
-import { Formik } from "formik";
-import { useTheme } from "@mui/material/styles";
-import { useState, useEffect } from "react";
-import dayjs from "dayjs";
+import PropTypes from 'prop-types';
+import * as Yup from 'yup';
+import { Formik } from 'formik';
+import { useTheme } from '@mui/material/styles';
+import { useState, useEffect } from 'react';
+import dayjs from 'dayjs';
import {
Dialog,
DialogTitle,
@@ -16,53 +16,66 @@ import {
InputLabel,
OutlinedInput,
InputAdornment,
+ Autocomplete,
+ Checkbox,
+ TextField,
Switch,
- FormHelperText,
-} from "@mui/material";
+ FormHelperText
+} from '@mui/material';
-import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
-import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
-import { DateTimePicker } from "@mui/x-date-pickers/DateTimePicker";
-import { renderQuotaWithPrompt, showSuccess, showError } from "utils/common";
-import { API } from "utils/api";
-require("dayjs/locale/zh-cn");
+import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
+import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
+import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
+import { renderQuotaWithPrompt, showSuccess, showError } from 'utils/common';
+import { API } from 'utils/api';
+import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';
+import CheckBoxIcon from '@mui/icons-material/CheckBox';
+import { createFilterOptions } from '@mui/material/Autocomplete';
+require('dayjs/locale/zh-cn');
+const icon = ;
+const checkedIcon = ;
+const filter = createFilterOptions();
const validationSchema = Yup.object().shape({
is_edit: Yup.boolean(),
- name: Yup.string().required("名称 不能为空"),
- remain_quota: Yup.number().min(0, "必须大于等于0"),
+ name: Yup.string().required('名称 不能为空'),
+ remain_quota: Yup.number().min(0, '必须大于等于0'),
expired_time: Yup.number(),
- unlimited_quota: Yup.boolean(),
+ unlimited_quota: Yup.boolean()
});
const originInputs = {
is_edit: false,
- name: "",
+ name: '',
remain_quota: 0,
expired_time: -1,
unlimited_quota: false,
+ subnet: '',
+ models: []
};
const EditModal = ({ open, tokenId, onCancel, onOk }) => {
const theme = useTheme();
const [inputs, setInputs] = useState(originInputs);
+ const [modelOptions, setModelOptions] = useState([]);
const submit = async (values, { setErrors, setStatus, setSubmitting }) => {
setSubmitting(true);
values.remain_quota = parseInt(values.remain_quota);
let res;
+ let models = values.models.join(',');
if (values.is_edit) {
- res = await API.put(`/api/token/`, { ...values, id: parseInt(tokenId) });
+ res = await API.put(`/api/token/`, { ...values, id: parseInt(tokenId), models: models });
} else {
- res = await API.post(`/api/token/`, values);
+ res = await API.post(`/api/token/`, { ...values, models: models });
}
const { success, message } = res.data;
if (success) {
if (values.is_edit) {
- showSuccess("令牌更新成功!");
+ showSuccess('令牌更新成功!');
} else {
- showSuccess("令牌创建成功,请在列表页面点击复制获取令牌!");
+ showSuccess('令牌创建成功,请在列表页面点击复制获取令牌!');
}
setSubmitting(false);
setStatus({ success: true });
@@ -78,61 +91,55 @@ const EditModal = ({ open, tokenId, onCancel, onOk }) => {
const { success, message, data } = res.data;
if (success) {
data.is_edit = true;
+ if (data.models === '') {
+ data.models = [];
+ } else {
+ data.models = data.models.split(',');
+ }
setInputs(data);
} else {
showError(message);
}
};
+ const loadAvailableModels = async () => {
+ let res = await API.get(`/api/user/available_models`);
+ const { success, message, data } = res.data;
+ if (success) {
+ setModelOptions(data);
+ } else {
+ showError(message);
+ }
+ };
useEffect(() => {
if (tokenId) {
loadToken().then();
} else {
- setInputs({...originInputs});
+ setInputs({ ...originInputs });
}
+ loadAvailableModels().then();
}, [tokenId]);
return (
-