ui: 暗色金融风重构 + 自定义货币选择器

- 深色主题:深蓝背景 + 毛玻璃卡片 + 金色结果数字
- 自定义底部弹窗货币选择器,替换原生白色 Picker
- 换算卡片内容居中竖排布局
- 汇率信息条改为竖排独立卡片
- 实时脉冲徽章 + 蓝紫渐变互换按钮

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
manpengan
2026-03-18 18:19:02 +08:00
parent 92304d4fa2
commit 2516cc2085
14 changed files with 543 additions and 311 deletions

View File

@@ -6,13 +6,14 @@ const pickerData = getPickerData();
Page({
data: {
pickerData,
baseIndex: 0, // CNY
baseIndex: 0,
amount: '100',
list: [],
updatedAt: '',
loading: true,
error: '',
rates: null,
showPicker: false,
},
onLoad() {
@@ -30,17 +31,10 @@ Page({
try {
const baseCode = CURRENCIES[this.data.baseIndex].code;
const { rates, updatedAt } = await getRates(baseCode);
this.setData({
rates,
updatedAt,
loading: false,
});
this.setData({ rates, updatedAt, loading: false });
this.buildList();
} catch (e) {
this.setData({
loading: false,
error: '汇率获取失败,请检查网络后下拉刷新',
});
this.setData({ loading: false, error: '汇率获取失败,请下拉刷新重试' });
}
},
@@ -72,11 +66,19 @@ Page({
this.setData({ list });
},
handleBaseChange(e) {
this.setData({ baseIndex: Number(e.detail.value) });
openBasePicker() {
this.setData({ showPicker: true });
},
handlePickerSelect(e) {
this.setData({ baseIndex: e.detail.value, showPicker: false });
this.loadRates();
},
handlePickerClose() {
this.setData({ showPicker: false });
},
handleAmountInput(e) {
this.setData({ amount: e.detail.value });
this.buildList();