508 lines
13 KiB
Vue
508 lines
13 KiB
Vue
<template>
|
||
<div class="detail-container">
|
||
<div class="detail-header">
|
||
<h3>{{ accountData.name }}详情</h3>
|
||
<button class="close-btn" @click="handleClose">×</button>
|
||
</div>
|
||
<div class="split-line"></div>
|
||
<div class="detail-body">
|
||
<el-form :model="searchForm" class="search-form">
|
||
<div class="form-items-wrapper">
|
||
<el-form-item label="交易名称:" class="form-item">
|
||
<el-input
|
||
v-model="searchForm.flowName"
|
||
placeholder="请输入交易名称"
|
||
clearable
|
||
/>
|
||
</el-form-item>
|
||
<el-form-item label="交易类型:" class="form-item">
|
||
<el-select
|
||
v-model="searchForm.transactionType"
|
||
placeholder="请选择交易类型"
|
||
clearable
|
||
class="custom-select"
|
||
teleport="body"
|
||
popper-class="theme-select-popper"
|
||
:popper-append-to-body="true"
|
||
@change="getTranTypes"
|
||
>
|
||
<el-option label="收入" value="2" />
|
||
<el-option label="支出" value="1" />
|
||
</el-select>
|
||
</el-form-item>
|
||
<el-form-item label="交易分类:" class="form-item">
|
||
<el-select
|
||
v-model="searchForm.categoryId"
|
||
placeholder="请选择交易分类"
|
||
clearable
|
||
class="custom-select"
|
||
teleport="body"
|
||
popper-class="theme-select-popper"
|
||
:popper-append-to-body="true"
|
||
>
|
||
<el-option
|
||
v-for="item in tranTypes"
|
||
:key="item.categoryId"
|
||
:label="item.categoryName"
|
||
:value="item.categoryId"
|
||
/>
|
||
</el-select>
|
||
</el-form-item>
|
||
</div>
|
||
<el-form-item class="form-btn-group">
|
||
<el-button type="primary" @click="handleSearch">查询</el-button>
|
||
<el-button type="default" @click="handleReset" class="reset-btn">重置</el-button>
|
||
</el-form-item>
|
||
</el-form>
|
||
|
||
<el-table
|
||
:data="tableData"
|
||
stripe
|
||
style="width: 100%"
|
||
empty-text="暂无相关交易数据"
|
||
class="data-table"
|
||
v-loading="loading"
|
||
:header-cell-style="{
|
||
background: 'rgba(10, 30, 60, 0.8)',
|
||
color: '#a0cfff',
|
||
border: 'none',
|
||
borderBottom: '1px solid rgba(64, 158, 255, 0.3)'
|
||
}"
|
||
:row-style="{
|
||
background: 'transparent',
|
||
color: '#a0cfff',
|
||
border: 'none'
|
||
}"
|
||
:cell-style="{
|
||
border: 'none',
|
||
borderBottom: '1px solid rgba(64, 158, 255, 0.2)'
|
||
}"
|
||
>
|
||
<el-table-column prop="flowId" label="交易编号" />
|
||
<el-table-column prop="flowName" label="交易名称" />
|
||
<el-table-column prop="categoryName" label="交易分类" />
|
||
<el-table-column prop="tranType" label="交易类型" />
|
||
<el-table-column prop="amount" label="交易金额">
|
||
<template #default="scope">
|
||
¥{{ scope.row.amount }}
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column prop="remark" label="交易备注" />
|
||
<el-table-column prop="transactionTime" label="交易时间" />
|
||
</el-table>
|
||
|
||
<div class="pagination-wrapper">
|
||
<el-pagination
|
||
v-model:current-page="currentPage"
|
||
v-model:page-size="pageSize"
|
||
:page-sizes="[20,50,99]"
|
||
:total="total"
|
||
layout="total, sizes, prev, pager, next, jumper"
|
||
@size-change="handleSizeChange"
|
||
@current-change="handleCurrentChange"
|
||
class="custom-pagination"
|
||
teleport="body"
|
||
popper-class="theme-pagination-popper"
|
||
:popper-append-to-body="true"
|
||
/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script setup>
|
||
import { defineProps, defineEmits, ref, onMounted, reactive } from 'vue'
|
||
import { ElMessage } from 'element-plus'
|
||
import { getErpCategoryList, getErpTransactionFlowList } from '@/api/bizApi'
|
||
|
||
const props = defineProps({
|
||
accountData: {
|
||
type: Object,
|
||
default: () => ({})
|
||
}
|
||
})
|
||
|
||
const emit = defineEmits(['close'])
|
||
const handleClose = () => emit('close')
|
||
|
||
const tranTypes = ref();
|
||
const loading = ref(false);
|
||
|
||
const searchForm = reactive({
|
||
flowName: '',
|
||
transactionType: '',
|
||
categoryId: '',
|
||
})
|
||
|
||
const tableData = ref([]);
|
||
const currentPage = ref(1);
|
||
const pageSize = ref(20);
|
||
const total = ref(0);
|
||
|
||
const handleSearch = () => {
|
||
getList();
|
||
}
|
||
|
||
const handleReset = () => {
|
||
Object.assign(searchForm, {
|
||
flowName: '',
|
||
transactionType: '',
|
||
categoryId: '',
|
||
})
|
||
currentPage.value = 1;
|
||
getList();
|
||
}
|
||
|
||
const handleSizeChange = (val) => {
|
||
pageSize.value = val;
|
||
getList();
|
||
}
|
||
const handleCurrentChange = (val) => {
|
||
currentPage.value = val;
|
||
getList();
|
||
}
|
||
|
||
async function getTranTypes(){
|
||
try {
|
||
const params = {
|
||
categoryType: searchForm.transactionType,
|
||
}
|
||
const res = await getErpCategoryList(params);
|
||
tranTypes.value = res || [];
|
||
} catch (error) {
|
||
console.error('获取数据失败:', error);
|
||
tranTypes.value = [];
|
||
}
|
||
}
|
||
|
||
async function getList() {
|
||
try {
|
||
const reqParmas = {
|
||
... searchForm,
|
||
pageNum: currentPage.value, // 当前页
|
||
pageSize: pageSize.value, // 每页条数
|
||
accountId: props.accountData.rawData?.accountId || '',
|
||
}
|
||
const res = await getErpTransactionFlowList(reqParmas);
|
||
total.value = res.total;
|
||
tableData.value = res.list || [];
|
||
} catch (error) {
|
||
console.error('获取数据失败:', error);
|
||
tableData.value = [];
|
||
}
|
||
}
|
||
|
||
onMounted(async () => {
|
||
await getList();
|
||
await getTranTypes();
|
||
})
|
||
</script>
|
||
|
||
<style scoped>
|
||
.detail-container {
|
||
width: 100%;
|
||
height: 100%;
|
||
padding: 12px;
|
||
color: #e0e6ff;
|
||
background: url('@/assets/images/border.png') no-repeat center center;
|
||
background-size: 100% 100%;
|
||
background-color: transparent !important;
|
||
border: none !important;
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
z-index: 10001;
|
||
}
|
||
|
||
.detail-header {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
margin-bottom: 10px;
|
||
}
|
||
.detail-header h3 {
|
||
margin: 0;
|
||
color: #409EFF;
|
||
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
|
||
font-size: 18px;
|
||
}
|
||
.close-btn {
|
||
background: transparent;
|
||
border: none;
|
||
font-size: 24px;
|
||
color: #e0e6ff;
|
||
cursor: pointer;
|
||
width: 40px;
|
||
height: 40px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
transition: color 0.2s;
|
||
z-index: 10002;
|
||
}
|
||
.close-btn:hover {
|
||
color: #409EFF;
|
||
}
|
||
|
||
.split-line {
|
||
height: 1px;
|
||
background-color: #409EFF;
|
||
opacity: 0.6;
|
||
margin-bottom: 16px;
|
||
}
|
||
|
||
.detail-body {
|
||
width: 100%;
|
||
height: calc(100% - 80px);
|
||
border: 1px solid #409EFF;
|
||
border-radius: 6px;
|
||
padding: 16px;
|
||
background-color: rgba(10, 30, 60, 0.2);
|
||
box-sizing: border-box;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 16px;
|
||
overflow: visible;
|
||
position: relative;
|
||
z-index: 10001;
|
||
}
|
||
|
||
.search-form {
|
||
display: flex;
|
||
align-items: center;
|
||
width: 100%;
|
||
padding-bottom: 16px;
|
||
border-bottom: 1px solid rgba(64, 158, 255, 0.3);
|
||
flex-wrap: wrap;
|
||
position: relative;
|
||
z-index: 10001;
|
||
}
|
||
.form-items-wrapper {
|
||
display: flex;
|
||
flex: 1;
|
||
gap: 20px;
|
||
min-width: 0;
|
||
flex-wrap: wrap;
|
||
}
|
||
.form-item {
|
||
flex: 1;
|
||
margin-bottom: 0 !important;
|
||
min-width: 180px;
|
||
}
|
||
.date-range-item {
|
||
min-width: 280px !important;
|
||
}
|
||
.form-btn-group {
|
||
margin-left: 20px;
|
||
margin-bottom: 0 !important;
|
||
flex-shrink: 0;
|
||
display: flex;
|
||
gap: 10px;
|
||
}
|
||
|
||
.data-table {
|
||
flex: 1;
|
||
overflow: auto;
|
||
position: relative;
|
||
z-index: 10001;
|
||
}
|
||
|
||
.pagination-wrapper {
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
align-items: center;
|
||
padding-top: 10px;
|
||
border-top: 1px solid rgba(64, 158, 255, 0.2);
|
||
background-color: rgba(10, 30, 60, 0.2);
|
||
flex-shrink: 0;
|
||
position: relative;
|
||
z-index: 10001;
|
||
}
|
||
|
||
:deep(.el-form-item__label) {
|
||
color: #e0e6ff !important;
|
||
font-size: 14px;
|
||
}
|
||
:deep(.el-input__wrapper),
|
||
:deep(.el-select__wrapper),
|
||
:deep(.el-date-editor__wrapper) {
|
||
background-color: rgba(0, 0, 0, 0.2) !important;
|
||
border: 1px solid #409EFF !important;
|
||
box-shadow: none !important;
|
||
width: 100% !important;
|
||
position: relative;
|
||
z-index: 10001;
|
||
}
|
||
:deep(.el-input__inner),
|
||
:deep(.el-select__inner),
|
||
:deep(.el-date-editor input) {
|
||
color: #e0e6ff !important;
|
||
background-color: transparent !important;
|
||
}
|
||
:deep(.el-input__placeholder),
|
||
:deep(.el-date-editor__placeholder) {
|
||
color: rgba(224, 230, 255, 0.6) !important;
|
||
}
|
||
|
||
:deep(.custom-pagination) {
|
||
--el-pagination-text-color: #e0e6ff;
|
||
--el-pagination-button-color: #e0e6ff;
|
||
--el-pagination-button-hover-color: #409EFF;
|
||
--el-pagination-button-active-color: #409EFF;
|
||
--el-pagination-border-color: #409EFF;
|
||
--el-pagination-bg-color: rgba(10, 30, 60, 0.2) !important;
|
||
z-index: 10001;
|
||
}
|
||
:deep(.el-pagination button) {
|
||
background-color: rgba(0, 0, 0, 0.2) !important;
|
||
border-color: #409EFF !important;
|
||
color: #e0e6ff !important;
|
||
}
|
||
:deep(.el-pagination .el-pager li) {
|
||
color: #e0e6ff !important;
|
||
}
|
||
:deep(.el-pagination .el-pager li.active) {
|
||
color: #409EFF !important;
|
||
font-weight: bold;
|
||
}
|
||
|
||
:deep(.el-table) {
|
||
--el-table-text-color: #a0cfff;
|
||
--el-table-header-text-color: #a0cfff;
|
||
--el-table-row-hover-bg-color: rgba(64, 158, 255, 0.2);
|
||
--el-table-border-color: transparent !important;
|
||
--el-table-stripe-row-bg-color: rgba(10, 30, 60, 0.3);
|
||
background-color: transparent !important;
|
||
border: none !important;
|
||
z-index: 10001;
|
||
}
|
||
:deep(.el-table th) {
|
||
border: none !important;
|
||
border-bottom: 1px solid rgba(64, 158, 255, 0.3) !important;
|
||
background-color: rgba(10, 30, 60, 0.8) !important;
|
||
color: #a0cfff !important;
|
||
}
|
||
:deep(.el-table td) {
|
||
border: none !important;
|
||
border-bottom: 1px solid rgba(64, 158, 255, 0.2) !important;
|
||
background-color: transparent !important;
|
||
color: #a0cfff !important;
|
||
}
|
||
:deep(.el-table--striped .el-table__row--striped td) {
|
||
background-color: rgba(10, 30, 60, 0.3) !important;
|
||
border-bottom-color: rgba(64, 158, 255, 0.2) !important;
|
||
}
|
||
:deep(.el-table__row:hover > td) {
|
||
background-color: rgba(64, 158, 255, 0.2) !important;
|
||
border-bottom-color: rgba(64, 158, 255, 0.3) !important;
|
||
}
|
||
:deep(.el-table tr:last-child td) {
|
||
border-bottom: none !important;
|
||
}
|
||
:deep(.el-table-empty-text) {
|
||
color: #a0cfff !important;
|
||
background-color: transparent !important;
|
||
}
|
||
|
||
:deep(.el-button) {
|
||
--el-button-text-color: #e0e6ff !important;
|
||
--el-button-border-color: #409EFF !important;
|
||
--el-button-hover-text-color: #fff !important;
|
||
--el-button-hover-border-color: #409EFF !important;
|
||
--el-button-hover-bg-color: rgba(64, 158, 255, 0.2) !important;
|
||
height: 32px;
|
||
padding: 0 16px;
|
||
z-index: 10001;
|
||
}
|
||
:deep(.el-button--primary) {
|
||
--el-button-text-color: #fff !important;
|
||
--el-button-bg-color: rgba(64, 158, 255, 0.8) !important;
|
||
--el-button-border-color: #409EFF !important;
|
||
--el-button-hover-bg-color: #409EFF !important;
|
||
}
|
||
:deep(.reset-btn) {
|
||
background-color: rgba(0, 0, 0, 0.2) !important;
|
||
border-color: #409EFF !important;
|
||
color: #e0e6ff !important;
|
||
}
|
||
:deep(.reset-btn:hover) {
|
||
background-color: rgba(64, 158, 255, 0.2) !important;
|
||
color: #fff !important;
|
||
}
|
||
|
||
:deep(.el-loading-mask) {
|
||
background-color: rgba(10, 30, 60, 0.8) !important;
|
||
z-index: 10002;
|
||
}
|
||
:deep(.el-table__loading-wrapper) {
|
||
background-color: transparent !important;
|
||
}
|
||
:deep(.el-loading-spinner .path) {
|
||
stroke: #409EFF !important;
|
||
}
|
||
:deep(.el-loading-text) {
|
||
color: #a0cfff !important;
|
||
}
|
||
|
||
.detail-body::-webkit-scrollbar,
|
||
:deep(.el-table__body-wrapper)::-webkit-scrollbar {
|
||
width: 6px;
|
||
height: 6px;
|
||
}
|
||
.detail-body::-webkit-scrollbar-track {
|
||
background: rgba(10, 30, 60, 0.1);
|
||
border-radius: 3px;
|
||
}
|
||
.detail-body::-webkit-scrollbar-thumb {
|
||
background: rgba(64, 158, 255, 0.5);
|
||
border-radius: 3px;
|
||
}
|
||
</style>
|
||
|
||
<style>
|
||
|
||
.theme-select-popper {
|
||
background-color: rgba(10, 30, 60, 0.95) !important;
|
||
border: 1px solid #409EFF !important;
|
||
color: #e0e6ff !important;
|
||
z-index: 99999 !important;
|
||
pointer-events: auto !important;
|
||
position: fixed !important;
|
||
}
|
||
.theme-select-popper .el-select-dropdown__item {
|
||
color: #e0e6ff !important;
|
||
background-color: transparent !important;
|
||
padding: 6px 12px !important;
|
||
}
|
||
.theme-select-popper .el-select-dropdown__item:hover {
|
||
background-color: rgba(64, 158, 255, 0.2) !important;
|
||
color: #fff !important;
|
||
}
|
||
.theme-select-popper .el-select-dropdown__item.selected {
|
||
background-color: rgba(64, 158, 255, 0.5) !important;
|
||
color: #fff !important;
|
||
}
|
||
|
||
.theme-pagination-popper {
|
||
background-color: rgba(10, 30, 60, 0.95) !important;
|
||
border: 1px solid #409EFF !important;
|
||
color: #e0e6ff !important;
|
||
z-index: 99999 !important;
|
||
pointer-events: auto !important;
|
||
position: fixed !important;
|
||
}
|
||
.theme-pagination-popper .el-pagination__sizes-option {
|
||
color: #e0e6ff !important;
|
||
background-color: transparent !important;
|
||
}
|
||
.theme-pagination-popper .el-pagination__sizes-option:hover {
|
||
background-color: rgba(64, 158, 255, 0.2) !important;
|
||
color: #fff !important;
|
||
}
|
||
|
||
.modal-overlay {
|
||
pointer-events: auto !important;
|
||
}
|
||
.modal-overlay .modal-content {
|
||
pointer-events: auto !important;
|
||
}
|
||
</style> |