v1.0.3 (2026-04-12)
- 🗑️ 删除交易记录功能:支持删除误添加的交易记录,自动回滚账户余额和持仓变化 - 💰 显示货币选择器:支持 CNY/USD/HKD 三种货币显示,默认 CNY - 🔄 实时货币转换:根据汇率自动转换总资产显示 - 💱 账户货币联动:选择账户时自动设置对应结算货币(美股→USD、A股→CNY、加密→USDT、港股→HKD) - 🔧 加密货币格式化:USDT 映射为 USD 进行显示
This commit is contained in:
parent
1df2950097
commit
08b0b129bc
21
README.md
21
README.md
@ -175,14 +175,17 @@ npm install
|
|||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
# 编辑 .env 填入数据库连接信息
|
# 编辑 .env 填入数据库连接信息
|
||||||
|
|
||||||
# 4. 初始化数据库
|
# 4. 生成 Prisma 客户端
|
||||||
|
npx prisma generate
|
||||||
|
|
||||||
|
# 5. 初始化数据库
|
||||||
npx prisma migrate dev --name init
|
npx prisma migrate dev --name init
|
||||||
npx prisma db seed
|
npx prisma db seed
|
||||||
|
|
||||||
# 5. 启动开发服务器
|
# 6. 启动开发服务器
|
||||||
npm run dev
|
npm run dev
|
||||||
|
|
||||||
# 6. 重置数据库
|
# 7. 重置数据库
|
||||||
npx prisma migrate reset --force
|
npx prisma migrate reset --force
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -385,11 +388,21 @@ MIT License - 详见 [LICENSE](LICENSE) 文件
|
|||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
|
||||||
### v1.0.2 (2026-04-12)
|
### v1.0.3 (2026-04-12)
|
||||||
|
|
||||||
- 🗑️ 删除交易记录功能:支持删除误添加的交易记录,自动回滚账户余额和持仓变化
|
- 🗑️ 删除交易记录功能:支持删除误添加的交易记录,自动回滚账户余额和持仓变化
|
||||||
- 💰 显示货币选择器:支持 CNY/USD/HKD 三种货币显示,默认 CNY
|
- 💰 显示货币选择器:支持 CNY/USD/HKD 三种货币显示,默认 CNY
|
||||||
- 🔄 实时货币转换:根据汇率自动转换总资产显示
|
- 🔄 实时货币转换:根据汇率自动转换总资产显示
|
||||||
|
- 💱 账户货币联动:选择账户时自动设置对应结算货币(美股→USD、A股→CNY、加密→USDT、港股→HKD)
|
||||||
|
- 🔧 加密货币格式化:USDT 映射为 USD 进行显示
|
||||||
|
|
||||||
|
### v1.0.2 (2026-04-12)
|
||||||
|
|
||||||
|
- 🔧 账户名称优化:改为港股账户、美股账户、A股账户、加密货币账户
|
||||||
|
- ✨ 成交总额自动计算:根据数量 × 价格自动计算
|
||||||
|
- 🗑️ 删除持仓功能:支持通过卖出全部来删除持仓
|
||||||
|
- 🎨 Select 组件显示优化:修复了下拉框显示问题
|
||||||
|
- 📝 代码注释中文化
|
||||||
|
|
||||||
### v1.0.1 (2026-04-12)
|
### v1.0.1 (2026-04-12)
|
||||||
|
|
||||||
|
|||||||
@ -876,7 +876,15 @@ export default function Dashboard() {
|
|||||||
{/* 账户选择 */}
|
{/* 账户选择 */}
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<Label>账户</Label>
|
<Label>账户</Label>
|
||||||
<Select value={selectedAccountId} onValueChange={(v) => v && setSelectedAccountId(v)}>
|
<Select value={selectedAccountId} onValueChange={(v) => {
|
||||||
|
if (v) {
|
||||||
|
setSelectedAccountId(v)
|
||||||
|
const selected = accounts.find(a => a.id === v)
|
||||||
|
if (selected) {
|
||||||
|
setTxForm(prev => ({ ...prev, currency: selected.baseCurrency }))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}}>
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
<SelectValue>
|
<SelectValue>
|
||||||
{selectedAccount ? selectedAccount.name : '选择账户'}
|
{selectedAccount ? selectedAccount.name : '选择账户'}
|
||||||
|
|||||||
@ -120,9 +120,11 @@ export async function createSecurity(data: {
|
|||||||
|
|
||||||
// 格式化货币
|
// 格式化货币
|
||||||
export function formatCurrency(amount: number, currency: string = 'USD'): string {
|
export function formatCurrency(amount: number, currency: string = 'USD'): string {
|
||||||
|
// USDT 视为 USD 进行格式化显示
|
||||||
|
const displayCurrency = currency === 'USDT' ? 'USD' : currency
|
||||||
return new Intl.NumberFormat('en-US', {
|
return new Intl.NumberFormat('en-US', {
|
||||||
style: 'currency',
|
style: 'currency',
|
||||||
currency,
|
currency: displayCurrency,
|
||||||
minimumFractionDigits: 2,
|
minimumFractionDigits: 2,
|
||||||
maximumFractionDigits: 2,
|
maximumFractionDigits: 2,
|
||||||
}).format(amount)
|
}).format(amount)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user