Commit ca481729 by yuzhenWang

保费对账和回执发布测试

parent 654519e7
...@@ -181,19 +181,19 @@ const productPlan = [ ...@@ -181,19 +181,19 @@ const productPlan = [
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
label: '保单日期回溯', label: '保单回溯日期',
key: 'isBacktrack', key: 'backtrackDate',
domType: 'Select', domType: 'DatePicker',
required: false, required: true,
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
dictType: 'sys_no_yes',
show: true, show: true,
labelPosition: 'top', //标签的位置 labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 12, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
label: '是否参加递增保障权益', label: '是否参加递增保障权益',
key: 'isJoin', key: 'isJoin',
......
...@@ -326,7 +326,7 @@ ...@@ -326,7 +326,7 @@
@click="submitForm('save')" @click="submitForm('save')"
size="large" size="large"
:disabled="editStatus" :disabled="editStatus"
>立即预约</el-button >保存,去填写预约单</el-button
> >
</div> </div>
</el-col> </el-col>
......
...@@ -340,37 +340,37 @@ const getDictsData = async () => { ...@@ -340,37 +340,37 @@ const getDictsData = async () => {
dictStore.setAllInsuranceCompanyList(response9.data.records) dictStore.setAllInsuranceCompanyList(response9.data.records)
} }
// 请求每个流程中所涉及到的字典值数据 // 请求每个流程中所涉及到的字典值数据
proxy.useDictLists([ // proxy.useDictLists([
'csf_employment', // 'csf_employment',
'sys_no_yes', // 'sys_no_yes',
'bx_currency_type', // 'bx_currency_type',
'csf_liquid_asset_type', // 'csf_liquid_asset_type',
'csf_premium_funding_source', // 'csf_premium_funding_source',
'csf_customer_type', // 'csf_customer_type',
'csf_customer_title', // 'csf_customer_title',
'sys_gender', // 'sys_gender',
'csf_marriage', // 'csf_marriage',
'csf_education', // 'csf_education',
'csf_id_type', // 'csf_id_type',
'csf_ap_apply_type', // 'csf_ap_apply_type',
'csf_ap_meeting_point', // 'csf_ap_meeting_point',
'csf_ap_first_issue', // 'csf_ap_first_issue',
'csf_ap_dividend', // 'csf_ap_dividend',
'csf_ap_frequency', // 'csf_ap_frequency',
'csf_ap_rel', // 'csf_ap_rel',
'csf_ap_registration', // 'csf_ap_registration',
'csf_ap_exercise', // 'csf_ap_exercise',
'csf_ap_risk', // 'csf_ap_risk',
'csf_ap_movie', // 'csf_ap_movie',
'csf_ap_game', // 'csf_ap_game',
'wj_question_first_category', // 'wj_question_first_category',
'wj_question_second_category', // 'wj_question_second_category',
'csf_ap_policy_transfer', // 'csf_ap_policy_transfer',
'md_bank', // 'md_bank',
'csf_property_type', // 'csf_property_type',
'oss_data_type', // 'oss_data_type',
'oss_data_person' // 'oss_data_person'
]) // ])
} }
// 更新流程 // 更新流程
......
...@@ -111,23 +111,40 @@ ...@@ -111,23 +111,40 @@
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="操作" <el-table-column fixed="right" label="操作" width="80" align="center">
align="center" <template #default="{ row }">
width="250" <el-popover placement="left" :width="160" trigger="click">
class-name="small-padding fixed-width" <template #reference>
fixed="right" <el-button link type="primary" size="small">
> <el-icon><MoreFilled /></el-icon>
<template #default="scope"> </el-button>
<el-button type="primary" link @click="handleUpdate(scope.row)">修改</el-button> </template>
<el-button type="success" link @click="handleCopy(scope.row)">生成副本</el-button> <el-menu @select="index => handleSelect(index, row)" popper-class="custom-menu">
<el-button <el-menu-item
v-if="!scope.row.policyNo" v-for="item in getVisibleDropdownItems(row)"
type="danger" :index="item.value"
link :key="item.value"
@click="handleDelete(scope.row)" >
>删除</el-button <el-text class="mx-1" v-if="!item.confirm">{{ item.label }}</el-text>
> <el-popconfirm
v-else
confirm-button-text="Yes"
cancel-button-text="No"
:icon="InfoFilled"
icon-color="#626AEF"
:title="item.confirm"
@confirm="handleMenuConfirm(item.value, row)"
width="300"
placement="left-end"
>
<template #reference>
<el-text class="mx-1">{{ item.label }}</el-text>
</template>
</el-popconfirm>
</el-menu-item>
</el-menu>
</el-popover>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -144,7 +161,9 @@ ...@@ -144,7 +161,9 @@
import CommonPage from '@/components/commonPage' import CommonPage from '@/components/commonPage'
import { getFnaList, deleteFna, subProcess } from '@/api/sign/fna' import { getFnaList, deleteFna, subProcess } from '@/api/sign/fna'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
import { MoreFilled, InfoFilled } from '@element-plus/icons-vue'
import useDictStore from '@/store/modules/dict'
const dictStore = useDictStore()
const userStore = useUserStore() const userStore = useUserStore()
const router = useRouter() const router = useRouter()
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
...@@ -188,6 +207,63 @@ const operationBtnList = ref([ ...@@ -188,6 +207,63 @@ const operationBtnList = ref([
click: handleQuery click: handleQuery
} }
]) ])
// 表格操作栏相关方法
// 基础菜单项配置(不使用 ref,因为它是静态的)
const baseDropdownItems = [
{ label: '修改', value: 'edit', confirm: '' },
{
label: '生成副本',
value: 'copy',
confirm: ''
},
{
label: '删除',
value: 'delete',
confirm: '是否确认删除FNA流程?',
// 只有当 row.status == 1 时才显示
showCondition: row => !row.policyNo
}
]
const getVisibleDropdownItems = row => {
return baseDropdownItems.filter(item => {
// 如果有 showCondition,则执行;否则默认显示
return typeof item.showCondition === 'function' ? item.showCondition(row) : true
})
}
// 菜单选择处理(无确认的操作)
const handleSelect = (index, row) => {
// 只处理不需要确认的操作
const item = baseDropdownItems.find(i => i.value === index)
if (item && !item.confirm) {
handleMenuAction(index, row)
}
// 如果有 confirm,则由 el-popconfirm 触发 handleMenuConfirm
}
// 带确认的操作(由 popconfirm 触发)
const handleMenuConfirm = (value, row) => {
handleMenuAction(value, row)
}
// 统一处理菜单动作
const handleMenuAction = (action, row) => {
switch (action) {
case 'edit':
handleUpdate(row)
break
case 'copy':
handleCopy(row)
break
case 'delete':
if (!row.policyNo) {
handleDelete(row)
}
break
default:
proxy.$message.info('功能暂未开放')
}
}
const changePageNo = val => { const changePageNo = val => {
queryParams.value.pageNo = val queryParams.value.pageNo = val
getList() getList()
...@@ -268,17 +344,16 @@ function resetQuery() { ...@@ -268,17 +344,16 @@ function resetQuery() {
} }
/** 删除按钮操作 */ /** 删除按钮操作 */
function handleDelete(row) { async function handleDelete(row) {
proxy.$modal try {
.confirm('是否确认删除' + row.customerName + '的FNA流程?') let res = await deleteFna({ fnaBizId: row.fnaBizId })
.then(function () { if (res.code === 200) {
return deleteFna({ fnaBizId: row.fnaBizId })
})
.then(() => {
getList() getList()
proxy.$modal.msgSuccess('删除成功') proxy.$modal.msgSuccess('删除成功')
}) }
.catch(() => {}) } catch (error) {
console.log('error', error)
}
} }
/** 新增按钮操作 */ /** 新增按钮操作 */
...@@ -301,6 +376,40 @@ function handleUpdate(row) { ...@@ -301,6 +376,40 @@ function handleUpdate(row) {
} }
getList() getList()
// 请求一下字典值方便表单回显
if (dictStore.dictTypeLists.length == 0) {
proxy.useDictLists([
'csf_employment',
'sys_no_yes',
'bx_currency_type',
'csf_liquid_asset_type',
'csf_premium_funding_source',
'csf_customer_type',
'csf_customer_title',
'sys_gender',
'csf_marriage',
'csf_education',
'csf_id_type',
'csf_ap_apply_type',
'csf_ap_meeting_point',
'csf_ap_first_issue',
'csf_ap_dividend',
'csf_ap_frequency',
'csf_ap_rel',
'csf_ap_registration',
'csf_ap_exercise',
'csf_ap_risk',
'csf_ap_movie',
'csf_ap_game',
'csf_ap_policy_transfer',
'wj_question_first_category',
'wj_question_second_category',
'csf_ap_status',
'md_bank',
'oss_data_type',
'oss_data_person'
])
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.bottomBtn { .bottomBtn {
......
...@@ -418,7 +418,6 @@ const props = defineProps({ ...@@ -418,7 +418,6 @@ const props = defineProps({
policyDetailInfo: { type: Object, default: () => ({}) }, //新单跟进传递关于保单的详情信息 policyDetailInfo: { type: Object, default: () => ({}) }, //新单跟进传递关于保单的详情信息
policyId: { type: Object, default: () => ({}) } //新单跟进传递的Id policyId: { type: Object, default: () => ({}) } //新单跟进传递的Id
}) })
// console.log();
const userStore = useUserStore() const userStore = useUserStore()
const dictStore = useDictStore() const dictStore = useDictStore()
...@@ -816,37 +815,37 @@ const getDictsData = async () => { ...@@ -816,37 +815,37 @@ const getDictsData = async () => {
}) })
dictStore.setSignPeopleList(response7.data.records) dictStore.setSignPeopleList(response7.data.records)
} }
proxy.useDictLists([ // proxy.useDictLists([
'csf_employment', // 'csf_employment',
'sys_no_yes', // 'sys_no_yes',
'bx_currency_type', // 'bx_currency_type',
'csf_liquid_asset_type', // 'csf_liquid_asset_type',
'csf_premium_funding_source', // 'csf_premium_funding_source',
'csf_customer_type', // 'csf_customer_type',
'csf_customer_title', // 'csf_customer_title',
'sys_gender', // 'sys_gender',
'csf_marriage', // 'csf_marriage',
'csf_education', // 'csf_education',
'csf_id_type', // 'csf_id_type',
'csf_ap_apply_type', // 'csf_ap_apply_type',
'csf_ap_meeting_point', // 'csf_ap_meeting_point',
'csf_ap_first_issue', // 'csf_ap_first_issue',
'csf_ap_dividend', // 'csf_ap_dividend',
'csf_ap_frequency', // 'csf_ap_frequency',
'csf_ap_rel', // 'csf_ap_rel',
'csf_ap_registration', // 'csf_ap_registration',
'csf_ap_exercise', // 'csf_ap_exercise',
'csf_ap_risk', // 'csf_ap_risk',
'csf_ap_movie', // 'csf_ap_movie',
'csf_ap_game', // 'csf_ap_game',
'csf_ap_policy_transfer', // 'csf_ap_policy_transfer',
'wj_question_first_category', // 'wj_question_first_category',
'wj_question_second_category', // 'wj_question_second_category',
'csf_ap_status', // 'csf_ap_status',
'md_bank', // 'md_bank',
'oss_data_type', // 'oss_data_type',
'oss_data_person' // 'oss_data_person'
]) // ])
} }
// Tab切换前的验证 // Tab切换前的验证
const beforeTabLeave = (activeTabName, oldTabName) => { const beforeTabLeave = (activeTabName, oldTabName) => {
......
...@@ -724,7 +724,7 @@ function getItineraryInfo() { ...@@ -724,7 +724,7 @@ function getItineraryInfo() {
// 导出行程单Pdf // 导出行程单Pdf
const handleExprotPdf = () => { const handleExprotPdf = () => {
exportLoading.value = true exportLoading.value = true
getItineraryExprot(appointmentSummeryInfo.value.appointmentBizId).then(res => { getItineraryExprot(props.idsObj.appointmentBizId).then(res => {
if (res.code == 200) { if (res.code == 200) {
// 创建隐藏的下载链接 // 创建隐藏的下载链接
const link = document.createElement('a') const link = document.createElement('a')
...@@ -733,8 +733,8 @@ const handleExprotPdf = () => { ...@@ -733,8 +733,8 @@ const handleExprotPdf = () => {
// 设置下载文件名(重要) // 设置下载文件名(重要)
// 从URL中提取文件名,或者使用返回的文件名 // 从URL中提取文件名,或者使用返回的文件名
const fileName = `香港行程安排.pdf`
link.download = fileName link.download = `香港行程安排.pdf`
// 触发下载 // 触发下载
document.body.appendChild(link) document.body.appendChild(link)
......
...@@ -289,6 +289,7 @@ const currencyType = ref([]) // 是否列表 ...@@ -289,6 +289,7 @@ const currencyType = ref([]) // 是否列表
const searchOptions = ref({}) // 存储不同key对应的选项 const searchOptions = ref({}) // 存储不同key对应的选项
const searchLoadingStates = ref({}) // 存储不同key对应的加载状态 const searchLoadingStates = ref({}) // 存储不同key对应的加载状态
const additionalProductForm = ref([]) // 附加险的表单 const additionalProductForm = ref([]) // 附加险的表单
const dateKey = ref({})
const data = reactive({ const data = reactive({
form: { apiProductPlanMainInfoDto: {}, apiProductPlanAdditionalInfoDtoList: [] }, form: { apiProductPlanMainInfoDto: {}, apiProductPlanAdditionalInfoDtoList: [] },
tempForm: {}, //由于切换tab的时候,表单数据会重置,所以需要保存一份临时表单数据 tempForm: {}, //由于切换tab的时候,表单数据会重置,所以需要保存一份临时表单数据
...@@ -624,11 +625,6 @@ const processFormData = async () => { ...@@ -624,11 +625,6 @@ const processFormData = async () => {
if (section.data) { if (section.data) {
for (const formKey in form.value) { for (const formKey in form.value) {
if (section.key == formKey) { if (section.key == formKey) {
// if (section.dataLength) {
// for (let i = 1; i < section.dataLength; i++) {
// section.data.push(JSON.parse(JSON.stringify(section.data[0])))
// }
// }
for (const field of section.data) { for (const field of section.data) {
// 为下拉搜索框加options // 为下拉搜索框加options
if (field.domType == 'SearchSelect') { if (field.domType == 'SearchSelect') {
...@@ -650,10 +646,9 @@ const processFormData = async () => { ...@@ -650,10 +646,9 @@ const processFormData = async () => {
// 获取字典数据 // 获取字典数据
field.options = fetchDictData(field.dictType) field.options = fetchDictData(field.dictType)
} }
// if (field.domType == 'DatePicker') {
/* dateKey.value[field.key] = field.key
1.没有嵌套子级的也就是没有children的数据加rules,根据data中的required字段判断是否必填 }
*/
if (field.required) { if (field.required) {
rules.value[section.key][field.key] = [ rules.value[section.key][field.key] = [
{ required: true, message: `${field.label}不能为空`, trigger: 'blur' } { required: true, message: `${field.label}不能为空`, trigger: 'blur' }
...@@ -698,6 +693,7 @@ const processFormData = async () => { ...@@ -698,6 +693,7 @@ const processFormData = async () => {
processedProductData.value = processedData processedProductData.value = processedData
} }
} }
console.log('产品', form.value)
} }
// 根据联动重置表单项的显示与否 // 根据联动重置表单项的显示与否
...@@ -861,6 +857,16 @@ const handleSubmitForm = () => { ...@@ -861,6 +857,16 @@ const handleSubmitForm = () => {
if (section.keyType == 'Array' && section.data.length > 0) { if (section.keyType == 'Array' && section.data.length > 0) {
submitObj[section.key] = JSON.parse(JSON.stringify(section.data)) submitObj[section.key] = JSON.parse(JSON.stringify(section.data))
} }
if (section.keyType == 'Object' && section.data) {
for (const field of section.data) {
// 时间加00:00:00
if (field.domType == 'DatePicker' && dateKey.value[field.key]) {
submitObj[section.key][field.key] = proxy.formatToDateTime(
submitObj[section.key][field.key]
)
}
}
}
}) })
if (errorFields.value.length > 0) { if (errorFields.value.length > 0) {
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
> >
<!-- 查询条件插槽 --> <!-- 查询条件插槽 -->
<template #searchForm> <template #searchForm>
<el-form :model="queryParams" ref="queryRef" label-width="100px"> <el-form :model="queryParams" ref="queryRef" label-width="100px" label-position="top">
<el-row :gutter="30"> <el-row :gutter="30">
<el-col :sm="12" :lg="8" :xs="24"> <el-col :sm="12" :lg="8" :xs="24">
<el-form-item label="确认预约时间"> <el-form-item label="确认预约时间">
...@@ -203,6 +203,7 @@ import CommonPage from '@/components/commonPage' ...@@ -203,6 +203,7 @@ import CommonPage from '@/components/commonPage'
import DetailPanel from '@/components/DetailPanel' import DetailPanel from '@/components/DetailPanel'
import { onMounted, onActivated, ref } from 'vue' import { onMounted, onActivated, ref } from 'vue'
import CommonDialog from '@/components/commonDialog' import CommonDialog from '@/components/commonDialog'
import useDictStore from '@/store/modules/dict'
import { import {
getAppointmentList, getAppointmentList,
getAppointmentExprot, getAppointmentExprot,
...@@ -211,7 +212,7 @@ import { ...@@ -211,7 +212,7 @@ import {
getItineraryExprot getItineraryExprot
} from '@/api/sign/appointment' } from '@/api/sign/appointment'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
const dictStore = useDictStore()
const userStore = useUserStore() const userStore = useUserStore()
const router = useRouter() const router = useRouter()
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
...@@ -584,6 +585,40 @@ function handleUpdate(row, type) { ...@@ -584,6 +585,40 @@ function handleUpdate(row, type) {
} }
getList() getList()
// 请求一下字典值方便表单回显
if (dictStore.dictTypeLists.length == 0) {
proxy.useDictLists([
'csf_employment',
'sys_no_yes',
'bx_currency_type',
'csf_liquid_asset_type',
'csf_premium_funding_source',
'csf_customer_type',
'csf_customer_title',
'sys_gender',
'csf_marriage',
'csf_education',
'csf_id_type',
'csf_ap_apply_type',
'csf_ap_meeting_point',
'csf_ap_first_issue',
'csf_ap_dividend',
'csf_ap_frequency',
'csf_ap_rel',
'csf_ap_registration',
'csf_ap_exercise',
'csf_ap_risk',
'csf_ap_movie',
'csf_ap_game',
'csf_ap_policy_transfer',
'wj_question_first_category',
'wj_question_second_category',
'csf_ap_status',
'md_bank',
'oss_data_type',
'oss_data_person'
])
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container { .app-container {
......
...@@ -56,9 +56,9 @@ ...@@ -56,9 +56,9 @@
<template #default="{ row }"> <template #default="{ row }">
<el-popover placement="right" :width="200" trigger="click"> <el-popover placement="right" :width="200" trigger="click">
<template #reference> <template #reference>
<el-icon> <el-button link type="primary" size="small">
<MoreFilled /> <el-icon><MoreFilled /></el-icon>
</el-icon> </el-button>
</template> </template>
<el-menu @select="handleSelect($event, row)" popper-class="custom-menu"> <el-menu @select="handleSelect($event, row)" popper-class="custom-menu">
<el-menu-item <el-menu-item
...@@ -134,9 +134,7 @@ import SearchForm from '@/components/SearchForm/SearchForm.vue' ...@@ -134,9 +134,7 @@ import SearchForm from '@/components/SearchForm/SearchForm.vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { formatCurrency } from '@/utils/number' import { formatCurrency } from '@/utils/number'
// 接口 // 接口
import { import { updatePayoutAmount } from '@/api/financial/commission'
updatePayoutAmount,
} from '@/api/financial/commission'
import { import {
getPolicyReceiptList, getPolicyReceiptList,
addPolicyReceipt, addPolicyReceipt,
...@@ -181,13 +179,13 @@ const searchConfig = ref([ ...@@ -181,13 +179,13 @@ const searchConfig = ref([
prop: 'insurer', prop: 'insurer',
label: '保险公司', label: '保险公司',
api: '/insurance/base/api/insuranceCompany/page', api: '/insurance/base/api/insuranceCompany/page',
keywordField: 'queryContent', keywordField: 'fullName',
requestParams: { pageNo: 1, pageSize: 20 }, requestParams: { pageNo: 1, pageSize: 20 },
placeholder: '输入保险公司名称搜索', placeholder: '输入保险公司名称搜索',
debounceWait: 500, // 自定义防抖时间 debounceWait: 500, // 自定义防抖时间
multiple: false, multiple: false,
valueKey: 'insuranceCompanyBizId', valueKey: 'insuranceCompanyBizId',
labelKey: 'abbreviation', labelKey: 'fullName',
transform: res => { transform: res => {
console.log(res) console.log(res)
return res?.data.records || [] return res?.data.records || []
......
...@@ -109,32 +109,13 @@ ...@@ -109,32 +109,13 @@
<el-table-column prop="reconciliationCompany" label="对账公司" width="150"> <el-table-column prop="reconciliationCompany" label="对账公司" width="150">
</el-table-column> </el-table-column>
<!-- <el-table-column fixed="right" label="操作" min-width="120">
<template #default="{ row }">
<el-popover placement="right" :width="200" trigger="click">
<template #reference>
<el-icon>
<MoreFilled />
</el-icon>
</template>
<el-menu @select="handleSelect($event, row)" popper-class="custom-menu">
<el-menu-item
:index="item.value"
v-for="item in dropdownItems"
:key="item.value"
>{{ item.label }}</el-menu-item
>
</el-menu>
</el-popover>
</template>
</el-table-column> -->
<el-table-column fixed="right" label="操作" min-width="120"> <el-table-column fixed="right" label="操作" min-width="120">
<template #default="{ row }"> <template #default="{ row }">
<el-popover placement="right" :width="200" trigger="click"> <el-popover placement="right" :width="200" trigger="click">
<template #reference> <template #reference>
<el-icon> <el-button link type="primary" size="small">
<MoreFilled /> <el-icon><MoreFilled /></el-icon>
</el-icon> </el-button>
</template> </template>
<el-menu @select="handleSelect($event, row)" popper-class="custom-menu"> <el-menu @select="handleSelect($event, row)" popper-class="custom-menu">
...@@ -186,6 +167,11 @@ ...@@ -186,6 +167,11 @@
{{ getDictLabel('csf_ap_first_issue', row.paymentMethod) }} {{ getDictLabel('csf_ap_first_issue', row.paymentMethod) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="paymentDate" label="付款日期" width="150">
<template #default="{ row }">
{{ row.paymentDate ? formatToDate(row.paymentDate) : '' }}
</template>
</el-table-column>
<el-table-column label="付款金额" prop="paymentAmount" /> <el-table-column label="付款金额" prop="paymentAmount" />
<el-table-column label="付款币种" prop="paymentCurrency"> <el-table-column label="付款币种" prop="paymentCurrency">
<template #default="{ row }"> <template #default="{ row }">
......
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