forked from Gitlink/gitlink_help_center
修复 #4
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"name": "docusaurus",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
"start": "docusaurus start",
|
||||
"build": "docusaurus build",
|
||||
"swizzle": "docusaurus swizzle",
|
||||
"deploy": "docusaurus deploy",
|
||||
"clear": "docusaurus clear",
|
||||
"serve": "docusaurus serve",
|
||||
"write-translations": "docusaurus write-translations",
|
||||
"write-heading-ids": "docusaurus write-heading-ids",
|
||||
"dev": "docusaurus start --port 3000",
|
||||
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "2.4.1",
|
||||
"@docusaurus/preset-classic": "2.4.1",
|
||||
"@easyops-cn/docusaurus-search-local": "^0.35.0",
|
||||
"@mdx-js/react": "^1.6.22",
|
||||
"body-parser": "^1.20.2",
|
||||
"clsx": "^1.2.1",
|
||||
"docusaurus-plugin-image-zoom": "^1.0.1",
|
||||
"express": "^4.18.2",
|
||||
"prism-react-renderer": "^1.3.5",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.5%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
import React, { useState, useEffect } from 'react';
|
||||
import Layout from '@theme/Layout';
|
||||
|
||||
export default function FeedbackDashboard() {
|
||||
const [feedbacks, setFeedbacks] = useState([]);
|
||||
|
||||
useEffect(() => {
|
||||
// 从localStorage加载反馈
|
||||
const storedFeedbacks = JSON.parse(localStorage.getItem('docFeedbacks') || '[]');
|
||||
setFeedbacks(storedFeedbacks);
|
||||
}, []);
|
||||
|
||||
// 清除所有反馈
|
||||
const clearFeedbacks = () => {
|
||||
if (confirm('确定要清除所有反馈吗?')) {
|
||||
localStorage.setItem('docFeedbacks', '[]');
|
||||
setFeedbacks([]);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Layout title="反馈管理">
|
||||
<div className="container margin-vert--lg">
|
||||
<h1>反馈管理</h1>
|
||||
|
||||
<div className="margin-bottom--lg">
|
||||
<h2>总计: {feedbacks.length} 条反馈</h2>
|
||||
{feedbacks.length > 0 && (
|
||||
<button
|
||||
onClick={clearFeedbacks}
|
||||
className="button button--danger"
|
||||
>
|
||||
清除所有反馈
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="card-demo margin-bottom--lg">
|
||||
<div className="card">
|
||||
<div className="card__header">
|
||||
<h3>反馈列表</h3>
|
||||
</div>
|
||||
<div className="card__body">
|
||||
{feedbacks.length === 0 ? (
|
||||
<p>暂无反馈数据</p>
|
||||
) : (
|
||||
<table className="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>类型</th>
|
||||
<th>页面</th>
|
||||
<th>内容</th>
|
||||
<th>时间</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{feedbacks.map((feedback, index) => (
|
||||
<tr key={index}>
|
||||
<td>{feedback.type === 'vote' ? '投票' : '评论'}</td>
|
||||
<td>{feedback.page}</td>
|
||||
<td>
|
||||
{feedback.type === 'vote'
|
||||
? (feedback.isHelpful ? '👍 有帮助' : '👎 没有帮助')
|
||||
: feedback.content}
|
||||
</td>
|
||||
<td>{new Date(feedback.timestamp).toLocaleString('zh-CN')}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Layout>
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
title: 反馈管理
|
||||
---
|
||||
|
||||
import FeedbackDashboard from '@site/src/pages/feedback-dashboard';
|
||||
|
||||
<FeedbackDashboard />
|
||||
Loading…
Reference in New Issue