2026-05-06 11:00:38 +08:00
|
|
|
<template>
|
|
|
|
|
<section class="travel-page">
|
2026-05-28 22:49:58 +08:00
|
|
|
<EnterpriseListPage
|
|
|
|
|
v-model:active-tab="activeTab"
|
|
|
|
|
v-model:current-page="currentPage"
|
|
|
|
|
v-model:page-size="pageSize"
|
|
|
|
|
class="travel-list"
|
|
|
|
|
:tabs="tabs"
|
|
|
|
|
tabs-label="个人报销状态"
|
|
|
|
|
:loading="loading"
|
|
|
|
|
:error="error"
|
|
|
|
|
:empty="showEmpty"
|
|
|
|
|
:empty-state="emptyState"
|
|
|
|
|
:total="totalCount"
|
|
|
|
|
:total-pages="totalPages"
|
|
|
|
|
:page-size-options="pageSizeOptions"
|
|
|
|
|
:show-pagination="showTable"
|
|
|
|
|
loading-title="真实报销数据同步中"
|
|
|
|
|
loading-message="正在加载后端返回的个人报销单据"
|
|
|
|
|
loading-icon="mdi mdi-file-document-outline"
|
|
|
|
|
error-title="报销列表加载失败"
|
|
|
|
|
@retry="emit('reload')"
|
|
|
|
|
@empty-action="handleEmptyAction"
|
|
|
|
|
@page-size-change="changePageSize"
|
|
|
|
|
>
|
|
|
|
|
<template #filters>
|
|
|
|
|
<div class="list-search">
|
|
|
|
|
<i class="mdi mdi-magnify"></i>
|
|
|
|
|
<input v-model="listKeyword" type="search" placeholder="搜索单号、事由、报销类型..." />
|
|
|
|
|
</div>
|
2026-05-06 11:00:38 +08:00
|
|
|
|
2026-05-28 22:49:58 +08:00
|
|
|
<div class="date-range-filter" :class="{ open: datePopover }">
|
|
|
|
|
<button class="filter-btn date-range-trigger" type="button" @click="datePopover = !datePopover">
|
|
|
|
|
<span class="date-range-label">{{ dateRangeLabel }}</span>
|
|
|
|
|
<i class="mdi mdi-calendar"></i>
|
|
|
|
|
</button>
|
|
|
|
|
<div v-if="datePopover" class="date-range-popover" role="dialog" aria-label="选择时间段">
|
|
|
|
|
<header>
|
|
|
|
|
<strong>选择时间段</strong>
|
|
|
|
|
<button type="button" aria-label="关闭" @click="datePopover = false"><i class="mdi mdi-close"></i></button>
|
|
|
|
|
</header>
|
|
|
|
|
<div class="date-range-fields">
|
|
|
|
|
<label>
|
|
|
|
|
<span>开始日期</span>
|
|
|
|
|
<input v-model="rangeStart" type="date" />
|
|
|
|
|
</label>
|
|
|
|
|
<label>
|
|
|
|
|
<span>结束日期</span>
|
|
|
|
|
<input v-model="rangeEnd" type="date" />
|
|
|
|
|
</label>
|
2026-05-06 11:00:38 +08:00
|
|
|
</div>
|
2026-05-28 22:49:58 +08:00
|
|
|
<footer>
|
|
|
|
|
<button class="ghost-btn" type="button" @click="datePopover = false">取消</button>
|
|
|
|
|
<button class="apply-btn" type="button" :disabled="!rangeStart || !rangeEnd" @click="applyDateRange">应用</button>
|
|
|
|
|
</footer>
|
2026-05-06 11:00:38 +08:00
|
|
|
</div>
|
|
|
|
|
</div>
|
2026-05-28 22:49:58 +08:00
|
|
|
|
|
|
|
|
<button v-for="filter in filters" :key="filter" type="button" class="filter-btn">
|
|
|
|
|
<span>{{ filter }}</span>
|
|
|
|
|
<i class="mdi mdi-chevron-down"></i>
|
|
|
|
|
</button>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<template #actions>
|
2026-05-06 11:00:38 +08:00
|
|
|
<button class="create-request-btn" type="button" @click="emit('create-request')">
|
|
|
|
|
<i class="mdi mdi-plus-circle-outline"></i>
|
|
|
|
|
<span>发起报销</span>
|
|
|
|
|
</button>
|
2026-05-28 22:49:58 +08:00
|
|
|
</template>
|
2026-05-13 03:33:11 +00:00
|
|
|
|
2026-05-28 22:49:58 +08:00
|
|
|
<template #hint>
|
|
|
|
|
<i class="mdi mdi-information-outline"></i>
|
|
|
|
|
点击任意行可查看单据详情
|
|
|
|
|
</template>
|
2026-05-13 03:33:11 +00:00
|
|
|
|
2026-05-28 22:49:58 +08:00
|
|
|
<template #table>
|
|
|
|
|
<table>
|
2026-05-06 11:00:38 +08:00
|
|
|
<colgroup>
|
|
|
|
|
<col class="col-id">
|
2026-05-13 03:33:11 +00:00
|
|
|
<col class="col-type">
|
|
|
|
|
<col class="col-title">
|
|
|
|
|
<col class="col-occurred">
|
2026-05-06 11:00:38 +08:00
|
|
|
<col class="col-apply">
|
|
|
|
|
<col class="col-amount">
|
|
|
|
|
<col class="col-node">
|
|
|
|
|
<col class="col-approval">
|
|
|
|
|
</colgroup>
|
|
|
|
|
<thead>
|
|
|
|
|
<tr>
|
|
|
|
|
<th>单号</th>
|
2026-05-13 03:33:11 +00:00
|
|
|
<th>报销类型</th>
|
|
|
|
|
<th>报销事由</th>
|
|
|
|
|
<th>发生时间</th>
|
2026-05-06 11:00:38 +08:00
|
|
|
<th>申请时间</th>
|
2026-05-13 03:33:11 +00:00
|
|
|
<th>金额</th>
|
2026-05-06 11:00:38 +08:00
|
|
|
<th>当前节点</th>
|
|
|
|
|
<th>审批状态</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr v-for="row in visibleRows" :key="row.id" @click="emit('ask', row)">
|
2026-05-13 03:33:11 +00:00
|
|
|
<td><strong class="doc-id">{{ row.documentNo || row.id }}</strong></td>
|
|
|
|
|
<td><span class="type-tag" :class="row.typeTone">{{ row.typeLabel }}</span></td>
|
2026-05-06 11:00:38 +08:00
|
|
|
<td>{{ row.reason }}</td>
|
2026-05-13 03:33:11 +00:00
|
|
|
<td>{{ row.occurredDisplay }}</td>
|
2026-05-06 11:00:38 +08:00
|
|
|
<td>{{ row.applyTime }}</td>
|
2026-05-13 03:33:11 +00:00
|
|
|
<td>{{ row.amountDisplay }}</td>
|
2026-05-06 11:00:38 +08:00
|
|
|
<td>{{ row.node }}</td>
|
|
|
|
|
<td><span class="status-tag" :class="row.approvalTone">{{ row.approval }}</span></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
2026-05-28 22:49:58 +08:00
|
|
|
</template>
|
|
|
|
|
</EnterpriseListPage>
|
2026-05-06 11:00:38 +08:00
|
|
|
</section>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script src="./scripts/RequestsView.js"></script>
|
|
|
|
|
|
|
|
|
|
<style scoped src="../assets/styles/views/requests-view.css"></style>
|