版本更新: v1.2.17 - 寻号基本功能
This commit is contained in:
parent
3b80d17010
commit
f29629bfcc
|
|
@ -1 +1 @@
|
||||||
VERSION=1.2.16
|
VERSION=1.2.17
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,10 @@ import React, { useState, useEffect } from 'react'
|
||||||
// 资讯页面 - 展示寻配号和行情信息(所有人可见)
|
// 资讯页面 - 展示寻配号和行情信息(所有人可见)
|
||||||
export default function News() {
|
export default function News() {
|
||||||
const [activeTab, setActiveTab] = useState('deal')
|
const [activeTab, setActiveTab] = useState('deal')
|
||||||
|
const [showSeekPublish, setShowSeekPublish] = useState(false)
|
||||||
|
const [seekForm, setSeekForm] = useState({
|
||||||
|
edition: '龙钞', type: '标百', category: '寻号', price: '', matchType: '模糊', features: '', content: '', title: '', contact: ''
|
||||||
|
})
|
||||||
const [infoList, setInfoList] = useState([])
|
const [infoList, setInfoList] = useState([])
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
|
|
||||||
|
|
@ -13,6 +17,12 @@ export default function News() {
|
||||||
fetchInfoList()
|
fetchInfoList()
|
||||||
}, [activeTab])
|
}, [activeTab])
|
||||||
|
|
||||||
|
// 自动生成寻号标题
|
||||||
|
useEffect(() => {
|
||||||
|
const title = `「寻号 ${seekForm.edition} ${seekForm.type} ${seekForm.features || '号码特征'} ${seekForm.matchType}」`
|
||||||
|
setSeekForm(prev => ({...prev, title}))
|
||||||
|
}, [seekForm.edition, seekForm.type, seekForm.features, seekForm.matchType])
|
||||||
|
|
||||||
const fetchInfoList = async () => {
|
const fetchInfoList = async () => {
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
try {
|
try {
|
||||||
|
|
@ -30,6 +40,25 @@ export default function News() {
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleSeekPublish = async () => {
|
||||||
|
if (!seekForm.contact) { alert('请填写联系方式'); return }
|
||||||
|
try {
|
||||||
|
const token = localStorage.getItem('token')
|
||||||
|
const content = (seekForm.content ? seekForm.content + '\n' : '') + (seekForm.price ? `价格: ${seekForm.price}` : '') + (seekForm.features ? '\n号码特征: ' + seekForm.features : '') + '\n联系方式: ' + seekForm.contact
|
||||||
|
const res = await fetch(`${API_BASE}/api/information/`, {
|
||||||
|
method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({ title: seekForm.title, content, info_type: 'seek' })
|
||||||
|
})
|
||||||
|
const data = await res.json()
|
||||||
|
if (data.id || data.code === 0) {
|
||||||
|
alert('发布成功!')
|
||||||
|
setShowSeekPublish(false)
|
||||||
|
setSeekForm({ edition: '龙钞', type: '标百', category: '寻号', price: '', matchType: '模糊', features: '', content: '', title: '', contact: '' })
|
||||||
|
fetchInfoList()
|
||||||
|
} else { alert(data.message || '发布失败') }
|
||||||
|
} catch (e) { alert('发布失败: ' + e.message) }
|
||||||
|
}
|
||||||
|
|
||||||
// Tab切换
|
// Tab切换
|
||||||
const tabs = [
|
const tabs = [
|
||||||
{ key: 'seek', label: '🔍 寻配号' },
|
{ key: 'seek', label: '🔍 寻配号' },
|
||||||
|
|
@ -67,8 +96,75 @@ export default function News() {
|
||||||
|
|
||||||
{/* 资讯列表 */}
|
{/* 资讯列表 */}
|
||||||
<div style={{ padding: '16px' }}>
|
<div style={{ padding: '16px' }}>
|
||||||
|
{showSeekPublish && activeTab === 'seek' && (
|
||||||
|
<div style={{ background: '#1e293b', borderRadius: '12px', padding: '16px', marginBottom: '16px' }}>
|
||||||
|
<div style={{ marginBottom: '12px' }}><label style={{ color: '#94a3b8', fontSize: '12px' }}>版别</label>
|
||||||
|
<div style={{ display: 'flex', gap: '8px', marginTop: '6px' }}>
|
||||||
|
{['龙钞','马钞','蛇钞','其他'].map(e => (
|
||||||
|
<button key={e} onClick={() => setSeekForm({...seekForm, edition: e})}
|
||||||
|
style={{ flex: 1, padding: '8px', borderRadius: '6px', border: seekForm.edition===e?'2px solid #10b981':'1px solid #334155', background: seekForm.edition===e?'rgba(16,185,129,0.2)':'#0f172a', color: '#fff', fontSize: '12px' }}>{e}</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style={{ marginBottom: '12px' }}><label style={{ color: '#94a3b8', fontSize: '12px' }}>类型</label>
|
||||||
|
<div style={{ display: 'flex', gap: '8px', marginTop: '6px' }}>
|
||||||
|
{['标百','标十','单张'].map(e => (
|
||||||
|
<button key={e} onClick={() => setSeekForm({...seekForm, type: e})}
|
||||||
|
style={{ flex: 1, padding: '8px', borderRadius: '6px', border: seekForm.type===e?'2px solid #10b981':'1px solid #334155', background: seekForm.type===e?'rgba(16,185,129,0.2)':'#0f172a', color: '#fff', fontSize: '12px' }}>{e}</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style={{ marginBottom: '12px' }}><label style={{ color: '#94a3b8', fontSize: '12px' }}>分类</label>
|
||||||
|
<div style={{ display: 'flex', gap: '8px', marginTop: '6px' }}>
|
||||||
|
{['求购','出售','寻号'].map(e => (
|
||||||
|
<button key={e} onClick={() => setSeekForm({...seekForm, category: e})}
|
||||||
|
style={{ flex: 1, padding: '8px', borderRadius: '6px', border: seekForm.category===e?'2px solid #10b981':'1px solid #334155', background: seekForm.category===e?'rgba(16,185,129,0.2)':'#0f172a', color: '#fff', fontSize: '12px' }}>{e}</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style={{ marginBottom: '12px' }}><label style={{ color: '#94a3b8', fontSize: '12px' }}>价格(选填)</label>
|
||||||
|
<input type="text" value={seekForm.price} onChange={(e) => setSeekForm({...seekForm, price: e.target.value})} placeholder="请输入价格"
|
||||||
|
style={{ width: '100%', padding: '8px', marginTop: '6px', background: '#0f172a', border: '1px solid #334155', borderRadius: '6px', color: '#fff', fontSize: '13px', boxSizing: 'border-box' }} />
|
||||||
|
</div>
|
||||||
|
<div style={{ marginBottom: '12px' }}><label style={{ color: '#94a3b8', fontSize: '12px' }}>匹配度</label>
|
||||||
|
<div style={{ display: 'flex', gap: '8px', marginTop: '6px' }}>
|
||||||
|
{['精准','模糊'].map(e => (
|
||||||
|
<button key={e} onClick={() => setSeekForm({...seekForm, matchType: e})}
|
||||||
|
style={{ flex: 1, padding: '8px', borderRadius: '6px', border: seekForm.matchType===e?'2px solid #10b981':'1px solid #334155', background: seekForm.matchType===e?'rgba(16,185,129,0.2)':'#0f172a', color: '#fff', fontSize: '12px' }}>{e}</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style={{ marginBottom: '12px' }}><label style={{ color: '#94a3b8', fontSize: '12px' }}>号码特征</label>
|
||||||
|
<input type="text" value={seekForm.features} onChange={(e) => setSeekForm({...seekForm, features: e.target.value})} placeholder="如: 8888/7777/开门号"
|
||||||
|
style={{ width: '100%', padding: '8px', marginTop: '6px', background: '#0f172a', border: '1px solid #334155', borderRadius: '6px', color: '#fff', fontSize: '13px', boxSizing: 'border-box' }} />
|
||||||
|
</div>
|
||||||
|
<div style={{ marginBottom: '12px' }}><label style={{ color: '#94a3b8', fontSize: '12px' }}>正文</label>
|
||||||
|
<textarea value={seekForm.content || ''} onChange={(e) => setSeekForm({...seekForm, content: e.target.value})} placeholder="请输入详细信息..."
|
||||||
|
style={{ width: '100%', padding: '8px', marginTop: '6px', background: '#0f172a', border: '1px solid #334155', borderRadius: '6px', color: '#fff', fontSize: '13px', boxSizing: 'border-box', resize: 'vertical', minHeight: '60px' }} />
|
||||||
|
</div>
|
||||||
|
<div style={{ marginBottom: '12px' }}><label style={{ color: '#ef4444', fontSize: '12px' }}>联系方式 *</label>
|
||||||
|
<input type="text" value={seekForm.contact || ''} onChange={(e) => setSeekForm({...seekForm, contact: e.target.value})} placeholder="请输入手机号或微信"
|
||||||
|
style={{ width: '100%', padding: '8px', marginTop: '6px', background: '#0f172a', border: '1px solid #334155', borderRadius: '6px', color: '#fff', fontSize: '13px', boxSizing: 'border-box' }} />
|
||||||
|
</div>
|
||||||
|
<div style={{ marginBottom: '12px' }}><label style={{ color: '#94a3b8', fontSize: '12px' }}>标题(自动生成)</label>
|
||||||
|
<input type="text" value={seekForm.title} readOnly
|
||||||
|
style={{ width: '100%', padding: '8px', marginTop: '6px', background: '#0f172a', border: '1px solid #334155', borderRadius: '6px', color: '#10b981', fontSize: '13px', boxSizing: 'border-box' }} />
|
||||||
|
</div>
|
||||||
|
<div style={{ display: 'flex', gap: '12px' }}>
|
||||||
|
<button onClick={handleSeekPublish} style={{ flex: 1, padding: '12px', background: '#10b981', border: 'none', borderRadius: '8px', color: '#fff', fontSize: '14px', fontWeight: 'bold', cursor: 'pointer' }}>发布寻号</button>
|
||||||
|
<button onClick={() => setShowSeekPublish(false)} style={{ flex: 1, padding: '12px', background: 'transparent', border: '1px solid #334155', borderRadius: '8px', color: '#94a3b8', fontSize: '14px', cursor: 'pointer' }}>取消</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<h3 style={{ color: '#fff', marginBottom: '16px' }}>
|
<h3 style={{ color: '#fff', marginBottom: '16px' }}>
|
||||||
{activeTab === 'seek' ? '🔍 寻配号信息' : '💰 成交行情信息'}
|
{activeTab === 'seek' ? '🔍 寻配号信息' : '💰 成交行情信息'}
|
||||||
|
{activeTab === 'seek' && (
|
||||||
|
<div style={{ display: 'flex', gap: '8px', marginLeft: 'auto' }}>
|
||||||
|
<button onClick={() => setShowSeekPublish(!showSeekPublish)} style={{ padding: '6px 12px', background: showSeekPublish ? '#6b7280' : '#10b981', border: 'none', borderRadius: '6px', color: '#fff', fontSize: '12px', cursor: 'pointer' }}>
|
||||||
|
{showSeekPublish ? '✕ 收起' : '+ 发布寻号'}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
{loading ? (
|
{loading ? (
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue