refactor: deep link for faq

This commit is contained in:
鲁树人
2025-05-19 09:23:14 +09:00
parent 3ab73d8369
commit 3541af7a96
19 changed files with 300 additions and 149 deletions

View File

@@ -0,0 +1,75 @@
import { ExtLink } from '~/components/ExtLink';
import { Header2, Header3, Header4 } from '~/components/HelpText/Headers';
import { VQuote } from '~/components/HelpText/VQuote';
import { RiErrorWarningLine } from 'react-icons/ri';
import LdPlayerSettingsMisc2x from './assets/ld_settings_misc@2x.webp';
import MumuSettingsMisc2x from './assets/mumu_settings_misc@2x.webp';
import { ImageFigure } from '~/components/ImageFigure';
export function AndroidEmulatorFAQ() {
return (
<>
<Header2></Header2>
<p className="mb-2">便 root </p>
<ul className="list-disc pl-6 mb-2">
<li>
<ExtLink href="https://mumu.163.com/"> MuMu 12</ExtLink> - Hyper-V
</li>
<li>
<ExtLink href="https://www.ldmnq.com/"> 9</ExtLink>
</li>
</ul>
<p className="mb-2">广使</p>
<div className="my-2 alert alert-warning">
<RiErrorWarningLine className="text-lg" />
<p>
使<strong></strong>
</p>
</div>
<p className="mb-2">使</p>
<Header3 id="enable-root"> root</Header3>
<p className="mb-2"> root </p>
<Header4 id="root-mumu"> MuMu </Header4>
<ul className="list-disc pl-6">
<li>
<VQuote></VQuote>
</li>
<li>
<VQuote></VQuote>
</li>
<li>
<VQuote>Root权限</VQuote>
</li>
</ul>
<div>
<ImageFigure className="ml-2" alt="网易木木模拟器设置界面" loading="lazy" srcSet={`${MumuSettingsMisc2x} 2x`}>
</ImageFigure>
</div>
<Header4 id="root-ld"></Header4>
<ul className="list-disc pl-6">
<li>
<VQuote></VQuote>
</li>
<li>
<VQuote></VQuote>
</li>
<li>
<VQuote>ROOT </VQuote><VQuote></VQuote>
</li>
</ul>
<div>
<ImageFigure className="ml-2" alt="雷电模拟器设置界面" loading="lazy" srcSet={`${LdPlayerSettingsMisc2x} 2x`}>
</ImageFigure>
</div>
</>
);
}

20
src/faq/FAQPages.tsx Normal file
View File

@@ -0,0 +1,20 @@
import type { ComponentType } from 'react';
import { QQMusicFAQ } from './QQMusicFAQ';
import { KuwoFAQ } from './KuwoFAQ';
import { KugouFAQ } from './KugouFAQ';
import { OtherFAQ } from './OtherFAQ';
import { AndroidEmulatorFAQ } from './AndroidEmulatorFAQ';
export type FAQEntry = {
id: string;
name: string;
Component: ComponentType;
};
export const FAQ_PAGES: FAQEntry[] = [
{ id: 'qqmusic', name: 'QQ 音乐', Component: QQMusicFAQ },
{ id: 'kuwo', name: '酷我音乐', Component: KuwoFAQ },
{ id: 'kugou', name: '酷狗音乐', Component: KugouFAQ },
{ id: 'android-emu', name: '安卓模拟器', Component: AndroidEmulatorFAQ },
{ id: 'other', name: '其它问题', Component: OtherFAQ },
];

14
src/faq/FaqHome.tsx Normal file
View File

@@ -0,0 +1,14 @@
import { ExtLink } from '~/components/ExtLink';
export function FaqHome() {
return (
<div className="flex flex-col gap-4">
<h1 className="text-2xl font-bold"></h1>
<p></p>
<p>
访
<ExtLink href={'https://t.me/unlock_music_chat'}>- </ExtLink>
</p>
</div>
);
}

View File

@@ -1,4 +1,4 @@
import { Header4 } from '~/components/HelpText/Headers';
import { Header2, Header3 } from '~/components/HelpText/Headers';
import { SegmentKeyImportInstructions } from './SegmentKeyImportInstructions';
import { KugouAllInstructions } from '~/features/settings/panels/Kugou/KugouAllInstructions.tsx';
import { RiErrorWarningLine } from 'react-icons/ri';
@@ -6,19 +6,19 @@ import { RiErrorWarningLine } from 'react-icons/ri';
export function KugouFAQ() {
return (
<>
<Header4></Header4>
<p>
<Header2></Header2>
<Header3 id="failed"></Header3>
<p className="mb-2">
<code>kgg</code> Windows
</p>
<p className="my-4"></p>
<p className="mb-2"></p>
<div className="p-2 @container">
<div className="alert alert-warning">
<RiErrorWarningLine className="size-6" />
<p> root </p>
</div>
<div className="alert alert-warning mb-2">
<RiErrorWarningLine className="size-6" />
<p> root </p>
</div>
<Header3 id="keys"></Header3>
<SegmentKeyImportInstructions tab="酷狗密钥" clientInstructions={<KugouAllInstructions />} />
</>
);

View File

@@ -1,4 +1,4 @@
import { Header4 } from '~/components/HelpText/Headers';
import { Header2, Header3 } from '~/components/HelpText/Headers';
import { VQuote } from '~/components/HelpText/VQuote';
import { SegmentTryOfficialPlayer } from './SegmentTryOfficialPlayer';
import { HiWord } from '~/components/HelpText/HiWord';
@@ -9,9 +9,10 @@ import { RiErrorWarningLine } from 'react-icons/ri';
export function KuwoFAQ() {
return (
<>
<Header4></Header4>
<Header2></Header2>
<Header3 id="failed"></Header3>
<SegmentTryOfficialPlayer />
<p className="my-4">
<p className="mb-2">
<HiWord></HiWord>
<VQuote>
<strong></strong>
@@ -22,10 +23,11 @@ export function KuwoFAQ() {
</VQuote>
</p>
<p className="my-4"></p>
<p className="my-4">PC平台暂未推出使用新版加密的音质</p>
<p className="mb-2"></p>
<p className="mb-2">PC平台暂未推出使用新版加密的音质</p>
<div className="alert alert-warning mb-4">
<Header3 id="keys"></Header3>
<div className="alert alert-warning my-2">
<RiErrorWarningLine className="text-2xl" />
<div>
<p> root </p>

View File

@@ -1,20 +1,18 @@
import { ExtLink } from '~/components/ExtLink';
import { Header4, Header5 } from '~/components/HelpText/Headers';
import { VQuote } from '~/components/HelpText/VQuote';
import { Header2, Header3, Header4 } from '~/components/HelpText/Headers';
import { ProjectIssue } from '~/components/ProjectIssue';
import { RiErrorWarningLine } from 'react-icons/ri';
import LdPlayerSettingsMisc2x from './assets/ld_settings_misc@2x.webp';
import MumuSettingsMisc2x from './assets/mumu_settings_misc@2x.webp';
import { NavLink } from 'react-router';
export function OtherFAQ() {
return (
<>
<Header4></Header4>
<Header2></Header2>
<Header3 id="metadata"></Header3>
<p></p>
<p>使</p>
<Header4></Header4>
<Header3 id="batch-dl"></Header3>
<p>
{'暂时没有实现,不过你可以在 '}
<ProjectIssue id={34} title="[UI] 全部下载功能" />
@@ -23,11 +21,11 @@ export function OtherFAQ() {
{' 追踪该问题。'}
</p>
<Header4>安卓: 浏览器支持说明</Header4>
<Header3 id="android-browsers">安卓: 浏览器支持说明</Header3>
<p> 使 Chrome Firefox </p>
<div className="flex flex-col md:flex-row gap-2 md:gap-8">
<div>
<Header5></Header5>
<Header4></Header4>
<ul className="list-disc list-inside pl-2">
<li>Via </li>
<li></li>
@@ -36,7 +34,7 @@ export function OtherFAQ() {
</div>
<div>
<Header5></Header5>
<Header4></Header4>
<ul className="list-disc list-inside pl-2">
<li></li>
<li></li>
@@ -45,70 +43,20 @@ export function OtherFAQ() {
</div>
</div>
<Header4>安卓: root </Header4>
<Header3 id="android-root"> root</Header3>
<p>
root 使
使 NFC
</p>
<p className="my-2">使</p>
<p className="my-2">
root 便
<VQuote>
<ExtLink href="https://mumu.163.com/"> MuMu 12</ExtLink>
</VQuote>
<VQuote>
<ExtLink href="https://www.ldmnq.com/"> 9</ExtLink>
</VQuote>
使
<NavLink className="link link-info" to="/questions/android-emu">
</NavLink>
</p>
<div className="my-4 alert alert-warning">
<RiErrorWarningLine className="text-lg" />
<div>
<p>
使<strong></strong>
</p>
<p>使</p>
</div>
</div>
<p> root </p>
<div className="grid grid-cols-1 gap-2 md:gap-4 lg:grid-cols-2">
<div>
<Header5> MuMu模拟器</Header5>
<ul className="list-disc pl-6">
<li>
<VQuote></VQuote>
</li>
<li>
<VQuote></VQuote>
</li>
<li>
<VQuote>Root权限</VQuote>
</li>
</ul>
<img className="rounded-md border border-base-300" loading="lazy" srcSet={`${MumuSettingsMisc2x} 2x`} />
</div>
<div>
<Header5></Header5>
<ul className="list-disc pl-6">
<li>
<VQuote></VQuote>
</li>
<li>
<VQuote></VQuote>
</li>
<li>
<VQuote>ROOT </VQuote><VQuote></VQuote>
</li>
</ul>
<img className="rounded-md border border-base-300" loading="lazy" srcSet={`${LdPlayerSettingsMisc2x} 2x`} />
</div>
</div>
<Header4></Header4>
<Header3 id="projects"></Header3>
<ul className="list-disc pl-6">
<li>
<p>
@@ -150,7 +98,7 @@ export function OtherFAQ() {
</li>
</ul>
<Header4></Header4>
<Header3 id="more-questions"></Header3>
<p className="flex flex-row gap-1">
<ExtLink href={'https://t.me/unlock_music_chat'}>- </ExtLink>

View File

@@ -1,17 +1,24 @@
import { Header4 } from '~/components/HelpText/Headers';
import { Header2, Header3 } from '~/components/HelpText/Headers';
import { SegmentTryOfficialPlayer } from './SegmentTryOfficialPlayer';
import { QMCv2QQMusicAllInstructions } from '~/features/settings/panels/QMCv2/QMCv2QQMusicAllInstructions';
export function QQMusicFAQ() {
return (
<>
<Header4></Header4>
<Header2>QQ </Header2>
<Header3 id="failed"></Header3>
<SegmentTryOfficialPlayer />
<p className="my-4"></p>
<p className="mb-4">
<p className="mb-2"> QQ </p>
<p className="mb-2"></p>
<p className="mb-2"></p>
<Header3 id="about-download"></Header3>
<p></p>
<p className="my-2">
<strong></strong>使
</p>
<Header3 id="keys-or-downgrade"></Header3>
<QMCv2QQMusicAllInstructions />
</>
);

View File

@@ -2,7 +2,7 @@ import { RiErrorWarningLine } from 'react-icons/ri';
export function SegmentTryOfficialPlayer({ className = '' }: { className?: string }) {
return (
<div className={`alert alert-warning ${className}`}>
<div className={`alert alert-warning my-2 ${className}`}>
<RiErrorWarningLine className="text-2xl" />
<p></p>
</div>