Commit 37fa8424 by yuzhenWang

修改明细字段发布测试

parent 03497a45
...@@ -490,7 +490,6 @@ export function billBatchSave(data) { ...@@ -490,7 +490,6 @@ export function billBatchSave(data) {
}) })
} }
// 拆分出账查询-计算目标金额 // 拆分出账查询-计算目标金额
export function billCalculateToAmount(data) { export function billCalculateToAmount(data) {
return request({ return request({
...@@ -499,6 +498,14 @@ export function billCalculateToAmount(data) { ...@@ -499,6 +498,14 @@ export function billCalculateToAmount(data) {
data: data data: data
}) })
} }
// 应收款管理--明细列表
export function newQueryCommissionExpectedByPage(data) {
return request({
url: 'csf/api/CommissionExpected/queryCommissionExpectedByPage/new',
method: 'post',
data: data
})
}
// 应收款管理修改应收记录状态 // 应收款管理修改应收记录状态
export function CommissionExpectedChangeStatus(data) { export function CommissionExpectedChangeStatus(data) {
......
<template> <template>
<div> <div>
<CommonPage :operationBtnList="operationBtnList" :visibleDefaultButtons="visibleDefaultButtons" <CommonPage
:showSearchForm="true" :show-pagination="true" :total="pageTotal" :current-page="currentPage" :operationBtnList="operationBtnList"
:page-size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"> :visibleDefaultButtons="visibleDefaultButtons"
<!-- 搜索区域 --> :showSearchForm="true"
<template #searchForm> :show-pagination="true"
<SearchForm ref="searchFormRef" :config="searchConfig" /> :total="pageTotal"
</template> :current-page="currentPage"
:page-size="pageSize"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
>
<!-- 搜索区域 -->
<template #searchForm>
<SearchForm ref="searchFormRef" :config="searchConfig" />
</template>
<!-- 列表区域 --> <!-- 列表区域 -->
<template #table> <template #table>
<div class="statistics-container" v-if="statisticsData.totalPolicyCount > 0"> <div class="statistics-container" v-if="statisticsData.totalPolicyCount > 0">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
<el-statistic :value="statisticsData.totalAmount" :formatter="value=>formatCurrency(value)"> <el-statistic
<template #title> :value="statisticsData.totalAmount"
<div style="display: inline-flex; align-items: center"> :formatter="value => formatCurrency(value)"
应收款总金额 >
</div> <template #title>
</template> <div style="display: inline-flex; align-items: center">应收款总金额</div>
</el-statistic> </template>
</el-col> </el-statistic>
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> </el-col>
<el-statistic :value="statisticsData.totalPaidAmount" :formatter="value=>formatCurrency(value)"> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
<template #title> <el-statistic
<div style="display: inline-flex; align-items: center"> :value="statisticsData.totalPaidAmount"
已入账金额 :formatter="value => formatCurrency(value)"
</div> >
</template> <template #title>
</el-statistic> <div style="display: inline-flex; align-items: center">已入账金额</div>
</el-col> </template>
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> </el-statistic>
<el-statistic :value="statisticsData.pendingPaidAmount" :formatter="value=>formatCurrency(value)"> </el-col>
<template #title> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
<div style="display: inline-flex; align-items: center"> <el-statistic
待入账金额(估) :value="statisticsData.pendingPaidAmount"
</div> :formatter="value => formatCurrency(value)"
</template> >
</el-statistic> <template #title>
</el-col> <div style="display: inline-flex; align-items: center">待入账金额(估)</div>
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> </template>
<el-statistic :value="statisticsData.paidAmountRatio" :formatter="value=>formatCurrency(value,'',2)+'%'"> </el-statistic>
<template #title> </el-col>
<div style="display: inline-flex; align-items: center"> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
已入账比例 <el-statistic
</div> :value="statisticsData.paidAmountRatio"
</template> :formatter="value => formatCurrency(value, '', 2) + '%'"
</el-statistic> >
</el-col> <template #title>
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> <div style="display: inline-flex; align-items: center">已入账比例</div>
<el-statistic title="总保单数" :value="statisticsData.totalPolicyCount" /> </template>
</el-col> </el-statistic>
</el-row> </el-col>
</div> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
<!-- 应收款管理列表 --> <el-statistic title="总保单数" :value="statisticsData.totalPolicyCount" />
<el-table :data="tableData" height="400" border highlight-current-row style="width: 100%" </el-col>
v-loading="loading"> </el-row>
<el-table-column v-for="(column, index) in receivableReportTableColumns" :key="index" :fixed="column.fixed" </div>
:prop="column.prop" :label="column.label" :width="column.width" :sortable="column.sortable" <!-- 应收款管理列表 -->
:formatter="column.formatter" /> <el-table
<el-table-column fixed="right" label="操作" min-width="120"> :data="tableData"
<template #default="scope"> height="400"
<el-button link type="primary" size="small" @click="viewDetail(scope.row)"> border
查看明细 highlight-current-row
</el-button> style="width: 100%"
</template> v-loading="loading"
</el-table-column> >
</el-table> <el-table-column
v-for="(column, index) in receivableReportTableColumns"
:key="index"
:fixed="column.fixed"
:prop="column.prop"
:label="column.label"
:width="column.width"
:sortable="column.sortable"
:formatter="column.formatter"
/>
<el-table-column fixed="right" label="操作" min-width="120">
<template #default="scope">
<el-button link type="primary" size="small" @click="viewDetail(scope.row)">
查看明细
</el-button>
</template> </template>
</CommonPage> </el-table-column>
</el-table>
<CommonDialog dialogTitle="应收明细" dialogWidth="80%" :openDialog="detailDialogVisible" :showAction="false" </template>
:showClose="true" @close="detailDialogVisible = false"> </CommonPage>
<div class="statistics-container" v-if="detailRecordStatistics.totalPolicyCount > 0">
<el-row :gutter="20"> <CommonDialog
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> dialogTitle="应收明细"
<el-statistic :value="detailRecordStatistics.totalAmount" :formatter="value=>formatCurrency(value)"> dialogWidth="80%"
<template #title> :openDialog="detailDialogVisible"
<div style="display: inline-flex; align-items: center"> :showAction="false"
应入账总金额 :showClose="true"
</div> @close="detailDialogVisible = false"
</template> >
</el-statistic> <div class="statistics-container" v-if="detailRecordStatistics.totalPolicyCount > 0">
</el-col> <el-row :gutter="20">
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
<el-statistic :value="detailRecordStatistics.totalPaidAmount" :formatter="value=>formatCurrency(value)"> <el-statistic
<template #title> :value="detailRecordStatistics.totalAmount"
<div style="display: inline-flex; align-items: center"> :formatter="value => formatCurrency(value)"
已入账金额 >
</div> <template #title>
</template> <div style="display: inline-flex; align-items: center">应入账总金额</div>
</el-statistic> </template>
</el-col> </el-statistic>
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> </el-col>
<el-statistic :value="detailRecordStatistics.totalUnpaidAmount" :formatter="value=>formatCurrency(value)"> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
<template #title> <el-statistic
<div style="display: inline-flex; align-items: center"> :value="detailRecordStatistics.totalPaidAmount"
待入账金额 :formatter="value => formatCurrency(value)"
</div> >
</template> <template #title>
</el-statistic> <div style="display: inline-flex; align-items: center">已入账金额</div>
</el-col> </template>
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> </el-statistic>
<el-statistic :value="detailRecordStatistics.paidAmountRatio" :formatter="value=>formatCurrency(value,'',2)+'%'"> </el-col>
<template #title> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
<div style="display: inline-flex; align-items: center"> <el-statistic
已入账比例 :value="detailRecordStatistics.pendingPaidAmount"
</div> :formatter="value => formatCurrency(value)"
</template> >
</el-statistic> <template #title>
</el-col> <div style="display: inline-flex; align-items: center">待入账金额</div>
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> </template>
<el-statistic :value="detailRecordStatistics.totalPolicyCount" > </el-statistic>
<template #title> </el-col>
<div style="display: inline-flex; align-items: center"> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
总保单数 <el-statistic
</div> :value="detailRecordStatistics.paidAmountRatio"
</template> :formatter="value => formatCurrency(value, '', 2) + '%'"
</el-statistic> >
</el-col> <template #title>
<el-col :xs="24" :sm="12" :md="4" class="text-center mb-4"> <div style="display: inline-flex; align-items: center">已入账比例</div>
<el-statistic :value="detailRecordStatistics.totalPremium" :formatter="value=>formatCurrency(value)"> </template>
<template #title> </el-statistic>
<div style="display: inline-flex; align-items: center"> </el-col>
总保费 <!-- <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
</div> <el-statistic :value="detailRecordStatistics.totalPolicyCount">
</template> <template #title>
</el-statistic> <div style="display: inline-flex; align-items: center">总保单数</div>
</el-col> </template>
</el-row> </el-statistic>
</div> </el-col> -->
<el-table :data="receivableReportTableData" border style="width: 100%;margin-bottom: 10px;min-height: 300px;"> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
<el-table-column v-for="item in receivableReportItemTableColumns" :key="item.property" :prop="item.prop" <el-statistic
:label="item.label" :width="item.width" :formatter="item.formatter" /> :value="detailRecordStatistics.totalPremium"
<el-table-column fixed="right" label="操作" min-width="120"> :formatter="value => formatCurrency(value)"
<template #default="{ row }"> >
<el-popover placement="right" :width="200" trigger="click"> <template #title>
<template #reference> <div style="display: inline-flex; align-items: center">总保费</div>
<el-icon> </template>
<MoreFilled /> </el-statistic>
</el-icon> </el-col>
</template> <el-col :xs="24" :sm="12" :md="4" class="text-center mb-4">
<el-menu @select="handleSelect($event, row)" popper-class="custom-menu"> <el-statistic
<el-menu-item :index="item.value" v-for="item in dropdownItems" :key="item.value"> :value="detailRecordStatistics.fromTotalPremium"
{{ item.label }} :formatter="value => formatCurrency(value)"
</el-menu-item> >
</el-menu> <template #title>
</el-popover> <div style="display: inline-flex; align-items: center">原币种保费</div>
</template> </template>
</el-table-column> </el-statistic>
</el-table> </el-col>
<el-pagination v-model:current-page="detailPageInfo.currentPage" v-model:page-size="detailPageInfo.pageSize" </el-row>
:page-sizes="[50, 100, 200, 300]" size="default" layout="total, sizes, prev, pager, next, jumper" </div>
:total="detailPageInfo.total" @size-change="handleSizeChangeDetailRecord" <el-table
@current-change="handleCurrentChangeDetailRecord" /> :data="receivableReportTableData"
</CommonDialog> border
<CommonDialog dialogTitle="入账记录" dialogWidth="80%" :openDialog="entryRecordDialogTableVisible" style="width: 100%; margin-bottom: 10px; min-height: 300px"
:showAction="false" :showClose="true" @close="entryRecordDialogTableVisible = false"> >
<el-table :data="entryRecordDialogTableData" border style="width: 100%"> <el-table-column
<el-table-column v-for="item in entryRecordDialogTableColumns" :key="item.property" v-for="item in receivableReportItemTableColumns"
:prop="item.property" :label="item.label" :width="item.width" :formatter="item.formatter" /> :key="item.property"
<el-table-column fixed="right" label="操作" min-width="120"> :prop="item.prop"
<template #default="scope"> :label="item.label"
<el-button link type="primary" size="small" @click="handleClick(scope.row)"> :width="item.width"
查看比对记录 :formatter="item.formatter"
</el-button> />
</template> <el-table-column fixed="right" label="操作" min-width="120">
</el-table-column> <template #default="{ row }">
</el-table> <el-popover placement="right" :width="200" trigger="click">
</CommonDialog> <template #reference>
<el-icon>
<CommonDialog dialogTitle="操作记录" dialogWidth="80%" :openDialog="actionRecordsDialogVisible" :showAction="false" <MoreFilled />
:showClose="true" @close="actionRecordsDialogVisible = false"> </el-icon>
<el-table :data="actionRecordsDialogTableData" border style="width: 100%"> </template>
<el-table-column v-for="item in actionRecordsDialogTableColumns" :key="item.property" <el-menu @select="handleSelect($event, row)" popper-class="custom-menu">
:prop="item.property" :label="item.label" :width="item.width"/> <el-menu-item :index="item.value" v-for="item in dropdownItems" :key="item.value">
</el-table> {{ item.label }}
</CommonDialog> </el-menu-item>
</el-menu>
<CommonDialog dialogTitle="设置入账状态" dialogWidth="80%" :openDialog="setStatusDialogTableVisible" </el-popover>
@close="setStatusDialogTableVisible = false" @confirm="handleConfirmSetStatus"> </template>
<SearchForm ref="setCommissionRecordStatusFormRef" :config="setCommissionRecordStatusFormConfig" /> </el-table-column>
</CommonDialog> </el-table>
<el-pagination
<!-- 新增应收款管理 --> v-model:current-page="detailPageInfo.currentPage"
<CommonDialog :dialogTitle="editStatus === 'add' ? '新增应收款' : '更新应收款'" dialogWidth="80%" v-model:page-size="detailPageInfo.pageSize"
:openDialog="addReceivablesDialogVisible" :page-sizes="[50, 100, 200, 300]"
@close="addReceivablesDialogVisible = false; resetAddReceivablesForm()" size="default"
@confirm="handleConfirmAddReceivables"> layout="total, sizes, prev, pager, next, jumper"
<SearchForm ref="addRecordRef" :config="addReceivablesFormConfig" v-model="addReceivablesFormModel" /> :total="detailPageInfo.total"
</CommonDialog> @size-change="handleSizeChangeDetailRecord"
</div> @current-change="handleCurrentChangeDetailRecord"
/>
</CommonDialog>
<CommonDialog
dialogTitle="入账记录"
dialogWidth="80%"
:openDialog="entryRecordDialogTableVisible"
:showAction="false"
:showClose="true"
@close="entryRecordDialogTableVisible = false"
>
<el-table :data="entryRecordDialogTableData" border style="width: 100%">
<el-table-column
v-for="item in entryRecordDialogTableColumns"
:key="item.property"
:prop="item.property"
:label="item.label"
:width="item.width"
:formatter="item.formatter"
/>
<el-table-column fixed="right" label="操作" min-width="120">
<template #default="scope">
<el-button link type="primary" size="small" @click="handleClick(scope.row)">
查看比对记录
</el-button>
</template>
</el-table-column>
</el-table>
</CommonDialog>
<CommonDialog
dialogTitle="操作记录"
dialogWidth="80%"
:openDialog="actionRecordsDialogVisible"
:showAction="false"
:showClose="true"
@close="actionRecordsDialogVisible = false"
>
<el-table :data="actionRecordsDialogTableData" border style="width: 100%">
<el-table-column
v-for="item in actionRecordsDialogTableColumns"
:key="item.property"
:prop="item.property"
:label="item.label"
:width="item.width"
/>
</el-table>
</CommonDialog>
<CommonDialog
dialogTitle="设置入账状态"
dialogWidth="80%"
:openDialog="setStatusDialogTableVisible"
@close="setStatusDialogTableVisible = false"
@confirm="handleConfirmSetStatus"
>
<SearchForm
ref="setCommissionRecordStatusFormRef"
:config="setCommissionRecordStatusFormConfig"
/>
</CommonDialog>
<!-- 新增应收款管理 -->
<CommonDialog
:dialogTitle="editStatus === 'add' ? '新增应收款' : '更新应收款'"
dialogWidth="80%"
:openDialog="addReceivablesDialogVisible"
@close="((addReceivablesDialogVisible = false), resetAddReceivablesForm())"
@confirm="handleConfirmAddReceivables"
>
<SearchForm
ref="addRecordRef"
:config="addReceivablesFormConfig"
v-model="addReceivablesFormModel"
/>
</CommonDialog>
</div>
</template> </template>
<script setup name="Receivables"> <script setup name="Receivables">
import CommonPage from '@/components/commonPage' import CommonPage from '@/components/commonPage'
import CommonDialog from '@/components/commonDialog' import CommonDialog from '@/components/commonDialog'
import { ref, reactive, onMounted, computed,nextTick } from 'vue' import { ref, reactive, onMounted, computed, nextTick } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import { MoreFilled } from '@element-plus/icons-vue' import { MoreFilled } from '@element-plus/icons-vue'
import { import {
receivedFortuneList, updateCommissionExpected, commissionEntryEditRecords, newQueryCommissionExpectedByPage,
exportReceivedFortune, commissionExpectedRecord, addReceivedFortune, receivableReport,CommissionExpectedChangeStatus receivedFortuneList,
updateCommissionExpected,
commissionEntryEditRecords,
exportReceivedFortune,
commissionExpectedRecord,
addReceivedFortune,
receivableReport,
CommissionExpectedChangeStatus
} from '@/api/financial/commission' } from '@/api/financial/commission'
import { numberWithCommas } from '@/utils/index' import { numberWithCommas } from '@/utils/index'
import SearchForm from '@/components/SearchForm/SearchForm.vue' import SearchForm from '@/components/SearchForm/SearchForm.vue'
...@@ -213,277 +318,281 @@ import { formatCurrency } from '@/utils/number' ...@@ -213,277 +318,281 @@ import { formatCurrency } from '@/utils/number'
const userStore = useUserStore() const userStore = useUserStore()
// 应收单类型 // 应收单类型
const commissionBizTypeOptions = [ const commissionBizTypeOptions = [
{ value: 'R', label: '关联保单应收单' }, { value: 'R', label: '关联保单应收单' },
{ value: 'U', label: '非关联保单应收单' } { value: 'U', label: '非关联保单应收单' }
]
//是否实收
const typeOptions = [
{ value: 1, label: '预计' },
{ value: 2, label: '实收' }
] ]
const editStatus = ref('add') const editStatus = ref('add')
// 新增应收款管理 // 新增应收款管理
const addReceivablesFormModel = ref({ const addReceivablesFormModel = ref({
commissionBizType: 'U', commissionBizType: 'U'
}) })
const addReceivablesDialogVisible = ref(false) const addReceivablesDialogVisible = ref(false)
const addRecordRef = ref(null) const addRecordRef = ref(null)
const addReceivablesFormConfig = [ const addReceivablesFormConfig = [
{ {
type: 'select', type: 'select',
prop: 'commissionBizType', prop: 'commissionBizType',
label: '应收单类型', label: '应收单类型',
placeholder: '应收单类型', placeholder: '应收单类型',
options: commissionBizTypeOptions options: commissionBizTypeOptions
}, },
{ {
type: 'input', type: 'input',
prop: 'policyNo', prop: 'policyNo',
label: '保单号', label: '保单号',
visible: (formData) => formData.commissionBizType == 'R' visible: formData => formData.commissionBizType == 'R'
}, { },
type: 'input', {
prop: 'commissionPeriod', type: 'input',
label: '佣金期数', prop: 'commissionPeriod',
inputType: 'decimal', label: '佣金期数',
visible: (formData) => formData.commissionBizType === 'R', inputType: 'decimal',
rules: [ visible: formData => formData.commissionBizType === 'R',
{ pattern: /^\d+$/, message: '只能输入正整数', trigger: 'blur' } rules: [{ pattern: /^\d+$/, message: '只能输入正整数', trigger: 'blur' }]
] },
}, {
{ type: 'input',
type: 'input', prop: 'totalPeriod',
prop: 'totalPeriod', label: '总期数',
label: '总期数', inputType: 'decimal',
inputType: 'decimal', visible: formData => formData.commissionBizType === 'R',
visible: (formData) => formData.commissionBizType === 'R', rules: [{ pattern: /^\d+$/, message: '只能输入正整数', trigger: 'blur' }]
rules: [ },
{ pattern: /^\d+$/, message: '只能输入正整数', trigger: 'blur' } {
] type: 'date',
}, { prop: 'commissionDate',
type: 'date', label: '入账日(估)',
prop: 'commissionDate', placeholder: '请选择'
label: '入账日(估)', },
placeholder: '请选择' // {
}, // type: 'date',
// { // prop: 'actualCommissionDate',
// type: 'date', // label: '入账日(实)',
// prop: 'actualCommissionDate', // placeholder: '请选择',
// label: '入账日(实)', // maxDate: 'today'
// placeholder: '请选择', // },
// maxDate: 'today' {
// }, type: 'input',
{ prop: 'amount',
type: 'input', label: '入账金额',
prop: 'amount', inputType: 'decimal',
label: '入账金额', decimalDigits: 4,
inputType: 'decimal', visible: formData => formData.commissionBizType === 'U',
decimalDigits: 4, rules: [
visible: (formData) => formData.commissionBizType === 'U', { required: true, message: '请输入金额', trigger: 'blur' },
rules: [ { pattern: /^\d+(\.\d{1,4})?$/, message: '最多四位小数', trigger: 'blur' }
{ required: true, message: '请输入金额', trigger: 'blur' }, ]
{ pattern: /^\d+(\.\d{1,4})?$/, message: '最多四位小数', trigger: 'blur' } },
] {
}, { type: 'input',
type: 'input', prop: 'commissionRatio',
prop: 'commissionRatio', label: '入账比例(%)',
label: '入账比例(%)', visible: formData => formData.commissionBizType === 'R',
visible: (formData) => formData.commissionBizType === 'R', rules: [
rules: [ { required: true, message: '请输入入账比例', trigger: 'blur' },
{ required: true, message: '请输入入账比例', trigger: 'blur' }, { pattern: /^-?\d+(\.\d{1,4})?$/, message: '最多四位小数', trigger: 'blur' }
{ pattern: /^-?\d+(\.\d{1,4})?$/, message: '最多四位小数', trigger: 'blur' } ]
] },
}, { {
type: 'select', type: 'select',
prop: 'currency', prop: 'currency',
label: '入账币种', label: '入账币种',
dictType: 'bx_currency_type' dictType: 'bx_currency_type'
}, { },
type: 'select', {
prop: 'commissionType', type: 'select',
label: '入账项目', prop: 'commissionType',
dictType: 'csf_commission_type', label: '入账项目',
onChangeExtraFields: { dictType: 'csf_commission_type',
commissionName: 'itemLabel', onChangeExtraFields: {
}, commissionName: 'itemLabel'
}, { }
type: 'select', },
prop: 'reconciliationCompanyBizId', {
label: '对账公司', type: 'select',
api: '/insurance/base/api/insuranceReconciliationCompany/page', prop: 'reconciliationCompanyBizId',
keywordField: 'name', label: '对账公司',
requestParams: { pageNo: 1, pageSize: 20 }, api: '/insurance/base/api/insuranceReconciliationCompany/page',
placeholder: '输入对账公司名称搜索', keywordField: 'name',
debounceWait: 500, // 自定义防抖时间 requestParams: { pageNo: 1, pageSize: 20 },
valueKey: 'reconciliationCompanyBizId', placeholder: '输入对账公司名称搜索',
labelKey: 'name', debounceWait: 500, // 自定义防抖时间
onChangeExtraFields: { valueKey: 'reconciliationCompanyBizId',
reconciliationCompany: 'name',// 自动同步 raw.name 到 reconciliationCompany labelKey: 'name',
reconciliationCompanyCode: 'code' onChangeExtraFields: {
}, reconciliationCompany: 'name', // 自动同步 raw.name 到 reconciliationCompany
transform: (res) => { reconciliationCompanyCode: 'code'
console.log('对账公司', res)
return res.data.records || []
}
}, },
{ transform: res => {
type: 'input', console.log('对账公司', res)
prop: 'remark', return res.data.records || []
label: '备注',
} }
},
{
type: 'input',
prop: 'remark',
label: '备注'
}
] ]
// 弹窗表单重置 // 弹窗表单重置
const resetAddReceivablesForm = () => { const resetAddReceivablesForm = () => {
addRecordRef.value.resetForm() addRecordRef.value.resetForm()
editStatus.value = 'add' editStatus.value = 'add'
} }
const handleConfirmAddReceivables = async () => { const handleConfirmAddReceivables = async () => {
if (editStatus.value === 'add') { if (editStatus.value === 'add') {
const p = addRecordRef.value.getFormData() const p = addRecordRef.value.getFormData()
try { try {
await addReceivedFortune({ await addReceivedFortune({
commissionExpectedAddDtoList: [p] commissionExpectedAddDtoList: [p]
}) })
ElMessage.success('新增应收款成功') ElMessage.success('新增应收款成功')
addReceivablesDialogVisible.value = false addReceivablesDialogVisible.value = false
resetAddReceivablesForm() resetAddReceivablesForm()
handleQuery() handleQuery()
} catch (error) { } catch (error) {
ElMessage.error(error.message) ElMessage.error(error.message)
}
} else {
try {
const res = await updateCommissionExpected({
commissionExpectedBizId: selectedRow.value.commissionExpectedBizId,
...addReceivablesFormModel.value
})
if (res.code === 200) {
ElMessage.success('应收款修改成功')
addReceivablesDialogVisible.value = false
resetAddReceivablesForm()
loadTableData() // 重新加载表格
} else {
ElMessage.error(res.msg || '应收款修改失败')
}
} catch (error) {
console.error('修改应收款失败:', error)
ElMessage.error('修改应收款失败')
}
} }
} else {
try {
const res = await updateCommissionExpected({
commissionExpectedBizId: selectedRow.value.commissionExpectedBizId,
...addReceivablesFormModel.value
})
if (res.code === 200) {
ElMessage.success('应收款修改成功')
addReceivablesDialogVisible.value = false
resetAddReceivablesForm()
loadTableData() // 重新加载表格
} else {
ElMessage.error(res.msg || '应收款修改失败')
}
} catch (error) {
console.error('修改应收款失败:', error)
ElMessage.error('修改应收款失败')
}
}
} }
const searchFormRef = ref(null) const searchFormRef = ref(null)
const searchParams = ref({}) const searchParams = ref({})
const searchConfig = ref([ const searchConfig = ref([
{ {
type: 'input', type: 'input',
prop: 'policyNo', prop: 'policyNo',
label: '保单号' label: '保单号'
}, },
{ {
type: 'daterange', type: 'daterange',
prop: 'entryDate', prop: 'entryDate',
label: '入账日(估)', label: '入账日(估)',
startPlaceholder: '开始时间', startPlaceholder: '开始时间',
endPlaceholder: '结束时间' endPlaceholder: '结束时间'
}, },
{ {
type: 'select', type: 'select',
prop: 'statusList', prop: 'statusList',
label: '入账状态', label: '入账状态',
multiple: true, multiple: true,
dictType: 'csf_expected_commission_status' dictType: 'csf_expected_commission_status'
}, },
{ {
type: 'input', type: 'input',
prop: 'commissionPeriod', prop: 'commissionPeriod',
label: '入账期数', label: '入账期数',
inputType: 'decimal', inputType: 'decimal',
rules: [ rules: [{ pattern: /^\d+$/, message: '只能输入正整数', trigger: 'blur' }]
{ pattern: /^\d+$/, message: '只能输入正整数', trigger: 'blur' } },
] {
}, type: 'select',
{ prop: 'fortuneName',
type: 'select', label: '入账项目',
prop: 'fortuneName', dictType: 'csf_commission_type'
label: '入账项目', },
dictType: 'csf_commission_type' {
}, type: 'select',
{ prop: 'reconciliationCompanyBizIdList',
type: 'select', label: '对账公司',
prop: 'reconciliationCompanyBizIdList', api: '/insurance/base/api/insuranceReconciliationCompany/page',
label: '对账公司', keywordField: 'name',
api: '/insurance/base/api/insuranceReconciliationCompany/page', requestParams: { pageNo: 1, pageSize: 20 },
keywordField: 'name', placeholder: '输入对账公司名称搜索',
requestParams: { pageNo: 1, pageSize: 20 }, debounceWait: 500, // 自定义防抖时间
placeholder: '输入对账公司名称搜索', multiple: true,
debounceWait: 500, // 自定义防抖时间 valueKey: 'reconciliationCompanyBizId',
multiple: true, labelKey: 'name',
valueKey: 'reconciliationCompanyBizId', transform: res => {
labelKey: 'name', console.log(res)
transform: (res) => { return res?.data.records || []
console.log(res) }
return res?.data.records || [] },
} {
}, type: 'select',
{ prop: 'insurerCompanyBizIdList',
type: 'select', label: '保险公司',
prop: 'insurerCompanyBizIdList', api: '/insurance/base/api/insuranceCompany/page',
label: '保险公司', keywordField: 'queryContent',
api: '/insurance/base/api/insuranceCompany/page', requestParams: { pageNo: 1, pageSize: 20 },
keywordField: 'queryContent', placeholder: '输入保险公司名称搜索',
requestParams: { pageNo: 1, pageSize: 20 }, debounceWait: 500, // 自定义防抖时间
placeholder: '输入保险公司名称搜索', multiple: true,
debounceWait: 500, // 自定义防抖时间 valueKey: 'insuranceCompanyBizId',
multiple: true, labelKey: 'fullName',
valueKey: 'insuranceCompanyBizId', transform: res => {
labelKey: 'fullName', return res?.data.records || []
transform: (res) => { }
return res?.data.records || [] },
} {
}, { type: 'select',
type: 'select', prop: 'productLaunchBizId',
prop: 'productLaunchBizId', label: '产品计划',
label: '产品计划', api: '/product/api/relProjectProductLaunch/parameter/page',
api: '/product/api/relProjectProductLaunch/parameter/page', keywordField: 'productName',
keywordField: 'productName', requestParams: {
requestParams: { tenantBizId: userStore.projectInfo.tenantBizId || '',
tenantBizId: userStore.projectInfo.tenantBizId || '', projectBizId: userStore.projectInfo.projectBizId || '',
projectBizId: userStore.projectInfo.projectBizId || '', fieldBizId: 'field_olk1qZe81qHHKXbw',
fieldBizId: 'field_olk1qZe81qHHKXbw', fieldValueBizId: 'field_value_uOfJH5ucA2YwJpbn',
fieldValueBizId: 'field_value_uOfJH5ucA2YwJpbn', pageNo: 1,
pageNo: 1, pageSize: 20
pageSize: 20
},
placeholder: '输入产品计划名称搜索',
debounceWait: 500, // 自定义防抖时间
valueKey: 'productLaunchBizId',
labelKey: 'productName',
transform: (res) => {
return res?.data.records || []
}
}, {
type: 'select',
prop: 'commissionBizType',
label: '应收单类型',
options: commissionBizTypeOptions,
}, {
type: 'select',
prop: 'teamBizId',
label: '出单团队',
api: '/csf/api/team/page',
keywordField: 'teamName',
requestParams: { pageNo: 1, pageSize: 20 },
placeholder: '输入出单团队名称搜索',
debounceWait: 500, // 自定义防抖时间
valueKey: 'teamBizId',
labelKey: 'teamName',
transform: (res) => {
return res?.data.records || []
}
}, },
placeholder: '输入产品计划名称搜索',
debounceWait: 500, // 自定义防抖时间
valueKey: 'productLaunchBizId',
labelKey: 'productName',
transform: res => {
return res?.data.records || []
}
},
{
type: 'select',
prop: 'commissionBizType',
label: '应收单类型',
options: commissionBizTypeOptions
},
{
type: 'select',
prop: 'teamBizId',
label: '出单团队',
api: '/csf/api/team/page',
keywordField: 'teamName',
requestParams: { pageNo: 1, pageSize: 20 },
placeholder: '输入出单团队名称搜索',
debounceWait: 500, // 自定义防抖时间
valueKey: 'teamBizId',
labelKey: 'teamName',
transform: res => {
return res?.data.records || []
}
}
]) ])
// 分页相关 // 分页相关
...@@ -492,18 +601,22 @@ const pageSize = ref(10) ...@@ -492,18 +601,22 @@ const pageSize = ref(10)
const pageTotal = ref(0) const pageTotal = ref(0)
const loading = ref(false) const loading = ref(false)
// 应收单类型通过value转成label // 应收单类型通过value转成label
const getCommissionBizTypeLabel = (value) => { const getCommissionBizTypeLabel = value => {
const item = commissionBizTypeOptions.find(item => item.value === value) const item = commissionBizTypeOptions.find(item => item.value === value)
return item?.label || '' return item?.label || ''
}
// 是否实收通过value转成label
const getTypeLabel = value => {
const item = typeOptions.find(item => item.value === value)
return item?.label || ''
} }
// 表格操作菜单 // 表格操作菜单
const dropdownItems = [ const dropdownItems = [
{ label: '入账记录', value: 'entryRecord' }, { label: '入账记录', value: 'entryRecord' },
{ label: '设置状态', value: 'setStatus' }, { label: '设置状态', value: 'setStatus' },
{ label: '更新数据', value: 'updateData' }, { label: '更新数据', value: 'updateData' }
] ]
// 弹窗状态 // 弹窗状态
...@@ -527,360 +640,673 @@ const tableData = ref([]) ...@@ -527,360 +640,673 @@ const tableData = ref([])
// 统计信息 // 统计信息
const statisticsData = ref({ const statisticsData = ref({
totalAmount: 0, totalAmount: 0,
totalPaidAmount: 0, totalPaidAmount: 0,
pendingPaidAmount: 0, pendingPaidAmount: 0,
paidAmountRatio: 0, paidAmountRatio: 0,
totalPolicyCount: 0 totalPolicyCount: 0
}) })
// 按钮事件处理 // 按钮事件处理
const handleAdd = () => { const handleAdd = () => {
addReceivablesDialogVisible.value = true addReceivablesDialogVisible.value = true
if (addRecordRef.value) { if (addRecordRef.value) {
addRecordRef.value.resetForm() addRecordRef.value.resetForm()
} }
addReceivablesFormModel.value = {} addReceivablesFormModel.value = {}
} }
const handleImport = () => ElMessage.info('点击导入按钮') const handleImport = () => ElMessage.info('点击导入按钮')
const handleExport = async () => { const handleExport = async () => {
// 获取搜索参数 // 获取搜索参数
const params = searchFormRef.value?.getFormData() || {} const params = searchFormRef.value?.getFormData() || {}
const response = await exportReceivedFortune(params) const response = await exportReceivedFortune(params)
// 文件名设置为应收款导出_yyyy-MM-dd hh:mm:ss.xlsx,不需要-,用字符串 // 文件名设置为应收款导出_yyyy-MM-dd hh:mm:ss.xlsx,不需要-,用字符串
const fileName = `应收款导出_${new Date().toLocaleString().replace(/\//g, '').replace(/:/g, '').replace(/\s/g, '')}.xlsx` const fileName = `应收款导出_${new Date().toLocaleString().replace(/\//g, '').replace(/:/g, '').replace(/\s/g, '')}.xlsx`
await safeDownload( await safeDownload(response, fileName, 'application/vnd.ms-excel;charset=utf-8')
response,
fileName,
'application/vnd.ms-excel;charset=utf-8'
)
} }
const handleReset = () => { const handleReset = () => {
// 重置搜索表单 // 重置搜索表单
searchFormRef.value.resetForm() searchFormRef.value.resetForm()
searchParams.value = {} searchParams.value = {}
console.log('表单已重置') console.log('表单已重置')
loadTableData() loadTableData()
} }
const handleQuery = () => { const handleQuery = () => {
loadTableData() loadTableData()
} }
const visibleDefaultButtons = ref([ const visibleDefaultButtons = ref(['add', 'export', 'reset', 'query'])
'add', 'export', 'reset', 'query'
])
// 按钮配置 // 按钮配置
const operationBtnList = ref([ const operationBtnList = ref([
{ key: 'add', direction: 'left', click: handleAdd }, { key: 'add', direction: 'left', click: handleAdd },
// { key: 'import', direction: 'left', click: handleImport }, // { key: 'import', direction: 'left', click: handleImport },
{ key: 'export', direction: 'right', click: handleExport }, { key: 'export', direction: 'right', click: handleExport },
{ key: 'reset', direction: 'right', click: handleReset }, { key: 'reset', direction: 'right', click: handleReset },
{ key: 'query', direction: 'right', click: handleQuery } { key: 'query', direction: 'right', click: handleQuery }
]) ])
// 分页事件 // 分页事件
const handleSizeChange = (val) => { const handleSizeChange = val => {
pageSize.value = val pageSize.value = val
loadTableData() loadTableData()
} }
const handleCurrentChange = (val) => { const handleCurrentChange = val => {
currentPage.value = val currentPage.value = val
loadTableData() loadTableData()
} }
// 加载表格数据 // 加载表格数据
const loadTableData = async () => { const loadTableData = async () => {
const searchParams = searchFormRef.value.getFormData() || {} const searchParams = searchFormRef.value.getFormData() || {}
loading.value = true loading.value = true
try { try {
const params = { const params = {
...searchParams, ...searchParams,
commissionDateStart: searchParams?.entryDate?.[0] || undefined, commissionDateStart: searchParams?.entryDate?.[0] || undefined,
commissionDateEnd: searchParams?.entryDate?.[1] || undefined, commissionDateEnd: searchParams?.entryDate?.[1] || undefined,
entryDate: undefined, entryDate: undefined,
pageNo: currentPage.value, pageNo: currentPage.value,
pageSize: pageSize.value pageSize: pageSize.value
}
const response = await receivableReport(params)
tableData.value = response.data.page.records || []
pageTotal.value = response.data.page.total || 0
pageSize.value = response.data.page.size || 50
// 统计信息
statisticsData.value = {
totalAmount: response.data.statisticsVO.totalAmount,
totalPaidAmount: response.data.statisticsVO.totalPaidAmount,
pendingPaidAmount: response.data.statisticsVO.pendingPaidAmount,
paidAmountRatio: response.data.statisticsVO.paidAmountRatio,
totalPolicyCount: response.data.statisticsVO.totalPolicyCount
}
} catch (error) {
console.error('加载数据失败:', error)
ElMessage.error('加载数据失败')
} finally {
loading.value = false
} }
const response = await receivableReport(params)
tableData.value = response.data.page.records || []
pageTotal.value = response.data.page.total || 0
pageSize.value = response.data.page.size || 50
// 统计信息
statisticsData.value = {
totalAmount: response.data.statisticsVO.totalAmount,
totalPaidAmount: response.data.statisticsVO.totalPaidAmount,
pendingPaidAmount: response.data.statisticsVO.pendingPaidAmount,
paidAmountRatio: response.data.statisticsVO.paidAmountRatio,
totalPolicyCount: response.data.statisticsVO.totalPolicyCount
}
} catch (error) {
console.error('加载数据失败:', error)
ElMessage.error('加载数据失败')
} finally {
loading.value = false
}
} }
// 入账记录查询 // 入账记录查询
const loadEntryRecordData = async (cbd) => { const loadEntryRecordData = async cbd => {
loading.value = true loading.value = true
try { try {
const params = { commissionExpectedBizId: cbd } const params = { commissionExpectedBizId: cbd }
const response = await commissionExpectedRecord(params) const response = await commissionExpectedRecord(params)
return response.data.records || [] return response.data.records || []
} catch (error) { } catch (error) {
console.error('加载入账记录失败:', error) console.error('加载入账记录失败:', error)
ElMessage.error('加载入账记录失败') ElMessage.error('加载入账记录失败')
return [] return []
} finally { } finally {
loading.value = false loading.value = false
} }
} }
// 入账操作记录查询 // 入账操作记录查询
const loadEntryEditRecordData = async (cbd) => { const loadEntryEditRecordData = async cbd => {
loading.value = true loading.value = true
try { try {
const params = { commissionBizId: cbd } const params = { commissionBizId: cbd }
const response = await commissionEntryEditRecords(params) const response = await commissionEntryEditRecords(params)
return response.data.records || [] return response.data.records || []
} catch (error) { } catch (error) {
console.error('加载操作记录失败:', error) console.error('加载操作记录失败:', error)
ElMessage.error('加载操作记录失败') ElMessage.error('加载操作记录失败')
return [] return []
} finally { } finally {
loading.value = false loading.value = false
} }
} }
// 操作菜单选择事件 // 操作菜单选择事件
const handleSelect = async (e, row) => { const handleSelect = async (e, row) => {
selectedRow.value = { ...row } selectedRow.value = { ...row }
if (e === 'entryRecord') { if (e === 'entryRecord') {
entryRecordDialogTableVisible.value = true entryRecordDialogTableVisible.value = true
entryRecordDialogTableColumns.value = [ entryRecordDialogTableColumns.value = [
{ property: 'reconciliationYearMonth', label: '检核年月', width: '100' }, { property: 'reconciliationYearMonth', label: '检核年月', width: '100' },
{ property: 'commissionPeriod', label: '佣金期数', width: '100' }, { property: 'commissionPeriod', label: '佣金期数', width: '100' },
{ property: 'totalPeriod', label: '总期数', width: '150' }, { property: 'totalPeriod', label: '总期数', width: '150' },
{ property: 'exchangeRate', label: '结算汇率(实)', width: '150' }, { property: 'exchangeRate', label: '结算汇率(实)', width: '150' },
{ property: 'currency', label: '入账币种', width: '150' }, { property: 'currency', label: '入账币种', width: '150' },
{ property: 'amount', label: '入账金额', width: '150',formatter:(row)=> formatCurrency(row.amount || 0) }, {
{ property: 'currentCommissionRatio', label: '入账比例', width: '150', formatter: (row) => `${row.currentCommissionRatio || ''}%` }, property: 'amount',
{ property: 'commissionDate', label: '入账日', width: '150' }, label: '入账金额',
{ property: 'commissionStatusName', label: '入账状态', width: '150' } width: '150',
] formatter: row => formatCurrency(row.amount || 0)
// 加载真实数据 },
const records = await loadEntryRecordData(row.commissionExpectedBizId) {
entryRecordDialogTableData.value = records.length ? records : [] property: 'currentCommissionRatio',
} else if (e === 'setStatus') { label: '入账比例',
console.log(selectedRow.value.status) width: '150',
setCommissionRecordStatusFormConfig.value = [ formatter: row => `${row.currentCommissionRatio || ''}%`
{ },
type: 'select', { property: 'commissionDate', label: '入账日', width: '150' },
prop: 'status', { property: 'commissionStatusName', label: '入账状态', width: '150' }
label: '入账状态', ]
dictType: 'csf_expected_commission_status', // 加载真实数据
defaultValue: selectedRow.value.status || '' const records = await loadEntryRecordData(row.commissionExpectedBizId)
}, { entryRecordDialogTableData.value = records.length ? records : []
type: 'textarea', } else if (e === 'setStatus') {
prop: 'statusDesc', console.log(selectedRow.value.status)
label: '修改理由', setCommissionRecordStatusFormConfig.value = [
defaultValue: selectedRow.value.statusDesc || '' {
}, type: 'select',
] prop: 'status',
setStatusDialogTableVisible.value = true label: '入账状态',
} else if (e === 'updateData') { dictType: 'csf_expected_commission_status',
editStatus.value = 'update' defaultValue: selectedRow.value.status || ''
addReceivablesDialogVisible.value = true },
// 2. 使用 nextTick 等待 DOM 更新 {
nextTick(() => { type: 'textarea',
// 3. 此时 addRecordRef.value 一定存在了 prop: 'statusDesc',
if (addRecordRef.value && selectedRow.value) { label: '修改理由',
addReceivablesFormModel.value = { ...selectedRow.value }; defaultValue: selectedRow.value.statusDesc || ''
console.log('赋值成功:', addReceivablesFormModel.value); }
} ]
}); setStatusDialogTableVisible.value = true
console.log('更新数据', selectedRow.value) } else if (e === 'updateData') {
} editStatus.value = 'update'
addReceivablesDialogVisible.value = true
// 2. 使用 nextTick 等待 DOM 更新
nextTick(() => {
// 3. 此时 addRecordRef.value 一定存在了
if (addRecordRef.value && selectedRow.value) {
addReceivablesFormModel.value = { ...selectedRow.value }
console.log('赋值成功:', addReceivablesFormModel.value)
}
})
console.log('更新数据', selectedRow.value)
}
} }
// 查看比对记录 // 查看比对记录
const handleClick = async (row) => { const handleClick = async row => {
actionRecordsDialogVisible.value = true actionRecordsDialogVisible.value = true
actionRecordsDialogTableColumns.value = [ actionRecordsDialogTableColumns.value = [
{ property: 'checkMonth', label: '检核年月', width: '100' }, { property: 'checkMonth', label: '检核年月', width: '100' },
{ property: 'compareStatus', label: '比对状态', width: '150' }, { property: 'compareStatus', label: '比对状态', width: '150' },
{ property: 'entryRatio', label: '入账比例', width: '150' }, { property: 'entryRatio', label: '入账比例', width: '150' },
{ property: 'shouldEntryRatio', label: '应入账比例', width: '150' }, { property: 'shouldEntryRatio', label: '应入账比例', width: '150' },
{ property: 'reconciliationCompany', label: '对账公司', width: '150' }, { property: 'reconciliationCompany', label: '对账公司', width: '150' },
{ property: 'createTime', label: '比对时间', width: '150' }, { property: 'createTime', label: '比对时间', width: '150' },
{ property: 'userName', label: '比对人', width: '150' } { property: 'userName', label: '比对人', width: '150' }
] ]
// 加载真实数据 // 加载真实数据
const records = await loadEntryEditRecordData(row.commissionBizId) const records = await loadEntryEditRecordData(row.commissionBizId)
actionRecordsDialogTableData.value = records.length ? records : [] actionRecordsDialogTableData.value = records.length ? records : []
} }
// 新增:设置状态确认事件 // 新增:设置状态确认事件
const handleConfirmSetStatus = () => { const handleConfirmSetStatus = () => {
const formData = setCommissionRecordStatusFormRef.value.getFormData() const formData = setCommissionRecordStatusFormRef.value.getFormData()
if (!formData.status) { if (!formData.status) {
return ElMessage.warning('请选择入账状态') return ElMessage.warning('请选择入账状态')
} }
if (!formData.statusDesc) { if (!formData.statusDesc) {
return ElMessage.warning('请输入修改理由') return ElMessage.warning('请输入修改理由')
} }
// 调用接口修改状态(示例) // 调用接口修改状态(示例)
ElMessageBox.confirm('确定要修改入账状态吗?', '提示', { ElMessageBox.confirm('确定要修改入账状态吗?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(async () => { })
try { .then(async () => {
const res = await CommissionExpectedChangeStatus({ try {
commissionExpectedBizId: selectedRow.value.commissionExpectedBizId, const res = await CommissionExpectedChangeStatus({
...formData commissionExpectedBizId: selectedRow.value.commissionExpectedBizId,
}) ...formData
if (res.code === 200) { })
ElMessage.success('状态修改成功') if (res.code === 200) {
setStatusDialogTableVisible.value = false ElMessage.success('状态修改成功')
loadTableData() // 重新加载表格 setStatusDialogTableVisible.value = false
} else { loadTableData() // 重新加载表格
ElMessage.error(res.msg || '状态修改失败') } else {
} ElMessage.error(res.msg || '状态修改失败')
} catch (error) {
console.error('修改状态失败:', error)
ElMessage.error('修改状态失败')
} }
}).catch(() => { } catch (error) {
ElMessage.info('已取消修改') console.error('修改状态失败:', error)
ElMessage.error('修改状态失败')
}
})
.catch(() => {
ElMessage.info('已取消修改')
}) })
} }
// 获取入账状态,字典值转化方法 // 获取入账状态,字典值转化方法
onMounted(async () => { onMounted(async () => {
try { try {
await loadDicts(['csf_expected_commission_status']) await loadDicts(['csf_expected_commission_status'])
loadTableData() loadTableData()
} catch (error) { } catch (error) {
console.error('字典加载失败', error) console.error('字典加载失败', error)
} finally { } finally {
loading.value = false loading.value = false
} }
}) })
// 格式化函数(每次渲染都会调用,所以能拿到最新字典) // 格式化函数(每次渲染都会调用,所以能拿到最新字典)
const formatStatus = (row,column) => { const formatStatus = (row, column) => {
return getDictLabel('csf_expected_commission_status', row.status) // 实时查缓存 return getDictLabel('csf_expected_commission_status', row.status) // 实时查缓存
} }
const detailDialogVisible = ref(false) const detailDialogVisible = ref(false)
const receivableReportTableData = ref([]) const receivableReportTableData = ref([])
const receivableReportTableColumns = ref([ const receivableReportTableColumns = ref([
{ prop: 'policyNo', label: '保单号', sortable: true, width: '150',fixed:'left', formatter: (row) => row.policyNo || '-' }, {
{ prop: 'reconciliationCompany', label: '对账公司', sortable: true, width: '150', formatter: (row) => row.reconciliationCompany || '-' }, prop: 'policyNo',
{ prop: 'commissionPeriod', label: '入账期数', sortable: true, width: '100', formatter: (row) => row.commissionPeriod || '-' }, label: '保单号',
{ prop: 'totalPeriod', label: '入账总期数', sortable: true, width: '100', formatter: (row) => row.totalPeriod || '-' }, sortable: true,
{ prop: 'commissionDate', label: '入账日(估)', sortable: true, width: '130', }, width: '150',
{ prop: 'commissionRatio', label: '产品对应来佣率', sortable: true, width: '120', formatter: (row) => (row.commissionRatio || 0) + '%' || '-' }, fixed: 'left',
{ prop: 'hkdAmount', label: '预估入账金额HKD', sortable: true, width: '120', formatter: (row) => formatCurrency(row.hkdAmount || 0) }, formatter: row => row.policyNo || '-'
{ prop: 'paidRatio', label: '已入账比例', sortable: true, width: '120', formatter: (row) => (row.paidRatio || 0) + '%' || '-' }, },
{ prop: 'paidAmount', label: '已入账金额HKD', sortable: true, width: '120', formatter: (row) => formatCurrency(row.paidAmount || 0) }, {
{ prop: 'unpaidRatio', label: '待入账比例', sortable: true, width: '120', formatter: (row) => (row.unpaidRatio || 0) + '%' || '-' }, prop: 'reconciliationCompany',
{ prop: 'unpaidAmount', label: '待入账金额HKD', sortable: true, width: '120', formatter: (row) => formatCurrency(row.unpaidAmount || 0) }, label: '对账公司',
{ prop: 'exchangeRate', label: '结算汇率(估)', sortable: true, width: '120'}, sortable: true,
{ prop: 'insuranceCompany', label: '保险公司', sortable: true, width: '120', formatter: (row) => row.insuranceCompany || '-' }, width: '150',
{ prop: 'productName', label: '产品计划', sortable: true, width: '120', formatter: (row) => row.productName || '-' }, formatter: row => row.reconciliationCompany || '-'
{ prop: 'premium', label: '期交保费', sortable: true, width: '120', formatter: (row) => formatCurrency(row.premium || 0) }, },
{ prop: 'policyCurrency', label: '保单币种', sortable: true, width: '120', formatter: (row) => row.policyCurrency || '-' }, {
prop: 'commissionPeriod',
label: '入账期数',
sortable: true,
width: '100',
formatter: row => row.commissionPeriod || '-'
},
{
prop: 'totalPeriod',
label: '入账总期数',
sortable: true,
width: '100',
formatter: row => row.totalPeriod || '-'
},
{ prop: 'commissionDate', label: '入账日(估)', sortable: true, width: '130' },
{
prop: 'commissionRatio',
label: '产品对应来佣率',
sortable: true,
width: '120',
formatter: row => (row.commissionRatio || 0) + '%' || '-'
},
{
prop: 'hkdAmount',
label: '预估入账金额HKD',
sortable: true,
width: '120',
formatter: row => formatCurrency(row.hkdAmount || 0)
},
{
prop: 'paidRatio',
label: '已入账比例',
sortable: true,
width: '120',
formatter: row => (row.paidRatio || 0) + '%' || '-'
},
{
prop: 'paidAmount',
label: '已入账金额HKD',
sortable: true,
width: '120',
formatter: row => formatCurrency(row.paidAmount || 0)
},
{
prop: 'unpaidRatio',
label: '待入账比例',
sortable: true,
width: '120',
formatter: row => (row.unpaidRatio || 0) + '%' || '-'
},
{
prop: 'unpaidAmount',
label: '待入账金额HKD',
sortable: true,
width: '120',
formatter: row => formatCurrency(row.unpaidAmount || 0)
},
{ prop: 'exchangeRate', label: '结算汇率(估)', sortable: true, width: '120' },
{
prop: 'insuranceCompany',
label: '保险公司',
sortable: true,
width: '120',
formatter: row => row.insuranceCompany || '-'
},
{
prop: 'productName',
label: '产品计划',
sortable: true,
width: '120',
formatter: row => row.productName || '-'
},
{
prop: 'premium',
label: '期交保费',
sortable: true,
width: '120',
formatter: row => formatCurrency(row.premium || 0)
},
{
prop: 'policyCurrency',
label: '保单币种',
sortable: true,
width: '120',
formatter: row => row.policyCurrency || '-'
}
]) ])
// 应收明细 // 应收明细
const receivableReportItemTableColumns = ref([ const receivableReportItemTableColumns = ref([
{ prop: 'commissionBizType', label: '应收单类型', sortable: true, width: '150', formatter: (row) => getCommissionBizTypeLabel(row.commissionBizType) || '-' }, {
{ prop: 'receivableNo', label: '应收款编号', sortable: true, width: '150', formatter: (row) => row.receivableNo || '-' }, prop: 'type',
{ prop: 'policyNo', label: '保单号', sortable: true, width: '150', formatter: (row) => row.policyNo || '-' }, label: '是否实收',
{ prop: 'reconciliationCompany', label: '对账公司', sortable: true, width: '150', formatter: (row) => row.reconciliationCompany || '-' }, sortable: true,
{ prop: 'status', label: '入账状态', sortable: true, width: '120', formatter: (row) => formatStatus(row) || '-' }, width: '150',
{ prop: 'commissionPeriod', label: '入账期数', sortable: true, width: '120', formatter: (row) => row.commissionPeriod || '-' }, formatter: row => getTypeLabel(row.type) || '-'
{ prop: 'totalPeriod', label: '入账总期数', sortable: true, width: '120', formatter: (row) => row.totalPeriod || '-' }, },
{ prop: 'commissionName', label: '入账项目', sortable: true, width: '130', formatter: (row) => row.commissionName || '-' }, {
{ prop: 'commissionDate', label: '入账日(估)', sortable: true, width: '130', formatter: (row) => row.commissionDate || '-' }, prop: 'commissionBizType',
{ prop: 'commissionRatio', label: '产品对应来佣率', sortable: true, width: '120', formatter: (row) => (row.commissionRatio || 0) + '%' || '-' }, label: '应收单类型',
{ prop: 'expectedAmount', label: '预估入账金额', sortable: true, width: '120', formatter: (row) => formatCurrency(row.expectedAmount || 0) }, sortable: true,
{ prop: 'paidRatio', label: '实佣率', sortable: true, width: '120', formatter: (row) => (row.paidRatio || 0) + '%' || '-' }, width: '150',
{ prop: 'paidAmount', label: '已入账金额', sortable: true, width: '120', formatter: (row) => formatCurrency(row.paidAmount || 0) }, formatter: row => getCommissionBizTypeLabel(row.commissionBizType) || '-'
{ prop: 'pendingRatio', label: '实佣率缺口', sortable: true, width: '120', formatter: (row) => (row.pendingRatio || 0) + '%' || '-' }, },
{ prop: 'pendingAmount', label: '待入账金额', sortable: true, width: '120', formatter: (row) => formatCurrency(row.pendingAmount || 0) }, {
{ prop: 'defaultExchangeRate', label: '结算汇率(估)', sortable: true, width: '120'}, prop: 'no',
{ prop: 'insuranceCompany', label: '保险公司', sortable: true, width: '120', formatter: (row) => row.insuranceCompany || '-' }, label: '应收单编号',
{ prop: 'productName', label: '产品计划', sortable: true, width: '120', formatter: (row) => row.productName || '-' }, sortable: true,
{ prop: 'premium', label: '期交保费', sortable: true, width: '120', formatter: (row) => formatCurrency(row.premium || 0) }, width: '150',
{ prop: 'policyCurrency', label: '保单币种', sortable: true, width: '120', formatter: (row) => row.policyCurrency || '-' }, formatter: row => row.no || '-'
{ prop: 'currency', label: '入账币种', sortable: true, width: '120', formatter: (row) => row.currency || '-' }, },
{ prop: 'statusDesc', label: '入账状态修改理由', sortable: true, width: '120', formatter: (row) => row.statusDesc || '-' }, // {
{ prop: 'remark', label: '备注', sortable: true, width: '120', formatter: (row) => row.remark || '-' }, // prop: 'receivableNo',
// label: '应收款编号',
// sortable: true,
// width: '150',
// formatter: row => row.receivableNo || '-'
// },
{
prop: 'policyNo',
label: '保单号',
sortable: true,
width: '150',
formatter: row => row.policyNo || '-'
},
{
prop: 'reconciliationCompany',
label: '对账公司',
sortable: true,
width: '150',
formatter: row => row.reconciliationCompany || '-'
},
{
prop: 'status',
label: '入账状态',
sortable: true,
width: '120',
formatter: row => formatStatus(row) || '-'
},
{
prop: 'commissionPeriod',
label: '入账期数',
sortable: true,
width: '120',
formatter: row => row.commissionPeriod || '-'
},
{
prop: 'totalPeriod',
label: '入账总期数',
sortable: true,
width: '120',
formatter: row => row.totalPeriod || '-'
},
{
prop: 'commissionName',
label: '入账项目',
sortable: true,
width: '130',
formatter: row => row.commissionName || '-'
},
{
prop: 'commissionDateMonth',
label: '入账年月(估)',
sortable: true,
width: '130',
formatter: row => row.commissionDateMonth || '-'
},
{
prop: 'commissionDate',
label: '入账年月(实)',
sortable: true,
width: '130',
formatter: row => row.commissionDate || '-'
},
{
prop: 'totalRevenueRatio',
label: '累积已入账比例',
sortable: true,
width: '130',
formatter: row => (row.totalRevenueRatio || 0) + '%' || '-'
},
{
prop: 'commissionRatio',
label: '产品对应来佣率',
sortable: true,
width: '120',
formatter: row => (row.commissionRatio || 0) + '%' || '-'
},
{
prop: 'realRate',
label: '实佣率',
sortable: true,
width: '120',
formatter: row => (row.realRate || 0) + '%' || '-'
},
{
prop: 'gapRate',
label: '达成率缺口',
sortable: true,
width: '120',
formatter: row => (row.gapRate || 0) + '%' || '-'
},
{
prop: 'realExchangeRate',
label: '结算汇率实',
sortable: true,
width: '120',
formatter: row => row.realExchangeRate || '-'
},
{
prop: 'realAmount',
label: '已入账金额',
sortable: true,
width: '120',
formatter: row => row.realAmount || '-'
},
//还不确定字段
{
prop: 'realReconciliationYearMonth',
label: '检核年月',
sortable: true,
width: '120',
formatter: row => row.realReconciliationYearMonth || '-'
},
{
prop: 'revenueRatio',
label: '本次入账比例',
sortable: true,
width: '120',
formatter: row => (row.revenueRatio || 0) + '%' || '-'
},
{
prop: 'pendingAmount',
label: '待入账金额',
sortable: true,
width: '120',
formatter: row => formatCurrency(row.pendingAmount || 0)
},
{
prop: 'expectedAmount',
label: '预计入账金额',
sortable: true,
width: '120',
formatter: row => formatCurrency(row.expectedAmount || 0)
},
{
prop: 'defaultExchangeRate',
label: '结算汇率估',
sortable: true,
width: '120',
formatter: row => row.defaultExchangeRate || '-'
},
{
prop: 'insuranceCompany',
label: '保险公司',
sortable: true,
width: '120',
formatter: row => row.insuranceCompany || '-'
},
{
prop: 'productName',
label: '产品计划',
sortable: true,
width: '120',
formatter: row => row.productName || '-'
},
//还不确定字段
{
prop: 'issueNumber',
label: '年期',
sortable: true,
width: '120',
formatter: row => row.issueNumber || '-'
},
{
prop: 'policyCurrency',
label: '保单币种',
sortable: true,
width: '120',
formatter: row => row.policyCurrency || '-'
},
{
prop: 'premium',
label: '期交保费',
sortable: true,
width: '120',
formatter: row => formatCurrency(row.premium || 0)
},
{
prop: 'realRemark',
label: '备注',
sortable: true,
width: '120',
formatter: row => row.realRemark || '-'
},
{
prop: 'realUpdaterName',
label: '操作人',
sortable: true,
width: '120',
formatter: row => row.realUpdaterName || '-'
},
{
prop: 'realUpdateTime',
label: '操作时间',
sortable: true,
width: '120',
formatter: row => row.realUpdateTime || '-'
}
// {
// prop: 'pendingRatio',
// label: '实佣率缺口',
// sortable: true,
// width: '120',
// formatter: row => (row.pendingRatio || 0) + '%' || '-'
// },
// { prop: 'defaultExchangeRate', label: '结算汇率(估)', sortable: true, width: '120' },
// {
// prop: 'currency',
// label: '入账币种',
// sortable: true,
// width: '120',
// formatter: row => row.currency || '-'
// },
// {
// prop: 'statusDesc',
// label: '入账状态修改理由',
// sortable: true,
// width: '120',
// formatter: row => row.statusDesc || '-'
// },
]) ])
const detailRecordStatistics = ref({}) const detailRecordStatistics = ref({})
const detailPageInfo = ref({ const detailPageInfo = ref({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
currentPage: 1, currentPage: 1,
total: 0 total: 0
}) })
// 获取入账报告 // 获取应收明细
const receivedFortuneListData = async () => { const receivedFortuneListData = async () => {
loading.value = true loading.value = true
try { try {
const params = { const params = {
policyNo: selectedDetailRecordRow.value.policyNo, policyNo: selectedDetailRecordRow.value.policyNo,
commissionPeriod: selectedDetailRecordRow.value.commissionPeriod, commissionPeriod: selectedDetailRecordRow.value.commissionPeriod,
receivableNo: selectedDetailRecordRow.value.receivableNo, receivableNo: selectedDetailRecordRow.value.receivableNo,
pageNo: detailPageInfo.value.currentPage, pageNo: detailPageInfo.value.currentPage,
pageSize: detailPageInfo.value.pageSize pageSize: detailPageInfo.value.pageSize
} }
const response = await receivedFortuneList(params) const response = await newQueryCommissionExpectedByPage(params)
receivableReportTableData.value = response.data.page.records || [] receivableReportTableData.value = response.data.page.records || []
detailPageInfo.value.total = response.data.page.total || 0 detailPageInfo.value.total = response.data.page.total || 0
detailPageInfo.value.pageSize = response.data.page.size || 50 detailPageInfo.value.pageSize = response.data.page.size || 50
// 统计信息 // 统计信息
detailRecordStatistics.value = { // detailRecordStatistics.value = {
totalAmount: response.data.expectedStatisticsVO.totalAmount, // totalAmount: response.data.expectedStatisticsVO.totalAmount,
totalPaidAmount: response.data.expectedStatisticsVO.totalPaidAmount, // totalPaidAmount: response.data.expectedStatisticsVO.totalPaidAmount,
pendingPaidAmount: response.data.expectedStatisticsVO.pendingPaidAmount, // pendingPaidAmount: response.data.expectedStatisticsVO.pendingPaidAmount,
paidAmountRatio: response.data.expectedStatisticsVO.paidAmountRatio, // paidAmountRatio: response.data.expectedStatisticsVO.paidAmountRatio,
totalPolicyCount: response.data.expectedStatisticsVO.totalPolicyCount, // totalPolicyCount: response.data.expectedStatisticsVO.totalPolicyCount,
totalPremium: response.data.expectedStatisticsVO.totalPremium // totalPremium: response.data.expectedStatisticsVO.totalPremium
} // }
} catch (error) { if (response.data.expectedStatisticsVO) {
console.error('加载数据失败:', error) detailRecordStatistics.value = response.data.expectedStatisticsVO
ElMessage.error('加载数据失败')
} finally {
loading.value = false
} }
} catch (error) {
console.error('加载数据失败:', error)
ElMessage.error('加载数据失败')
} finally {
loading.value = false
}
} }
const selectedDetailRecordRow = ref({}) const selectedDetailRecordRow = ref({})
const viewDetail = (row) => { const viewDetail = row => {
selectedDetailRecordRow.value = row selectedDetailRecordRow.value = row
detailDialogVisible.value = true detailDialogVisible.value = true
receivedFortuneListData() receivedFortuneListData()
} }
// 分页事件 // 分页事件
const handleSizeChangeDetailRecord = (val) => { const handleSizeChangeDetailRecord = val => {
detailPageInfo.value.pageSize = val detailPageInfo.value.pageSize = val
receivedFortuneListData() receivedFortuneListData()
} }
// 分页事件 // 分页事件
const handleCurrentChangeDetailRecord = (val) => { const handleCurrentChangeDetailRecord = val => {
detailPageInfo.value.currentPage = val detailPageInfo.value.currentPage = val
receivedFortuneListData() receivedFortuneListData()
} }
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment