feat: support batch creation of channels (close #58)
This commit is contained in:
parent
5798fdac50
commit
dc4a6cb711
@ -6,6 +6,7 @@ import (
|
|||||||
"one-api/common"
|
"one-api/common"
|
||||||
"one-api/model"
|
"one-api/model"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetAllChannels(c *gin.Context) {
|
func GetAllChannels(c *gin.Context) {
|
||||||
@ -84,7 +85,17 @@ func AddChannel(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
channel.CreatedTime = common.GetTimestamp()
|
channel.CreatedTime = common.GetTimestamp()
|
||||||
channel.AccessedTime = common.GetTimestamp()
|
channel.AccessedTime = common.GetTimestamp()
|
||||||
err = channel.Insert()
|
keys := strings.Split(channel.Key, "\n")
|
||||||
|
channels := make([]model.Channel, 0)
|
||||||
|
for _, key := range keys {
|
||||||
|
if key == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
localChannel := channel
|
||||||
|
localChannel.Key = key
|
||||||
|
channels = append(channels, localChannel)
|
||||||
|
}
|
||||||
|
err = model.BatchInsertChannels(channels)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"success": false,
|
"success": false,
|
||||||
|
@ -53,6 +53,12 @@ func GetRandomChannel() (*Channel, error) {
|
|||||||
return &channel, err
|
return &channel, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BatchInsertChannels(channels []Channel) error {
|
||||||
|
var err error
|
||||||
|
err = DB.Create(&channels).Error
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (channel *Channel) Insert() error {
|
func (channel *Channel) Insert() error {
|
||||||
var err error
|
var err error
|
||||||
err = DB.Create(channel).Error
|
err = DB.Create(channel).Error
|
||||||
|
@ -16,8 +16,10 @@ const EditChannel = () => {
|
|||||||
base_url: '',
|
base_url: '',
|
||||||
other: ''
|
other: ''
|
||||||
};
|
};
|
||||||
|
const [batch, setBatch] = useState(false);
|
||||||
const [inputs, setInputs] = useState(originInputs);
|
const [inputs, setInputs] = useState(originInputs);
|
||||||
const handleInputChange = (e, { name, value }) => {
|
const handleInputChange = (e, { name, value }) => {
|
||||||
|
console.log(name, value);
|
||||||
setInputs((inputs) => ({ ...inputs, [name]: value }));
|
setInputs((inputs) => ({ ...inputs, [name]: value }));
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -130,17 +132,38 @@ const EditChannel = () => {
|
|||||||
autoComplete='new-password'
|
autoComplete='new-password'
|
||||||
/>
|
/>
|
||||||
</Form.Field>
|
</Form.Field>
|
||||||
<Form.Field>
|
{
|
||||||
<Form.Input
|
batch ? <Form.Field>
|
||||||
label='密钥'
|
<Form.TextArea
|
||||||
name='key'
|
label='密钥'
|
||||||
placeholder={'请输入密钥'}
|
name='key'
|
||||||
onChange={handleInputChange}
|
placeholder={'请输入密钥,一行一个'}
|
||||||
value={inputs.key}
|
onChange={handleInputChange}
|
||||||
// type='password'
|
value={inputs.key}
|
||||||
autoComplete='new-password'
|
style={{ minHeight: 150, fontFamily: 'JetBrains Mono, Consolas' }}
|
||||||
/>
|
autoComplete='new-password'
|
||||||
</Form.Field>
|
/>
|
||||||
|
</Form.Field> : <Form.Field>
|
||||||
|
<Form.Input
|
||||||
|
label='密钥'
|
||||||
|
name='key'
|
||||||
|
placeholder={'请输入密钥'}
|
||||||
|
onChange={handleInputChange}
|
||||||
|
value={inputs.key}
|
||||||
|
autoComplete='new-password'
|
||||||
|
/>
|
||||||
|
</Form.Field>
|
||||||
|
}
|
||||||
|
{
|
||||||
|
!isEdit && (
|
||||||
|
<Form.Checkbox
|
||||||
|
checked={batch}
|
||||||
|
label='批量创建'
|
||||||
|
name='batch'
|
||||||
|
onChange={() => setBatch(!batch)}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
<Button onClick={submit}>提交</Button>
|
<Button onClick={submit}>提交</Button>
|
||||||
</Form>
|
</Form>
|
||||||
</Segment>
|
</Segment>
|
||||||
|
Loading…
Reference in New Issue
Block a user