fix: 金额输入框样式优化 + 预算页键盘遮挡修复 + admin 样式修复
- AmountEditor: 未聚焦时透明,聚焦时粘土卡片浮起;¥/单位 baseline 对齐 - budget: 补充 Numpad 占位高度,auto-focus 改为 false 缩短页面 - admin/feedback: 补充 modal-mask mixin - admin/track: filter-tabs 与 scroll-view 分离 + 格式化
This commit is contained in:
@@ -607,4 +607,9 @@ function goBack() { uni.navigateBack() }
|
||||
.skip & { color: $text-sec; }
|
||||
.confirm & { color: $surface; }
|
||||
}
|
||||
|
||||
.modal-mask {
|
||||
@include modal-mask;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -61,13 +61,19 @@
|
||||
<view class="query-section">
|
||||
<view class="query-header">
|
||||
<text class="section-title">事件记录</text>
|
||||
<scroll-view class="filter-tabs" scroll-x>
|
||||
<view class="filter-tab" :class="{ active: !filterEvent }" @tap="filterEvent = ''">全部</view>
|
||||
<view class="filter-tab" :class="{ active: filterEvent === 'page_view' }" @tap="filterEvent = 'page_view'">页面</view>
|
||||
<view class="filter-tab" :class="{ active: filterEvent === 'action' }" @tap="filterEvent = 'action'">操作</view>
|
||||
<view class="filter-tab" :class="{ active: filterEvent === 'error' }" @tap="filterEvent = 'error'">错误</view>
|
||||
<view class="filter-tab" :class="{ active: filterEvent === 'api_error' }" @tap="filterEvent = 'api_error'">API错误</view>
|
||||
<view class="filter-tab" :class="{ active: filterEvent === 'app_launch' }" @tap="filterEvent = 'app_launch'">启动</view>
|
||||
<scroll-view scroll-x>
|
||||
<view class="filter-tabs">
|
||||
<view class="filter-tab" :class="{ active: !filterEvent }" @tap="filterEvent = ''">全部</view>
|
||||
<view class="filter-tab" :class="{ active: filterEvent === 'page_view' }" @tap="filterEvent = 'page_view'">
|
||||
页面</view>
|
||||
<view class="filter-tab" :class="{ active: filterEvent === 'action' }" @tap="filterEvent = 'action'">操作
|
||||
</view>
|
||||
<view class="filter-tab" :class="{ active: filterEvent === 'error' }" @tap="filterEvent = 'error'">错误</view>
|
||||
<view class="filter-tab" :class="{ active: filterEvent === 'api_error' }" @tap="filterEvent = 'api_error'">
|
||||
API错误</view>
|
||||
<view class="filter-tab" :class="{ active: filterEvent === 'app_launch' }"
|
||||
@tap="filterEvent = 'app_launch'">启动</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
<view class="filter-row">
|
||||
@@ -95,7 +101,8 @@
|
||||
</view>
|
||||
<text class="record-page" v-if="item.page">{{ item.page }}</text>
|
||||
<text class="record-user" v-if="item.nickname">{{ item.nickname }}</text>
|
||||
<text class="record-data" v-if="item.data && Object.keys(item.data).length > 0">{{ JSON.stringify(item.data) }}</text>
|
||||
<text class="record-data" v-if="item.data && Object.keys(item.data).length > 0">{{ JSON.stringify(item.data)
|
||||
}}</text>
|
||||
</view>
|
||||
|
||||
<view v-if="loading" class="loading-box">
|
||||
@@ -151,7 +158,7 @@ onPullDownRefresh(async () => {
|
||||
async function loadStats() {
|
||||
try {
|
||||
stats.value = await getTrackStats()
|
||||
} catch {}
|
||||
} catch { }
|
||||
}
|
||||
|
||||
async function loadEvents(append = false) {
|
||||
@@ -274,7 +281,9 @@ function goBack() {
|
||||
@include sticky-header;
|
||||
}
|
||||
|
||||
.status-bar { @include status-bar; }
|
||||
.status-bar {
|
||||
@include status-bar;
|
||||
}
|
||||
|
||||
.nav-bar {
|
||||
display: flex;
|
||||
@@ -282,7 +291,9 @@ function goBack() {
|
||||
padding: $space-sm $space-xl $space-md;
|
||||
}
|
||||
|
||||
.nav-back { @include nav-back; }
|
||||
.nav-back {
|
||||
@include nav-back;
|
||||
}
|
||||
|
||||
.nav-title {
|
||||
flex: 1;
|
||||
@@ -292,7 +303,9 @@ function goBack() {
|
||||
color: $text;
|
||||
}
|
||||
|
||||
.nav-placeholder { width: 88rpx; }
|
||||
.nav-placeholder {
|
||||
width: 88rpx;
|
||||
}
|
||||
|
||||
.stats-card {
|
||||
margin: $space-md $space-xl;
|
||||
@@ -333,7 +346,9 @@ function goBack() {
|
||||
gap: $space-sm;
|
||||
padding: $space-xs 0;
|
||||
|
||||
&:active { opacity: 0.7; }
|
||||
&:active {
|
||||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
|
||||
.event-tag {
|
||||
@@ -341,18 +356,34 @@ function goBack() {
|
||||
border-radius: $radius-xs;
|
||||
flex-shrink: 0;
|
||||
|
||||
&.page { background: #E3F2FD; }
|
||||
&.action { background: #E8F5E9; }
|
||||
&.error { background: #FFEBEE; }
|
||||
&.page {
|
||||
background: #E3F2FD;
|
||||
}
|
||||
|
||||
&.action {
|
||||
background: #E8F5E9;
|
||||
}
|
||||
|
||||
&.error {
|
||||
background: #FFEBEE;
|
||||
}
|
||||
}
|
||||
|
||||
.event-tag-text {
|
||||
font-size: $font-sm;
|
||||
font-weight: 500;
|
||||
|
||||
.page & { color: #1976D2; }
|
||||
.action & { color: #388E3C; }
|
||||
.error & { color: #D32F2F; }
|
||||
.page & {
|
||||
color: #1976D2;
|
||||
}
|
||||
|
||||
.action & {
|
||||
color: #388E3C;
|
||||
}
|
||||
|
||||
.error & {
|
||||
color: #D32F2F;
|
||||
}
|
||||
}
|
||||
|
||||
.event-bar {
|
||||
@@ -472,7 +503,9 @@ function goBack() {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
&:active { opacity: 0.8; }
|
||||
&:active {
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
.search-btn-text {
|
||||
@@ -491,7 +524,6 @@ function goBack() {
|
||||
display: flex;
|
||||
gap: $space-xs;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.filter-tab {
|
||||
@@ -520,7 +552,9 @@ function goBack() {
|
||||
padding: $space-md;
|
||||
border-bottom: 1rpx solid $border;
|
||||
|
||||
&:last-child { border-bottom: none; }
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
.record-header {
|
||||
@@ -534,18 +568,34 @@ function goBack() {
|
||||
padding: 2rpx 12rpx;
|
||||
border-radius: $radius-xs;
|
||||
|
||||
&.page { background: #E3F2FD; }
|
||||
&.action { background: #E8F5E9; }
|
||||
&.error { background: #FFEBEE; }
|
||||
&.page {
|
||||
background: #E3F2FD;
|
||||
}
|
||||
|
||||
&.action {
|
||||
background: #E8F5E9;
|
||||
}
|
||||
|
||||
&.error {
|
||||
background: #FFEBEE;
|
||||
}
|
||||
}
|
||||
|
||||
.record-event-text {
|
||||
font-size: $font-xs;
|
||||
font-weight: 500;
|
||||
|
||||
.page & { color: #1976D2; }
|
||||
.action & { color: #388E3C; }
|
||||
.error & { color: #D32F2F; }
|
||||
.page & {
|
||||
color: #1976D2;
|
||||
}
|
||||
|
||||
.action & {
|
||||
color: #388E3C;
|
||||
}
|
||||
|
||||
.error & {
|
||||
color: #D32F2F;
|
||||
}
|
||||
}
|
||||
|
||||
.record-time {
|
||||
@@ -578,7 +628,8 @@ function goBack() {
|
||||
border-radius: $radius-sm;
|
||||
}
|
||||
|
||||
.loading-box, .empty-box {
|
||||
.loading-box,
|
||||
.empty-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@@ -601,6 +652,8 @@ function goBack() {
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.bar-fill { transition: none; }
|
||||
.bar-fill {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
:fixed="true"
|
||||
size="large"
|
||||
unit="元"
|
||||
:auto-focus="true"
|
||||
:auto-focus="false"
|
||||
@confirm="onConfirm"
|
||||
/>
|
||||
</view>
|
||||
@@ -197,7 +197,10 @@ function goBack() {
|
||||
.page {
|
||||
min-height: 100vh;
|
||||
background: $bg;
|
||||
padding-bottom: 120rpx;
|
||||
// AmountEditor fixed Numpad 占位: 4行×96rpx + 3间隙×16rpx + padding×2×16rpx = 464rpx
|
||||
$numpad-h: 464rpx;
|
||||
padding-bottom: calc(#{$numpad-h} + constant(safe-area-inset-bottom));
|
||||
padding-bottom: calc(#{$numpad-h} + env(safe-area-inset-bottom));
|
||||
}
|
||||
|
||||
.header-fixed {
|
||||
|
||||
Reference in New Issue
Block a user