Commit ca481729 by yuzhenWang

保费对账和回执发布测试

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