From 7c2cdcbc7f5585b96fba76a07b0e4417a09c4d7e Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 02 六月 2026 11:06:10 +0800
Subject: [PATCH] 新疆马铃薯 1.过程检验下载添加3个模版

---
 src/views/officeProcessAutomation/ReimburseManage/travel-reimburse/components/ApprovalFlowProgress.vue |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/src/views/officeProcessAutomation/ReimburseManage/travel-reimburse/components/ApprovalFlowProgress.vue b/src/views/officeProcessAutomation/ReimburseManage/travel-reimburse/components/ApprovalFlowProgress.vue
new file mode 100644
index 0000000..03a5fa3
--- /dev/null
+++ b/src/views/officeProcessAutomation/ReimburseManage/travel-reimburse/components/ApprovalFlowProgress.vue
@@ -0,0 +1,49 @@
+<!-- 宸梾鎶ラ攢锛氬鎵规祦绋嬭繘搴﹀睍绀� -->
+<template>
+  <el-steps :active="activeStep" finish-status="success" align-center>
+    <el-step
+      v-for="(node, index) in sortedNodes"
+      :key="index"
+      :title="`鑺傜偣 ${index + 1}`"
+      :description="stepDescription(node)"
+      :status="stepStatus(node, index)"
+    />
+  </el-steps>
+</template>
+
+<script setup>
+import { computed } from "vue";
+
+const props = defineProps({
+  nodes: { type: Array, default: () => [] },
+  currentIndex: { type: Number, default: 0 },
+});
+
+const sortedNodes = computed(() => {
+  const list = props.nodes || [];
+  return [...list].sort((a, b) => (a.sortOrder ?? a.nodeOrder ?? 0) - (b.sortOrder ?? b.nodeOrder ?? 0));
+});
+
+const activeStep = computed(() => {
+  const list = sortedNodes.value;
+  if (!list.length) return 0;
+  const finished = list.filter((n) => n.nodeStatus === "finish").length;
+  const hasError = list.some((n) => n.nodeStatus === "error");
+  if (hasError) return Math.max(0, props.currentIndex);
+  return finished;
+});
+
+function stepDescription(node) {
+  const name = (node.approverName || "").trim() || "鏈寚瀹�";
+  const opinion = (node.approveOpinion || "").trim();
+  if (opinion) return `${name}锛�${opinion}`;
+  return name;
+}
+
+function stepStatus(node, index) {
+  if (node.nodeStatus === "error") return "error";
+  if (node.nodeStatus === "finish") return "success";
+  if (node.nodeStatus === "process" || index === props.currentIndex) return "process";
+  return "wait";
+}
+</script>

--
Gitblit v1.9.3