refactor: refactor smart entry as standalone modal overlay

- Convert TravelReimbursementCreateView from page to modal overlay
- Simplify App.vue navigation flow with smartEntryOpen state
- Add create-request button in RequestsView

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-05 23:47:20 +08:00
parent 2d2ed27861
commit 9a7b0794a1
7 changed files with 1437 additions and 646 deletions

View File

@@ -52,6 +52,10 @@
<i class="mdi mdi-chevron-down"></i>
</button>
</div>
<button class="create-request-btn" type="button" @click="emit('create-request')">
<i class="mdi mdi-plus-circle-outline"></i>
<span>发起报销</span>
</button>
</div>
<p class="hint"><i class="mdi mdi-information-outline"></i> 点击任意行可查看单据详情</p>
@@ -125,7 +129,7 @@ defineProps({
filteredRequests: { type: Array, required: true }
})
const emit = defineEmits(['ask', 'approve', 'reject'])
const emit = defineEmits(['ask', 'approve', 'reject', 'create-request'])
const activeTab = ref('全部')
const tabs = ['全部', '待提交', '审批中', '待出行', '已完成']
@@ -311,6 +315,30 @@ watch(activeTab, () => { currentPage.value = 1 })
flex-wrap: wrap;
}
.create-request-btn {
min-height: 40px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 0 18px;
border: 0;
border-radius: 10px;
background: linear-gradient(135deg, #10b981, #059669);
color: #fff;
font-size: 14px;
font-weight: 800;
white-space: nowrap;
box-shadow: 0 10px 24px rgba(5, 150, 105, 0.2);
transition: transform 160ms ease, box-shadow 160ms ease, filter 160ms ease;
}
.create-request-btn:hover {
transform: translateY(-1px);
box-shadow: 0 14px 28px rgba(5, 150, 105, 0.24);
filter: saturate(1.02);
}
.filter-btn,
.page-size {
min-height: 38px;