Commit 7623c5ef by yuzhenWang

添加预计来佣和修改新单跟进状态

parent 0421718f
......@@ -134,3 +134,42 @@ export function delPolicyBeneficiary(policyBeneficiaryBizId) {
method: 'delete'
})
}
// 新单跟进的预计来佣列表
export function getCommissionList(data) {
return request({
url: '/csf/api/CommissionExpected/list/page',
method: 'post',
data: data
})
}
// 新单跟进的预计来佣单个提交
export function editSigalCommission(data) {
return request({
url: '/csf/api/CommissionExpected/update',
method: 'post',
data: data
})
}
// 新单跟进的预计来佣批量提交
export function editMultipleCommission(data) {
return request({
url: '/csf/api/CommissionExpected/add',
method: 'post',
data: data
})
}
// 删除单个来佣
export function delCommissionExpected(commissionExpectedBizId) {
return request({
url: '/csf/api/CommissionExpected/delete?commissionExpectedBizId=' + commissionExpectedBizId,
method: 'delete'
})
}
// 编辑新单跟进状态
export function changePolicyStatus(data) {
return request({
url: '/csf/api/policy_follow/change_status',
method: 'post',
data: data
})
}
const commissionList = [
// 转介人信息
{
fatherTitle: '预计来佣',
keyType: 'Array', //用于表单收集值时,判断是数组还是对象
showTable: true, //以table的形式展示
key: 'commissionList',
addFamilyChildren: true, //是否可以新增子级dom
fatherRequired: false, //父级必填,代表个人资料这个模块有必填项
data: [
// {
// id: Date.now() + Math.floor(Math.random() * 1000), //唯一标识
// brokerName: '',
// team: '',
// brokerRatio: '',
// needProvide: '',
// currency: '',
// remark: ''
// }
]
}
]
export default commissionList
......@@ -191,16 +191,7 @@ const handleCopy = row => {
proxy.$modal.msgSuccess('生成副本成功')
}
})
// proxy.$modal
// .confirm('是否确认复用' + row.customerName + '的FNA流程?')
// .then(function () {
// return subProcess({ fnaBizId: row.fnaBizId })
// })
// .then(() => {
// getList()
// proxy.$modal.msgSuccess('生成副本成功')
// })
// .catch(() => {})
}
const sortChange = ({ prop, order }) => {
if (order == 'ascending') {
......
......@@ -44,7 +44,6 @@
<el-row v-if="isEmbed">
<el-col>
<div class="topButtonBox">
<!-- -->
<el-button
v-if="idsObj.appointmentBizId && pageSource !== 'policyList'"
type="primary"
......@@ -237,6 +236,13 @@
:verifyPolicyInfo="policyDetailInfo.verifyPolicyInfo"
/>
</div>
<div v-if="tab.name === 'expectedCommission'">
<ExpectedCommission
:activeName="activeName"
:policyBizId="route.query.policyBizId"
:brokerList="policyDetailInfo.brokerList"
/>
</div>
</div>
</el-tab-pane>
</el-tabs>
......@@ -290,6 +296,7 @@ import PolicyFileUpload from '@/views/sign/underwritingMain/components/fileUploa
import PolicyBrokerInfo from '@/views/sign/underwritingMain/components/brokerInfo.vue' //新单跟进里的保单附件
import PolicyMailing from '@/views/sign/underwritingMain/components/policyMailing.vue' //新单跟进里的保单附件
import VerifyPolicyInfo from '@/views/sign/underwritingMain/components/verifyPolicyInfo.vue' //新单跟进里的保单附件
import ExpectedCommission from '@/views/sign/underwritingMain/components/expectedCommission.vue' //新单跟进里的保单附件
import useUserStore from '@/store/modules/user'
import useDictStore from '@/store/modules/dict'
import { getCustomerDetail } from '@/api/sign/fna'
......@@ -307,7 +314,6 @@ import { ref, nextTick, onUnmounted } from 'vue'
const emit = defineEmits(['handleSuccess'])
const { proxy } = getCurrentInstance()
// const { csf_ap_status } = proxy.useDict('csf_ap_status')
const props = defineProps({
embed: { type: Boolean, default: false }, //作为组件嵌入别的地方
editStatus: { type: String, default: '' }, //作为组件嵌入别的地方
......@@ -317,6 +323,7 @@ const props = defineProps({
policyDetailInfo: { type: Object, default: () => ({}) }, //新单跟进传递关于保单的详情信息
policyId: { type: Object, default: () => ({}) } //新单跟进传递的Id
})
// console.log();
const userStore = useUserStore()
const dictStore = useDictStore()
......@@ -808,7 +815,7 @@ const tabHight = computed(() => {
if (pageSource.value == 'fnaList') {
return 'calc(100vh - 407px)'
} else if (pageSource.value == 'policyList') {
return 'calc(100vh - 230px)'
return 'calc(100vh - 225px)'
} else {
return 'calc(100vh - 276px)'
}
......@@ -1005,107 +1012,113 @@ if (route.query.source == 'policyList') {
isEmbed.value = route.query.embed
tabsList.value = [
{
label: '预计来佣',
name: 'expectedCommission',
id: 1,
key: 'expectedCommission'
},
{
label: '保单信息',
name: 'policyInfo',
id: 1,
id: 2,
key: 'policyInfo'
},
{
label: '保单附件',
name: 'policyAccessories',
id: 2,
id: 3,
key: 'policyAccessories'
},
{
label: '转介人',
name: 'policyBroker',
id: 3,
id: 4,
key: 'policyBroker'
},
{
label: '邮寄信息',
name: 'policyMailing',
id: 4,
id: 5,
key: 'policyMailing'
},
{
label: '核保信息',
name: 'verifyPolicyInfo',
id: 5,
id: 6,
key: 'verifyPolicyInfo'
},
// {
// label: '新单事项',
// name: 'newpolicyTodo',
// id: 6,
// id: 7,
// key: 'newpolicyTodo'
// },
{
label: '产品计划',
name: 'productPlan',
id: 7,
id: 8,
status: '0',
key: 'planBizId'
},
{
label: '投保人',
name: 'policyholder',
id: 8,
id: 9,
status: '0',
key: 'policyholderBizId'
},
{
label: '受保人',
name: 'insurantInfo',
id: 9,
id: 10,
status: '0',
key: 'insurantBizId'
},
{
label: '受益人',
name: 'beneficiary',
id: 10,
id: 11,
status: '0',
key: 'beneficiaryBizId'
},
{
label: '第二持有人',
name: 'secondHolder',
id: 11,
id: 12,
status: '0',
key: 'secondHolderBizId'
},
{
label: '健康信息', //后端还没加这个字段
name: 'questionnaires',
id: 12,
id: 13,
status: '0',
key: 'questionnaireBizId'
},
// {
// label: '关联FNA',
// name: 'fna',
// id: 13,
// id: 14,
// status: '0',
// key: 'fnaBizId'
// },
{
label: '转保声明',
name: 'policyTransfer',
id: 14,
id: 15,
status: '0',
key: 'policyTransfer'
},
{
label: '预约附件', //大提交的时候不用提交了,因为上传文件的时候已经入库了
name: 'accessories',
id: 15,
id: 16,
status: '0',
key: 'fnaBizId'
}
]
nextTick(() => {
activeName.value = 'policyInfo'
activeName.value = 'expectedCommission'
})
}
// 根据页面来源的不同控制tab项内模块小提交按钮的显示与否,也能证明是修改状态
......@@ -1121,8 +1134,6 @@ const showSubmitBtn = computed(() => {
}
})
onUnmounted(() => {
console.log('预约编辑页面完全销毁')
// 彻底重置所有响应式数据
submitAppointmentObj.value = {}
appointmentSummeryInfo.value = {}
......
......@@ -22,6 +22,7 @@
<el-row v-if="father.showTable">
<el-table :data="father.data" border>
<template v-if="father.key == 'brokerList'">
<el-table-column type="index" width="60" label="序号" />
<el-table-column label="转介人比例" prop="brokerRatio" align="center">
<template #default="scope">
<el-input
......
<template>
<div>
<div v-if="tableList.length > 0">
<el-row>
<el-col :span="24" style="display: flex; justify-content: flex-start; margin-bottom: 10px">
<el-button
:disabled="editStatus"
style="margin-top: 10px"
type="primary"
icon="Plus"
@click="addChildren"
>添加</el-button
>
</el-col>
<el-table :data="tableList" border @sort-change="sortChange">
<el-table-column type="index" width="60" label="序号" />
<el-table-column label="来佣名称" prop="commissionName" align="center" width="180">
</el-table-column>
<el-table-column label="来佣金额" sortable prop="amount" align="center" width="120">
</el-table-column>
<el-table-column
label="佣金期数"
sortable
prop="commissionPeriod"
align="center"
width="120"
>
</el-table-column>
<el-table-column label="预计来佣日期" prop="commissionDate" align="center" width="150">
</el-table-column>
<el-table-column label="来佣币种" prop="currency" align="center" width="160">
<template #default="scope">
<dict-tag :options="fetchDictData('bx_currency_type')" :value="scope.row.currency" />
</template>
</el-table-column>
<el-table-column
label="对账公司"
sortable
prop="reconciliationCompany"
align="center"
width="150"
>
</el-table-column>
<el-table-column label="总来佣期数" prop="totalPeriod" align="center"> </el-table-column>
<el-table-column label="备注" prop="remark" align="center" width="150"> </el-table-column>
<el-table-column width="120px" align="center" label="操作" fixed="right">
<template #default="scope">
<el-button type="primary" link @click="handleEdit(scope.row)">编辑</el-button>
<el-button type="danger" link @click="handleDetele(scope.row, scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-col :span="24">
<pagination
v-show="total >= 0"
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getTableList"
/>
</el-col>
</el-row>
<el-dialog :title="commissionTitle" v-model="editCommission" width="800px" append-to-body>
<div>
<el-form>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="来佣名称" prop="commissionName" label-position="top">
<el-input
v-model="form.commissionName"
size="default"
type="text"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="来佣金额" prop="amount" label-position="top">
<el-input
v-model="form.amount"
size="default"
type="number"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="预计来佣日期" prop="commissionDate" label-position="top">
<el-date-picker
style="width: 100%"
v-model="form.commissionDate"
type="date"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="佣金期数" prop="commissionPeriod" label-position="top">
<el-input
v-model="form.commissionPeriod"
size="default"
type="number"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="来佣币种" prop="currency" label-position="top">
<el-select v-model="form.currency" placeholder="请选择">
<el-option
v-for="item in fetchDictData('bx_currency_type')"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="对账公司" prop="reconciliationCompany" label-position="top">
<el-select
v-model="form.reconciliationCompany"
filterable
remote
reserve-keyword
placeholder="请输入关键词搜索"
:remote-method="query => searchSelectList(query, 'reconciliationCompany')"
:loading="searchLoadingStates['reconciliationCompany']"
>
<el-option
v-for="item in searchOptions['reconciliationCompany'] || []"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="总来佣期数" prop="totalPeriod" label-position="top">
<el-input
v-model="form.totalPeriod"
size="default"
type="number"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark" label-position="top">
<el-input
v-model="form.remark"
size="default"
type="textarea"
placeholder="请输入"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleUpdate">提交</el-button>
<el-button @click="canelEdit">取 消</el-button>
</div>
</template>
</el-dialog>
</div>
<div v-else class="domEmpty" v-loading="loading"></div>
</div>
</template>
<script setup name="policyInfo">
import useDictStore from '@/store/modules/dict'
import { watch, nextTick } from 'vue'
import { getAllCompanys } from '@/api/common'
import {
getCommissionList,
editSigalCommission,
editMultipleCommission,
delCommissionExpected
} from '@/api/sign/underwritingMain'
import useUserStore from '@/store/modules/user'
const userStore = useUserStore()
const dictStore = useDictStore() //获取字典数据
const props = defineProps({
activeName: { type: String, default: '' }, //tab名称
policyBizId: { type: String, default: '' }, //提交状态,新增、修改
dictTypeLists: { type: Array, default: () => [] } //多个字典值数据
})
const emit = defineEmits(['handleSuccess'])
const { proxy } = getCurrentInstance()
const loading = ref(false)
const editStatus = ref(false) // 表单是否可编辑,若是修改初始不可编辑
const searchOptions = ref({}) // 存储不同key对应的选项
const searchLoadingStates = ref({}) // 存储不同key对应的加载状态
const total = ref(0)
const oldTotal = ref(0)
const tableList = ref([])
const isEditing = ref(false)
const commissionTitle = ref('添加来佣')
const editCommission = ref(false)
const data = reactive({
form: {},
queryParams: {
pageNo: 1,
pageSize: 5,
sortField: 'commissionPeriod',
sortOrder: 'ascend'
}
})
const { queryParams, form } = toRefs(data)
const handleEdit = row => {
form.value = { ...row }
editCommission.value = true
commissionTitle.value = `修改来佣-${row.policyNo}`
}
const canelEdit = () => {
editCommission.value = false
form.value = {}
}
const sortChange = ({ prop, order }) => {
if (isEditing.value) {
return // 编辑期间不进行排序
}
if (order == 'ascending') {
queryParams.value.sortOrder = 'ascend'
} else {
queryParams.value.sortOrder = 'descend'
}
if (prop) {
queryParams.value.sortField = prop
}
// 重新获取表格数据
getTableList()
}
// 搜索方法
const searchSelectList = async (query, fieldKey) => {
// 设置该字段的加载状态
searchLoadingStates.value[fieldKey] = true
try {
// 根据不同的字段key调用不同的API
if (fieldKey === 'reconciliationCompany') {
const params = {
deptName: query.trim(),
pageNo: 1,
pageSize: 10
}
getAllCompanys(params).then(response => {
response.data.records = response.data.records.map(item => {
return {
...item,
label: item.deptName,
value: item.deptBizId
}
})
searchOptions.value[fieldKey] = response.data.records
})
}
} catch (error) {
console.error(`${fieldKey} 搜索失败`, error)
searchOptions.value[fieldKey] = []
} finally {
searchLoadingStates.value[fieldKey] = false
}
}
// 获取字典数据
const fetchDictData = dictType => {
let options = []
try {
dictStore.dictTypeLists.forEach(item => {
if (item.dictType == dictType) {
options = item.dictItemList
}
})
return options
} catch (error) {
console.error('获取字典数据失败:', error)
return []
}
}
// 添加表单子级dom
const addChildren = () => {
form.value = {}
editCommission.value = true
commissionTitle.value = '添加来佣'
// let obj = {
// id: Date.now() + Math.floor(Math.random() * 1000), //唯一标识
// reconciliationCompany: '',
// currency: '',
// commissionPeriod: '',
// totalPeriod: '',
// commissionName: '',
// amount: '',
// commissionDate: '',
// remark: ''
// }
// if (tableList.value.length == 0) {
// tableList.value.unshift(obj)
// } else {
// obj.reconciliationCompany = tableList.value[0].reconciliationCompany
// obj.currency = tableList.value[0].currency
// obj.commissionPeriod = tableList.value[0].commissionPeriod
// obj.totalPeriod = tableList.value[0].totalPeriod
// obj.remark = tableList.value[0].remark
// tableList.value.unshift(obj)
// }
// total.value = total.value + 1
}
// 处理单个提交
const handleUpdate = () => {
let obj = JSON.parse(JSON.stringify(form.value))
if (obj.commissionDate) {
obj.commissionDate = proxy.formatToDate(obj.commissionDate)
}
if (obj.commissionName) {
obj.commissionType = obj.commissionName
}
dictStore.insureCompanyList.forEach(item => {
if (obj.reconciliationCompany && obj.reconciliationCompany == item.value) {
obj.reconciliationCompany = item.label
obj.reconciliationCompanyBizId = item.value
}
})
if (obj.commissionExpectedBizId) {
editSigalCommission(obj).then(res => {
if (res.code == 200) {
proxy.$message.success('提交成功')
editCommission.value = false
form.value = {}
getTableList()
}
})
} else {
editMultipleCommission({ commissionExpectedAddDtoList: [obj] }).then(res => {
if (res.code == 200) {
proxy.$message.success('添加成功')
editCommission.value = false
form.value = {}
getTableList()
}
})
}
}
const handleDetele = (row, index) => {
if (row.commissionExpectedBizId) {
proxy.$modal
.confirm('是否确认删除此来佣?')
.then(function () {
return delCommissionExpected(row.commissionExpectedBizId)
})
.then(res => {
if (res.code == 200) {
proxy.$modal.msgSuccess('删除成功')
getTableList()
}
})
.catch(() => {})
} else {
tableList.value.splice(index, 1)
if (total.value > 0) {
total.value = total.value - 1
} else {
total.value = 0
}
proxy.$modal.msgSuccess('删除成功')
}
}
const getTableList = () => {
loading.value = true
try {
getCommissionList(queryParams.value).then(response => {
if (response.code == 200) {
total.value = oldTotal.value = response.data.total
tableList.value = response.data.records
loading.value = false
}
})
} catch (error) {
tableList.value = []
} finally {
loading.value = false
}
}
watch(
() => props.activeName,
newVal => {
if (newVal === 'expectedCommission') {
searchOptions.value['reconciliationCompany'] = dictStore.insureCompanyList
getTableList()
}
}
)
getTableList()
</script>
<style lang="scss" scoped>
.domEmpty {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
height: 100%;
font-size: 16px;
color: #a8abb2;
margin-top: 100px;
}
.topBtn {
width: 100%;
display: flex;
justify-content: space-between;
margin-bottom: 10px;
}
.deleteIcon {
color: red;
font-size: 18px;
padding-top: 10px;
}
.formBox {
width: 100%;
.fatherLable {
font-size: 18px;
border-left: 4px solid #165dff;
padding-left: 5px;
margin-bottom: 5px;
}
.subTitle {
font-size: 15px;
/* padding-left: 8px; */
margin-bottom: 10px;
}
.childLabel {
font-size: 14px;
/* padding-left: 15px; */
margin-bottom: 15px;
}
.fatherDes {
font-size: 14px;
color: #a8abb2;
margin-top: 5px;
margin-bottom: 20px;
}
.inputBox {
width: 100%;
border: 1px solid #dcdfe6;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: space-between;
min-height: 32px;
padding: 0px 11px;
.rightArrow {
font-size: 14px;
color: #a8abb2;
}
}
}
.tabButton {
/* box-shadow: 0 -1px 14px #00000014; */
width: 100%;
display: flex;
align-items: center;
justify-content: center;
padding-top: 20px;
.sumbitBtn {
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
height: 60px;
background-color: #165dff;
color: #fff;
padding: 0 30px;
.buttonIcon {
font-size: 16px;
color: #fff;
}
}
}
.customerBox {
.customerItem {
padding: 10px;
border-radius: 5px;
margin-bottom: 20px;
box-shadow: 0 -1px 14px #00000014;
.top {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
.left {
width: 40%;
display: flex;
align-items: center;
justify-content: flex-start;
.gender {
display: flex;
align-items: center;
}
}
}
.bottom {
.infoItem {
display: flex;
align-items: center;
margin: 5px 0;
}
}
}
.customerItem:last-child {
margin-bottom: 0px;
}
}
/* 新增的样式:防止label换行并显示省略号 */
.formFna :deep(.el-checkbox) {
margin-right: 10px;
}
@media only screen and (min-width: 768px) {
.formInput {
margin-top: 30px !important;
}
}
@media only screen and (min-width: 1200px) {
.formInput {
margin-top: 30px !important;
}
}
</style>
......@@ -567,7 +567,6 @@ watch(
}
}
)
processFormData()
</script>
<style lang="scss" scoped>
.domEmpty {
......
<template>
<div class="app-container">
<!-- <div>
<el-button type="primary" icon="Back" @click="handleBack" style="margin-bottom: 10px"
>返回</el-button
>
</div> -->
<!-- <el-card shadow="never">
<div class="tabsBox">
<el-tabs v-model="activeName" type="card" class="demo-tabs" :before-leave="beforeTabLeave">
<el-tab-pane v-for="tab in tabsList" :key="tab.name" :label="tab.label" :name="tab.name">
<div class="tabPaneBox">
<div v-if="tab.name === 'status'">新单状态</div>
<div v-if="tab.name === 'info'">
<PolicyInfo
:activeName="activeName"
:policyBizId="route.query.policyBizId"
:dictTypeLists="dictTypeLists"
:policyInfo="policyInfo"
/>
</div>
<div v-if="tab.name === 'accessories'">
<FileUpload
:activeName="activeName"
:policyBizId="route.query.policyBizId"
/>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
</el-card> -->
<AppointmentEdit
source="policyList"
:policyId="route.query"
......@@ -45,11 +10,9 @@
</template>
<script setup name="FollowUpDetail">
import AppointmentEdit from '@/views/sign/appointment/appointmentEdit'
import { onUnmounted } from 'vue'
import { getPolicyfollow, getPolicyInfo } from '@/api/sign/underwritingMain'
import useUserStore from '@/store/modules/user'
import useDictStore from '@/store/modules/dict'
import { addFna, getProcessDetail, updateProcess, getCustomerDetail } from '@/api/sign/fna'
import {
listTenantUser,
getInsuranceProductList,
......@@ -57,53 +20,15 @@ import {
getAllCompanys,
getClientUser
} from '@/api/common'
import PolicyInfo from './components/policyInfo'
import FileUpload from './components/fileUpload.vue'
import { Check } from '@element-plus/icons-vue'
import { ref } from 'vue'
const userStore = useUserStore()
const dictStore = useDictStore()
const { proxy } = getCurrentInstance()
const route = useRoute()
const router = useRouter()
const activeName = ref('status')
const showTab = ref(false)
const processInfo = ref({
fnaNo: '--',
status: '未保存',
createTime: proxy.parseTime(new Date()),
customerName: userStore.name
}) // 流程详情信息
const updateStatus = ref(false)
const dictTypeLists = ref([])
const customerInfo = ref({})
const tabsList = ref([
{
label: '新单状态',
name: 'status',
id: 1,
status: '0',
key: 'customerBizId'
},
{
label: '新单信息',
name: 'info',
id: 2,
status: '0',
key: 'fnaFormBizId'
},
{
label: '新单附件',
name: 'accessories',
id: 3,
status: '0',
key: 'policyBizld'
}
])
const policyInfo = ref({}) //新单信息详情
const policyStatusList = ref({}) //新单信息状态
const { csf_fna_status } = proxy.useDict('csf_fna_status')
// 获取各个流程所需要得字典数据
const getDictsData = async () => {
// 获取租户用户列表
......@@ -228,6 +153,9 @@ const getPolicyDetail = () => {
...infoRes.data
}
showTab.value = true
// if (policyInfo.value.nextStatusList && policyInfo.value.nextStatusList.length > 0) {
// }
}
})
.catch(error => {
......@@ -235,130 +163,6 @@ const getPolicyDetail = () => {
console.error('请求失败:', error)
})
}
// 更新流程
const processUpdate = (data, status) => {
updateProcess(data).then(res => {
if (res.code == 200) {
updateStatus.value = false
console.log('更新流程', res)
// 获取流程详情
getProcessInfo(data.fnaBizId, status)
}
})
}
// 获取流程详情
function getProcessInfo(fnaBizId, changeTab) {
getProcessDetail(fnaBizId).then(res => {
if (res.code == 200) {
processInfo.value = res.data
tabsList.value.forEach(item => {
if (res.data[item.key] && item.status) {
item.status = '1'
} else {
item.status = '0'
}
})
csf_fna_status._object.csf_fna_status.forEach(item => {
if (item.value == res.data.status) {
processInfo.value.status = item.label
}
})
if (changeTab) {
activeName.value = changeTab
}
}
})
}
// Tab切换前的验证
const beforeTabLeave = (activeTabName, oldTabName) => {
// if (processInfo.value.customerBizId) {
// getCustomerInfo(processInfo.value.customerBizId)
// }
// // 如果切换到总览,始终允许
// if (activeTabName === 'overview' || activeTabName === 'customer') {
// return true
// }
// // 获取当前要切换到的tab
// const targetTab = tabsList.value.find(tab => tab.name === activeTabName)
// // 如果目标tab不存在,阻止切换
// if (!targetTab) {
// return false
// }
// // 检查前一项状态
// const prevTabIndex = tabsList.value.findIndex(tab => tab.name === activeTabName) - 1
// if (prevTabIndex >= 0) {
// const prevTab = tabsList.value[prevTabIndex]
// // 如果前一项存在且未完成,阻止切换
// if (prevTab.status === '0') {
// proxy.$modal.confirm(`请先填写${prevTab.label}`, { showCancel: '0', title: '填写提示' })
// return false
// }
// }
return true
}
const handleBack = () => {
router.go(-1)
}
// 获取客户详情
function getCustomerInfo(customerBizId) {
getCustomerDetail(customerBizId).then(async res => {
if (res.code == 200) {
customerInfo.value = res.data
}
})
}
const handleSuccess = info => {
switch (info.tab) {
case 'customer':
if (info.type == 'add') {
//客户提交成功,更新流程
processUpdate({ fnaBizId: info.fnaBizId, customerBizId: info.customerBizId }, 'fnaform')
} else {
processUpdate({ fnaBizId: processInfo.value.fnaBizId, customerBizId: info.customerBizId })
}
getCustomerInfo(info.customerBizId)
break
case 'fnaform':
if (info.type == 'add') {
//客户提交成功,更新流程
processUpdate(
{
fnaBizId: processInfo.value.fnaBizId,
customerBizId: info.customerBizId,
fnaFormBizId: info.fnaFormBizId
},
'appointment'
)
} else {
processUpdate({
fnaBizId: processInfo.value.fnaBizId,
customerBizId: info.customerBizId,
fnaFormBizId: info.fnaFormBizId
})
}
break
case 'appointment':
if (info.type == 'add') {
getProcessInfo(processInfo.value.fnaBizId, 'newpolicy')
} else {
}
break
case 'newpolicy':
break
case 'policy':
break
default:
break
}
}
if (route.query.type == 'edit') {
getPolicyDetail()
}
......
......@@ -178,14 +178,9 @@
<template #default="scope">
<el-button text size="primary" @click="handleView(scope.row)"> 查看 </el-button>
<el-button text size="primary" @click="handleStatus(scope.row)"> 跟进 </el-button>
<!-- <el-button
text
size="default"
type="primary"
@click="handleEdit(scope.row)"
>
编辑
</el-button> -->
<el-button text type="warning" @click="handleEditStatus(scope.row)">
修改状态
</el-button>
</template>
</el-table-column>
</el-table>
......@@ -213,6 +208,32 @@
:policy-fortune-list="policyFortuneList"
@close="handleDetailClose"
/>
<el-dialog title="修改新单状态" v-model="editStatus" width="500px" append-to-body>
<div style="height: 10vh">
<el-form>
<el-row>
<el-col :span="12">
<el-form-item label="状态">
<el-select v-model="form.status" placeholder="请选择">
<el-option
v-for="item in currentPolicyRow.nextStatusList"
:label="item.itemLabel"
:value="item.itemValue"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="canelEdit">取 消</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
......@@ -220,19 +241,50 @@
import { ref, reactive, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios'
import { getPolicyFollowList, getExpectedCommissionList } from '@/api/sign/underwritingMain'
import {
getPolicyFollowList,
getExpectedCommissionList,
changePolicyStatus
} from '@/api/sign/underwritingMain'
import { getToken } from '@/utils/auth'
import { listType } from '@/api/system/dict/type'
import date from '@/utils/date'
import PolicyDetailDialog from '@/components/PolicyDetailDialog/index.vue'
import { numberWithCommas } from '@/utils/index.js'
import { getPolicyFortuneList } from '@/api/financial/commission'
const { proxy } = getCurrentInstance()
const router = useRouter()
// 通过dictType=csf_policy_follow_status获取新单状态字典值,获取对象中的dictItemList
const policyFollowStatusList = ref([])
const commissionStatusList = ref([])
const fortuneStatusList = ref([])
const currentPolicyRow = ref({}) //当前保单
const editStatus = ref(false) //新单信息状态
const data = reactive({
form: {}
})
const { form } = toRefs(data)
const canelEdit = () => {
editStatus.value = false
form.value = {}
}
// 修改新单状态
const submitForm = () => {
let obj = {
policyBizId: currentPolicyRow.value.policyBizId,
status: form.value.status
}
changePolicyStatus(obj).then(response => {
if (response.code == 200) {
proxy.$modal.msgSuccess('新单状态修改成功')
editStatus.value = false
form.value = {}
fetchTableData()
}
})
}
const getLists = () => {
listType({
typeList: ['csf_policy_follow_status', 'csf_expected_commission_status', 'csf_fortune_status']
......@@ -608,6 +660,10 @@ const handleStatus = row => {
}
})
}
const handleEditStatus = row => {
currentPolicyRow.value = JSON.parse(JSON.stringify(row))
editStatus.value = true
}
</script>
<style scoped>
......
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