feat: add tags to plans, refactor order service, adn fix ticket lock

This commit is contained in:
xboard
2025-07-01 11:14:18 +08:00
parent 349c1710fe
commit 05afe870e7
13 changed files with 208 additions and 97 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1,32 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Shadcn Admin</title>
<meta
name="description"
content="Admin Dashboard UI built with Shadcn and Vite."
/>
<script>
window.settings = {
base_url: 'http://127.0.0.1:8000',
title: 'Xboard',
version: '1.0.0',
logo: 'https://xboard.io/i6mages/logo.png',
secure_path: '/22aba88a',
}
</script>
<script src="./locales/en-US.js"></script>
<script src="./locales/zh-CN.js"></script>
<script src="./locales/ko-KR.js"></script>
<script type="module" crossorigin src="./assets/index.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index.css">
<link rel="stylesheet" crossorigin href="./assets/vendor.css">
</head>
<body>
<div id="root"></div>
</body>
</html>

View File

@@ -1699,10 +1699,26 @@ window.XBOARD_TRANSLATIONS['en-US'] = {
"error": "Please enter a valid name"
},
"rate": {
"label": "Rate",
"error": "Rate is required",
"error_numeric": "Rate must be a number",
"error_gte_zero": "Rate must be greater than or equal to 0"
"label": "Base Rate",
"error": "Base rate is required",
"error_numeric": "Base rate must be a number",
"error_gte_zero": "Base rate must be greater than or equal to 0"
},
"dynamic_rate": {
"enable_label": "Enable Dynamic Rate",
"enable_description": "Set different rate multipliers based on time periods",
"rules_label": "Time Period Rules",
"add_rule": "Add Rule",
"rule_title": "Rule {{index}}",
"start_time": "Start Time",
"end_time": "End Time",
"multiplier": "Rate Multiplier",
"no_rules": "No rules yet, click the button above to add",
"start_time_error": "Start time is required",
"end_time_error": "End time is required",
"multiplier_error": "Rate multiplier is required",
"multiplier_error_numeric": "Rate multiplier must be a number",
"multiplier_error_gte_zero": "Rate multiplier must be greater than or equal to 0"
},
"code": {
"label": "Custom Node ID",
@@ -2455,6 +2471,10 @@ window.XBOARD_TRANSLATIONS['en-US'] = {
"placeholder": "Enter capacity limit",
"unit": "Users"
},
"tags": {
"label": "Tags",
"placeholder": "Enter a tag and press Enter to confirm"
},
"reset_method": {
"label": "Traffic Reset Method",
"placeholder": "Select reset method",
@@ -2493,6 +2513,9 @@ window.XBOARD_TRANSLATIONS['en-US'] = {
"success": {
"add": "Plan added successfully",
"update": "Plan updated successfully"
},
"error": {
"validation": "Form validation failed. Please check for errors and try again."
}
}
},

View File

@@ -1666,10 +1666,26 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = {
"error": "请输入有效的节点名称"
},
"rate": {
"label": "倍率",
"error": "倍率不能为空",
"error_numeric": "率必须是数字",
"error_gte_zero": "率必须大于或等于0"
"label": "基础倍率",
"error": "基础倍率不能为空",
"error_numeric": "基础倍率必须是数字",
"error_gte_zero": "基础倍率必须大于或等于0"
},
"dynamic_rate": {
"enable_label": "启用动态倍率",
"enable_description": "根据时间段设置不同的倍率乘数",
"rules_label": "时间段规则",
"add_rule": "添加规则",
"rule_title": "规则 {{index}}",
"start_time": "开始时间",
"end_time": "结束时间",
"multiplier": "倍率乘数",
"no_rules": "暂无规则,点击上方按钮添加",
"start_time_error": "开始时间不能为空",
"end_time_error": "结束时间不能为空",
"multiplier_error": "倍率乘数不能为空",
"multiplier_error_numeric": "倍率乘数必须是数字",
"multiplier_error_gte_zero": "倍率乘数必须大于或等于0"
},
"code": {
"label": "自定义节点ID",
@@ -2421,6 +2437,10 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = {
"placeholder": "请输入容量限制",
"unit": "人"
},
"tags": {
"label": "标签",
"placeholder": "输入标签后按回车确认"
},
"reset_method": {
"label": "流量重置方式",
"placeholder": "请选择重置方式",
@@ -2459,6 +2479,9 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = {
"success": {
"add": "套餐添加成功",
"update": "套餐更新成功"
},
"error": {
"validation": "表单校验失败,请检查并修正错误后重试。"
}
}
},