优化小程序报销模块

This commit is contained in:
hero920103 committed 2026-10-10 14:24:44 +08:00
1 parent 1e9666cefd
commit 48f3bd997c
21 files changed
+5738 -1750

No files matched your search

+92 -42
View File
@@ -37,15 +37,19 @@
</view>
<block v-else>
<!-- OA 工作台仪表盘(Web 版内容搬到首页顶部) -->
<!-- 首页卡片流:flex 纵向 + 统一 gap,避免跨组件 margin 不折叠导致间距不均 -->
<view class="home-stack">
<!-- OA 工作台仪表盘上半:公告 + 数据统计(常用功能插在下面) -->
<SubOaDashboard
v-if="isOa && dash"
part="top"
:data="dash"
@view-notices="goNotices"
@view-schedules="goSchedules"
/>
<!-- 概览 -->
<!-- 概览 / 日程待办 / 最新公告:非 OA 子系统,或 OA 仪表盘加载失败时兜底展示 -->
<block v-if="!(isOa && dash)">
<view class="kpi-card">
<view class="kpi-item">
<text class="kpi-value">{{ leafMenus.length }}</text>
@@ -120,44 +124,58 @@
<text class="list-time">{{ item.publish_time || item.publisher_name || '' }}</text>
</view>
</view>
</view>
</view>
</block>
<!-- 常用功能:与仪表盘卡片统一的样式,点「全部」切到功能页签 -->
<view class="quick-card">
<view class="quick-head">
<view class="quick-head-left">
<view class="head-icon">
<FaIcon name="star" color="#f59e0b" :size="12" />
</view>
<text class="quick-title">常用功能</text>
</view>
<view class="block-more" @tap="goFunctions">
<text class="block-more-text">全部</text>
<FaIcon name="chevron-right" color="#94a3b8" :size="11" />
</view>
</view>
<view class="grid">
<view
v-for="(item, index) in quickMenus"
:key="item.id"
class="cell"
@tap="openMenu(item, item.title)"
>
<view class="fn-card" :class="{ locked: item.locked }">
<view class="tint-icon fn-icon" :class="item.locked ? 'tint-off' : 'tint-' + (index % 8)">
<FaIcon :name="item.icon || fallbackIcon" color="#ffffff" :size="18" />
</view>
<text class="fn-name">{{ item.title }}</text>
</view>
</view>
<!-- 末位固定「+」:点击选择要加入常用功能的功能 -->
<view class="cell">
<view class="fn-card fn-add" @tap="openPicker">
<view class="add-icon">
<FaIcon name="plus" color="#8a94ad" :size="18" />
</view>
<text class="fn-name">添加</text>
</view>
</view>
</view>
</view>
<!-- 常用功能:仪表盘式快捷入口,点「全部」切到功能页签 -->
<view class="block">
<view class="block-head">
<text class="block-title">常用功能</text>
<view class="block-more" @tap="goFunctions">
<text class="block-more-text">全部</text>
<FaIcon name="chevron-right" color="#8a94ad" :size="11" />
</view>
</view>
<view class="quick-card">
<view class="grid">
<view
v-for="(item, index) in quickMenus"
:key="item.id"
class="cell"
@tap="openMenu(item, item.title)"
>
<view class="fn-card" :class="{ locked: item.locked }">
<view class="tint-icon fn-icon" :class="item.locked ? 'tint-off' : 'tint-' + (index % 8)">
<FaIcon :name="item.icon || fallbackIcon" color="#ffffff" :size="18" />
</view>
<text class="fn-name">{{ item.title }}</text>
</view>
</view>
<!-- 末位固定「+」:点击选择要加入常用功能的功能 -->
<view class="cell">
<view class="fn-card fn-add" @tap="openPicker">
<view class="add-icon">
<FaIcon name="plus" color="#8a94ad" :size="18" />
</view>
<text class="fn-name">添加</text>
</view>
</view>
</view>
</view>
<!-- OA 工作台仪表盘下半:报销趋势 + 状态分布 -->
<SubOaDashboard
v-if="isOa && dash"
part="bottom"
:data="dash"
@view-notices="goNotices"
@view-schedules="goSchedules"
/>
</view>
</block>
</block>
@@ -489,8 +507,11 @@ onShow(() => {
padding: 28rpx $page-padding-x 0;
}
.block + .block {
margin-top: 32rpx;
/* 首页卡片流:统一纵向间距(跨组件 margin 不折叠,故用 flex gap) */
.home-stack {
display: flex;
flex-direction: column;
gap: 24rpx;
}
.block-head {
@@ -517,7 +538,6 @@ onShow(() => {
@include card;
display: flex;
padding: 30rpx 0;
margin-bottom: 32rpx;
}
.kpi-item {
@@ -634,9 +654,39 @@ onShow(() => {
/* ============ 常用功能宫格:一行 4 个 ============
cell 占 25% 宽并自带右侧间隙,容器用负 margin 抵消末列间隙,
避免使用 calc 除法——小程序端 wxss 对复杂 calc 支持不稳。 */
/* 与 SubOaDashboard 的 dash-card 保持同一视觉语言 */
.quick-card {
@include card;
padding: 24rpx 20rpx 8rpx;
padding: 26rpx 24rpx 10rpx;
}
.quick-head {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 22rpx;
}
.quick-head-left {
display: flex;
align-items: center;
gap: 12rpx;
}
.head-icon {
width: 40rpx;
height: 40rpx;
border-radius: 12rpx;
background: #fff7e6;
display: flex;
align-items: center;
justify-content: center;
}
.quick-title {
font-size: 28rpx;
font-weight: 600;
color: $color-text;
}
.grid {
@@ -656,7 +706,7 @@ onShow(() => {
height: 100%;
padding: 18rpx 6rpx 16rpx;
border-radius: $radius-md;
background: $color-bg-page;
background: transparent;
display: flex;
flex-direction: column;
align-items: center;