Merge branch 'main' of https://gogs.yxxurl.com/Kelvin/api2gpt-web
continuous-integration/drone/push Build is passing Details

pull/1/head
franktrue 3 years ago
commit 58868ba228

@ -42,3 +42,11 @@ export function delApiToken(id) {
method: 'delete' method: 'delete'
}) })
} }
// 刷新令牌管理
export function flushApiToken(id) {
return request({
url: '/cert/apiToken/flush/' + id,
method: 'get'
})
}

@ -42,3 +42,11 @@ export function delUserBalance(id) {
method: 'delete' method: 'delete'
}) })
} }
//刷新服务器缓存
export function refreshUserBalance(id) {
return request({
url: '/cert/userBalance/refresh/',
method: 'get'
})
}

@ -1,14 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="Key" prop="id">
<el-input
v-model="queryParams.id"
placeholder="请输入Key"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="用户名" prop="name"> <el-form-item label="用户名" prop="name">
<el-input <el-input
v-model="queryParams.name" v-model="queryParams.name"
@ -25,8 +17,40 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="是否默认" prop="isDefault"> <el-form-item label="服务器ID" prop="serverId">
<el-select v-model="queryParams.isDefault" placeholder="请选择是否默认" clearable> <el-input
v-model="queryParams.serverId"
placeholder="请输入服务器ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="开始时间" prop="startDate">
<el-date-picker clearable
v-model="queryParams.startDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="结束时间" prop="endDate">
<el-date-picker clearable
v-model="queryParams.endDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="最后使用时间" prop="lastUsed">
<el-date-picker clearable
v-model="queryParams.lastUsed"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择最后使用时间">
</el-date-picker>
</el-form-item>
<el-form-item label="默认" prop="isDefault">
<el-select v-model="queryParams.isDefault" placeholder="请选择默认" clearable>
<el-option <el-option
v-for="dict in sys_yes_no" v-for="dict in sys_yes_no"
:key="dict.value" :key="dict.value"
@ -90,14 +114,24 @@
v-hasPermi="['cert:apiToken:export']" v-hasPermi="['cert:apiToken:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
plain
icon="Refresh"
:disabled="multiple"
@click="handleFlush"
v-hasPermi="['cert:apiToken:remove']"
>刷新TOKEN</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="apiTokenList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="apiTokenList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="Key" align="center" prop="id" /> <el-table-column label="id" align="center" prop="id" />
<el-table-column label="用户名" align="center" prop="name" /> <el-table-column label="用户名" align="center" prop="name" />
<el-table-column label="用户ID" align="center" prop="userId" /> <el-table-column label="用户ID" align="center" prop="userId" />
<el-table-column label="服务器ID" align="center" prop="serverId" />
<el-table-column label="开始时间" align="center" prop="startDate" width="180"> <el-table-column label="开始时间" align="center" prop="startDate" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}</span>
@ -108,12 +142,12 @@
<span>{{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="最后使用" align="center" prop="lastUsed" width="180"> <el-table-column label="最后使用时间" align="center" prop="lastUsed" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.lastUsed, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.lastUsed, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="是否默认" align="center" prop="isDefault"> <el-table-column label="默认" align="center" prop="isDefault">
<template #default="scope"> <template #default="scope">
<dict-tag :options="sys_yes_no" :value="scope.row.isDefault"/> <dict-tag :options="sys_yes_no" :value="scope.row.isDefault"/>
</template> </template>
@ -123,6 +157,7 @@
<dict-tag :options="sys_normal_disable" :value="scope.row.status"/> <dict-tag :options="sys_normal_disable" :value="scope.row.status"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['cert:apiToken:edit']"></el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['cert:apiToken:edit']"></el-button>
@ -148,6 +183,9 @@
<el-form-item label="用户ID" prop="userId"> <el-form-item label="用户ID" prop="userId">
<el-input v-model="form.userId" placeholder="请输入用户ID" /> <el-input v-model="form.userId" placeholder="请输入用户ID" />
</el-form-item> </el-form-item>
<el-form-item label="服务器ID" prop="serverId">
<el-input v-model="form.serverId" placeholder="请输入服务器ID" />
</el-form-item>
<el-form-item label="开始时间" prop="startDate"> <el-form-item label="开始时间" prop="startDate">
<el-date-picker clearable <el-date-picker clearable
v-model="form.startDate" v-model="form.startDate"
@ -164,15 +202,15 @@
placeholder="请选择结束时间"> placeholder="请选择结束时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="最后使用" prop="lastUsed"> <el-form-item label="最后使用时间" prop="lastUsed">
<el-date-picker clearable <el-date-picker clearable
v-model="form.lastUsed" v-model="form.lastUsed"
type="date" type="date"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="请选择最后使用"> placeholder="请选择最后使用时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="是否默认" prop="isDefault"> <el-form-item label="默认" prop="isDefault">
<el-radio-group v-model="form.isDefault"> <el-radio-group v-model="form.isDefault">
<el-radio <el-radio
v-for="dict in sys_yes_no" v-for="dict in sys_yes_no"
@ -214,7 +252,7 @@
</template> </template>
<script setup name="ApiToken"> <script setup name="ApiToken">
import { listApiToken, getApiToken, delApiToken, addApiToken, updateApiToken } from "@/api/cert/apiToken"; import { listApiToken, getApiToken, delApiToken, addApiToken, updateApiToken, flushApiToken } from "@/api/cert/apiToken";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { sys_del_flag, sys_yes_no, sys_normal_disable } = proxy.useDict('sys_del_flag', 'sys_yes_no', 'sys_normal_disable'); const { sys_del_flag, sys_yes_no, sys_normal_disable } = proxy.useDict('sys_del_flag', 'sys_yes_no', 'sys_normal_disable');
@ -234,9 +272,12 @@ const data = reactive({
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
id: null,
name: null, name: null,
userId: null, userId: null,
serverId: null,
startDate: null,
endDate: null,
lastUsed: null,
isDefault: null, isDefault: null,
status: null, status: null,
}, },
@ -247,8 +288,11 @@ const data = reactive({
userId: [ userId: [
{ required: true, message: "用户ID不能为空", trigger: "blur" } { required: true, message: "用户ID不能为空", trigger: "blur" }
], ],
serverId: [
{ required: true, message: "服务器ID不能为空", trigger: "blur" }
],
isDefault: [ isDefault: [
{ required: true, message: "是否默认不能为空", trigger: "change" } { required: true, message: "默认不能为空", trigger: "change" }
], ],
status: [ status: [
{ required: true, message: "状态不能为空", trigger: "change" } { required: true, message: "状态不能为空", trigger: "change" }
@ -256,12 +300,6 @@ const data = reactive({
delFlag: [ delFlag: [
{ required: true, message: "删除标志不能为空", trigger: "change" } { required: true, message: "删除标志不能为空", trigger: "change" }
], ],
createBy: [
{ required: true, message: "不能为空", trigger: "blur" }
],
updateBy: [
{ required: true, message: "不能为空", trigger: "blur" }
],
} }
}); });
@ -289,17 +327,18 @@ function reset() {
id: null, id: null,
name: null, name: null,
userId: null, userId: null,
serverId: null,
startDate: null, startDate: null,
endDate: null, endDate: null,
lastUsed: null, lastUsed: null,
isDefault: null, isDefault: null,
status: null, status: null,
delFlag: null, delFlag: null,
remark: null,
createBy: null, createBy: null,
createTime: null, createTime: null,
updateBy: null, updateBy: null,
updateTime: null, updateTime: null
remark: null
}; };
proxy.resetForm("apiTokenRef"); proxy.resetForm("apiTokenRef");
} }
@ -373,6 +412,16 @@ function handleDelete(row) {
}).catch(() => {}); }).catch(() => {});
} }
function handleFlush (row) {
const _ids = row.id || ids.value;
proxy.$modal.confirm('是否确认刷新令牌管理编号为"' + _ids + '"的数据项?').then(function() {
return flushApiToken(_ids);
}).then(() => {
getList();
proxy.$modal.msgSuccess("刷新成功");
}).catch(() => {});
}
/** 导出按钮操作 */ /** 导出按钮操作 */
function handleExport() { function handleExport() {
proxy.download('cert/apiToken/export', { proxy.download('cert/apiToken/export', {

@ -54,6 +54,14 @@
v-hasPermi="['cert:userBalance:export']" v-hasPermi="['cert:userBalance:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
plain
icon="Refresh"
@click="handleRefresh"
v-hasPermi="['cert:userBalance:refresh']"
>刷新余额</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -99,7 +107,7 @@
</template> </template>
<script setup name="UserBalance"> <script setup name="UserBalance">
import { listUserBalance, getUserBalance, delUserBalance, addUserBalance, updateUserBalance } from "@/api/cert/userBalance"; import { listUserBalance, getUserBalance, delUserBalance, addUserBalance, updateUserBalance,refreshUserBalance } from "@/api/cert/userBalance";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
@ -225,6 +233,16 @@
}).catch(() => {}); }).catch(() => {});
} }
/** 刷新缓存 */
function handleRefresh() {
proxy.$modal.confirm('是否确认刷新?').then(function() {
refreshUserBalance();
}).then(() => {
proxy.$modal.msgSuccess("刷新成功");
getList();
}).catch(() => {});
}
/** 导出按钮操作 */ /** 导出按钮操作 */
function handleExport() { function handleExport() {
proxy.download('cert/userBalance/export', { proxy.download('cert/userBalance/export', {

@ -11,7 +11,7 @@
微信客服请添加 微信客服请添加
</div> </div>
<div class="info"> <div class="info">
TG群组 TG群组https://t.me/api2gpt
</div> </div>
<div class="info"> <div class="info">
充值订单问题请发送邮件至客服邮箱: service@api2gpt.com 充值订单问题请发送邮件至客服邮箱: service@api2gpt.com

Loading…
Cancel
Save