diff --git a/src/i18n/lang/en-US.js b/src/i18n/lang/en-US.js
index 07dde3a..63c2ae8 100644
--- a/src/i18n/lang/en-US.js
+++ b/src/i18n/lang/en-US.js
@@ -76,6 +76,9 @@ export default {
specifyStart: 'Start',
enterRoomIds: 'Enter room IDs, separate multiple IDs with Enter key',
enterRoomId: 'Please enter room ID',
+ currentCount: 'Current',
+ countSeparator: '/',
+ countUnit: 'items',
// 网络问题弹窗
networkFailed:
diff --git a/src/i18n/lang/zh-CN.js b/src/i18n/lang/zh-CN.js
index 1c03026..979b577 100644
--- a/src/i18n/lang/zh-CN.js
+++ b/src/i18n/lang/zh-CN.js
@@ -59,6 +59,9 @@ export default {
specifyStart: '开始',
networkFailed: '网络连接失败,无法访问网络,请查看网络设置。',
enterRoomIds: '请输入直播间id,多个id用回车键隔开',
+ currentCount: '当前',
+ countSeparator: '条 / 最大',
+ countUnit: '条',
// ==== 新增:表格列、排序使用 ====
userId: '用户id',
diff --git a/src/static/css/cyber-design.less b/src/static/css/cyber-design.less
index 228e97d..6e20ccd 100644
--- a/src/static/css/cyber-design.less
+++ b/src/static/css/cyber-design.less
@@ -69,15 +69,13 @@
// 玻璃态组件 Glass Components
// ============================================
-// 玻璃态头部卡片
+// 玻璃态头部卡片 - 简化版(移除 backdrop-filter 提升性能)
.glass-header {
- background: rgba(255, 255, 255, 0.85);
- backdrop-filter: blur(12px);
- -webkit-backdrop-filter: blur(12px);
- border: 1px solid rgba(255, 255, 255, 0.9);
+ background: #ffffff;
+ border: 1px solid #e8ecf0;
border-radius: @radius-3xl;
padding: 28px 32px;
- box-shadow: @shadow-glass;
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04);
}
// 玻璃态内容卡片
@@ -111,20 +109,11 @@
gap: 8px;
&:hover {
- filter: brightness(1.1);
- box-shadow: @shadow-cyber-glow;
- transform: translateY(-1px);
+ filter: brightness(1.05);
}
&:active {
- transform: translateY(0);
- }
-
- &:disabled {
- opacity: 0.6;
- cursor: not-allowed;
- filter: none;
- transform: none;
+ opacity: 0.9;
}
}
@@ -147,12 +136,6 @@
&:hover {
background: @tech-gray-50;
border-color: @tech-gray-300;
- transform: translateY(-1px);
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
- }
-
- &:active {
- transform: translateY(0);
}
}
@@ -473,9 +456,7 @@
padding: 0 24px !important;
&:hover {
- filter: brightness(1.1);
- box-shadow: @shadow-cyber-glow !important;
- transform: translateY(-1px);
+ filter: brightness(1.05);
}
&:active {
@@ -505,7 +486,6 @@
&:hover {
background: @tech-gray-50 !important;
border-color: @tech-gray-300 !important;
- transform: translateY(-1px);
}
}
}
diff --git a/src/utils/tenantConfig.js b/src/utils/tenantConfig.js
new file mode 100644
index 0000000..d61eeb9
--- /dev/null
+++ b/src/utils/tenantConfig.js
@@ -0,0 +1,26 @@
+/**
+ * 租户配置管理
+ * 用于统一管理特定租户的差异化配置
+ */
+
+// 直播间ID限制配置
+// key: tenantId (租户ID)
+// value: limit (最大行数限制)
+export const TENANT_LIMIT_CONFIG = {
+ '12741': 5000,
+ '12348': 5000,
+ // 在此处添加更多租户ID和对应的限制
+ // '10001': 1000,
+}
+
+export const DEFAULT_LIMIT = 50
+
+/**
+ * 获取租户的直播间ID限制数量
+ * @param {string|number} tenantId 租户ID
+ * @returns {number} 限制数量
+ */
+export const getTenantLimit = (tenantId) => {
+ if (!tenantId) return DEFAULT_LIMIT
+ return TENANT_LIMIT_CONFIG[String(tenantId)] || DEFAULT_LIMIT
+}
diff --git a/src/views/hosts/Home.vue b/src/views/hosts/Home.vue
deleted file mode 100644
index 5b7f867..0000000
--- a/src/views/hosts/Home.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-//
-
-
diff --git a/src/views/hosts/hostsList.vue b/src/views/hosts/hostsList.vue
index 3ba5e84..810ef56 100644
--- a/src/views/hosts/hostsList.vue
+++ b/src/views/hosts/hostsList.vue
@@ -6,34 +6,20 @@
-
-
+
+
@@ -43,33 +29,32 @@
{{ t('hostsList.level') }}
-
+
/
-
+
-
+
+ {{ t('hostsList.runningTime') }}:
+
+ {{ String(hourstuo).padStart(2, '0') }}:{{
+ String(minutestuo).padStart(2, '0')
+ }}:{{ String(secondstuo).padStart(2, '0') }}
+
+
+ {{ t('hostsList.total') }}:
+ {{ getBrotherInfodata.total }}
+
+ {{ t('hostsList.valid') }}:
+ {{ getBrotherInfodata.valid }}
+
-
+
📍
{{
streamdialogVisibletext
@@ -78,21 +63,11 @@
}}
-
+
{{ t('hostsList.start') }}
-
+
{{ t('hostsList.end') }}
@@ -104,28 +79,13 @@
-
-
+
+
-
+
@
@@ -141,27 +101,17 @@
{{ t('hostsList.reset') }}
-
+
📥
{{ t('hostsList.exportExcel') }}
-
+
⚙️
{{ t('hostsList.moreFilters') }}
-
+
🎵
{{ t('hostsList.openTikTok') }}
@@ -172,20 +122,10 @@
{{ t('hostsList.currentNetwork') }}:
{{ countryData }}
-
- {{ t('hostsList.runningTime') }}:
-
- {{ String(hourstuo).padStart(2, '0') }}:{{
- String(minutestuo).padStart(2, '0')
- }}:{{ String(secondstuo).padStart(2, '0') }}
-
-
- {{ t('hostsList.total') }}:
- {{ getBrotherInfodata.total }}
-
- {{ t('hostsList.valid') }}:
- {{ getBrotherInfodata.valid }}
+
+
+
@@ -193,57 +133,27 @@
-
-
+
+
-
+
{{ scope.row.displayId }}
-
+
-
+
{{ scope.row.hostDisplayId }}
-
-
+
+
@@ -257,32 +167,17 @@
{{ t('hostsList.reset') }}
-->
-
+
-
+
-
+
{{ t('hostsList.time') }}
@@ -293,23 +188,12 @@
-
+
-
+
{{ field.label }}
@@ -319,32 +203,21 @@
-
+
-
+
-
+
{{ t('hostsList.sort') }}
@@ -353,18 +226,9 @@
-
-
+
+
@@ -372,21 +236,11 @@
-
-
+
+
@@ -404,41 +258,26 @@
-
+
-
+
+
+ {{ t('hostsList.currentCount') }} {{ currentLineCount }} {{ t('hostsList.countSeparator') }} {{
+ maxSpecifyLines }}
+ {{ t('hostsList.countUnit') }}
+
@@ -446,12 +285,7 @@
-
+
@@ -480,6 +314,7 @@ import {
} from "@/api/account";
import { usePythonBridge } from "@/utils/pythonBridge";
import { getUser, setSerch, getSerch } from "@/utils/storage";
+import { getTenantLimit } from "@/utils/tenantConfig";
import { ref, reactive, onMounted, onBeforeUnmount } from "vue";
const hourstuo = ref(0);
const minutestuo = ref(0);
@@ -686,8 +521,30 @@ function specifyCancel() {
queryFormData.value.anchor_ids = [];
}
// 输入框 input
-function handleInput() {
+import { computed } from "vue";
+
+// 动态计算最大行数限制
+const maxSpecifyLines = computed(() => {
+ return getTenantLimit(userInfo.value.tenantId);
+});
+
+// 当前行数
+const currentLineCount = computed(() => {
+ if (!textarea.value || textarea.value.trim() === "") {
+ return 0;
+ }
+ return textarea.value.split("\n").filter(line => line.trim() !== "").length;
+});
+
+function handleInput(value) {
streamdialogVisibletext.value = false;
+ if (typeof value !== "string") {
+ return;
+ }
+ const lines = value.split("\n");
+ if (lines.length > maxSpecifyLines.value) {
+ textarea.value = lines.slice(0, maxSpecifyLines.value).join("\n");
+ }
}
// 获取主播列表 - 开始爬取
@@ -701,7 +558,7 @@ function getBigBrother() {
key: "UserSettings",
data: queryFormData.value,
});
- storageSetInfos(storageobject.value).then((res) => {});
+ storageSetInfos(storageobject.value).then((res) => { });
queryFormData.value.tenantId = userInfo.value.tenantId;
queryFormData.value.region = countryData.value;
startTimerfun();
@@ -819,8 +676,8 @@ const lastVisibleTime = ref(null);
function tokenVerificationfun(params) {
tokenVerification(params)
- .then((res) => {})
- .catch((err) => {});
+ .then((res) => { })
+ .catch((err) => { });
}
onMounted(() => {
@@ -832,14 +689,14 @@ onMounted(() => {
const storageData = (queryFormData.value =
res == ""
? {
- coinMin: "",
- coinMax: "",
- levelMin: "",
- levelMax: "",
- isFilter: false,
- isRunning: true,
- anchor_ids: [],
- }
+ coinMin: "",
+ coinMax: "",
+ levelMin: "",
+ levelMax: "",
+ isFilter: false,
+ isRunning: true,
+ anchor_ids: [],
+ }
: JSON.parse(res));
if (
@@ -1028,7 +885,7 @@ function getCountry() {
label: item.countryNameEnglish,
});
} else if (locale.value === 'zh-CN') {
- options.value.push({
+ options.value.push({
value: item.countryGroupName,
label: item.countryGroupName,
});
@@ -1078,16 +935,14 @@ function openhostDisplayId(hostDisplayId) {
}
// ================================
-// 玻璃态头部区域
+// 玻璃态头部区域 - 简化版(移除 backdrop-filter 提升性能)
// ================================
.filter-header.glass-header {
- background: rgba(255, 255, 255, 0.329);
- backdrop-filter: blur(12px);
- -webkit-backdrop-filter: blur(12px);
- border: 1px solid rgba(255, 255, 255, 0.9);
+ background: #ffffff;
+ border: 1px solid #e8ecf0;
border-radius: 24px;
padding: 24px 28px;
- box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.06);
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04);
}
.filter-row {
@@ -1156,7 +1011,7 @@ function openhostDisplayId(hostDisplayId) {
}
// ================================
-// 按钮样式
+// 按钮样式 - 简化版(移除 transform 动画提升性能)
// ================================
.cyber-btn-primary {
background: linear-gradient(135deg, #00D2FF 0%, #0052CC 100%) !important;
@@ -1165,17 +1020,14 @@ function openhostDisplayId(hostDisplayId) {
font-weight: 600 !important;
padding: 0 20px !important;
height: 42px !important;
- box-shadow: 0 4px 12px rgba(0, 82, 204, 0.25) !important;
- transition: all 0.3s ease !important;
+ box-shadow: 0 2px 8px rgba(0, 82, 204, 0.2) !important;
.btn-icon {
margin-right: 6px;
}
&:hover {
- filter: brightness(1.1);
- box-shadow: 0 0 20px rgba(0, 210, 255, 0.4) !important;
- transform: translateY(-1px);
+ filter: brightness(1.05);
}
}
@@ -1186,7 +1038,11 @@ function openhostDisplayId(hostDisplayId) {
font-weight: 600 !important;
padding: 0 24px !important;
height: 42px !important;
- box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3) !important;
+ box-shadow: 0 2px 8px rgba(16, 185, 129, 0.2) !important;
+
+ &:hover {
+ filter: brightness(1.05);
+ }
}
.cyber-btn-danger {
@@ -1196,7 +1052,11 @@ function openhostDisplayId(hostDisplayId) {
font-weight: 600 !important;
padding: 0 24px !important;
height: 42px !important;
- box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3) !important;
+ box-shadow: 0 2px 8px rgba(239, 68, 68, 0.2) !important;
+
+ &:hover {
+ filter: brightness(1.05);
+ }
}
.ghost-btn {
@@ -1207,7 +1067,6 @@ function openhostDisplayId(hostDisplayId) {
font-weight: 600 !important;
padding: 0 16px !important;
height: 40px !important;
- transition: all 0.2s ease !important;
display: inline-flex !important;
align-items: center !important;
gap: 6px !important;
@@ -1219,8 +1078,6 @@ function openhostDisplayId(hostDisplayId) {
&:hover {
background: #f8fafc !important;
border-color: #cbd5e1 !important;
- transform: translateY(-1px);
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
}
&:disabled {
@@ -1266,6 +1123,7 @@ function openhostDisplayId(hostDisplayId) {
.info-label {
color: #94a3b8;
font-weight: 500;
+
}
.info-value {
@@ -1380,7 +1238,7 @@ function openhostDisplayId(hostDisplayId) {
.el-table__row {
transition: background 0.15s ease;
- &:hover > td.el-table__cell {
+ &:hover>td.el-table__cell {
background: #f8fafc !important;
}
}
@@ -1470,6 +1328,7 @@ function openhostDisplayId(hostDisplayId) {
transition: all 0.2s ease;
margin-right: 0 !important;
margin-top: 22px !important;
+
&:hover {
border-color: #cbd5e1;
}
@@ -1541,6 +1400,17 @@ function openhostDisplayId(hostDisplayId) {
min-height: 350px;
}
+.specify-count-hint {
+ margin-top: 10px;
+ padding: 8px 12px;
+ background: linear-gradient(135deg, rgba(0, 210, 255, 0.08) 0%, rgba(0, 82, 204, 0.08) 100%);
+ border-radius: 8px;
+ color: #475569;
+ font-size: 13px;
+ font-weight: 500;
+ text-align: right;
+}
+
.specify-footer {
width: 100%;
display: flex;
@@ -1608,8 +1478,13 @@ function openhostDisplayId(hostDisplayId) {
justify-content: flex-start;
}
-.gap-3 { gap: 12px; }
-.gap-4 { gap: 16px; }
+.gap-3 {
+ gap: 12px;
+}
+
+.gap-4 {
+ gap: 16px;
+}
.center-justify {
display: flex;
diff --git a/src/views/hosts/test.html b/src/views/hosts/test.html
deleted file mode 100644
index 8f42424..0000000
--- a/src/views/hosts/test.html
+++ /dev/null
@@ -1,313 +0,0 @@
-
-
-
-
-
-
- Yolo Assistant - Data Console
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- y
-
- yolo
- Assistant
-
-
-
-
- 当前网络:
- 日本 (Japan)
-
-
-
- 运行时间:
- 00:00:00
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- expand_more
-
-
- alternate_email
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- | ID |
- 所在直播间 |
- 用户ID |
- 等级 |
- 打赏金币 |
- 地区 |
- 粉丝数 |
- 创建时间 |
-
-
-
-
- | 1 |
-
- toxi_robert |
- 706350628... |
-
- LV
- 29
- |
- 37,420 |
- 意大利 |
- 562 |
- 2026-01-16
- 15:15:07 |
-
-
-
-
-
- database_off
-
- 暂无匹配数据
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/hosts/workbenches.vue b/src/views/hosts/workbenches.vue
deleted file mode 100644
index 208018f..0000000
--- a/src/views/hosts/workbenches.vue
+++ /dev/null
@@ -1,742 +0,0 @@
-
-
-
-
-
总数量: {{ hostData.totalCount }}
-
新建主播: {{ hostData.validAnchorsCount }}
-
已查询: {{ hostData.checkedDataCount }}
-
可邀请: {{ hostData.canInvitationCount }}
-
运行时间: {{ formattedTime }}
-
-
-
- 开启tk
-
-
-
-
-
-
-
- 今日已查询次数:{{ tkData[index].num }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 最小金币数
-
-
- 最大金币数
-
-
-
-
-
-
-
- 最小粉丝数
-
-
- 最大粉丝数
-
-
-
-
-
-
-
-
- 次/小时
-
-
-
- 次/24小时
-
-
-
-
-
-
- 开始获取数据
- 停止获取
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/nav.vue b/src/views/nav.vue
index 2067bce..8a1189e 100644
--- a/src/views/nav.vue
+++ b/src/views/nav.vue
@@ -5,7 +5,7 @@
-
+