From 02711d73c95b40c7e6fd4d0b5bec4294f5501942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B2=E8=BE=B0=E7=94=9F=E4=BA=A7?= Date: Sat, 13 Jun 2026 11:15:12 +0800 Subject: [PATCH] =?UTF-8?q?v0.2.6=20-=20=E7=A7=BB=E9=99=A4=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E6=97=B6=E7=9A=84=E6=89=8B=E6=9C=BA=E5=8F=B7=E5=92=8C?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81=E5=8A=9F=E8=83=BD=EF=BC=88?= =?UTF-8?q?C=E7=8E=AF=E5=A2=83=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/VERSION | 2 +- backend/app/routers/auth.py | 18 +--- backend/app/routers/information.py | 4 +- backend/app/schemas/schemas.py | 1 + config/CHANGELOG.md | 13 +++ config/VERSION | 2 +- config/VERSION.json | 13 ++- frontend/index.html | 2 +- frontend/src/pages/Login.jsx | 153 +--------------------------- frontend/src/pages/News.jsx | 60 +---------- frontend/src/pages/YichensBoard.jsx | 11 +- 11 files changed, 45 insertions(+), 234 deletions(-) diff --git a/backend/VERSION b/backend/VERSION index dd91a8b..72c6717 100644 --- a/backend/VERSION +++ b/backend/VERSION @@ -1 +1 @@ -1.2.98 +VERSION=v0.2.1 diff --git a/backend/app/routers/auth.py b/backend/app/routers/auth.py index 81cbf0f..e38850b 100644 --- a/backend/app/routers/auth.py +++ b/backend/app/routers/auth.py @@ -91,22 +91,8 @@ def register(user_data: UserCreate, db: Session = Depends(get_db)): # 更新: # 更新: - # 检查手机号是否已存在 -# 更新: - if user_data.phone: -# 更新: - existing_phone = db.query(User).filter(User.phone == user_data.phone).first() -# 更新: - if existing_phone: -# 更新: - raise HTTPException( -# 更新: - status_code=status.HTTP_400_BAD_REQUEST, -# 更新: - detail="E00040:该手机号已被注册,请更换手机号" -# 更新: - ) -# 更新: + # 检查手机号是否已存在(移除,2026-06-13) + # 更新: if user_data.email: # 更新: existing_email = db.query(User).filter(User.email == user_data.email).first() diff --git a/backend/app/routers/information.py b/backend/app/routers/information.py index 5fd609e..d041051 100644 --- a/backend/app/routers/information.py +++ b/backend/app/routers/information.py @@ -109,7 +109,7 @@ def get_information_list( user_id: Optional[str] = Query(None, description="用户ID,用于获取该用户的行情"), deal_date: Optional[str] = Query(None, description="成交日期过滤,格式YYYY-MM-DD"), page: int = Query(1, ge=1), - page_size: int = Query(20, ge=1, le=500), + page_size: int = Query(20, ge=1, le=1000), current_user: Optional[User] = Depends(get_current_user), db: Session = Depends(get_db), response: Response = None @@ -880,7 +880,7 @@ def get_deal_stats( @router.get("/my/list", response_model=List[InformationResponse]) def get_my_information_list( page: int = Query(1, ge=1), - page_size: int = Query(20, ge=1, le=500), + page_size: int = Query(20, ge=1, le=1000), current_user: User = Depends(get_current_user), db: Session = Depends(get_db) ): diff --git a/backend/app/schemas/schemas.py b/backend/app/schemas/schemas.py index a8497b5..3bfc785 100644 --- a/backend/app/schemas/schemas.py +++ b/backend/app/schemas/schemas.py @@ -20,6 +20,7 @@ class UserBase(BaseModel): class UserCreate(UserBase): password: str = Field(..., min_length=6) invite_code: Optional[str] = Field(None, alias="inviteCode") # 填写的邀请码(选填) + # 移除手机号和短信验证(2026-06-13) class UserUpdate(BaseModel): diff --git a/config/CHANGELOG.md b/config/CHANGELOG.md index cab3f1c..43ec04c 100644 --- a/config/CHANGELOG.md +++ b/config/CHANGELOG.md @@ -1,5 +1,18 @@ # 版本更新记录 +## v0.2.5 (2026-05-13) + +### 前端更新 +- **News.jsx** + - 移除成交行情价格统计表格,只显示筛选后的结果 + - 成交行情获取数量改为500条 + +- **YichensBoard.jsx** + - 增加复制链接功能,点击可复制原帖链接 + +### 环境配置 +- C环境Nginx配置为代理到B环境后端 + ## v0.2.3 (2026-05-11) ### 前端更新 diff --git a/config/VERSION b/config/VERSION index 8ee6c12..68c3632 100644 --- a/config/VERSION +++ b/config/VERSION @@ -1 +1 @@ -VERSION=v0.1.8 +VERSION=0.2.5 diff --git a/config/VERSION.json b/config/VERSION.json index 61c1398..cfd8c15 100644 --- a/config/VERSION.json +++ b/config/VERSION.json @@ -1,17 +1,20 @@ { - "version": "0.2.4", - "updated": "2026-05-11", + "version": "0.2.6", + "updated": "2026-06-13", "modules": { "frontend": { - "version": "0.2.0", + "version": "0.2.2", "pages": { + "Login": "0.0.2", "Add": "0.0.2", - "News": "0.2.0" + "News": "0.1.2", + "YichensBoard": "0.0.5" } }, "backend": { - "version": "0.2.1", + "version": "0.2.2", "routers": { + "auth": "0.0.2", "seek": "0.2.0", "purchase": "0.3.0" }, diff --git a/frontend/index.html b/frontend/index.html index 2ba9e20..0d81702 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - 甲辰收藏 v=0.0.9 + 甲辰收藏 v0.2.5 diff --git a/frontend/src/pages/Login.jsx b/frontend/src/pages/Login.jsx index 0876025..0e7971b 100644 --- a/frontend/src/pages/Login.jsx +++ b/frontend/src/pages/Login.jsx @@ -1,7 +1,7 @@ /** * Login - 登录页面 - * Version: 0.0.1 - * 更新: + * Version: 0.0.2 (2026-06-13) + * 更新:移除注册时的手机号和短信验证功能 */ import React, { useState, useEffect } from 'react' @@ -23,79 +23,22 @@ export default function Login() { password: '', confirmPassword: '', email: '', - phone: '', - verifyCode: '', inviteCode: '' }) const [registerLoading, setRegisterLoading] = useState(false) const [registerError, setRegisterError] = useState('') - - // 短信获取相关 - const [sendingCode, setSendingCode] = useState(false) - const [codeCountdown, setCodeCountdown] = useState(0) - const [codeSent, setCodeSent] = useState(false) // 生成获取 useEffect(() => { generateCaptcha() }, []) - // 获取倒计时 - useEffect(() => { - if (codeCountdown > 0) { - const timer = setTimeout(() => setCodeCountdown(codeCountdown - 1), 1000) - return () => clearTimeout(timer) - } - }, [codeCountdown]) - const generateCaptcha = () => { const num1 = Math.floor(Math.random() * 10) const num2 = Math.floor(Math.random() * 10) setCaptcha({ num1, num2, answer: '' }) } - // 发送短信获取 - const handleSendCode = async () => { - if (!registerData.phone) { - setRegisterError('请先输入手机号') - return - } - - // 验证手机号格式 - const phoneRegex = /^1[3-9]\d{9}$/ - if (!phoneRegex.test(registerData.phone)) { - setRegisterError('请输入正确的手机号') - return - } - - setSendingCode(true) - setRegisterError('') - - try { - const res = await fetch('/api/auth/send-verification-code', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ phone: registerData.phone }) - }) - - const data = await res.json() - - if (data.success) { - setCodeSent(true) - setCodeCountdown(60) - setRegisterError('') - } else { - setRegisterError(data.message || '发送失败') - } - } catch (err) { - setRegisterError('发送失败,请稍后重试') - } finally { - setSendingCode(false) - } - } - // 处理注册 const handleRegister = async () => { // 验证输入 @@ -124,33 +67,13 @@ export default function Login() { return } - // 验证手机号 - if (!registerData.phone) { - setRegisterError('手机号为必填项') - return - } - - const phoneRegex = /^1[3-9]\d{9}$/ - if (!phoneRegex.test(registerData.phone)) { - setRegisterError('请输入正确的手机号') - return - } - - // 验证短信获取 - if (!registerData.verifyCode) { - setRegisterError('请输入短信获取') - return - } - setRegisterLoading(true) setRegisterError('') try { const payload = { username: registerData.username, - password: registerData.password, - phone: registerData.phone, - verifyCode: registerData.verifyCode + password: registerData.password } if (registerData.email) { payload.email = registerData.email @@ -175,9 +98,7 @@ export default function Login() { alert('注册成功!请登录') setShowRegister(false) - setRegisterData({ username: '', password: '', confirmPassword: '', email: '', phone: '', verifyCode: '', inviteCode: '' }) - setCodeSent(false) - setCodeCountdown(0) + setRegisterData({ username: '', password: '', confirmPassword: '', email: '', inviteCode: '' }) generateCaptcha() } catch (err) { console.error('注册错误:', err) @@ -491,68 +412,6 @@ export default function Login() { /> - {/* 手机号 */} -
- setRegisterData(prev => ({ ...prev, phone: e.target.value }))} - placeholder="手机号(11位)" - maxLength={11} - style={{ - width: '100%', - padding: '14px', - borderRadius: '8px', - border: '1px solid rgba(255,255,255,0.2)', - background: 'rgba(255,255,255,0.05)', - color: '#fff', - fontSize: '16px', - outline: 'none' - }} - /> -
- - {/* 短信获取 */} -
-
- setRegisterData(prev => ({ ...prev, verifyCode: e.target.value }))} - placeholder="短信验证码" - maxLength={6} - style={{ - flex: 1, minWidth: "90px", width: "auto", - padding: '14px', - borderRadius: '8px', - border: '1px solid rgba(255,255,255,0.2)', - background: 'rgba(255,255,255,0.05)', - color: '#fff', - fontSize: '16px', - outline: 'none' - }} - /> - -
-
- {/* 邮箱(可选) */}
{ setShowRegister(false) - setRegisterData({ username: '', password: '', confirmPassword: '', email: '', phone: '', verifyCode: '', inviteCode: '' }) + setRegisterData({ username: '', password: '', confirmPassword: '', email: '', inviteCode: '' }) setRegisterError('') - setCodeSent(false) - setCodeCountdown(0) }} style={{ flex: 1, minWidth: "90px", width: "auto", diff --git a/frontend/src/pages/News.jsx b/frontend/src/pages/News.jsx index 99c97c1..7c5ac27 100644 --- a/frontend/src/pages/News.jsx +++ b/frontend/src/pages/News.jsx @@ -1,7 +1,7 @@ /** * News - 资讯列表页面 - * Version: 0.1.0 (2026-05-07) - * 更新:成交行情列表和详情弹窗列表都按成交日期(deal_date)倒序排序 + * Version: 0.1.2 (2026-05-13) + * 更新:移除成交行情价格统计表格,增加获取数量到500 */ import React, { useState, useEffect } from 'react' @@ -97,7 +97,7 @@ export default function News() { ? `${API_BASE}/api/seek/list` : `${API_BASE}/api/deal/list` - // 成交行情和寻配号每页500条 + // 成交行情获取所有数据(不分页) if (activeTab === 'deal') { url += (url.includes('?') ? '&' : '?') + 'page_size=500' if (dealDate) { @@ -660,60 +660,6 @@ export default function News() { )}
- -
- - - - - {packagings.map(p => ( - - ))} - - - - {(() => { - // 计算每个分类的平均价格 - const catAvg = categories.map(cat => { - const prices = [] - packagings.forEach(pkg => { - const d = calcAvg(pkg, cat) - if (d) prices.push(d.avg) - }) - const avg = prices.length > 0 ? Math.round(prices.reduce((a,b) => a+b, 0) / prices.length) : 0 - return { cat, avg } - }).filter(c => c.avg > 0) - // 分类名称标准化并按固定顺序排序 - catAvg.sort((a, b) => a.avg - b.avg) - const categoryOrder = ['带4号', '带7号', '永恒号', '天马号', '天马王', '金山号', '金山王', '钻石号', '朦胧号', '朦胧王', '金马号', '金马王', '倒置号', '圆圆号'] - const sortedCats = categoryOrder.filter(cat => catAvg.some(c => c.cat === cat)) - .concat(catAvg.filter(c => !categoryOrder.includes(c.cat)).map(c => c.cat)) - - return sortedCats.map(cat => { - const rowData = packagings.map(pkg => calcAvg(pkg, cat)) - const hasData = rowData.some(d => d !== null) - if (!hasData) return null - return ( - - - {rowData.map((d, i) => ( - - ))} - - ) - }) - })()} - -
{p}
{cat} - {d ? ( -
setDealDetailItems(d.items)}> - ¥{d.avg.toLocaleString()} - ({d.count}) -
- ) : -} -
-
) })()} diff --git a/frontend/src/pages/YichensBoard.jsx b/frontend/src/pages/YichensBoard.jsx index 8f3efbe..01fa9b7 100644 --- a/frontend/src/pages/YichensBoard.jsx +++ b/frontend/src/pages/YichensBoard.jsx @@ -1,7 +1,7 @@ /** * YichensBoard - 一尘看板页面 - * Version: 0.0.3 - * 更新: + * Version: 0.0.5 (2026-05-13) + * 更新:增加复制链接功能 */ import React, { useState, useEffect } from 'react' @@ -265,7 +265,12 @@ export default function YichensBoard() {
{post.content}
- {post.url && 查看原帖} + {post.url && ( +
+ 查看原帖 + +
+ )} )}