Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yd-csf-front
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yuzhenWang
yd-csf-front
Commits
7623c5ef
Commit
7623c5ef
authored
Nov 07, 2025
by
yuzhenWang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加预计来佣和修改新单跟进状态
parent
0421718f
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
711 additions
and
242 deletions
+711
-242
src/api/sign/underwritingMain.js
+39
-0
src/formJson/commissionList.js
+23
-0
src/views/sign/FnaList/index.vue
+1
-10
src/views/sign/appointment/appointmentEdit.vue
+32
-21
src/views/sign/underwritingMain/components/brokerInfo.vue
+1
-0
src/views/sign/underwritingMain/components/expectedCommission.vue
+545
-0
src/views/sign/underwritingMain/components/policyInfo.vue
+0
-1
src/views/sign/underwritingMain/followUpDetail.vue
+5
-201
src/views/sign/underwritingMain/index.vue
+65
-9
No files found.
src/api/sign/underwritingMain.js
View file @
7623c5ef
...
...
@@ -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
})
}
src/formJson/commissionList.js
0 → 100644
View file @
7623c5ef
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
src/views/sign/FnaList/index.vue
View file @
7623c5ef
...
...
@@ -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'
)
{
...
...
src/views/sign/appointment/appointmentEdit.vue
View file @
7623c5ef
...
...
@@ -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 - 2
30
px)'
return
'calc(100vh - 2
25
px)'
}
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
:
1
0
,
id
:
1
1
,
status
:
'0'
,
key
:
'beneficiaryBizId'
},
{
label
:
'第二持有人'
,
name
:
'secondHolder'
,
id
:
1
1
,
id
:
1
2
,
status
:
'0'
,
key
:
'secondHolderBizId'
},
{
label
:
'健康信息'
,
//后端还没加这个字段
name
:
'questionnaires'
,
id
:
1
2
,
id
:
1
3
,
status
:
'0'
,
key
:
'questionnaireBizId'
},
// {
// label: '关联FNA',
// name: 'fna',
// id: 1
3
,
// id: 1
4
,
// status: '0',
// key: 'fnaBizId'
// },
{
label
:
'转保声明'
,
name
:
'policyTransfer'
,
id
:
1
4
,
id
:
1
5
,
status
:
'0'
,
key
:
'policyTransfer'
},
{
label
:
'预约附件'
,
//大提交的时候不用提交了,因为上传文件的时候已经入库了
name
:
'accessories'
,
id
:
1
5
,
id
:
1
6
,
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
=
{}
...
...
src/views/sign/underwritingMain/components/brokerInfo.vue
View file @
7623c5ef
...
...
@@ -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
...
...
src/views/sign/underwritingMain/components/expectedCommission.vue
0 → 100644
View file @
7623c5ef
<
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
>
src/views/sign/underwritingMain/components/policyInfo.vue
View file @
7623c5ef
...
...
@@ -567,7 +567,6 @@ watch(
}
}
)
processFormData
()
</
script
>
<
style
lang=
"scss"
scoped
>
.domEmpty
{
...
...
src/views/sign/underwritingMain/followUpDetail.vue
View file @
7623c5ef
<
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
()
}
...
...
src/views/sign/underwritingMain/index.vue
View file @
7623c5ef
...
...
@@ -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
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment