mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-09-10 22:20:25 +00:00
Summary Implement a dedicated, reusable scrolling mechanism for all console-table pages while keeping header and sidebar fixed, plus related layout improvements. Key Changes • Added `.table-scroll-card` utility class – Provides flex column layout and internal vertical scrolling – Desktop height: `calc(100vh - 110px)`; Mobile (<768 px) height: `calc(100vh - 77px)` – Hides scrollbars cross-browser (`-ms-overflow-style`, `scrollbar-width`, `::-webkit-scrollbar`) • Replaced global `.semi-card` scrolling rules with `.table-scroll-card` to avoid affecting non-table cards • Updated table components (Channels, Tokens, Users, Logs, MjLogs, TaskLogs, Redemptions) to use the new class • PageLayout – Footer is now suppressed for all `/console` routes – Confirmed only central content area scrolls; header & sidebar remain fixed • Restored hidden scrollbar rules for `.semi-layout-content` and removed unnecessary global overrides • Minor CSS cleanup & comment improvements for readability Result Console table pages now fill the viewport with smooth, internal scrolling and no visible scrollbars, while other cards and pages remain unaffected.
61 lines
1.7 KiB
JavaScript
61 lines
1.7 KiB
JavaScript
import React from 'react';
|
|
import { useTokenKeys } from '../../hooks/useTokenKeys';
|
|
import { Spin } from '@douyinfe/semi-ui';
|
|
import { useParams } from 'react-router-dom';
|
|
import { useTranslation } from 'react-i18next';
|
|
|
|
const ChatPage = () => {
|
|
const { t } = useTranslation();
|
|
const { id } = useParams();
|
|
const { keys, serverAddress, isLoading } = useTokenKeys(id);
|
|
|
|
const comLink = (key) => {
|
|
// console.log('chatLink:', chatLink);
|
|
if (!serverAddress || !key) return '';
|
|
let link = '';
|
|
if (id) {
|
|
let chats = localStorage.getItem('chats');
|
|
if (chats) {
|
|
chats = JSON.parse(chats);
|
|
if (Array.isArray(chats) && chats.length > 0) {
|
|
for (let k in chats[id]) {
|
|
link = chats[id][k];
|
|
link = link.replaceAll(
|
|
'{address}',
|
|
encodeURIComponent(serverAddress),
|
|
);
|
|
link = link.replaceAll('{key}', 'sk-' + key);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return link;
|
|
};
|
|
|
|
const iframeSrc = keys.length > 0 ? comLink(keys[0]) : '';
|
|
|
|
return !isLoading && iframeSrc ? (
|
|
<iframe
|
|
src={iframeSrc}
|
|
style={{ width: '100%', height: 'calc(100vh - 64px)', border: 'none', marginTop: '64px' }}
|
|
title='Token Frame'
|
|
allow='camera;microphone'
|
|
/>
|
|
) : (
|
|
<div className="fixed inset-0 w-screen h-screen flex items-center justify-center bg-white/80 z-[1000] mt-[60px]">
|
|
<div className="flex flex-col items-center">
|
|
<Spin
|
|
size="large"
|
|
spinning={true}
|
|
tip={null}
|
|
/>
|
|
<span className="whitespace-nowrap mt-2 text-center" style={{ color: 'var(--semi-color-primary)' }}>
|
|
{t('正在跳转...')}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default ChatPage;
|