sen
2025-12-23 35bc26ac5c83da943fd476235192abddb826eba4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<template>
  <el-dialog v-model="visible" title="费用详情" width="1000px" destroy-on-close @closed="handleClosed">
    <div class="modal-content">
      <section class="detail-section">
        <h3 class="section-title">应收费用明细</h3>
        <el-descriptions :column="3" border class="margin-top">
          <el-descriptions-item label="系统编号">{{ detailData.systemNo }}</el-descriptions-item>
          <el-descriptions-item label="关联账单编号">{{ detailData.relatedBillNo }}</el-descriptions-item>
          <el-descriptions-item label="来源系统">{{ dictFormat(sys_system, detailData.sourceSystem) }}</el-descriptions-item>
 
          <el-descriptions-item label="业务板块">{{ dictFormat(sys_business, detailData.businessSector) }}</el-descriptions-item>
          <el-descriptions-item label="单据类型">{{ dictFormat(sys_receipts, detailData.documentType) }}</el-descriptions-item>
          <el-descriptions-item label="单据编号">{{ detailData.documentNo }}</el-descriptions-item>
 
          <el-descriptions-item label="客户名称">{{ detailData.customerName }}</el-descriptions-item>
          <el-descriptions-item label="项目名称">{{ detailData.projectName }}</el-descriptions-item>
          <el-descriptions-item label="业务发生时间">{{ detailData.businessTime }}</el-descriptions-item>
 
          <el-descriptions-item label="应收确认时间">{{ detailData.receivableConfirmTime }}</el-descriptions-item>
          <el-descriptions-item label="应收金额" :span="2">
            <span class="amount-text">{{ detailData.receivableAmount }}</span>
          </el-descriptions-item>
        </el-descriptions>
      </section>
 
      <section class="table-section">
        <h3 class="section-title" style="margin-top: 20px;">费用明细</h3>
        <el-table 
          :data="detailData.feeList || []" 
          border 
          stripe 
          style="width: 100%"
          :header-cell-style="{ backgroundColor: '#f5f7fa', color: '#606266' }"
        >
          <el-table-column label="费用类型" align="center" prop="feeType"/>
            <!-- <template #default="scope">
              {{ dictFormat(fee_type, scope.row.feeType) }}
            </template>
          </el-table-column> -->
          
          <el-table-column label="费用名称" prop="feeName" align="center" />
          
          <el-table-column label="计费单位" align="center" prop="billingUnit"/>
            <!-- <template #default="scope">
              {{ dictFormat(sys_unit, scope.row.billingUnit) }}
            </template>
          </el-table-column> -->
          
          <el-table-column label="计费单价" prop="unitPrice" align="center" />
          <el-table-column label="计费金额" prop="billingAmount" align="center" />
          <el-table-column label="实收金额" prop="actualAmount" align="center" />
          
          <el-table-column label="币制" align="center"  prop="currency" >
            <template #default="scope">
              {{ dictFormat(sys_currency, scope.row.currency) }}
            </template>
          </el-table-column>
          
          <el-table-column label="费用登记时间" prop="createTime" width="160" align="center" />
        </el-table>
      </section>
    </div>
 
    <template #footer>
      <span class="dialog-footer">
        <el-button @click="visible = false">关 闭</el-button>
      </span>
    </template>
  </el-dialog>
</template>
 
<script setup lang="ts">
import { ref } from 'vue';
import useCurrentInstance from "@/utils/useCurrentInstance";
 
const { proxy } = useCurrentInstance();
 
// 加载所需的字典
const { 
  sys_system, 
  sys_business, 
  sys_receipts, 
  sys_currency, 
  fee_type, // 对应之前的 dicUrl fee_type
  sys_unit   // 对应之前的 dicUrl sys_unit
} = proxy.useDict(
  'sys_system',
  'sys_business',
  'sys_receipts',
  'sys_currency',
  'fee_type',
  'sys_unit'
);
 
const dictFormat = (dict: any, value: any) => {
  return proxy.selectDictLabel(dict, value);
};
 
const visible = ref(false);
const detailData = ref<any>({});
 
// 暴露给父组件的方法
const open = (data: any) => {
  detailData.value = data || {};
  // 统一数据来源字段
  if (data && data.receivableFeeDetailList) {
    detailData.value.feeList = data.receivableFeeDetailList;
  } else {
    detailData.value.feeList = [];
  }
  visible.value = true;
};
 
const handleClosed = () => {
  detailData.value = {};
};
 
defineExpose({ open });
</script>
 
<style scoped>
.modal-content {
  padding: 10px;
}
 
.section-title {
  font-size: 16px;
  font-weight: bold;
  margin: 10px 0;
  color: #333;
  padding-left: 10px;
  border-left: 4px solid #409eff; /* 添加了蓝色侧边,与主流财务系统风格统一 */
}
 
.amount-text {
  color: #f56c6c;
  font-weight: bold;
}
 
:deep(.el-descriptions__label) {
  width: 120px;
  background-color: #f5f7fa;
}
 
/* 统一描述列表单元格样式 */
::v-deep .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell {
  border: var(--el-descriptions-table-border);
  padding: 8px 11px;
}
</style>