页面样式统一
All checks were successful
Docker Build & Deploy / Build Docker Image (push) Successful in 15s
Docker Build & Deploy / Deploy to Production (push) Successful in 5s

This commit is contained in:
孙诚
2025-12-29 16:07:43 +08:00
parent 9719c6043a
commit cbbb0c10cb
10 changed files with 171 additions and 308 deletions

View File

@@ -7,12 +7,12 @@
closeable closeable
@update:show="handleVisibleChange" @update:show="handleVisibleChange"
> >
<div class="transaction-detail" v-if="transaction"> <div class="popup-container" v-if="transaction">
<div class="detail-header" style="margin-top: 10px;margin-left: 10px;"> <div class="popup-header-fixed">
<h3>交易详情</h3> <h3>交易详情</h3>
</div> </div>
<div class="scroll-area"> <div class="popup-scroll-content">
<van-form @submit="onSubmit"> <van-form @submit="onSubmit">
<van-cell-group inset> <van-cell-group inset>
<van-cell title="卡号" :value="transaction.card" /> <van-cell title="卡号" :value="transaction.card" />
@@ -335,28 +335,6 @@ const formatDate = (dateString) => {
</script> </script>
<style scoped> <style scoped>
.transaction-detail {
display: flex;
flex-direction: column;
height: 100%;
}
.detail-header {
flex-shrink: 0;
border-bottom: 1px solid #ebedf0;
}
.detail-header h3 {
margin: 10px 0;
}
.scroll-area {
flex: 1;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
padding-bottom: 20px;
}
.classify-buttons { .classify-buttons {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;

View File

@@ -247,3 +247,59 @@
color: #51cf66; color: #51cf66;
} }
.bottom-button {
position: fixed;
bottom: calc(16px + env(safe-area-inset-bottom, 0px));
left: 16px;
right: 16px;
z-index: 100;
}
/* ===== 统一弹窗样式 ===== */
/* 弹窗容器 - 使用 flex 布局,确保标题固定,内容可滚动 */
.popup-container {
height: 100%;
display: flex;
flex-direction: column;
}
/* 固定的弹窗标题 - 居中显示,不随内容滚动 */
.popup-header-fixed {
flex-shrink: 0; /* 防止被压缩 */
padding: 16px;
border-bottom: 1px solid var(--van-border-color);
background: var(--van-background-2);
text-align: center; /* 标题居中 */
}
.popup-header-fixed h3 {
margin: 0;
font-size: 16px;
font-weight: 600;
color: var(--van-text-color);
}
.popup-header-fixed p {
margin: 4px 0 0 0;
font-size: 12px;
color: var(--van-text-color-2);
}
/* 可滚动的弹窗内容区域 */
.popup-scroll-content {
flex: 1;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
/* 深色模式适配 */
@media (prefers-color-scheme: dark) {
.popup-header-fixed {
background: #1f1f1f;
}
.popup-scroll-content {
background: #141414;
}
}

View File

@@ -19,8 +19,8 @@
round round
closeable closeable
> >
<div class="date-transactions"> <div class="popup-container">
<div class="popup-header"> <div class="popup-header-fixed">
<h3>{{ selectedDateText }}</h3> <h3>{{ selectedDateText }}</h3>
<p v-if="dateTransactions.length"> <p v-if="dateTransactions.length">
{{ dateTransactions.length }} 笔交易 {{ dateTransactions.length }} 笔交易
@@ -28,7 +28,7 @@
</p> </p>
</div> </div>
<div class="bills-scroll-container"> <div class="popup-scroll-content">
<TransactionList <TransactionList
:transactions="dateTransactions" :transactions="dateTransactions"
:loading="listLoading" :loading="listLoading"
@@ -259,29 +259,6 @@ fetchDailyStatistics(now.getFullYear(), now.getMonth() + 1);
padding-bottom: 0 !important; padding-bottom: 0 !important;
} }
.date-transactions {
height: 100%;
display: flex;
flex-direction: column;
}
.popup-header {
padding: 16px;
border-bottom: 1px solid #ebedf0;
}
.popup-header h3 {
margin: 0 0 8px 0;
font-size: 18px;
font-weight: 600;
}
.popup-header p {
margin: 0;
font-size: 14px;
color: #969799;
}
/* 设置页面容器背景色 */ /* 设置页面容器背景色 */
:deep(.van-calendar__header-title) { :deep(.van-calendar__header-title) {
background: transparent !important; background: transparent !important;

View File

@@ -54,12 +54,13 @@
</van-cell-group> </van-cell-group>
</div> </div>
<div class="action-bar"> <div class="bottom-button">
<!-- 新增分类按钮 --> <!-- 新增分类按钮 -->
<van-button <van-button
type="primary" type="primary"
size="large" size="large"
block round
icon="plus"
@click="handleAddCategory" @click="handleAddCategory"
> >
新增分类 新增分类
@@ -326,27 +327,6 @@ onMounted(() => {
} }
} }
/* 底部操作栏 */
.action-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
display: flex;
gap: 12px;
padding: 12px;
background-color: var(--van-background-2, #fff);
box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.08);
z-index: 100;
}
@media (prefers-color-scheme: dark) {
.action-bar {
background-color: var(--van-background-2, #2c2c2c);
box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.3);
}
}
/* 设置页面容器背景色 */ /* 设置页面容器背景色 */
:deep(.van-nav-bar) { :deep(.van-nav-bar) {
background: transparent !important; background: transparent !important;

View File

@@ -64,13 +64,14 @@
position="bottom" position="bottom"
:style="{ height: '80%' }" :style="{ height: '80%' }"
round round
closeable
> >
<div class="records-popup"> <div class="popup-container">
<div class="popup-header"> <div class="popup-header-fixed">
<h3>交易记录列表</h3> <h3>交易记录列表</h3>
<van-icon name="cross" @click="showRecordsList = false" />
</div> </div>
<div class="popup-scroll-content" style="background: var(--van-background, #f7f8fa);">
<!-- 批量操作按钮 --> <!-- 批量操作按钮 -->
<div class="batch-actions"> <div class="batch-actions">
<van-button <van-button
@@ -113,6 +114,7 @@
:show-delete="false" :show-delete="false"
/> />
</div> </div>
</div>
</div> </div>
</van-popup> </van-popup>
</div> </div>
@@ -335,34 +337,6 @@ const handleSubmit = async () => {
.records-list { .records-list {
padding-bottom: 20px; padding-bottom: 20px;
overflow-y: auto;
flex: 1;
}
.records-popup {
display: flex;
flex-direction: column;
height: 100%;
background-color: var(--van-background, #f7f8fa);
}
.popup-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px;
background-color: var(--van-background-2, #fff);
}
.popup-header h3 {
margin: 0;
font-size: 16px;
font-weight: 500;
}
.popup-header .van-icon {
font-size: 20px;
cursor: pointer;
} }
/* 设置页面容器背景色 */ /* 设置页面容器背景色 */

View File

@@ -64,10 +64,11 @@
round round
closeable closeable
> >
<div class="email-detail" v-if="currentEmail"> <div class="popup-container" v-if="currentEmail">
<div class="detail-header" style="margin-top: 10px; margin-left: 10px;"> <div class="popup-header-fixed">
<h3>{{ currentEmail.Subject || currentEmail.subject || '(无主题)' }}</h3> <h3>{{ currentEmail.Subject || currentEmail.subject || '(无主题)' }}</h3>
</div> </div>
<div class="popup-scroll-content">
<van-cell-group inset> <van-cell-group inset>
<van-cell title="发件人" :value="currentEmail.From || currentEmail.from || '未知'" /> <van-cell title="发件人" :value="currentEmail.From || currentEmail.from || '未知'" />
<van-cell title="接收时间" :value="formatDate(currentEmail.ReceivedDate || currentEmail.receivedDate)" /> <van-cell title="接收时间" :value="formatDate(currentEmail.ReceivedDate || currentEmail.receivedDate)" />
@@ -112,8 +113,7 @@
重新分析 重新分析
</van-button> </van-button>
</div> </div>
</div>
</div> </div>
</van-popup> </van-popup>
@@ -125,11 +125,11 @@
round round
closeable closeable
> >
<div class="transaction-list-popup"> <div class="popup-container">
<div class="list-header"> <div class="popup-header-fixed">
<h3 style="margin: 16px;">关联账单列表</h3> <h3>关联账单列表</h3>
</div> </div>
<div class="bills-scroll-container"> <div class="popup-scroll-content">
<TransactionList <TransactionList
:transactions="transactionList" :transactions="transactionList"
:loading="false" :loading="false"
@@ -425,17 +425,6 @@ defineExpose({
padding-right: 10px; padding-right: 10px;
} }
.transaction-list-popup {
height: 100%;
display: flex;
flex-direction: column;
}
.list-header{
padding: 16px;
border-bottom: 1px solid #ebedf0;
}
.email-content { .email-content {
margin-top: 16px; margin-top: 16px;
} }

View File

@@ -20,6 +20,9 @@
<div class="message-title" :class="{ 'unread': !item.isRead }"> <div class="message-title" :class="{ 'unread': !item.isRead }">
{{ item.title }} {{ item.title }}
</div> </div>
<div class="message-content">
{{ item.content }}
</div>
<div class="message-info"> <div class="message-info">
{{ item.createTime }} {{ item.createTime }}
</div> </div>
@@ -46,12 +49,12 @@
round round
closeable closeable
> >
<div class="message-detail"> <div class="popup-container">
<div class="detail-header"> <div class="popup-header-fixed">
<h3>{{ currentMessage.title }}</h3> <h3>{{ currentMessage.title }}</h3>
<span class="detail-time">{{ currentMessage.createTime }}</span> <p class="detail-time">{{ currentMessage.createTime }}</p>
</div> </div>
<div class="detail-content"> <div class="popup-scroll-content detail-content">
{{ currentMessage.content }} {{ currentMessage.content }}
</div> </div>
</div> </div>
@@ -162,6 +165,7 @@ const handleDelete = (item) => {
showToast(res.message || '删除失败'); showToast(res.message || '删除失败');
} }
} catch (error) { } catch (error) {
console.error('删除消息失败', error);
showToast('删除失败'); showToast('删除失败');
} }
} }
@@ -187,6 +191,7 @@ const handleMarkAllRead = () => {
showToast(res.message || '操作失败'); showToast(res.message || '操作失败');
} }
} catch (error) { } catch (error) {
console.error('标记所有已读失败', error);
showToast('操作失败'); showToast('操作失败');
} }
} }
@@ -238,6 +243,15 @@ onMounted(() => {
white-space: nowrap; white-space: nowrap;
} }
.message-content{
font-size: 14px;
color: var(--van-text-color-2);
margin-bottom: 6px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.message-title.unread { .message-title.unread {
font-weight: bold; font-weight: bold;
} }
@@ -251,34 +265,13 @@ onMounted(() => {
height: 100%; height: 100%;
} }
.message-detail {
padding: 20px;
display: flex;
flex-direction: column;
height: 100%;
background-color: var(--van-background);
}
.detail-header {
margin-bottom: 20px;
border-bottom: 1px solid var(--van-border-color);
padding-bottom: 10px;
}
.detail-header h3 {
margin: 0 0 10px 0;
font-size: 18px;
color: var(--van-text-color);
}
.detail-time { .detail-time {
color: var(--van-text-color-2); color: var(--van-text-color-2);
font-size: 14px; font-size: 14px;
} }
.detail-content { .detail-content {
flex: 1; padding: 20px;
overflow-y: auto;
font-size: 16px; font-size: 16px;
line-height: 1.6; line-height: 1.6;
color: var(--van-text-color); color: var(--van-text-color);

View File

@@ -72,7 +72,7 @@
</van-pull-refresh> </van-pull-refresh>
<!-- 底部新增按钮 --> <!-- 底部新增按钮 -->
<div class="bottom-add-button"> <div class="bottom-button">
<van-button <van-button
type="primary" type="primary"
size="large" size="large"
@@ -92,12 +92,74 @@
round round
closeable closeable
> >
<div class="periodic-form"> <div class="popup-container">
<div class="form-header"> <div class="popup-header-fixed">
<h3>{{ isEdit ? '编辑周期账单' : '新增周期账单' }}</h3> <h3>{{ isEdit ? '编辑周期账单' : '新增周期账单' }}</h3>
</div> </div>
<div class="popup-scroll-content">
<van-form @submit="onSubmit"> <van-form @submit="onSubmit">
<van-cell-group inset title="周期设置">
<van-field
v-model="form.periodicTypeText"
is-link
readonly
name="periodicType"
label="周期"
placeholder="请选择周期类型"
@click="showPeriodicTypePicker = true"
:rules="[{ required: true, message: '请选择周期类型' }]"
/>
<!-- 每周配置 -->
<van-field
v-if="form.periodicType === 1"
v-model="form.weekdaysText"
is-link
readonly
name="weekdays"
label="星期"
placeholder="请选择星期几"
@click="showWeekdaysPicker = true"
:rules="[{ required: true, message: '请选择星期几' }]"
/>
<!-- 每月配置 -->
<van-field
v-if="form.periodicType === 2"
v-model="form.monthDaysText"
is-link
readonly
name="monthDays"
label="日期"
placeholder="请选择每月的日期"
@click="showMonthDaysPicker = true"
:rules="[{ required: true, message: '请选择日期' }]"
/>
<!-- 每季度配置 -->
<van-field
v-if="form.periodicType === 3"
v-model="form.quarterDay"
name="quarterDay"
label="季度第几天"
placeholder="请输入季度开始后第几天"
type="number"
:rules="[{ required: true, message: '请输入季度开始后第几天' }]"
/>
<!-- 每年配置 -->
<van-field
v-if="form.periodicType === 4"
v-model="form.yearDay"
name="yearDay"
label="年第几天"
placeholder="请输入年开始后第几天"
type="number"
:rules="[{ required: true, message: '请输入年开始后第几天' }]"
/>
</van-cell-group>
<van-cell-group inset title="基本信息"> <van-cell-group inset title="基本信息">
<van-field <van-field
v-model="form.reason" v-model="form.reason"
@@ -167,73 +229,13 @@
</div> </div>
</van-cell-group> </van-cell-group>
<van-cell-group inset title="周期设置">
<van-field
v-model="form.periodicTypeText"
is-link
readonly
name="periodicType"
label="周期"
placeholder="请选择周期类型"
@click="showPeriodicTypePicker = true"
:rules="[{ required: true, message: '请选择周期类型' }]"
/>
<!-- 每周配置 -->
<van-field
v-if="form.periodicType === 1"
v-model="form.weekdaysText"
is-link
readonly
name="weekdays"
label="星期"
placeholder="请选择星期几"
@click="showWeekdaysPicker = true"
:rules="[{ required: true, message: '请选择星期几' }]"
/>
<!-- 每月配置 -->
<van-field
v-if="form.periodicType === 2"
v-model="form.monthDaysText"
is-link
readonly
name="monthDays"
label="日期"
placeholder="请选择每月的日期"
@click="showMonthDaysPicker = true"
:rules="[{ required: true, message: '请选择日期' }]"
/>
<!-- 每季度配置 -->
<van-field
v-if="form.periodicType === 3"
v-model="form.quarterDay"
name="quarterDay"
label="季度第几天"
placeholder="请输入季度开始后第几天"
type="number"
:rules="[{ required: true, message: '请输入季度开始后第几天' }]"
/>
<!-- 每年配置 -->
<van-field
v-if="form.periodicType === 4"
v-model="form.yearDay"
name="yearDay"
label="年第几天"
placeholder="请输入年开始后第几天"
type="number"
:rules="[{ required: true, message: '请输入年开始后第几天' }]"
/>
</van-cell-group>
<div style="margin: 16px;"> <div style="margin: 16px;">
<van-button round block type="primary" native-type="submit" :loading="submitting"> <van-button round block type="primary" native-type="submit" :loading="submitting">
{{ isEdit ? '更新' : '确认添加' }} {{ isEdit ? '更新' : '确认添加' }}
</van-button> </van-button>
</div> </div>
</van-form> </van-form>
</div>
</div> </div>
</van-popup> </van-popup>
@@ -775,7 +777,7 @@ onMounted(() => {
} }
.periodic-list { .periodic-list {
/* padding: 16px 0; */ padding: 16px 0;
} }
.periodic-item { .periodic-item {
@@ -818,31 +820,4 @@ onMounted(() => {
border-radius: 16px; border-radius: 16px;
} }
.bottom-add-button {
position: fixed;
bottom: calc(16px + env(safe-area-inset-bottom, 0px));
left: 16px;
right: 16px;
z-index: 100;
}
.periodic-form {
height: 100%;
overflow-y: auto;
}
.form-header {
padding: 16px;
text-align: center;
border-bottom: 1px solid var(--van-border-color);
}
.form-header h3 {
margin: 0;
color: var(--van-text-color);
}
:deep(.van-cell-group) {
margin-top: 16px;
}
</style> </style>

View File

@@ -284,13 +284,13 @@
round round
closeable closeable
> >
<div class="category-bills"> <div class="popup-container">
<div class="popup-header"> <div class="popup-header-fixed">
<h3>{{ selectedCategoryTitle }}</h3> <h3>{{ selectedCategoryTitle }}</h3>
<p v-if="categoryBillsTotal"> {{ categoryBillsTotal }} 笔交易</p> <p v-if="categoryBillsTotal"> {{ categoryBillsTotal }} 笔交易</p>
</div> </div>
<div class="bills-scroll-container"> <div class="popup-scroll-content" style="background: #f7f8fa;">
<TransactionList <TransactionList
:transactions="categoryBills" :transactions="categoryBills"
:loading="billListLoading" :loading="billListLoading"
@@ -1103,67 +1103,6 @@ onActivated(() => {
color: var(--van-text-color); color: var(--van-text-color);
} }
/* 分类账单列表弹出层 */
.category-bills {
height: 100%;
display: flex;
flex-direction: column;
background: #f7f8fa;
overflow: hidden;
}
@media (prefers-color-scheme: dark) {
.category-bills {
background: #141414;
}
}
.category-bills .popup-header {
padding: 20px 16px;
background: #fff;
border-bottom: 1px solid #ebedf0;
flex-shrink: 0;
}
@media (prefers-color-scheme: dark) {
.category-bills .popup-header {
background: #1f1f1f;
border-bottom: 1px solid #2c2c2c;
}
}
.category-bills .popup-header h3 {
margin: 0 0 8px 0;
font-size: 18px;
font-weight: 600;
color: var(--van-text-color);
}
.category-bills .popup-header p {
margin: 0;
font-size: 14px;
color: var(--van-text-color-2);
}
/* 修复深色模式下van组件的背景色 */
.category-bills :deep(.van-list) {
background: transparent;
}
.category-bills :deep(.van-cell-group) {
background: transparent;
}
@media (prefers-color-scheme: dark) {
.category-bills :deep(.van-cell) {
background-color: #1f1f1f;
}
.category-bills :deep(.van-swipe-cell) {
background-color: transparent;
}
}
/* 设置页面容器背景色 */ /* 设置页面容器背景色 */
:deep(.van-nav-bar) { :deep(.van-nav-bar) {
background: transparent !important; background: transparent !important;

View File

@@ -36,11 +36,12 @@
round round
closeable closeable
> >
<div class="transaction-detail"> <div class="popup-container">
<div class="detail-header" style="padding-top: 10px; padding-left: 10px;"> <div class="popup-header-fixed">
<h3>手动录账单</h3> <h3>手动录账单</h3>
</div> </div>
<div class="popup-scroll-content">
<van-form @submit="onAddSubmit"> <van-form @submit="onAddSubmit">
<van-cell-group inset title="基本信息"> <van-cell-group inset title="基本信息">
<van-field <van-field
@@ -102,6 +103,7 @@
</van-button> </van-button>
</div> </div>
</van-form> </van-form>
</div>
</div> </div>
</van-popup> </van-popup>