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/invoiceCollaboration/components/InvoiceViewDialog.vue |  291 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 291 insertions(+), 0 deletions(-)

diff --git a/src/views/invoiceCollaboration/components/InvoiceViewDialog.vue b/src/views/invoiceCollaboration/components/InvoiceViewDialog.vue
new file mode 100644
index 0000000..72e7091
--- /dev/null
+++ b/src/views/invoiceCollaboration/components/InvoiceViewDialog.vue
@@ -0,0 +1,291 @@
+<template>
+  <el-dialog
+    :model-value="dialogViewVisible"
+    @update:model-value="$emit('update:dialogViewVisible', $event)"
+    :title="title"
+    width="1000px"
+    :close-on-click-modal="false"
+  >
+    <div class="invoice-view">
+      <!-- 鍩烘湰淇℃伅 -->
+      <el-card class="basic-info" shadow="never">
+        <template #header>
+          <div class="card-header">
+            <span>鍩烘湰淇℃伅</span>
+          </div>
+        </template>
+        
+        <el-descriptions :column="2" border>
+          <el-descriptions-item label="鍙戠エ鍙风爜">{{ form.invoiceNo || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="鍙戠エ浠g爜">{{ form.invoiceCode || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="寮�绁ㄦ棩鏈�">{{ form.invoiceDate || '-' }}</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="绋庢帶骞冲彴鐘舵��">
+            <el-tag :type="getTaxControlStatusType(form.taxControlStatus)">
+              {{ getTaxControlStatusText(form.taxControlStatus) }}
+            </el-tag>
+          </el-descriptions-item>
+          <el-descriptions-item label="鍒涘缓鏃堕棿">{{ form.createTime || '-' }}</el-descriptions-item>
+        </el-descriptions>
+      </el-card>
+
+      <!-- 璐拱鏂逛俊鎭� -->
+      <el-card class="buyer-info" shadow="never">
+        <template #header>
+          <div class="card-header">
+            <span>璐拱鏂逛俊鎭�</span>
+          </div>
+        </template>
+        
+        <el-descriptions :column="2" border>
+          <el-descriptions-item label="璐拱鏂瑰悕绉�">{{ form.buyerName || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="绾崇◣浜鸿瘑鍒彿">{{ form.buyerTaxNo || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="鍦板潃鐢佃瘽">{{ form.buyerAddress || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="寮�鎴疯鍙婅处鍙�">{{ form.buyerBankAccount || '-' }}</el-descriptions-item>
+        </el-descriptions>
+      </el-card>
+
+      <!-- 閿�鍞柟淇℃伅 -->
+      <el-card class="seller-info" shadow="never">
+        <template #header>
+          <div class="card-header">
+            <span>閿�鍞柟淇℃伅</span>
+          </div>
+        </template>
+        
+        <el-descriptions :column="2" border>
+          <el-descriptions-item label="閿�鍞柟鍚嶇О">{{ form.sellerName || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="绾崇◣浜鸿瘑鍒彿">{{ form.sellerTaxNo || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="鍦板潃鐢佃瘽">{{ form.sellerAddress || '-' }}</el-descriptions-item>
+          <el-descriptions-item label="寮�鎴疯鍙婅处鍙�">{{ form.sellerBankAccount || '-' }}</el-descriptions-item>
+        </el-descriptions>
+      </el-card>
+
+      <!-- 鍟嗗搧鏄庣粏 -->
+      <el-card class="items-info" shadow="never">
+        <template #header>
+          <div class="card-header">
+            <span>鍟嗗搧鏄庣粏</span>
+          </div>
+        </template>
+        
+        <el-table :data="form.items || []" border style="width: 100%">
+          <el-table-column label="鍟嗗搧鍚嶇О" prop="name" width="200" />
+          <el-table-column label="瑙勬牸鍨嬪彿" prop="specification" width="150" />
+          <el-table-column label="鍗曚綅" prop="unit" width="100" />
+          <el-table-column label="鏁伴噺" prop="quantity" width="100" />
+          <el-table-column label="鍗曚环" prop="unitPrice" width="120">
+            <template #default="scope">
+              {{ scope.row.unitPrice }} 鍏�
+            </template>
+          </el-table-column>
+          <el-table-column label="閲戦" prop="amount" width="120">
+            <template #default="scope">
+              {{ (scope.row.amount || 0).toFixed(2) }} 鍏�
+            </template>
+          </el-table-column>
+          <el-table-column label="绋庣巼" prop="taxRate" width="100">
+            <template #default="scope">
+              {{ (parseFloat(scope.row.taxRate || 0) * 100).toFixed(0) }}%
+            </template>
+          </el-table-column>
+          <el-table-column label="绋庨" prop="taxAmount" width="120">
+            <template #default="scope">
+              {{ (scope.row.taxAmount || 0).toFixed(2) }} 鍏�
+            </template>
+          </el-table-column>
+          <el-table-column label="浠风◣鍚堣" prop="totalAmount" width="120">
+            <template #default="scope">
+              {{ (scope.row.totalAmount || 0).toFixed(2) }} 鍏�
+            </template>
+          </el-table-column>
+        </el-table>
+        
+        <!-- 鍚堣淇℃伅 -->
+        <div class="summary-info">
+          <el-row :gutter="20">
+            <el-col :span="6">
+              <span class="summary-label">閲戦鍚堣锛�</span>
+              <span class="summary-value">{{ getTotalAmount().toFixed(2) }} 鍏�</span>
+            </el-col>
+            <el-col :span="6">
+              <span class="summary-label">绋庨鍚堣锛�</span>
+              <span class="summary-value">{{ getTotalTaxAmount().toFixed(2) }} 鍏�</span>
+            </el-col>
+            <el-col :span="6">
+              <span class="summary-label">浠风◣鍚堣锛�</span>
+              <span class="summary-value">{{ getTotalTotalAmount().toFixed(2) }} 鍏�</span>
+            </el-col>
+          </el-row>
+        </div>
+      </el-card>
+
+      <!-- 澶囨敞淇℃伅 -->
+      <el-card class="remark-info" shadow="never">
+        <template #header>
+          <div class="card-header">
+            <span>澶囨敞淇℃伅</span>
+          </div>
+        </template>
+        
+        <div class="remark-content">
+          {{ form.remark || '鏃�' }}
+        </div>
+      </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",
+    issuing: "warning",
+    issued: "success",
+    failed: "danger",
+    cancelled: "info"
+  };
+  return statusMap[status] || "";
+};
+
+// 鑾峰彇鐘舵�佹枃鏈�
+const getStatusText = (status) => {
+  const statusMap = {
+    draft: "鑽夌",
+    pending: "寰呭紑绁�",
+    issuing: "寮�绁ㄤ腑",
+    issued: "宸插紑绁�",
+    failed: "寮�绁ㄥけ璐�",
+    cancelled: "宸蹭綔搴�"
+  };
+  return statusMap[status] || status;
+};
+
+// 鑾峰彇绋庢帶骞冲彴鐘舵�佺被鍨�
+const getTaxControlStatusType = (status) => {
+  const statusMap = {
+    pending: "warning",
+    syncing: "warning",
+    synced: "success",
+    failed: "danger"
+  };
+  return statusMap[status] || "";
+};
+
+// 鑾峰彇绋庢帶骞冲彴鐘舵�佹枃鏈�
+const getTaxControlStatusText = (status) => {
+  const statusMap = {
+    pending: "寰呭悓姝�",
+    syncing: "鍚屾涓�",
+    synced: "宸插悓姝�",
+    failed: "鍚屾澶辫触"
+  };
+  return statusMap[status] || status;
+};
+
+// 璁$畻鎬婚噾棰�
+const getTotalAmount = () => {
+  return (props.form.items || []).reduce((sum, item) => sum + (item.amount || 0), 0);
+};
+
+// 璁$畻鎬荤◣棰�
+const getTotalTaxAmount = () => {
+  return (props.form.items || []).reduce((sum, item) => sum + (item.taxAmount || 0), 0);
+};
+
+// 璁$畻鎬讳环绋庡悎璁�
+const getTotalTotalAmount = () => {
+  return (props.form.items || []).reduce((sum, item) => sum + (item.totalAmount || 0), 0);
+};
+
+// 鍏抽棴瀵硅瘽妗�
+const handleClose = () => {
+  emit('update:dialogViewVisible', false);
+};
+</script>
+
+<style scoped>
+.invoice-view {
+  padding: 20px 0;
+}
+
+.basic-info,
+.buyer-info,
+.seller-info,
+.items-info,
+.remark-info {
+  margin-bottom: 20px;
+}
+
+.card-header {
+  font-weight: bold;
+  font-size: 16px;
+}
+
+.summary-info {
+  margin-top: 15px;
+  padding: 15px;
+  background-color: #f5f7fa;
+  border-radius: 4px;
+}
+
+.summary-label {
+  font-weight: bold;
+  margin-right: 10px;
+}
+
+.summary-value {
+  color: #409eff;
+  font-size: 16px;
+  font-weight: bold;
+}
+
+.remark-content {
+  padding: 15px;
+  background-color: #f5f7fa;
+  border-radius: 4px;
+  min-height: 60px;
+  line-height: 1.6;
+}
+
+.dialog-footer {
+  text-align: right;
+}
+
+.el-table {
+  margin-top: 10px;
+}
+</style>

--
Gitblit v1.9.3