优化局域网遥控

This commit is contained in:
mtvpls
2026-06-19 15:59:44 +08:00
parent 9881ad3238
commit e9ac8f3067
5 changed files with 27 additions and 80 deletions
+20 -7
View File
@@ -1372,8 +1372,21 @@ export const UserMenu: React.FC = () => {
const handleQrLoginResult = useCallback((rawValue: string) => {
try {
const url = new URL(rawValue, window.location.origin);
const isLocalRemoteUrl =
(url.protocol === 'http:' || url.protocol === 'https:') &&
url.searchParams.has('token') &&
(url.pathname === '/remote' || url.pathname.endsWith('/remote'));
if (isLocalRemoteUrl) {
setTvQrScannerStatus('识别成功,正在打开局域网遥控器...');
stopTvQrScanner();
window.location.href = url.href;
return true;
}
if (url.origin !== window.location.origin || url.pathname !== '/qr-login') {
setTvQrScannerError('未识别到本站电视登录二维码,请扫描电视屏幕上的二维码。');
setTvQrScannerError('未识别到电视登录二维码或局域网遥控二维码,请扫描电视屏幕上的二维码。');
return false;
}
@@ -1388,7 +1401,7 @@ export const UserMenu: React.FC = () => {
window.location.href = `/qr-login?token=${encodeURIComponent(token)}`;
return true;
} catch {
setTvQrScannerError('二维码内容无效,请扫描电视端显示的登录二维码。');
setTvQrScannerError('二维码内容无效,请扫描电视端显示的登录二维码或局域网遥控二维码。');
return false;
}
}, [stopTvQrScanner]);
@@ -1424,7 +1437,7 @@ export const UserMenu: React.FC = () => {
await tvQrVideoRef.current.play();
const detector = new BarcodeDetectorCtor({ formats: ['qr_code'] });
setTvQrScannerStatus('请将电视屏幕上的登录二维码放入取景框');
setTvQrScannerStatus('请将电视屏幕上的登录二维码或局域网遥控二维码放入取景框');
const scan = async () => {
if (tvQrScanStopRef.current || !tvQrVideoRef.current) return;
@@ -4408,8 +4421,8 @@ export const UserMenu: React.FC = () => {
<Smartphone className='h-4 w-4' />
</div>
<h3 className='mt-3 text-2xl font-black'></h3>
<p className='mt-1 text-sm text-white/75'></p>
<h3 className='mt-3 text-2xl font-black'></h3>
<p className='mt-1 text-sm text-white/75'></p>
</div>
<button
type='button'
@@ -4670,7 +4683,7 @@ export const UserMenu: React.FC = () => {
</div>
<p className='mt-5 text-sm leading-6 text-slate-600 dark:text-slate-400'>
{tvModeEnabled
? '电视端打开 /tv 后会显示二维码;手机在这里打开相机扫描并确认登录。'
? '电视端打开 /tv 后可扫码登录;在电视端“我的”页也可扫描局域网遥控二维码。'
: '当前部署未开启 TV 模式,/tv 页面和 Web 电视遥控不可用。'}
</p>
{!tvModeEnabled && (
@@ -4685,7 +4698,7 @@ export const UserMenu: React.FC = () => {
disabled={!tvModeEnabled}
className='inline-flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl bg-rose-600 px-4 py-3 text-sm font-black text-white transition hover:bg-rose-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-rose-500/70 disabled:cursor-not-allowed disabled:bg-slate-300 disabled:text-slate-500 dark:disabled:bg-white/10 dark:disabled:text-slate-500'
>
<Smartphone className='h-4 w-4' />
</button>
<button