feat: support batch creation of channels (close #58)

This commit is contained in:
JustSong 2023-05-13 17:08:13 +08:00
parent 5798fdac50
commit dc4a6cb711
3 changed files with 52 additions and 12 deletions

View File

@ -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,

View File

@ -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

View File

@ -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>