This commit is contained in:
wood 2023-11-05 18:55:25 +08:00
parent 5770c3f939
commit 72c754a825
3 changed files with 89 additions and 43 deletions

View File

@ -62,7 +62,7 @@
<mdui-menu-item value="https://api.openai.com">[官网线路]api.openai.com</mdui-menu-item>
<mdui-menu-item value="https://oapi.czl.net">[CZLoapi线路]oapi.czl.net</mdui-menu-item>
<mdui-menu-item
value="https://gateway.ai.cloudflare.com/v1/feedd0aa8abd6875052d86a94f1baf83/test/openai">[Cloudflare网关]查不了已用量</mdui-menu-item>
value="https://gateway.ai.cloudflare.com/v1/feedd0aa8abd6875052d86a94f1baf83/test/openai">[Cloudflare网关]不封号,查不了已用量</mdui-menu-item>
<mdui-menu-item value="https://openai.996.lat">[群友CF反代]openai.996.lat</mdui-menu-item>
<mdui-menu-item value="custom">[已前置https]自定义</mdui-menu-item>
</mdui-select>

View File

@ -48,3 +48,8 @@ a {
src: url(/static/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2);
}
:not(:defined) {
visibility: hidden;
}

View File

@ -31,9 +31,32 @@ toggleProgressBar();
toggleSubInfo();
toggleSetidInfo();
// 线路选择框
function toggleCustomUrlInput() {
// 获取id为"api-url-select"的元素
const selectElement = document.getElementById("api-url-select");
// 获取id为"custom-url-input"的元素
const customUrlInput = document.getElementById("custom-url-input");
// 如果selectElement的值为"custom"
if (selectElement.value === "custom") {
// 从customUrlInput的classList中移除"hidden"
customUrlInput.classList.remove("hidden");
} else {
// 给customUrlInput的classList添加"hidden"
customUrlInput.classList.add("hidden");
}
}
let queriedApiKeys = [];
let serialNumber = 1;
/**
* 格式化日期
* @param {Date} date - 需要格式化的日期对象
* @returns {string} - 格式化后的日期字符串--
*/
function formatDate(date) {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
@ -73,32 +96,48 @@ async function checkBilling(apiKey, apiUrl) {
const formattedDate = `${expiryDate.getFullYear()}-${(expiryDate.getMonth() + 1).toString().padStart(2, '0')}-${expiryDate.getDate().toString().padStart(2, '0')}`;
try {
// 将订阅数据中的硬限制金额赋值给totalAmount变量
totalAmount = subscriptionData.hard_limit_usd;
// 通过fetch函数获取advanceData数据传入urlAdvanceData和headers参数
const advanceDataResponse = await fetch(urlAdvanceData, { headers });
// 将响应解析为json格式
const advanceData = await advanceDataResponse.json();
// 如果订阅数据的计费机制为'advance'或者总金额小于等于6并且订阅数据中没有信用卡信息
if ((subscriptionData.billing_mechanism === 'advance') || (totalAmount <= 6 && !subscriptionData.has_credit_card)) {
// 将advanceData中的total_granted属性值赋值给totalAmount变量
totalAmount = advanceData.total_granted;
}
} catch (error) {
// 捕获错误并打印到控制台
console.error(error);
}
try {
// 如果总金额大于6
if (totalAmount > 6) {
// 设置开始日期为子日期
startDate = subDate;
// 构建请求使用数据的URL
urlUsage = `${apiUrl}/dashboard/billing/usage?start_date=${formatDate(startDate)}&end_date=${formatDate(endDate)}`;
// 发送请求获取使用数据的响应
response = await fetch(urlUsage, { headers });
// 将响应解析为JSON格式的数据
const usageData = await response.json();
}
// 发送请求获取使用数据的响应
response = await fetch(urlUsage, { headers });
// 将响应解析为JSON格式的数据
const usageData = await response.json();
// 计算总使用量并除以100
totalUsage = usageData.total_usage / 100;
// 计算剩余金额并保留3位小数
remaining = (totalAmount - totalUsage).toFixed(3);
} catch (error) {
// 输出错误信息
console.error(error);
}
@ -231,11 +270,14 @@ async function checkBilling(apiKey, apiUrl) {
// 发起请求查有效
async function checkCompletion(apiKey, apiUrl) {
// 设置请求的url
const urlCompletion = `${apiUrl}/chat/completions`;
// 设置请求头
const headers = {
"Authorization": "Bearer " + apiKey,
"Content-Type": "application/json"
};
// 设置请求体
const postBody = JSON.stringify({
"model": "gpt-3.5-turbo",
"messages": [{
@ -245,12 +287,14 @@ async function checkBilling(apiKey, apiUrl) {
"max_tokens": 1
});
// 发起请求
let response = await fetch(urlCompletion, {
method: 'POST',
headers: headers,
body: postBody
});
// 获取响应数据
let data = await response.json();
// 判断请求是否成功
if (response.status === 200) {
@ -294,6 +338,7 @@ function sendRequest() {
document.getElementById("result-table").getElementsByTagName('tbody')[0].innerHTML = "";
let apiUrl = "";
// 判断用户选择的API URL选项
if (apiUrlSelect.value === "custom") {
if (customUrlInput.value.trim() === "") {
mdui.alert({
@ -303,16 +348,24 @@ function sendRequest() {
})
return;
} else {
apiUrl = customUrlInput.value.trim();
const apiUrl = customUrlInput.value.trim();
if (!apiUrl.startsWith("http://") && !apiUrl.startsWith("https://")) {
apiUrl = "https://" + apiUrl;
}
apiUrl += "/v1";
if (apiUrl.startsWith("https://gateway.ai.cloudflare.com")) {
apiUrl = apiUrl; // 如果用户输入的是https://gateway.ai.cloudflare.com开头则不添加/v1
} else {
apiUrl += "/v1"; // 如果不是,则添加路径‘/v1
}
}
} else {
apiUrl = apiUrlSelect.value;
// 检查选择的是否是"Cloudflare网关"选项
if (apiUrlSelect.value !== "https://gateway.ai.cloudflare.com/v1/feedd0aa8abd6875052d86a94f1baf83/test/openai") {
if (apiUrlSelect.value === "https://gateway.ai.cloudflare.com/v1/feedd0aa8abd6875052d86a94f1baf83/test/openai") {
apiUrl = apiUrl.replace("/v1", ""); // 如果用户选择的选项是https://gateway.ai.cloudflare.com开头则删除/v1
} else {
apiUrl += "/v1"; // 如果不是,则添加路径‘/v1
}
}
@ -556,17 +609,6 @@ function sendRequest() {
}
function toggleCustomUrlInput() {
const selectElement = document.getElementById("api-url-select");
const customUrlInput = document.getElementById("custom-url-input");
if (selectElement.value === "custom") {
customUrlInput.classList.remove("hidden");
} else {
customUrlInput.classList.add("hidden");
}
}
function showLoadingAnimation() {
const button = document.getElementById("query-button");
@ -609,4 +651,3 @@ toggleButton.addEventListener("click", () => {
navigationDrawer.open = false;
}
});