From eb322fd6b88273f1dada1f850f4473d5f054dd66 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期四, 21 五月 2026 17:48:19 +0800
Subject: [PATCH] 差旅报销费用报销
---
src/pages/oa/ApproveManage/approve-list/approve.vue | 104 ++++++++++++++++++++++++++++++----------------------
1 files changed, 60 insertions(+), 44 deletions(-)
diff --git a/src/pages/oa/ApproveManage/approve-list/approve.vue b/src/pages/oa/ApproveManage/approve-list/approve.vue
index 3ed6220..9201818 100644
--- a/src/pages/oa/ApproveManage/approve-list/approve.vue
+++ b/src/pages/oa/ApproveManage/approve-list/approve.vue
@@ -1,17 +1,22 @@
<!--
OA / 瀹℃壒绠$悊 / 瀹℃壒澶勭悊
- 璺敱锛�/pages/oa/ApproveManage/approve-list/approve
+ 宸梾/璐圭敤鎶ラ攢浣跨敤鎶ラ攢璇︽儏 + 瀹℃壒鍒楄〃 approve 鎺ュ彛
-->
<template>
<view class="oa-detail-page">
- <PageHeader title="瀹℃壒澶勭悊"
+ <PageHeader :title="pageTitle"
@back="goBack" />
- <scroll-view v-if="row"
+ <scroll-view v-if="displayReady"
class="oa-detail-scroll"
scroll-y
:show-scrollbar="false">
- <ApproveInstanceDetailBody :row="row"
+ <ReimburseInstanceDetailBody v-if="isReimburse"
+ :reimburse-row="reimburseRow"
+ :module-key="detailModuleKey" />
+
+ <ApproveInstanceDetailBody v-else
+ :row="row"
:module-key="detailModuleKey" />
<view class="section-card opinion-card">
@@ -32,10 +37,10 @@
<view v-else
class="oa-empty">
<up-empty mode="data"
- text="鏈幏鍙栧埌瀹℃壒鏁版嵁" />
+ :text="loading ? '鍔犺浇涓�' : '鏈幏鍙栧埌瀹℃壒鏁版嵁'" />
</view>
- <view v-if="row"
+ <view v-if="displayReady"
class="oa-page-footer">
<text class="oa-footer-btn btn-default"
:class="{ 'is-disabled': submitting }"
@@ -55,6 +60,7 @@
import { onLoad } from "@dcloudio/uni-app";
import PageHeader from "@/components/PageHeader.vue";
import ApproveInstanceDetailBody from "./_components/ApproveInstanceDetailBody.vue";
+ import ReimburseInstanceDetailBody from "../../ReimburseManage/_components/ReimburseInstanceDetailBody.vue";
import { approveApprovalInstance } from "@/api/oa/approvalInstance.js";
import {
buildApproveInstanceDto,
@@ -62,16 +68,44 @@
loadInstanceRow,
} from "../../_utils/approveListUtils.js";
import { inferModuleKeyFromRow } from "../../_utils/approvalModuleApplyExtras.js";
+ import {
+ inferReimburseModuleKeyFromInstance,
+ isReimburseApprovalInstance,
+ loadReimburseDetailForInstance,
+ } from "../../_utils/reimburseApproveBridge.js";
+ import { getApprovalModuleConfig } from "../../_utils/approvalModuleRegistry.js";
- const instanceId = ref("");
const row = ref(null);
- const detailModuleKey = computed(() => inferModuleKeyFromRow(row.value));
+ const reimburseRow = ref(null);
+ const loading = ref(false);
const approveOpinion = ref("");
const submitting = ref(false);
- const goBack = () => {
- uni.navigateBack();
- };
+ const isReimburse = computed(() => isReimburseApprovalInstance(row.value));
+
+ const detailModuleKey = computed(() => {
+ if (isReimburse.value) {
+ return (
+ reimburseRow.value?.moduleKey ||
+ inferReimburseModuleKeyFromInstance(row.value)
+ );
+ }
+ return inferModuleKeyFromRow(row.value);
+ });
+
+ const pageTitle = computed(() => {
+ if (isReimburse.value) {
+ const label = getApprovalModuleConfig(detailModuleKey.value)?.label || "鎶ラ攢";
+ return `${label}瀹℃壒`;
+ }
+ return "瀹℃壒澶勭悊";
+ });
+
+ const displayReady = computed(() =>
+ isReimburse.value ? Boolean(reimburseRow.value) : Boolean(row.value)
+ );
+
+ const goBack = () => uni.navigateBack();
const submitApprove = uiResult => {
if (!row.value?.id || submitting.value) return;
@@ -99,7 +133,7 @@
const prevRoute = pages[pages.length - 2]?.route || "";
const delta = prevRoute.includes("approve-list/detail") ? 2 : 1;
uni.navigateBack({ delta });
- }, 300);
+ }, 400);
})
.catch(() => {
uni.showToast({ title: "瀹℃壒鎿嶄綔澶辫触", icon: "none" });
@@ -109,56 +143,38 @@
});
};
- onLoad(options => {
+ onLoad(async options => {
if (!options?.id) {
uni.showToast({ title: "缂哄皯瀹℃壒 ID", icon: "none" });
setTimeout(goBack, 500);
return;
}
- instanceId.value = options.id;
const cached = loadInstanceRow(options.id);
if (!cached) {
- uni.showToast({ title: "璇蜂粠鍒楄〃杩涘叆瀹℃壒", icon: "none" });
+ uni.showToast({ title: "璇蜂粠鍒楄〃杩涘叆", icon: "none" });
setTimeout(goBack, 500);
return;
}
if (!canApproveInstance(cached)) {
- uni.showToast({ title: "褰撳墠瀹℃壒涓嶅彲澶勭悊", icon: "none" });
+ uni.showToast({ title: "褰撳墠瀹℃壒鏃犻渶鎮ㄥ鐞�", icon: "none" });
setTimeout(goBack, 500);
return;
}
row.value = cached;
+ if (isReimburseApprovalInstance(cached)) {
+ loading.value = true;
+ try {
+ const { reimburseRow: mapped } = await loadReimburseDetailForInstance(cached);
+ reimburseRow.value = mapped;
+ } catch {
+ uni.showToast({ title: "鍔犺浇鎶ラ攢璇︽儏澶辫触", icon: "none" });
+ } finally {
+ loading.value = false;
+ }
+ }
});
</script>
<style scoped lang="scss">
@import "../../_styles/oa-approval-list.scss";
-
- $primary: #2979ff;
-
- .opinion-card {
- margin-top: 10px;
- background: #fff;
- border-radius: 12px;
- overflow: hidden;
- box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
- }
-
- .section-head {
- padding: 12px 16px;
- border-bottom: 1px solid #f2f4f7;
- }
-
- .section-title {
- font-size: 15px;
- font-weight: 600;
- color: #1f2d3d;
- padding-left: 10px;
- border-left: 3px solid $primary;
- line-height: 1.2;
- }
-
- .opinion-wrap {
- padding: 12px 16px 16px;
- }
</style>
--
Gitblit v1.9.3