rwadurian/frontend/admin-web/src/app/(dashboard)/help/page.tsx

257 lines
9.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use client';
import { useState } from 'react';
import { PageContainer } from '@/components/layout';
import { cn } from '@/utils/helpers';
import styles from './help.module.scss';
/**
* 推荐文档数据接口
*/
interface RecommendedDoc {
id: string;
title: string;
description: string;
}
/**
* 文档列表数据接口
*/
interface DocItem {
id: string;
title: string;
category: string;
lastUpdate: string;
}
/**
* FAQ 数据接口
*/
interface FAQItem {
question: string;
answer: string;
}
// 推荐文档数据
const recommendedDocs: RecommendedDoc[] = [
{
id: '1',
title: '如何进行首次认种?',
description: '本文将引导您完成从注册到成功认种第一棵榴莲树的全部流程...',
},
{
id: '2',
title: '结算参数配置指南',
description: '详细解释各项结算参数的含义,以及如何根据业务需求进行配置...',
},
{
id: '3',
title: '龙虎榜规则详解',
description: '了解日榜、周榜、月榜的计算逻辑,以及虚拟账户的排名规则...',
},
];
// 文档列表数据
const docList: DocItem[] = [
{ id: '1', title: '考核规则设置说明', category: '系统设置', lastUpdate: '2023-10-25' },
{ id: '2', title: '用户管理与角色授权', category: '账号安全', lastUpdate: '2023-10-24' },
{ id: '3', title: '认种限额策略配置', category: '系统设置', lastUpdate: '2023-10-22' },
{ id: '4', title: '前端热度展示方式说明', category: '系统设置', lastUpdate: '2023-10-20' },
];
// FAQ 数据
const faqData: FAQItem[] = [
{
question: 'Q: 忘记密码怎么办?',
answer: 'A: 您可以通过登录页面的"忘记密码"链接,使用注册邮箱或手机号重置密码。',
},
{
question: 'Q: 如何导出数据报表?',
answer: 'A: 在"数据统计"页面,选择您需要的时间范围和数据类型,然后点击右上角的"导出"按钮即可。',
},
{
question: 'Q: 敏感操作审批流程是怎样的?',
answer: 'A: 当您执行一项被标记为敏感的操作时,系统会要求多名管理员进行审批。只有达到预设的审批人数后,操作才会生效。',
},
];
// 搜索图标
const SearchIcon = () => (
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<circle cx="11" cy="11" r="8" />
<path d="M21 21l-4.35-4.35" />
</svg>
);
// 点赞图标
const ThumbUpIcon = () => (
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3" />
</svg>
);
// 点踩图标
const ThumbDownIcon = () => (
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17" />
</svg>
);
// 电话图标
const PhoneIcon = () => (
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z" />
</svg>
);
// 邮件图标
const MailIcon = () => (
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" />
<polyline points="22,6 12,13 2,6" />
</svg>
);
// 聊天图标
const ChatIcon = () => (
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" />
</svg>
);
export default function HelpPage() {
const [searchKeyword, setSearchKeyword] = useState('');
return (
<PageContainer title="帮助中心">
<div className={styles.help}>
{/* 页面头部 */}
<header className={styles.help__header}>
<h1 className={styles.help__title}></h1>
<p className={styles.help__desc}></p>
<div className={styles.help__searchBox}>
<span className={styles.help__searchIcon}>
<SearchIcon />
</span>
<input
type="text"
className={styles.help__searchInput}
placeholder="搜索文档或问题..."
value={searchKeyword}
onChange={(e) => setSearchKeyword(e.target.value)}
/>
</div>
</header>
{/* 推荐文档 */}
<section className={styles.help__section}>
<h2 className={styles.help__sectionTitle}></h2>
<div className={styles.help__docCards}>
{recommendedDocs.map((doc) => (
<div key={doc.id} className={styles.help__docCard}>
<h3 className={styles.help__docCardTitle}>{doc.title}</h3>
<p className={styles.help__docCardDesc}>{doc.description}</p>
<div className={styles.help__docCardFooter}>
<span className={styles.help__docCardQuestion}></span>
<div className={styles.help__docCardBtns}>
<button className={styles.help__docCardBtn}>
<ThumbUpIcon />
<span></span>
</button>
<button className={styles.help__docCardBtn}>
<ThumbDownIcon />
<span></span>
</button>
</div>
</div>
</div>
))}
</div>
</section>
{/* 文档列表 */}
<section className={styles.help__section}>
<h2 className={styles.help__sectionTitle}></h2>
<div className={styles.help__tableWrapper}>
<div className={styles.help__table}>
<div className={styles.help__tableHead}>
<div className={cn(styles.help__tableHeadCell, styles['help__tableHeadCell--title'])}></div>
<div className={cn(styles.help__tableHeadCell, styles['help__tableHeadCell--category'])}></div>
<div className={cn(styles.help__tableHeadCell, styles['help__tableHeadCell--date'])}></div>
<div className={cn(styles.help__tableHeadCell, styles['help__tableHeadCell--rating'])}></div>
</div>
<div className={styles.help__tableBody}>
{docList.map((doc) => (
<div key={doc.id} className={styles.help__tableRow}>
<div className={cn(styles.help__tableCell, styles['help__tableCell--title'])}>{doc.title}</div>
<div className={cn(styles.help__tableCell, styles['help__tableCell--category'])}>{doc.category}</div>
<div className={cn(styles.help__tableCell, styles['help__tableCell--date'])}>{doc.lastUpdate}</div>
<div className={cn(styles.help__tableCell, styles['help__tableCell--rating'])}>
<button className={styles.help__ratingBtn}>
<ThumbUpIcon />
</button>
<button className={styles.help__ratingBtn}>
<ThumbDownIcon />
</button>
</div>
</div>
))}
</div>
</div>
</div>
</section>
{/* FAQ 和联系支持 */}
<div className={styles.help__bottomSection}>
{/* 常见问题 */}
<div className={styles.help__faqCard}>
<h2 className={styles.help__faqTitle}> (FAQ)</h2>
<div className={styles.help__faqList}>
{faqData.map((faq, index) => (
<div key={index} className={styles.help__faqItem}>
<p className={styles.help__faqQuestion}>{faq.question}</p>
<p className={styles.help__faqAnswer}>{faq.answer}</p>
</div>
))}
</div>
</div>
{/* 联系支持 */}
<div className={styles.help__contactCard}>
<h2 className={styles.help__contactTitle}></h2>
<div className={styles.help__contactList}>
<div className={styles.help__contactItem}>
<span className={styles.help__contactIcon}>
<PhoneIcon />
</span>
<div className={styles.help__contactInfo}>
<p className={styles.help__contactLabel}>线</p>
<p className={styles.help__contactValue}>400-123-4567 ( 9:00 - 18:00)</p>
</div>
</div>
<div className={styles.help__contactItem}>
<span className={styles.help__contactIcon}>
<MailIcon />
</span>
<div className={styles.help__contactInfo}>
<p className={styles.help__contactLabel}></p>
<p className={styles.help__contactValue}>support@durian-adopt.com</p>
</div>
</div>
<div className={styles.help__contactItem}>
<span className={styles.help__contactIcon}>
<ChatIcon />
</span>
<div className={styles.help__contactInfo}>
<p className={styles.help__contactLabel}>线</p>
<p className={styles.help__contactValue}>线</p>
</div>
</div>
</div>
</div>
</div>
</div>
</PageContainer>
);
}