Merge pull request #55 from songquanpeng/main

Fork Sync: Update from parent repository
This commit is contained in:
quzard 2023-06-21 16:20:04 +08:00 committed by GitHub
commit e363f133d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 13 deletions

View File

@ -34,39 +34,39 @@ func SearchUserTokens(userId int, keyword string) (tokens []*Token, err error) {
func ValidateUserToken(key string) (token *Token, err error) { func ValidateUserToken(key string) (token *Token, err error) {
if key == "" { if key == "" {
return nil, errors.New("未提供 token") return nil, errors.New("未提供令牌")
} }
token, err = CacheGetTokenByKey(key) token, err = CacheGetTokenByKey(key)
if err == nil { if err == nil {
if token.Status != common.TokenStatusEnabled { if token.Status != common.TokenStatusEnabled {
return nil, errors.New("该 token 状态不可用") return nil, errors.New("该令牌状态不可用")
} }
if token.ExpiredTime != -1 && token.ExpiredTime < common.GetTimestamp() { if token.ExpiredTime != -1 && token.ExpiredTime < common.GetTimestamp() {
token.Status = common.TokenStatusExpired token.Status = common.TokenStatusExpired
err := token.SelectUpdate() err := token.SelectUpdate()
if err != nil { if err != nil {
common.SysError("更新 token 状态失败:" + err.Error()) common.SysError("更新令牌状态失败:" + err.Error())
} }
return nil, errors.New("该 token 已过期") return nil, errors.New("该令牌已过期")
} }
if !token.UnlimitedQuota && token.RemainQuota <= 0 { if !token.UnlimitedQuota && token.RemainQuota <= 0 {
token.Status = common.TokenStatusExhausted token.Status = common.TokenStatusExhausted
err := token.SelectUpdate() err := token.SelectUpdate()
if err != nil { if err != nil {
common.SysError("更新 token 状态失败:" + err.Error()) common.SysError("更新令牌状态失败:" + err.Error())
} }
return nil, errors.New("该 token 额度已用尽") return nil, errors.New("该令牌额度已用尽")
} }
go func() { go func() {
token.AccessedTime = common.GetTimestamp() token.AccessedTime = common.GetTimestamp()
err := token.SelectUpdate() err := token.SelectUpdate()
if err != nil { if err != nil {
common.SysError("更新 token 失败:" + err.Error()) common.SysError("更新令牌失败:" + err.Error())
} }
}() }()
return token, nil return token, nil
} }
return nil, errors.New("无效的 token") return nil, errors.New("无效的令牌")
} }
func GetTokenByIds(id int, userId int) (*Token, error) { func GetTokenByIds(id int, userId int) (*Token, error) {

View File

@ -46,4 +46,13 @@ export function renderQuota(quota, digits = 2) {
return '$' + (quota / 1000 * quotaPerUnit).toFixed(digits); return '$' + (quota / 1000 * quotaPerUnit).toFixed(digits);
} }
return renderNumber(quota); return renderNumber(quota);
}
export function renderQuotaWithPrompt(quota, digits) {
let displayInCurrency = localStorage.getItem('display_in_currency');
displayInCurrency = displayInCurrency === 'true';
if (displayInCurrency) {
return `(等价金额:${renderQuota(quota, digits)}`;
}
return '';
} }

View File

@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react';
import { Button, Form, Header, Segment } from 'semantic-ui-react'; import { Button, Form, Header, Segment } from 'semantic-ui-react';
import { useParams } from 'react-router-dom'; import { useParams } from 'react-router-dom';
import { API, downloadTextAsFile, showError, showSuccess } from '../../helpers'; import { API, downloadTextAsFile, showError, showSuccess } from '../../helpers';
import { renderQuota } from '../../helpers/render'; import { renderQuota, renderQuotaWithPrompt } from '../../helpers/render';
const EditRedemption = () => { const EditRedemption = () => {
const params = useParams(); const params = useParams();
@ -11,7 +11,7 @@ const EditRedemption = () => {
const [loading, setLoading] = useState(isEdit); const [loading, setLoading] = useState(isEdit);
const originInputs = { const originInputs = {
name: '', name: '',
quota: 100, quota: 100000,
count: 1 count: 1
}; };
const [inputs, setInputs] = useState(originInputs); const [inputs, setInputs] = useState(originInputs);
@ -88,7 +88,7 @@ const EditRedemption = () => {
</Form.Field> </Form.Field>
<Form.Field> <Form.Field>
<Form.Input <Form.Input
label={`额度(等价金额 ${renderQuota(quota)}`} label={`额度${renderQuotaWithPrompt(quota)}`}
name='quota' name='quota'
placeholder={'请输入单个兑换码中包含的额度'} placeholder={'请输入单个兑换码中包含的额度'}
onChange={handleInputChange} onChange={handleInputChange}

View File

@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react';
import { Button, Form, Header, Message, Segment } from 'semantic-ui-react'; import { Button, Form, Header, Message, Segment } from 'semantic-ui-react';
import { useParams } from 'react-router-dom'; import { useParams } from 'react-router-dom';
import { API, showError, showSuccess, timestamp2string } from '../../helpers'; import { API, showError, showSuccess, timestamp2string } from '../../helpers';
import { renderQuota } from '../../helpers/render'; import { renderQuota, renderQuotaWithPrompt } from '../../helpers/render';
const EditToken = () => { const EditToken = () => {
const params = useParams(); const params = useParams();
@ -138,7 +138,7 @@ const EditToken = () => {
<Message>注意令牌的额度仅用于限制令牌本身的最大额度使用量实际的使用受到账户的剩余额度限制</Message> <Message>注意令牌的额度仅用于限制令牌本身的最大额度使用量实际的使用受到账户的剩余额度限制</Message>
<Form.Field> <Form.Field>
<Form.Input <Form.Input
label={`额度(等价金额 ${renderQuota(remain_quota)}`} label={`额度${renderQuotaWithPrompt(remain_quota)}`}
name='remain_quota' name='remain_quota'
placeholder={'请输入额度'} placeholder={'请输入额度'}
onChange={handleInputChange} onChange={handleInputChange}