Commit d10bafcd by Sweet Zhang

新单跟进对接

parent 0ba0e888
......@@ -415,8 +415,7 @@ export function exportPayRecord(data) {
// 入账检核重新比对
export function compareCommissionEntry(data){
return request({
url: '/csf/api/commission/compare',
method: 'post',
data: data
url: '/csf/api/commission/compare?commissionBizId=' + data,
method: 'get',
})
}
......@@ -27,7 +27,7 @@ export function updateToPolicyLib(data) {
data: data
})
}
// 更新新单跟进
// 更新新单跟进-基本信息
export function updatePolicyfollow(data) {
return request({
url: '/csf/api/policy_follow/update',
......@@ -221,3 +221,29 @@ export function signName(data) {
data: data
})
}
// 保存首期缴费
export function saveInitialPayment(data) {
return request({
url: '/csf/api/policy_follow/save_initial_payment',
method: 'post',
data: data
})
}
// 保存邮寄信息
export function saveMailingInfo(data) {
return request({
url: '/csf/api/policy_follow/save_mailing_info',
method: 'post',
data: data
})
}
// 批量保存介绍人
export function batchSaveBrokers(data) {
return request({
url: '/csf/api/policy_follow/batch_save_brokers',
method: 'post',
data: data
})
}
......@@ -206,18 +206,19 @@
<el-table-column prop="commissionName" label="入账项目" width="120" />
<el-table-column prop="reconciliationCompany" label="对账公司" width="120" />
<!-- <el-table-column prop="zip" label="入账状态" width="120" /> -->
<el-table-column fixed="right" label="操作" min-width="180">
<el-table-column fixed="right" label="操作" min-width="240">
<template #default="{ row }">
<el-button type="primary" size="default" @click="compareCommissionEntryapi(row)">
<el-button type="primary" text size="small" @click="compareCommissionEntryapi(row)">
重新比对
</el-button>
<el-button type="primary" size="default" @click="checkRecordEdit(row)">
<el-button type="primary" text size="small" @click="checkRecordEdit(row)">
修改
</el-button>
<el-popconfirm confirm-button-text="Yes" cancel-button-text="No" :icon="InfoFilled" icon-color="#626AEF"
title="确认要删除吗?" @confirm="deletePolicyCommissionApi(row)">
<template #reference>
<el-button>删除</el-button>
<el-button text type="danger" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
......@@ -921,9 +922,7 @@ const closthDialog = () => {
// 重新比对
const compareCommissionEntryapi = async (row) => {
try {
const res = await compareCommissionEntry({
commissionBizId: row.commissionBizId
})
const res = await compareCommissionEntry(row.commissionBizId)
if (res.code === 200) {
ElMessage.success('重新比对成功')
checkRecordQuery()
......
......@@ -18,9 +18,9 @@
</el-table-column>
<el-table-column prop="appointmentNo" label="预约编号" width="200" sortable />
<el-table-column prop="signDate" label="签单日" width="200" sortable />
<el-table-column prop="policyBizId" label="最晚缴费日" width="200" sortable />
<el-table-column prop="latestPaymentDate" label="最晚缴费日" width="200" sortable />
<el-table-column prop="policyHolder" label="投保人" width="150" sortable />
<el-table-column prop="policyNo" label="受保人" width="150" sortable />
<el-table-column prop="insured" label="受保人" width="150" sortable />
<el-table-column prop="insuranceCompany" label="保险公司" width="200" sortable />
<el-table-column prop="productName" label="产品计划" width="200" sortable />
<el-table-column prop="paymentTerm" label="缴费年期" width="120" sortable />
......@@ -339,12 +339,11 @@ const mode = ref('viewDetail')
const handleSelect = async (e, row) => {
selectedRow.value = { ...row }
mode.value = e
console.log(e, row)
switch (e) {
case 'viewDetail':
// ElMessage.info('查看详情')
viewDetailDialogFlag.value = true
// viewDetailFormData.value = JSON.parse(JSON.stringify(mockEditData))
policyDetailFormData.value = JSON.parse(JSON.stringify(selectedRow.value))
// 赋值已有数据(深拷贝避免引用问题)
// Object.assign(formData, JSON.parse(JSON.stringify(mockEditData)))
break
......
......@@ -197,9 +197,10 @@
</template>
<script setup>
import { ref, reactive, watch, nextTick } from 'vue'
import { ref, reactive, watch, nextTick, onMounted } from 'vue'
import SearchForm from '@/components/SearchForm/SearchForm.vue'
import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue'
import { getPolicyfollow, updatePolicyfollow, saveMailingInfo, batchSaveBrokers, saveInitialPayment } from '@/api/sign/underwritingMain'
const basicInfoFormRef = ref()
const basicInfoFormData = ref({})
const basicInfoFormConfig = ref([
......@@ -209,9 +210,26 @@ const basicInfoFormConfig = ref([
label: '签单日',
}, {
type: 'select',
prop: 'currency',
prop: 'signerBizId',
label: '签单员',
dictType: 'bx_currency_type',
api: '/insurance/base/api/userSignExpand/page',
keywordField: 'realName',
requestParams: { pageNo: 1, pageSize: 20 },
placeholder: '输入签单员姓名搜索',
debounceWait: 500, // 自定义防抖时间
onChangeExtraFields: {
signer: 'realName',// 自动同步 raw.name 到 reconciliationCompany
},
valueKey: 'userSignBizId',
labelKey: 'realName',
transform: (res) => {
console.log(res)
return res?.data.records || []
},
rules: [
{ required: true, message: '请选择签单员', trigger: 'blur' },
]
}, {
type: 'input',
prop: 'policyNo',
......@@ -219,7 +237,7 @@ const basicInfoFormConfig = ref([
}, {
type: 'select',
prop: 'currency',
prop: 'signLocation',
label: '签单地点',
dictType: 'bx_currency_type'
},
......@@ -231,8 +249,8 @@ const policyInfoFormRef = ref()
const policyInfoFormData = ref({})
const policyInfoFormConfig = ref([
{
type: 'date',
prop: 'endDate',
type: 'input',
prop: 'policyNo',
label: '保单号',
}, {
type: 'date',
......@@ -240,7 +258,7 @@ const policyInfoFormConfig = ref([
label: '保单生效日',
}, {
type: 'date',
prop: 'effectiveDate',
prop: 'policyExpirationDate',
label: '保单截止日',
}, {
type: 'date',
......@@ -248,36 +266,38 @@ const policyInfoFormConfig = ref([
label: '保单核保日',
}, {
type: 'date',
prop: 'underwritingDate',
prop: 'receiptDate',
label: '保单回执日',
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'receiptStatus',
label: '回执状态',
dictType: 'receipt_status'
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'directPaymentEnabled',
label: '是否开通直接支付',
}, {
type: 'input',
prop: 'insurer',
prop: 'policyHolder',
label: '保单持有人',
}, {
type: 'input',
prop: 'insurer',
prop: 'insured',
label: '保单受保人',
}, {
type: 'select',
prop: 'insuranceType',
type: 'input',
prop: 'insuredAge',
label: '受保人年龄',
}, {
type: 'select',
prop: 'paymentFrequency',
type: 'input',
prop: 'gracePeriod',
label: '宽限期',
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'isJoin',
label: '是否参加递增保障权益',
dictType: 'sys_no_yes'
},
])
......@@ -287,68 +307,101 @@ const basicPlanFormData = ref({})
const basicPlanFormConfig = ref([
{
type: 'select',
prop: 'paymentFrequency',
prop: 'insuranceCompanyBizIdList',
label: '保险公司',
api: '/insurance/base/api/insuranceCompany/page',
keywordField: 'queryContent',
requestParams: { pageNo: 1, pageSize: 20 },
placeholder: '输入保险公司名称搜索',
debounceWait: 500, // 自定义防抖时间
multiple: true,
valueKey: 'insuranceCompanyBizId',
labelKey: 'abbreviation',
transform: (res) => {
console.log(res)
return res?.data.records || []
}
}, {
type: 'select',
prop: 'paymentFrequency',
label: '保险险种',
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'productName',
label: '产品名称',
}, {
type: 'select',
prop: 'paymentFrequency',
label: '付款频率',
dictType: 'csf_ap_frequency'
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'guaranteePeriod',
label: '保障期限',
}, {
type: 'select',
prop: 'paymentFrequency',
type: 'input',
prop: 'sumInsured',
label: '保额(重疾险)',
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'issueNumber',
label: '供款期数',
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'policyCurrency',
label: '保单币种',
dictType: 'bx_currency_type'
}, {
type: 'select',
prop: 'paymentFrequency',
type: 'input',
prop: 'initialPremium',
label: '每期保费',
inputType: 'decimal',
decimalDigits: 2,
visible: (formData) => formData.commissionBizType == 'R',
rules: [
{ required: true, message: '请输入金额', trigger: 'blur' },
{ pattern: /^\d+(\.\d{1,2})?$/, message: '最多两位小数', trigger: 'blur' }
]
}, {
type: 'select',
prop: 'paymentFrequency',
type: 'input',
prop: 'policyLevy',
label: '保单征费',
inputType: 'decimal',
decimalDigits: 2,
visible: (formData) => formData.commissionBizType == 'R',
rules: [
{ required: true, message: '请输入金额', trigger: 'blur' },
{ pattern: /^\d+(\.\d{1,2})?$/, message: '最多两位小数', trigger: 'blur' }
]
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'isPrepay',
label: '是否预缴',
dictType: 'sys_no_yes'
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'isTraceable',
label: '是否追溯',
dictType: 'sys_no_yes'
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'retroactiveDate',
label: '回溯日期',
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'initialPaymentMethod',
label: '首期付款方式',
dictType: 'csf_ap_first_issue'
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'renewalPaymentMethod',
label: '续期付款方式',
dictType: 'csf_ap_first_issue'
}, {
type: 'select',
prop: 'paymentFrequency',
prop: 'dividendPaymentMethod',
label: '红利付款方式',
dictType: 'csf_ap_dividend'
},
])
......@@ -359,7 +412,7 @@ const firstPremiumFormData = ref({})
const firstPremiumFormConfig = ref([
{
type: 'input',
prop: 'amount',
prop: 'initialPremium',
label: '首期保费',
inputType: 'decimal',
decimalDigits: 2,
......@@ -369,7 +422,7 @@ const firstPremiumFormConfig = ref([
]
}, {
type: 'input',
prop: 'amount',
prop: 'policyLevy',
label: '保单征费',
inputType: 'decimal',
decimalDigits: 2,
......@@ -379,12 +432,12 @@ const firstPremiumFormConfig = ref([
]
}, {
type: 'select',
prop: 'currency',
prop: 'initialPaymentMethod',
label: '首期缴费方式',
dictType: 'bx_currency_type'
dictType: 'csf_ap_first_issue'
}, {
type: 'input',
prop: 'amount',
prop: 'initialPremiumPaid',
label: '首期已缴保费',
inputType: 'decimal',
decimalDigits: 2,
......@@ -394,7 +447,7 @@ const firstPremiumFormConfig = ref([
]
}, {
type: 'input',
prop: 'amount',
prop: 'initialPremiumDue',
label: '首期待缴保费',
inputType: 'decimal',
decimalDigits: 2,
......@@ -404,7 +457,7 @@ const firstPremiumFormConfig = ref([
]
}, {
type: 'input',
prop: 'amount',
prop: 'initialPremiumTotal',
label: '首期缴费总额',
inputType: 'decimal',
decimalDigits: 2,
......@@ -414,19 +467,25 @@ const firstPremiumFormConfig = ref([
]
}, {
type: 'select',
prop: 'statusList',
prop: 'initialPaymentStatus',
label: '缴费状态',
multiple: true,
dictType: 'csf_fortune_status'
}, {
type: 'date',
prop: 'commissionDate',
prop: 'latestPaymentDate',
label: '最晚缴费日',
placeholder: '请选择'
}, {
type: 'textarea',
prop: 'policyNo',
label: '首期保费优惠'
type: 'input',
prop: 'initialPremiumDiscount',
label: '首期保费优惠金额',
inputType: 'decimal',
decimalDigits: 2,
rules: [
{ required: true, message: '请输入金额', trigger: 'blur' },
{ pattern: /^\d+(\.\d{1,2})?$/, message: '最多两位小数', trigger: 'blur' }
]
},
])
......@@ -436,24 +495,23 @@ const postalFormData = ref({})
const postalFormConfig = ref([
{
type: 'input',
prop: 'postalCode',
prop: 'mailingMethod',
label: '寄送方式',
dictType: 'csf_ap_mailing_method'
}, {
type: 'input',
prop: 'address',
label: '快递单号',
prop: 'deliveryNo',
label: '快递单号'
}, {
type: 'date',
prop: 'address',
prop: 'brokerSignDate',
label: '我司签收日',
rules: [
{ required: true, message: '请输入我司签收日', trigger: 'blur' }
]
}, {
type: 'date',
prop: 'address',
prop: 'customerSignDate',
label: '客户签收日',
rules: [
{ required: true, message: '请输入客户签收日', trigger: 'blur' }
......@@ -478,18 +536,6 @@ const emit = defineEmits(['update:modelValue', 'submit', 'cancel'])
// ===== 本地响应式数据 =====
const defaultFormData = () => ({
signDate: '',
agentId: '',
location: '',
policyNo: '',
effectiveDate: '',
endDate: '',
underwritingDate: '',
insurer: '',
insuranceType: '',
productName: '',
paymentFrequency: '',
additionalPlans: []
})
......@@ -518,15 +564,7 @@ const activeTab = ref('basic')
// ===== 添加附加险计划方法 =====
const addAdditionalPlan = () => {
localData.additionalPlans.push({
product: '',
frequency: '',
term: '',
periods: '',
currency: '',
premium: '',
fee: ''
})
localData.additionalPlans.push({})
}
const deleteRow = (index) => {
......@@ -563,6 +601,48 @@ watch(
},
{ deep: true }
)
// 查询新单跟进详情
// /csf/api/policy_follow/get/vo?policyBizId=${policyBizId}
const getPolicyfollowDetail = (policyBizId) => {
getPolicyfollow(policyBizId).then(res => {
if (res.code === 200) {
Object.assign(localData, defaultFormData(), res.data)
policyInfoFormData.value = transformToFormData(res.data, policyInfoFormConfig.value);
basicPlanFormData.value = transformToFormData(res.data, basicPlanFormConfig.value);
basicInfoFormData.value = transformToFormData(res.data, basicInfoFormConfig.value);
firstPremiumFormData.value = transformToFormData(res.data, firstPremiumFormConfig.value);
}
})
}
// 组装表单数据
const transformToFormData = (apiData, formConfig) => {
const formData = {};
// 遍历表单配置,逐个赋值
formConfig.forEach(item => {
const { prop } = item;
// 根据 prop 决定如何从 apiData 取值
switch (prop) {
case 'signLocation':
formData[prop] = apiData.signLocation || null;
break;
default:
// 如果 prop 和后端字段同名,可以直接赋值
formData[prop] = apiData[prop] ?? null;
}
});
return formData;
}
// 页面加载时调用
onMounted(() => {
getPolicyfollowDetail(localData.value.policyBizId)
})
</script>
<style scoped>
......@@ -601,13 +681,14 @@ watch(
background-color: #007bff;
border-radius: 5px;
}
.section h5 {
margin: 0 0 15px 0;
font-size: 14px;
line-height: 1;
position: relative;
background-color: rgba(0, 119, 238, 0.05);
color:#383838;
color: #383838;
padding: 15px 10px;
border-radius: 4px;
}
......
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