From ea6ad9ddc3d5b33897e93276282245f7023836ff Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期四, 28 八月 2025 17:45:28 +0800
Subject: [PATCH] 大数据市场分析

---
 src/views/sales/components/PurchaseReturnViewDialog.vue |  324 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 324 insertions(+), 0 deletions(-)

diff --git a/src/views/sales/components/PurchaseReturnViewDialog.vue b/src/views/sales/components/PurchaseReturnViewDialog.vue
new file mode 100644
index 0000000..529b682
--- /dev/null
+++ b/src/views/sales/components/PurchaseReturnViewDialog.vue
@@ -0,0 +1,324 @@
+<template>
+  <el-dialog
+    :model-value="dialogViewVisible"
+    @update:model-value="$emit('update:dialogViewVisible', $event)"
+    :title="title"
+    width="900px"
+    :close-on-click-modal="false"
+  >
+    <div class="view-container">
+      <!-- 鍩烘湰淇℃伅 -->
+      <el-card class="info-card" shadow="never">
+        <template #header>
+          <div class="card-header">
+            <span>鍩烘湰淇℃伅</span>
+          </div>
+        </template>
+        <el-descriptions :column="2" border>
+          <el-descriptions-item label="閫�璐у崟鍙�">
+            {{ form.returnNo || '-' }}
+          </el-descriptions-item>
+          <el-descriptions-item label="渚涘簲鍟�">
+            {{ form.supplierName || '-' }}
+          </el-descriptions-item>
+          <el-descriptions-item label="鍗曟嵁鏃ユ湡">
+            {{ form.returnDate || '-' }}
+          </el-descriptions-item>
+          <el-descriptions-item label="鎿嶄綔鍛�">
+            {{ form.operatorName || '-' }}
+          </el-descriptions-item>
+          <el-descriptions-item label="閫�璐у師鍥�">
+            {{ form.returnReason || '-' }}
+          </el-descriptions-item>
+          <el-descriptions-item label="鐘舵��">
+            <el-tag :type="getStatusType(form.status)">
+              {{ getStatusText(form.status) }}
+            </el-tag>
+          </el-descriptions-item>
+          <el-descriptions-item label="閫�璐ф暟閲�">
+            {{ form.returnQuantity || 0 }} 鍚�
+          </el-descriptions-item>
+          <el-descriptions-item label="閫�璐ч噾棰�">
+            {{ form.returnAmount || 0 }} 鍏�
+          </el-descriptions-item>
+          <el-descriptions-item label="鍒涘缓鏃堕棿" :span="2">
+            {{ form.createTime || '-' }}
+          </el-descriptions-item>
+          <el-descriptions-item label="澶囨敞" :span="2">
+            {{ form.remark || '-' }}
+          </el-descriptions-item>
+        </el-descriptions>
+      </el-card>
+
+      <!-- 閫�璐у晢鍝佹槑缁� -->
+      <el-card class="info-card" shadow="never">
+        <template #header>
+          <div class="card-header">
+            <span>閫�璐у晢鍝佹槑缁�</span>
+          </div>
+        </template>
+        <el-table :data="form.returnItems || []" border style="width: 100%">
+          <el-table-column label="搴忓彿" type="index" width="60" />
+          <el-table-column label="鍟嗗搧鍚嶇О" prop="coalName" width="150" />
+          <el-table-column label="瑙勬牸鍨嬪彿" prop="specification" width="150" />
+          <el-table-column label="鏁伴噺" prop="quantity" width="100">
+            <template #default="scope">
+              {{ scope.row.quantity || 0 }} 鍚�
+            </template>
+          </el-table-column>
+          <el-table-column label="鍗曚环" prop="unitPrice" width="120">
+            <template #default="scope">
+              {{ scope.row.unitPrice || 0 }} 鍏�/鍚�
+            </template>
+          </el-table-column>
+          <el-table-column label="灏忚" width="120">
+            <template #default="scope">
+              {{ ((scope.row.quantity || 0) * (scope.row.unitPrice || 0)).toFixed(2) }} 鍏�
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="table-summary">
+          <span class="summary-item">
+            鎬绘暟閲忥細<strong>{{ getTotalQuantity() }} 鍚�</strong>
+          </span>
+          <span class="summary-item">
+            鎬婚噾棰濓細<strong>{{ getTotalAmount() }} 鍏�</strong>
+          </span>
+        </div>
+      </el-card>
+
+      <!-- 瀹℃壒娴佺▼ -->
+      <el-card class="info-card" shadow="never">
+        <template #header>
+          <div class="card-header">
+            <span>瀹℃壒娴佺▼</span>
+          </div>
+        </template>
+        <el-timeline>
+          <el-timeline-item
+            v-for="(activity, index) in approvalFlow"
+            :key="index"
+            :timestamp="activity.timestamp"
+            :type="activity.type"
+          >
+            <h4>{{ activity.title }}</h4>
+            <p>{{ activity.content }}</p>
+            <p v-if="activity.operator">鎿嶄綔浜猴細{{ activity.operator }}</p>
+          </el-timeline-item>
+        </el-timeline>
+      </el-card>
+    </div>
+
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="handleClose">鍏抽棴</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+
+<script setup>
+import { computed } from "vue";
+
+// Props
+const props = defineProps({
+  dialogViewVisible: {
+    type: Boolean,
+    default: false
+  },
+  form: {
+    type: Object,
+    default: () => ({})
+  },
+  title: {
+    type: String,
+    default: "閫�璐у崟璇︽儏"
+  }
+});
+
+// Emits
+const emit = defineEmits(['update:dialogViewVisible']);
+
+// 鑾峰彇鐘舵�佺被鍨�
+const getStatusType = (status) => {
+  const statusMap = {
+    draft: "",
+    pending: "warning",
+    approved: "success",
+    rejected: "danger",
+    completed: "info"
+  };
+  return statusMap[status] || "";
+};
+
+// 鑾峰彇鐘舵�佹枃鏈�
+const getStatusText = (status) => {
+  const statusMap = {
+    draft: "鑽夌",
+    pending: "寰呭鏍�",
+    approved: "宸插鏍�",
+    rejected: "宸叉嫆缁�",
+    completed: "宸插畬鎴�"
+  };
+  return statusMap[status] || status;
+};
+
+// 璁$畻鎬绘暟閲�
+const getTotalQuantity = () => {
+  if (!props.form.returnItems || props.form.returnItems.length === 0) {
+    return 0;
+  }
+  return props.form.returnItems.reduce((total, item) => total + (item.quantity || 0), 0);
+};
+
+// 璁$畻鎬婚噾棰�
+const getTotalAmount = () => {
+  if (!props.form.returnItems || props.form.returnItems.length === 0) {
+    return 0;
+  }
+  return props.form.returnItems.reduce((total, item) => {
+    return total + ((item.quantity || 0) * (item.unitPrice || 0));
+  }, 0).toFixed(2);
+};
+
+// 瀹℃壒娴佺▼鏁版嵁
+const approvalFlow = computed(() => {
+  const flow = [];
+  
+  // 鍒涘缓
+  flow.push({
+    title: "鍒涘缓閫�璐у崟",
+    content: "閫�璐у崟宸插垱寤猴紝绛夊緟鎻愪氦瀹℃牳",
+    timestamp: props.form.createTime || new Date().toLocaleString(),
+    operator: props.form.operatorName || "绯荤粺",
+    type: "primary"
+  });
+  
+  // 鏍规嵁鐘舵�佹坊鍔犲鎵规祦绋�
+  if (props.form.status === "pending") {
+    flow.push({
+      title: "鎻愪氦瀹℃牳",
+      content: "閫�璐у崟宸叉彁浜わ紝绛夊緟瀹℃牳",
+      timestamp: new Date().toLocaleString(),
+      operator: props.form.operatorName || "绯荤粺",
+      type: "warning"
+    });
+  } else if (props.form.status === "approved") {
+    flow.push({
+      title: "鎻愪氦瀹℃牳",
+      content: "閫�璐у崟宸叉彁浜わ紝绛夊緟瀹℃牳",
+      timestamp: new Date().toLocaleString(),
+      operator: props.form.operatorName || "绯荤粺",
+      type: "warning"
+    });
+    flow.push({
+      title: "瀹℃牳閫氳繃",
+      content: "閫�璐у崟瀹℃牳閫氳繃",
+      timestamp: new Date().toLocaleString(),
+      operator: "瀹℃牳鍛�",
+      type: "success"
+    });
+  } else if (props.form.status === "rejected") {
+    flow.push({
+      title: "鎻愪氦瀹℃牳",
+      content: "閫�璐у崟宸叉彁浜わ紝绛夊緟瀹℃牳",
+      timestamp: new Date().toLocaleString(),
+      operator: props.form.operatorName || "绯荤粺",
+      type: "warning"
+    });
+    flow.push({
+      title: "瀹℃牳鎷掔粷",
+      content: "閫�璐у崟瀹℃牳琚嫆缁�",
+      timestamp: new Date().toLocaleString(),
+      operator: "瀹℃牳鍛�",
+      type: "danger"
+    });
+  } else if (props.form.status === "completed") {
+    flow.push({
+      title: "鎻愪氦瀹℃牳",
+      content: "閫�璐у崟宸叉彁浜わ紝绛夊緟瀹℃牳",
+      timestamp: new Date().toLocaleString(),
+      operator: props.form.operatorName || "绯荤粺",
+      type: "warning"
+    });
+    flow.push({
+      title: "瀹℃牳閫氳繃",
+      content: "閫�璐у崟瀹℃牳閫氳繃",
+      timestamp: new Date().toLocaleString(),
+      operator: "瀹℃牳鍛�",
+      type: "success"
+    });
+    flow.push({
+      title: "閫�璐у畬鎴�",
+      content: "閫�璐ф祦绋嬪凡瀹屾垚",
+      timestamp: new Date().toLocaleString(),
+      operator: "绯荤粺",
+      type: "info"
+    });
+  }
+  
+  return flow;
+});
+
+// 鍏抽棴瀵硅瘽妗�
+const handleClose = () => {
+  emit('update:dialogViewVisible', false);
+};
+</script>
+
+<style scoped>
+.view-container {
+  padding: 0;
+}
+
+.info-card {
+  margin-bottom: 20px;
+}
+
+.info-card:last-child {
+  margin-bottom: 0;
+}
+
+.card-header {
+  font-weight: bold;
+  font-size: 16px;
+}
+
+.table-summary {
+  margin-top: 15px;
+  text-align: right;
+  padding: 10px;
+  background-color: #f5f7fa;
+  border-radius: 4px;
+}
+
+.summary-item {
+  margin-left: 20px;
+  font-size: 14px;
+}
+
+.summary-item strong {
+  color: #409eff;
+  font-size: 16px;
+}
+
+.dialog-footer {
+  text-align: right;
+}
+
+.el-timeline {
+  padding: 20px;
+}
+
+.el-timeline-item h4 {
+  margin: 0 0 8px 0;
+  font-size: 14px;
+  color: #303133;
+}
+
+.el-timeline-item p {
+  margin: 4px 0;
+  font-size: 12px;
+  color: #606266;
+}
+</style>

--
Gitblit v1.9.3