v1.2.65 - 修复联系我们按钮显示
This commit is contained in:
parent
2360041c16
commit
52b0c0e6f2
|
|
@ -4,7 +4,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<title>甲辰收藏 v1.2.63</title>
|
||||
<title>甲辰收藏 v1.2.64</title>
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/png" href="/static/icons/favicon.png" />
|
||||
|
|
|
|||
|
|
@ -6,9 +6,7 @@ export default function Home() {
|
|||
const [stats, setStats] = useState({ totalCount: 0, totalCost: 0, totalRevenue: 0, expectedProfit: 0, totalProfit: 0, gradedCount: 0 })
|
||||
const [recentCollections, setRecentCollections] = useState([])
|
||||
const [yichensStats, setYichensStats] = useState({ total: 0, deals: 0, wants: 0, dragons: 0, horses: 0, tianma: 0 })
|
||||
const [seekStats, setSeekStats] = useState({ seekCount: 0, matchedCount: 0 })
|
||||
const [recentPosts, setRecentPosts] = useState([])
|
||||
const [dragonStats, setDragonStats] = useState({})
|
||||
const [showFeedback, setShowFeedback] = useState(false)
|
||||
const [feedbackContent, setFeedbackContent] = useState('')
|
||||
const [feedbackContact, setFeedbackContact] = useState('')
|
||||
|
|
@ -67,35 +65,6 @@ export default function Home() {
|
|||
setYichensStats(data || {})
|
||||
}).catch(() => {})
|
||||
|
||||
// 获取最新一尘帖子
|
||||
// 提交反馈
|
||||
const submitFeedback = async () => {
|
||||
if (!feedbackContent.trim()) return alert('请输入反馈内容')
|
||||
try {
|
||||
const res = await fetch('/api/users/feedback', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${localStorage.getItem('token')}` },
|
||||
body: JSON.stringify({ content: feedbackContent, contact: feedbackContact })
|
||||
})
|
||||
const data = await res.json()
|
||||
if (data.success) {
|
||||
alert('反馈已提交,感谢您的意见!')
|
||||
setShowFeedback(false)
|
||||
setFeedbackContent('')
|
||||
setFeedbackContact('')
|
||||
}
|
||||
} catch (e) { alert('提交失败') }
|
||||
}
|
||||
|
||||
fetch('/api/yichens/stats/dragons-today').then(res => res.json()).then(data => {
|
||||
setDragonStats(data || {})
|
||||
}).catch(() => {})
|
||||
|
||||
fetch('/api/yichens/posts?limit=10&offset=0').then(res => res.json()).then(data => {
|
||||
setRecentPosts(Array.isArray(data) ? data : [])
|
||||
}).catch(() => {})
|
||||
|
||||
// 获取寻配号统计数据
|
||||
// 提交反馈
|
||||
const submitFeedback = async () => {
|
||||
if (!feedbackContent.trim()) return alert('请输入反馈内容')
|
||||
|
|
@ -115,8 +84,9 @@ export default function Home() {
|
|||
} catch (e) { alert('提交失败') }
|
||||
}
|
||||
|
||||
fetch('/api/information/seek/stats').then(res => res.json()).then(data => {
|
||||
setSeekStats(data || {})
|
||||
// 获取最新一尘帖子
|
||||
fetch('/api/yichens/posts?limit=10&offset=0').then(res => res.json()).then(data => {
|
||||
setRecentPosts(Array.isArray(data) ? data : [])
|
||||
}).catch(() => {})
|
||||
}, [])
|
||||
|
||||
|
|
@ -133,74 +103,18 @@ export default function Home() {
|
|||
const formatMoney = (val) => {
|
||||
if (!val || val === 0) return '0'
|
||||
const v = val / 10000
|
||||
return v.toFixed(1)
|
||||
return v.toFixed(4)
|
||||
}
|
||||
|
||||
const statCards = [
|
||||
{ label: '藏品数', value: stats.totalCount, color: '#3b82f6' },
|
||||
{ label: '总成本', value: formatMoney(stats.totalCost) + '万', color: '#22c55e' },
|
||||
{ label: '总收入', value: formatMoney(stats.totalRevenue) + '万', color: '#06b6d4' },
|
||||
{ label: '评级数', value: stats.gradedCount, color: '#8b5cf6' },
|
||||
{ label: '预期利润', value: formatMoney(stats.expectedProfit) + '万', color: stats.expectedProfit >= 0 ? '#f59e0b' : '#ef4444' },
|
||||
{ label: '总利润', value: formatMoney(stats.totalProfit) + '万', color: stats.totalProfit >= 0 ? '#10b981' : '#f43f5e' }
|
||||
{ label: '藏品数', value: stats.totalCount, color: '#3b82f6', icon: '📦' },
|
||||
{ label: '总成本', value: formatMoney(stats.totalCost) + '万', color: '#22c55e', icon: '💰' },
|
||||
{ label: '总收入', value: formatMoney(stats.totalRevenue) + '万', color: '#06b6d4', icon: '📈' },
|
||||
{ label: '评级数', value: stats.gradedCount, color: '#8b5cf6', icon: '⭐' },
|
||||
{ label: '预期利润', value: formatMoney(stats.expectedProfit) + '万', color: stats.expectedProfit >= 0 ? '#f59e0b' : '#ef4444', icon: '🎯' },
|
||||
{ label: '总利润', value: formatMoney(stats.totalProfit) + '万', color: stats.totalProfit >= 0 ? '#10b981' : '#f43f5e', icon: '💵' }
|
||||
]
|
||||
|
||||
// 反馈弹窗
|
||||
if (showFeedback) {
|
||||
// 反馈弹窗
|
||||
if (showFeedback) {
|
||||
return (
|
||||
<div style={{ position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.8)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 9999 }}>
|
||||
<div style={{ background: '#1a1a2e', borderRadius: '12px', padding: '24px', width: '90%', maxWidth: '400px' }}>
|
||||
<div style={{ fontSize: '18px', fontWeight: 'bold', marginBottom: '16px', color: '#fff' }}>联系我们</div>
|
||||
<textarea
|
||||
value={feedbackContent}
|
||||
onChange={(e) => setFeedbackContent(e.target.value)}
|
||||
placeholder="请输入您的反馈内容..."
|
||||
style={{ width: '100%', height: '120px', background: '#16213e', border: '1px solid #333', borderRadius: '8px', padding: '12px', color: '#fff', fontSize: '14px', marginBottom: '12px' }}
|
||||
/>
|
||||
<input
|
||||
type="text"
|
||||
value={feedbackContact}
|
||||
onChange={(e) => setFeedbackContact(e.target.value)}
|
||||
placeholder="联系方式(选填)"
|
||||
style={{ width: '100%', background: '#16213e', border: '1px solid #333', borderRadius: '8px', padding: '12px', color: '#fff', fontSize: '14px', marginBottom: '16px' }}
|
||||
/>
|
||||
<div style={{ display: 'flex', gap: '12px' }}>
|
||||
<button onClick={() => setShowFeedback(false)} style={{ flex: 1, padding: '12px', background: '#333', border: 'none', borderRadius: '8px', color: '#fff', cursor: 'pointer' }}>取消</button>
|
||||
<button onClick={submitFeedback} style={{ flex: 1, padding: '12px', background: '#3b82f6', border: 'none', borderRadius: '8px', color: '#fff', cursor: 'pointer', fontWeight: 'bold' }}>提交</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<div style={{ position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.8)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 9999 }}>
|
||||
<div style={{ background: '#1a1a2e', borderRadius: '12px', padding: '24px', width: '90%', maxWidth: '400px' }}>
|
||||
<div style={{ fontSize: '18px', fontWeight: 'bold', marginBottom: '16px', color: '#fff' }}>联系我们</div>
|
||||
<textarea
|
||||
value={feedbackContent}
|
||||
onChange={(e) => setFeedbackContent(e.target.value)}
|
||||
placeholder="请输入您的反馈内容..."
|
||||
style={{ width: '100%', height: '120px', background: '#16213e', border: '1px solid #333', borderRadius: '8px', padding: '12px', color: '#fff', fontSize: '14px', marginBottom: '12px' }}
|
||||
/>
|
||||
<input
|
||||
type="text"
|
||||
value={feedbackContact}
|
||||
onChange={(e) => setFeedbackContact(e.target.value)}
|
||||
placeholder="联系方式(选填)"
|
||||
style={{ width: '100%', background: '#16213e', border: '1px solid #333', borderRadius: '8px', padding: '12px', color: '#fff', fontSize: '14px', marginBottom: '16px' }}
|
||||
/>
|
||||
<div style={{ display: 'flex', gap: '12px' }}>
|
||||
<button onClick={() => setShowFeedback(false)} style={{ flex: 1, padding: '12px', background: '#333', border: 'none', borderRadius: '8px', color: '#fff', cursor: 'pointer' }}>取消</button>
|
||||
<button onClick={submitFeedback} style={{ flex: 1, padding: '12px', background: '#3b82f6', border: 'none', borderRadius: '8px', color: '#fff', cursor: 'pointer', fontWeight: 'bold' }}>提交</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
// 反馈弹窗
|
||||
if (showFeedback) {
|
||||
return (
|
||||
|
|
@ -281,7 +195,7 @@ export default function Home() {
|
|||
onMouseOut={e => { e.currentTarget.style.transform = 'translateY(0)' }}
|
||||
onClick={() => window.location.hash = '#/stats'}
|
||||
>
|
||||
|
||||
<div style={{ fontSize: '24px', marginBottom: '4px' }}>{card.icon}</div>
|
||||
<div style={{ color: card.color, fontSize: '18px', fontWeight: '700', marginBottom: '4px' }}>{card.value}</div>
|
||||
<div style={{ color: 'rgba(255,255,255,0.5)', fontSize: '11px' }}>{card.label}</div>
|
||||
</div>
|
||||
|
|
@ -322,58 +236,12 @@ export default function Home() {
|
|||
<div style={{ color: 'rgba(255,255,255,0.7)', fontSize: '11px' }}>添加新藏品</div>
|
||||
</div>
|
||||
</div>
|
||||
<div onClick={() => {
|
||||
if (!localStorage.getItem('token')) return alert('请先登录')
|
||||
setShowFeedback(true)
|
||||
}} style={{
|
||||
background: 'linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%)',
|
||||
borderRadius: '12px',
|
||||
padding: '16px',
|
||||
cursor: 'pointer',
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
gap: '12px'
|
||||
}}>
|
||||
<div style={{ fontSize: '24px' }}>📮</div>
|
||||
<div>
|
||||
<div style={{ color: '#fff', fontSize: '15px', fontWeight: '600' }}>联系我们</div>
|
||||
<div style={{ color: 'rgba(255,255,255,0.7)', fontSize: '11px' }}>反馈建议</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* 寻配号数据 */}
|
||||
<div style={{ marginBottom: '20px' }}>
|
||||
<div style={{ color: 'rgba(255,255,255,0.7)', fontSize: '14px', marginBottom: '12px', paddingLeft: '4px' }}>🔍 寻配号数据</div>
|
||||
<div onClick={() => window.location.hash = '#/news?type=seek'} style={{
|
||||
background: 'linear-gradient(135deg, rgba(245,158,11,0.15) 0%, rgba(245,158,11,0.05) 100%)',
|
||||
borderRadius: '12px',
|
||||
padding: '16px',
|
||||
border: '1px solid rgba(245,158,11,0.2)',
|
||||
cursor: 'pointer'
|
||||
}}>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '12px', textAlign: 'center' }}>
|
||||
<div>
|
||||
<div style={{ color: '#fbbf24', fontSize: '18px', fontWeight: '700' }}>{seekStats.seekCount || 0}</div>
|
||||
<div style={{ color: 'rgba(255,255,255,0.5)', fontSize: '11px' }}>寻号需求</div>
|
||||
</div>
|
||||
<div>
|
||||
<div style={{ color: '#34d399', fontSize: '18px', fontWeight: '700' }}>{seekStats.userMatchedCount || 0}</div>
|
||||
<div style={{ color: 'rgba(255,255,255,0.5)', fontSize: '11px' }}>我的匹配</div>
|
||||
</div>
|
||||
<div>
|
||||
<div style={{ color: '#a78bfa', fontSize: '18px', fontWeight: '700' }}>{seekStats.totalMatchedCount || 0}</div>
|
||||
<div style={{ color: 'rgba(255,255,255,0.5)', fontSize: '11px' }}>总共匹配</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* 一尘今日数据 */}
|
||||
<div style={{ marginBottom: '20px' }}>
|
||||
<div style={{ color: 'rgba(255,255,255,0.7)', fontSize: '14px', marginBottom: '12px', paddingLeft: '4px' }}>📊 一尘今日连体纪念钞数据</div>
|
||||
<div style={{ color: 'rgba(255,255,255,0.7)', fontSize: '14px', marginBottom: '12px', paddingLeft: '4px' }}>📊 一尘今日数据</div>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '8px' }}>
|
||||
<div style={{ background: 'linear-gradient(135deg, rgba(59,130,246,0.15) 0%, rgba(59,130,246,0.05) 100%)', borderRadius: '12px', padding: '12px 8px', border: '1px solid rgba(59,130,246,0.2)', textAlign: 'center' }}>
|
||||
<div style={{ color: '#60a5fa', fontSize: '20px', fontWeight: '700' }}>{yichensStats.total || 0}</div>
|
||||
|
|
@ -402,51 +270,6 @@ export default function Home() {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{/* 今日龙钞帖子数据统计 */}
|
||||
<div style={{ marginBottom: '20px' }}>
|
||||
<div style={{ color: 'rgba(255,255,255,0.7)', fontSize: '14px', marginBottom: '12px', paddingLeft: '4px' }}>🐉 今日龙钞帖子数据统计</div>
|
||||
<div style={{ background: 'linear-gradient(180deg, rgba(99,102,241,0.15) 0%, rgba(99,102,241,0.05) 100%)', borderRadius: '12px', padding: '16px', border: '1px solid rgba(99,102,241,0.2)' }}>
|
||||
{/* 表头 */}
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '60px 1fr 1fr 1fr', gap: '8px', marginBottom: '8px' }}>
|
||||
<div></div>
|
||||
<div style={{ color: '#22c55e', fontSize: '14px', fontWeight: '600', textAlign: 'center' }}>出售</div>
|
||||
<div style={{ color: '#f97316', fontSize: '14px', fontWeight: '600', textAlign: 'center' }}>求购</div>
|
||||
<div style={{ color: 'rgba(255,255,255,0.7)', fontSize: '14px', fontWeight: '600', textAlign: 'center' }}>合计</div>
|
||||
</div>
|
||||
{/* 数据行 */}
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '60px 1fr 1fr 1fr', gap: '8px', marginBottom: '6px' }}>
|
||||
<div style={{ color: '#ef4444', fontSize: '14px', fontWeight: '500' }}>带4</div>
|
||||
<div style={{ color: '#22c55e', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{dragonStats.dai4?.deals || 0}</div>
|
||||
<div style={{ color: '#f97316', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{dragonStats.dai4?.wants || 0}</div>
|
||||
<div style={{ color: '#fff', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{(dragonStats.dai4?.deals || 0) + (dragonStats.dai4?.wants || 0)}</div>
|
||||
</div>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '60px 1fr 1fr 1fr', gap: '8px', marginBottom: '6px' }}>
|
||||
<div style={{ color: '#22c55e', fontSize: '14px', fontWeight: '500' }}>无4</div>
|
||||
<div style={{ color: '#22c55e', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{dragonStats.wu4?.deals || 0}</div>
|
||||
<div style={{ color: '#f97316', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{dragonStats.wu4?.wants || 0}</div>
|
||||
<div style={{ color: '#fff', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{(dragonStats.wu4?.deals || 0) + (dragonStats.wu4?.wants || 0)}</div>
|
||||
</div>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '60px 1fr 1fr 1fr', gap: '8px', marginBottom: '6px' }}>
|
||||
<div style={{ color: '#3b82f6', fontSize: '14px', fontWeight: '500' }}>无47</div>
|
||||
<div style={{ color: '#22c55e', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{dragonStats.wu47?.deals || 0}</div>
|
||||
<div style={{ color: '#f97316', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{dragonStats.wu47?.wants || 0}</div>
|
||||
<div style={{ color: '#fff', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{(dragonStats.wu47?.deals || 0) + (dragonStats.wu47?.wants || 0)}</div>
|
||||
</div>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '60px 1fr 1fr 1fr', gap: '8px', marginBottom: '6px' }}>
|
||||
<div style={{ color: '#a855f7', fontSize: '14px', fontWeight: '500' }}>无247</div>
|
||||
<div style={{ color: '#22c55e', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{dragonStats.wu247?.deals || 0}</div>
|
||||
<div style={{ color: '#f97316', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{dragonStats.wu247?.wants || 0}</div>
|
||||
<div style={{ color: '#fff', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{(dragonStats.wu247?.deals || 0) + (dragonStats.wu247?.wants || 0)}</div>
|
||||
</div>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: '60px 1fr 1fr 1fr', gap: '8px' }}>
|
||||
<div style={{ color: '#ec4899', fontSize: '14px', fontWeight: '500' }}>无347</div>
|
||||
<div style={{ color: '#22c55e', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{dragonStats.wu347?.deals || 0}</div>
|
||||
<div style={{ color: '#f97316', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{dragonStats.wu347?.wants || 0}</div>
|
||||
<div style={{ color: '#fff', fontSize: '18px', fontWeight: '700', textAlign: 'center' }}>{(dragonStats.wu347?.deals || 0) + (dragonStats.wu347?.wants || 0)}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* 最新一尘发帖 */}
|
||||
<div>
|
||||
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '12px', paddingLeft: '4px' }}>
|
||||
|
|
@ -463,7 +286,7 @@ export default function Home() {
|
|||
<div style={{ padding: '40px', textAlign: 'center', color: 'rgba(255,255,255,0.3)' }}>暂无帖子</div>
|
||||
) : (
|
||||
recentPosts.map((item, idx) => (
|
||||
<div key={item.post_id || idx} onClick={() => window.open(item.url, '_blank')} style={{
|
||||
<div key={item.post_id || idx} onClick={() => window.location.hash = '#/news'} style={{
|
||||
padding: '12px 16px',
|
||||
borderBottom: idx < recentPosts.length - 1 ? '1px solid rgba(255,255,255,0.05)' : 'none',
|
||||
cursor: 'pointer',
|
||||
|
|
|
|||
Loading…
Reference in New Issue