chenrui
2025-05-16 e8a5718ef4c9d0e3031b555659c9ff5f61ab96ca
回款台账前后端联调
已修改1个文件
已添加1个文件
168 ■■■■■ 文件已修改
src/api/salesManagement/invoiceLedger.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/receiptPaymentLedger/index.vue 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/salesManagement/invoiceLedger.js
@@ -55,3 +55,12 @@
    })
}
// åˆ†é¡µæŸ¥è¯¢
export function invoiceLedgerSalesAccount(query) {
    return request({
        url: '/invoiceLedger/salesAccount',
        method: 'get',
        params: query
    })
}
src/views/salesManagement/receiptPaymentLedger/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,159 @@
<template>
  <div class="app-container">
    <div class="search_form">
      <div>
        <span class="search_title">回款台账</span>
        <el-input
            v-model="searchForm.searchText"
            style="width: 240px"
            placeholder="输入客户名称搜索"
            @change="handleQuery"
            clearable
            :prefix-icon="Search"
        />
        <el-button type="primary" @click="handleQuery" style="margin-left: 10px">搜索</el-button>
      </div>
    </div>
    <div style="display: flex">
      <div class="table_list">
        <el-table :data="tableData" border v-loading="tableLoading"
                  @selection-change="handleSelectionChange"
                  :row-key="row => row.id"
                  show-summary
                  :summary-method="summarizeMainTable"
                  height="calc(100vh - 18.5em)">
          <el-table-column align="center" type="selection" width="55" />
          <el-table-column align="center" label="序号" type="index" width="60" />
          <el-table-column label="客户名称" prop="customerName" show-overflow-tooltip/>
          <el-table-column label="开票金额" prop="invoiceAmount" show-overflow-tooltip/>
          <el-table-column label="回款金额" prop="receiptPaymentAmount" show-overflow-tooltip/>
          <el-table-column label="未回款金额" prop="unReceiptPaymentAmount" show-overflow-tooltip/>
        </el-table>
        <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper" :page="page.current"
                    :limit="page.size" @pagination="paginationChange" />
      </div>
      <div class="table_list">
        <el-table :data="receiptRecord" border
                  :row-key="row => row.id"
                  show-summary
                  :summary-method="summarizeMainTable"
                  height="calc(100vh - 18.5em)">
          <el-table-column align="center" type="selection" width="55" />
          <el-table-column align="center" label="序号" type="index" width="60" />
          <el-table-column label="发生日期" prop="receiptPaymentDate" show-overflow-tooltip/>
          <el-table-column label="回款金额" prop="receiptPaymentAmount" show-overflow-tooltip/>
          <el-table-column label="应收金额" prop="invoiceAmount" show-overflow-tooltip/>
        </el-table>
        <pagination v-show="recordTotal > 0" :total="recordTotal" layout="total, sizes, prev, pager, next, jumper" :page="recordPage.current"
                    :limit="recordPage.size" @pagination="paginationChange" />
      </div>
    </div>
  </div>
</template>
<script setup>
import pagination from '@/components/PIMTable/Pagination.vue'
import { ref } from 'vue'
import {Search} from "@element-plus/icons-vue";
import {
  invoiceLedgerSalesAccount,
} from "../../../api/salesManagement/invoiceLedger.js";
import {
  receiptPaymentListPage
} from "../../../api/salesManagement/receiptPayment.js";
const tableData = ref([])
const receiptRecord = ref([])
const selectedRows = ref([])
const tableLoading = ref(false)
const page = reactive({
  current: 1,
  size: 10,
})
const recordPage = reactive({
  current: 1,
  size: 10,
})
const total = ref(0)
const recordTotal = ref(0)
const data = reactive({
  searchForm: {
    searchText: '',
    invoiceDate:''
  }
})
const { searchForm } = toRefs(data)
// æŸ¥è¯¢åˆ—表
/** æœç´¢æŒ‰é’®æ“ä½œ */
const handleQuery = () => {
  page.current = 1
  getList()
}
const paginationChange = ({ current, limit }) => {
  page.current = current;
  page.size = limit;
  getList()
}
const getList = () => {
  tableLoading.value = true
  invoiceLedgerSalesAccount({...searchForm.value, ...page}).then(res => {
    tableLoading.value = false
    tableData.value = res.data.records;
    total.value = res.data.total;
    if(tableData.value.length > 0) {
      receiptPaymentList(recordPage,tableData.value[0].customerId);
    }
  })
}
// è¡¨æ ¼é€‰æ‹©æ•°æ®
const handleSelectionChange = (selection) => {
  selectedRows.value = selection
}
// ä¸»è¡¨åˆè®¡æ–¹æ³•
const summarizeMainTable = (param) => {
  const { columns, data } = param;
  const sums = [];
  columns.forEach((column, index) => {
    if (index === 0) {
      sums[index] = '合计';
      return;
    }
    const prop = column.property;
    if (['invoiceAmount','receiptPaymentAmount','unReceiptPaymentAmount'].includes(prop)) {
      const values = data.map(item => Number(item[prop]));
      if (!values.every(value => isNaN(value))) {
        sums[index] = values.reduce((acc, val) => (!isNaN(val) ? acc + val : acc), 0);
      } else {
        sums[index] = '';
      }
    } else {
      sums[index] = '';
    }
  })
  return sums;
};
const receiptPaymentList = (page,id) => {
  const param = {
    customerId:id,
    current: page.current,
    size: page.size,
  }
  receiptPaymentListPage(param).then(res => {
    receiptRecord.value = res.data.records;
    receiptRecord.total = res.data.total;
  })
}
getList()
</script>
<style scoped lang="scss">
.table_list {
  width: 50%;
}
</style>