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
8857fdea
Commit
8857fdea
authored
Jan 23, 2026
by
Sweet Zhang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新单跟进对接
parent
6b4dbc30
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
305 additions
and
491 deletions
+305
-491
src/api/sign/underwritingMain.js
+1
-1
src/components/SearchForm/SearchForm.vue
+48
-131
src/formJson/appointmentInfo.js
+5
-1
src/utils/dict.js
+1
-0
src/views/sign/appointment/appointmentEdit.vue
+0
-3
src/views/sign/appointment/components/appointmentInfo.vue
+148
-330
src/views/sign/policyReceipts/premiumRecon.vue
+5
-3
src/views/sign/underwritingMain/index.vue
+1
-1
src/views/sign/underwritingMain/policyDetail.vue
+96
-21
No files found.
src/api/sign/underwritingMain.js
View file @
8857fdea
...
@@ -251,7 +251,7 @@ export function batchSaveBrokers(data) {
...
@@ -251,7 +251,7 @@ export function batchSaveBrokers(data) {
// 通过保险公司、险种查询产品列表及参数
// 通过保险公司、险种查询产品列表及参数
export
function
getProductList
(
data
)
{
export
function
getProductList
(
data
)
{
return
request
({
return
request
({
url
:
'/prod
cu
t/api/relProjectProductLaunch/parameter/page'
,
url
:
'/prod
uc
t/api/relProjectProductLaunch/parameter/page'
,
method
:
'post'
,
method
:
'post'
,
data
:
data
data
:
data
})
})
...
...
src/components/SearchForm/SearchForm.vue
View file @
8857fdea
<
template
>
<
template
>
<el-form
<el-form
ref=
"formRef"
:model=
"localModel"
:rules=
"formRules"
label-width=
"auto"
v-bind=
"$attrs"
ref=
"formRef"
:validate-on-rule-change=
"false"
>
:model=
"localModel"
:rules=
"formRules"
label-width=
"auto"
v-bind=
"$attrs"
:validate-on-rule-change=
"false"
>
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<el-col
v-for=
"item in visibleConfig"
:key=
"item.prop"
:span=
"item.span || 6"
>
<el-col
v-for=
"item in visibleConfig"
:key=
"item.prop"
:span=
"item.span || 6"
>
<el-form-item
<el-form-item
:label=
"item.label"
:prop=
"item.prop"
:class=
"
{ 'search-form-item': isSearch }"
:label=
"item.label"
:label-position="item.labelPosition || 'top'">
:prop=
"item.prop"
:class=
"
{ 'search-form-item': isSearch }"
:label-position="item.labelPosition || 'top'"
>
<!-- Input -->
<!-- Input -->
<el-input
<el-input
v-if=
"item.type === 'input'"
v-model=
"localModel[item.prop]"
v-if=
"item.type === 'input'"
:placeholder=
"item.placeholder || `请输入$
{item.label}`" :clearable="true" :disabled="item.disabled"
v-model=
"localModel[item.prop]"
@input="val => handleNumberInput(val, item)" @change="val => handleModelChange(val, item)" />
:placeholder=
"item.placeholder || `请输入$
{item.label}`"
:clearable="true"
:disabled="item.disabled"
@input="val => handleNumberInput(val, item)"
@change="val => handleModelChange(val, item)"
/>
<!-- Select (支持 dictType / api / options) -->
<!-- Select (支持 dictType / api / options) -->
<el-select
<el-select
v-else-if=
"item.type === 'select'"
v-model=
"localModel[item.prop]"
:multiple=
"!!item.multiple"
v-else-if=
"item.type === 'select'"
:placeholder=
"item.placeholder || `请选择$
{item.label}`" :clearable="true" filterable :disabled="item.disabled"
v-model=
"localModel[item.prop]"
:loading="remoteLoading[item.prop] || false" @change="val => handleModelChange(val, item)"
:multiple=
"!!item.multiple"
@focus="() => loadRemoteOptions(item)" @filter-change="keyword => handleFilterChange(keyword, item)">
:placeholder=
"item.placeholder || `请选择$
{item.label}`"
<el-option
v-for=
"opt in getSelectOptions(item)"
:key=
"opt.value"
:label=
"opt.label"
:value=
"opt.value"
/>
:clearable="true"
filterable
:disabled="item.disabled"
:loading="remoteLoading[item.prop] || false"
@change="val => handleModelChange(val, item)"
@focus="() => loadRemoteOptions(item)"
@filter-change="keyword => handleFilterChange(keyword, item)"
>
<el-option
v-for=
"opt in getSelectOptions(item)"
:key=
"opt.value"
:label=
"opt.label"
:value=
"opt.value"
/>
</el-select>
</el-select>
<!-- Date -->
<!-- Date -->
<el-date-picker
<el-date-picker
v-else-if=
"item.type === 'date'"
v-model=
"localModel[item.prop]"
type=
"date"
v-else-if=
"item.type === 'date'"
:placeholder=
"`选择$
{item.label}`" :disabled="item.disabled" :value-format="item.valueFormat || 'YYYY-MM-DD'"
v-model=
"localModel[item.prop]"
style="width: 100%" :disabled-date="getDisabledDateFn(item)"
type=
"date"
@change="val => handleModelChange(val, item)" />
:placeholder=
"`选择$
{item.label}`"
:disabled="item.disabled"
:value-format="item.valueFormat || 'YYYY-MM-DD'"
style="width: 100%"
:disabled-date="getDisabledDateFn(item)"
@change="val => handleModelChange(val, item)"
/>
<!-- Month -->
<!-- Month -->
<el-date-picker
<el-date-picker
v-else-if=
"item.type === 'month'"
v-model=
"localModel[item.prop]"
type=
"month"
v-else-if=
"item.type === 'month'"
:placeholder=
"`选择$
{item.label}`" :value-format="item.valueFormat || 'YYYY-MM'" style="width: 100%"
v-model=
"localModel[item.prop]"
:disabled="item.disabled" :disabled-date="getDisabledDateFn(item)"
type=
"month"
@change="val => handleModelChange(val, item)" />
:placeholder=
"`选择$
{item.label}`"
:value-format="item.valueFormat || 'YYYY-MM'"
style="width: 100%"
:disabled="item.disabled"
:disabled-date="getDisabledDateFn(item)"
@change="val => handleModelChange(val, item)"
/>
<!-- Daterange -->
<!-- Daterange -->
<el-date-picker
<el-date-picker
v-else-if=
"item.type === 'daterange'"
v-model=
"localModel[item.prop]"
type=
"daterange"
v-else-if=
"item.type === 'daterange'"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
v-model=
"localModel[item.prop]"
:value-format=
"item.valueFormat || 'YYYY-MM-DD'"
:disabled=
"item.disabled"
type=
"daterange"
:disabled-date=
"getDisabledDateFn(item)"
style=
"width: 100%"
range-separator=
"至"
@
change=
"val => handleModelChange(val, item)"
/>
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:value-format=
"item.valueFormat || 'YYYY-MM-DD'"
:disabled=
"item.disabled"
:disabled-date=
"getDisabledDateFn(item)"
style=
"width: 100%"
@
change=
"val => handleModelChange(val, item)"
/>
<!-- Checkbox Group -->
<!-- Checkbox Group -->
<el-checkbox-group
<el-checkbox-group
v-else-if=
"item.type === 'checkbox-group'"
v-model=
"localModel[item.prop]"
v-else-if=
"item.type === 'checkbox-group'"
:disabled=
"item.disabled"
@
change=
"val => handleModelChange(val, item)"
>
v-model=
"localModel[item.prop]"
:disabled=
"item.disabled"
@
change=
"val => handleModelChange(val, item)"
>
<el-checkbox
v-for=
"opt in getSelectOptions(item)"
:key=
"opt.value"
:label=
"opt.value"
>
<el-checkbox
v-for=
"opt in getSelectOptions(item)"
:key=
"opt.value"
:label=
"opt.value"
>
{{
opt
.
label
}}
{{
opt
.
label
}}
</el-checkbox>
</el-checkbox>
</el-checkbox-group>
</el-checkbox-group>
<!-- textarea -->
<!-- textarea -->
<el-input
<el-input
v-else-if=
"item.type === 'textarea'"
v-model=
"localModel[item.prop]"
style=
"width: 240px"
autosize
v-else-if=
"item.type === 'textarea'"
:disabled=
"item.disabled"
type=
"textarea"
placeholder=
"请输入"
:clearable=
"true"
v-model=
"localModel[item.prop]"
@
change=
"val => handleModelChange(val, item)"
/>
style=
"width: 240px"
autosize
:disabled=
"item.disabled"
type=
"textarea"
placeholder=
"请输入"
:clearable=
"true"
@
change=
"val => handleModelChange(val, item)"
/>
<!-- Upload 回显值得时候数据格式至少是[
{url: '必须要传', name: 'name不是必须的根据需要传值'}]-->
<!-- Upload 回显值得时候数据格式至少是[
{url: '必须要传', name: 'name不是必须的根据需要传值'}]-->
<el-upload
<el-upload
v-else-if=
"item.type === 'upload'"
v-model:file-list=
"localModel[item.prop]"
:action=
"item.action"
v-else-if=
"item.type === 'upload'"
:headers=
"item.headers"
:multiple=
"!!item.multiple"
:limit=
"item.limit || (item.multiple ? 999 : 1)"
v-model:file-list=
"localModel[item.prop]"
:accept=
"item.accept"
:list-type=
"item.listType || 'text'"
:disabled=
"item.disabled"
:auto-upload=
"true"
:action=
"item.action"
:show-file-list=
"item.showFileList"
:on-exceed=
"handleExceed"
:headers=
"item.headers"
:multiple=
"!!item.multiple"
:limit=
"item.limit || (item.multiple ? 999 : 1)"
:accept=
"item.accept"
:list-type=
"item.listType || 'text'"
:disabled=
"item.disabled"
:auto-upload=
"true"
:show-file-list=
"item.showFileList"
:on-exceed=
"handleExceed"
:before-upload=
"file => beforeUpload(file, item)"
:before-upload=
"file => beforeUpload(file, item)"
:on-success=
"(res, file, fileList) => handleUploadSuccess(res, file, fileList, item)"
:on-success=
"(res, file, fileList) => handleUploadSuccess(res, file, fileList, item)"
:on-error=
"(err, file, fileList) => handleUploadError(err, file, fileList, item)"
:on-error=
"(err, file, fileList) => handleUploadError(err, file, fileList, item)"
:on-remove=
"(file, fileList) => handleUploadRemove(file, fileList, item)"
:on-remove=
"(file, fileList) => handleUploadRemove(file, fileList, item)"
>
>
<el-icon
class=
"iconStyle"
:size=
"20"
v-if=
"item.uploadType === 'image'"
>
<el-icon
class=
"iconStyle"
:size=
"20"
v-if=
"item.uploadType === 'image'"
<Upload
/>
><Upload
</el-icon>
/></el-icon>
<el-button
v-else
size=
"small"
type=
"primary"
:link=
"item.link"
:disabled=
"item.disabled"
>
<el-button
v-else
size=
"small"
type=
"primary"
:link=
"item.link"
:disabled=
"item.disabled"
>
{{
'点击上传文件'
}}
{{
'点击上传文件'
}}
</el-button>
</el-button>
<template
#
tip
v-if=
"item.maxSize || item.accept"
>
<template
#
tip
v-if=
"item.maxSize || item.accept"
>
...
@@ -364,6 +284,7 @@ watch(
...
@@ -364,6 +284,7 @@ watch(
// ✅ 在这里同步 modelValue(包括 extra 字段)
// ✅ 在这里同步 modelValue(包括 extra 字段)
localModel
.
value
=
syncModelFromProps
(
props
.
modelValue
,
internalConfig
.
value
)
localModel
.
value
=
syncModelFromProps
(
props
.
modelValue
,
internalConfig
.
value
)
console
.
log
(
'子组件监测config变化'
,
localModel
.
value
)
},
},
{
immediate
:
true
}
{
immediate
:
true
}
)
)
...
@@ -376,6 +297,7 @@ watch(
...
@@ -376,6 +297,7 @@ watch(
if
(
!
newVal
||
!
internalConfig
.
value
)
return
if
(
!
newVal
||
!
internalConfig
.
value
)
return
// ✅ 同样使用 sync 函数
// ✅ 同样使用 sync 函数
localModel
.
value
=
syncModelFromProps
(
newVal
,
internalConfig
.
value
)
localModel
.
value
=
syncModelFromProps
(
newVal
,
internalConfig
.
value
)
console
.
log
(
'子组件监测 modelValue 变化:'
,
localModel
.
value
)
},
},
{
deep
:
true
}
{
deep
:
true
}
)
)
...
@@ -464,7 +386,7 @@ function syncModelFromProps(newModelValue, newConfig) {
...
@@ -464,7 +386,7 @@ function syncModelFromProps(newModelValue, newConfig) {
synced
[
key
]
=
newModelValue
[
key
]
synced
[
key
]
=
newModelValue
[
key
]
}
}
}
}
// console.log('🚀 子组件 props.modelValue 同步后
:', synced)
console
.
log
(
'🚀 子组件 进行modelvalue处理
:'
,
synced
)
return
synced
return
synced
}
}
function
getNestedValue
(
obj
,
path
)
{
function
getNestedValue
(
obj
,
path
)
{
...
@@ -481,10 +403,7 @@ function markDictLoaded(prop) {
...
@@ -481,10 +403,7 @@ function markDictLoaded(prop) {
// 2. 用户操作导致 localModel 变化时,emit(防抖可选)
// 2. 用户操作导致 localModel 变化时,emit(防抖可选)
function
handleModelChange
(
value
,
item
)
{
function
handleModelChange
(
value
,
item
)
{
console
.
group
(
'🔄 handleModelChange'
)
console
.
group
(
'用户操作导致 localModel 变化时,emit(防抖可选)'
)
// console.log('输入 value:', value)
// console.log('item:', item)
// console.log('当前 localModel:', localModel.value)
const
newModel
=
{
...
localModel
.
value
,
[
item
.
prop
]:
value
}
const
newModel
=
{
...
localModel
.
value
,
[
item
.
prop
]:
value
}
...
@@ -501,22 +420,18 @@ function handleModelChange(value, item) {
...
@@ -501,22 +420,18 @@ function handleModelChange(value, item) {
}
}
}
}
}
}
// console.log('🆕 newModel:', newModel)
// console.log('📦 props.modelValue:', props.modelValue)
// console.log('isEqualShallow?', isEqualShallow(props.modelValue, newModel))
localModel
.
value
=
newModel
localModel
.
value
=
newModel
console
.
log
(
'子组件用户操作后,modelvalue值=='
,
newModel
)
nextTick
(()
=>
{
nextTick
(()
=>
{
if
(
!
isEqualShallow
(
props
.
modelValue
,
newModel
))
{
if
(
!
isEqualShallow
(
props
.
modelValue
,
newModel
))
{
// console.log('📤 emit update:modelValue:
', newModel)
console
.
log
(
'如果新旧值不一样,反馈给父组件
'
,
newModel
)
emit
(
'update:modelValue'
,
newModel
)
emit
(
'update:modelValue'
,
newModel
)
}
else
{
}
else
{
console
.
log
(
'🚫 跳过 emit:认为相等'
)
console
.
log
(
'🚫 跳过 emit:认为相等'
)
}
}
})
})
if
(
item
.
type
===
'select'
)
{
if
(
item
.
type
===
'select'
)
{
console
.
log
(
'如果是select类型,反馈给父组件'
,
item
.
prop
,
value
,
item
)
emit
(
'selectChange'
,
item
.
prop
,
value
,
item
)
emit
(
'selectChange'
,
item
.
prop
,
value
,
item
)
}
else
if
(
item
.
type
==
'upload'
)
{
}
else
if
(
item
.
type
==
'upload'
)
{
// 传给父组件最新的上传值newModel
// 传给父组件最新的上传值newModel
...
@@ -821,9 +736,11 @@ defineExpose({
...
@@ -821,9 +736,11 @@ defineExpose({
.formBox
{
.formBox
{
box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
}
.search-form-item
{
.search-form-item
{
margin-bottom
:
20px
;
margin-bottom
:
20px
;
}
}
.iconStyle
{
.iconStyle
{
color
:
#409eff
;
color
:
#409eff
;
}
}
...
...
src/formJson/appointmentInfo.js
View file @
8857fdea
...
@@ -24,7 +24,11 @@ const appointmentInfo = [
...
@@ -24,7 +24,11 @@ const appointmentInfo = [
{
{
label
:
'签单日'
,
label
:
'签单日'
,
key
:
'signDate'
,
key
:
'signDate'
,
domType
:
'DatePicker'
,
domType
:
'datetimePicker'
,
dateValue
:
''
,
//YYYY-MM-DD
timeValue
:
''
,
//HH:mm
compositionTime
:
true
,
//是否组合时间
finishTime
:
''
,
required
:
true
,
required
:
true
,
disabled
:
false
,
disabled
:
false
,
placeholder
:
'请选择'
,
placeholder
:
'请选择'
,
...
...
src/utils/dict.js
View file @
8857fdea
...
@@ -32,6 +32,7 @@ export function useDict(...args) {
...
@@ -32,6 +32,7 @@ export function useDict(...args) {
*/
*/
export
function
useDictLists
(
typeLists
)
{
export
function
useDictLists
(
typeLists
)
{
let
params
=
{
typeList
:
typeLists
}
let
params
=
{
typeList
:
typeLists
}
console
.
log
(
params
)
let
dictArray
=
[]
let
dictArray
=
[]
return
(()
=>
{
return
(()
=>
{
getMoreDicts
(
params
).
then
(
resp
=>
{
getMoreDicts
(
params
).
then
(
resp
=>
{
...
...
src/views/sign/appointment/appointmentEdit.vue
View file @
8857fdea
...
@@ -914,9 +914,6 @@ const handleSubmit = async type => {
...
@@ -914,9 +914,6 @@ const handleSubmit = async type => {
if
(
appointmentInfoRef
.
value
)
{
if
(
appointmentInfoRef
.
value
)
{
const
result
=
await
appointmentInfoRef
.
value
[
0
].
handleFormValues
()
const
result
=
await
appointmentInfoRef
.
value
[
0
].
handleFormValues
()
submitAppointmentObj
.
value
.
apiAppointmentInfoDto
=
result
submitAppointmentObj
.
value
.
apiAppointmentInfoDto
=
result
console
.
log
(
'===================================='
)
console
.
log
(
'预约'
,
result
)
console
.
log
(
'===================================='
)
if
(
!
submitAppointmentObj
.
value
.
apiAppointmentInfoDto
)
return
if
(
!
submitAppointmentObj
.
value
.
apiAppointmentInfoDto
)
return
}
}
if
(
productPlanRef
.
value
)
{
if
(
productPlanRef
.
value
)
{
...
...
src/views/sign/appointment/components/appointmentInfo.vue
View file @
8857fdea
...
@@ -5,15 +5,8 @@
...
@@ -5,15 +5,8 @@
<div
style=
"position: relative; top: -100%; left: -1100%"
>
<div
style=
"position: relative; top: -100%; left: -1100%"
>
{{
appointmentRef
}}
{{
appointmentRef
}}
</div>
</div>
<CommonForm
<CommonForm
:anchorList=
"anchorList"
:affixOffset=
"affixOffset"
:anchorOffset=
"10"
:anchorList=
"anchorList"
:scrollContainerSelector=
"anchorContainer"
:domIndex=
"tabIndex"
:activeName=
"activeName"
v-if=
"appointmentRef"
>
:affixOffset=
"affixOffset"
:anchorOffset=
"10"
:scrollContainerSelector=
"anchorContainer"
:domIndex=
"tabIndex"
:activeName=
"activeName"
v-if=
"appointmentRef"
>
<template
#
form-right
>
<template
#
form-right
>
<el-form
ref=
"appointmentInfoFormRef"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<el-form
ref=
"appointmentInfoFormRef"
:model=
"form"
:rules=
"rules"
label-width=
"120px"
>
<div
v-for=
"father in processedAppointmentData"
>
<div
v-for=
"father in processedAppointmentData"
>
...
@@ -22,156 +15,71 @@
...
@@ -22,156 +15,71 @@
<CardOne
:title=
"father.fatherTitle"
>
<CardOne
:title=
"father.fatherTitle"
>
<template
#
mainTitCustom
v-if=
"props.idsObj.appointmentBizId"
>
<template
#
mainTitCustom
v-if=
"props.idsObj.appointmentBizId"
>
<div
style=
"margin-left: 10px"
>
<div
style=
"margin-left: 10px"
>
<el-button
<el-button
@
click=
"viewHistory"
type=
"primary"
link
@
click=
"viewHistory"
v-if=
"father.key == 'administration'"
>
历史记录
</el-button>
type=
"primary"
link
v-if=
"father.key == 'administration'"
>
历史记录
</el-button
>
</div>
</div>
</
template
>
</
template
>
<
template
#
headerRight
v-if=
"father.key == 'administration'"
>
<
template
#
headerRight
v-if=
"father.key == 'administration'"
>
<div>
<div>
<el-button
<el-button
v-if=
"idsObj.appointmentBizId"
@
click=
"handleExprot"
type=
"primary"
v-if=
"idsObj.appointmentBizId"
link
>
导出预约表
</el-button>
@
click=
"handleExprot"
<el-button
v-if=
"appointmentStatus >= 2"
@
click=
"getItineraryInfo"
type=
"primary"
type=
"primary"
link
>
行程单预览
</el-button>
link
>
导出预约表
</el-button
>
<el-button
v-if=
"appointmentStatus >= 2"
@
click=
"getItineraryInfo"
type=
"primary"
link
>
行程单预览
</el-button
>
</div>
</div>
</
template
>
</
template
>
<
template
#
content
>
<
template
#
content
>
<!-- 不是表格 -->
<!-- 不是表格 -->
<el-row
:gutter=
"20"
v-if=
"!father.showTable"
>
<el-row
:gutter=
"20"
v-if=
"!father.showTable"
>
<template
v-for=
"child in father.data"
:key=
"child.key"
>
<template
v-for=
"child in father.data"
:key=
"child.key"
>
<el-col
<el-col
:sm=
"child.sm"
:lg=
"child.lg"
class=
"formItemBox"
v-if=
"child.show"
>
:sm=
"child.sm"
:lg=
"child.lg"
class=
"formItemBox"
v-if=
"child.show"
>
<div>
<div>
<el-form-item
<el-form-item
:label-width=
"child.labelWidth"
:label=
"child.label"
:prop=
"child.key"
:label-width=
"child.labelWidth"
:key=
"child.key"
:label-position=
"child.labelPosition"
class=
"button-form-item"
>
:label=
"child.label"
<el-input
v-if=
"child.domType === 'Input'"
:type=
"child.inputType"
:prop=
"child.key"
v-model=
"form[child.key]"
:placeholder=
"child.placeholder"
maxlength=
"30"
:key=
"child.key"
:rows=
"child.rows"
:disabled=
"editStatus"
/>
:label-position=
"child.labelPosition"
<el-select
v-if=
"child.domType === 'Select'"
v-model=
"form[child.key]"
class=
"button-form-item"
:placeholder=
"child.placeholder"
@
change=
"handleSelectChange(father, child)"
>
:disabled=
"editStatus"
>
<el-input
<el-option
v-for=
"item in child.options"
:key=
"item.value"
:label=
"item.label"
v-if=
"child.domType === 'Input'"
:value=
"item.value"
/>
:type=
"child.inputType"
v-model=
"form[child.key]"
:placeholder=
"child.placeholder"
maxlength=
"30"
:rows=
"child.rows"
:disabled=
"editStatus"
/>
<el-select
v-if=
"child.domType === 'Select'"
v-model=
"form[child.key]"
:placeholder=
"child.placeholder"
@
change=
"handleSelectChange(father, child)"
:disabled=
"editStatus"
>
<el-option
v-for=
"item in child.options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-select>
<!-- 带时分的时间框 -->
<!-- 带时分的时间框 -->
<div
<div
v-if=
"child.domType === 'datetimePicker'"
class=
"compositionDateTime"
>
v-if=
"child.domType === 'datetimePicker'"
<el-date-picker
type=
"date"
placeholder=
"选择日期"
style=
"width: 100%"
class=
"compositionDateTime"
v-model=
"form[child.key]"
:disabled=
"editStatus"
@
change=
"handleDateChange(child)"
>
:disabled-date=
"time => disabledDate(time, child)"
format=
"YYYY-MM-DD"
<el-date-picker
value-format=
"YYYY-MM-DD"
@
clear=
"handleDateClear(child)"
/>
type=
"date"
placeholder=
"选择日期"
style=
"width: 100%"
v-model=
"form[child.key]"
:disabled=
"editStatus"
@
change=
"handleDateChange(child)"
:disabled-date=
"time => disabledDate(time, child)"
format=
"YYYY-MM-DD"
value-format=
"YYYY-MM-DD"
@
clear=
"handleDateClear(child)"
/>
<span
class=
"text-gray-500"
>
-
</span>
<span
class=
"text-gray-500"
>
-
</span>
<el-time-picker
<el-time-picker
placeholder=
"选择时分"
style=
"width: 100%"
v-model=
"child.timeValue"
placeholder=
"选择时分"
:disabled=
"editStatus"
format=
"HH:mm"
value-format=
"HH:mm"
style=
"width: 100%"
@
change=
"timeValueChange(child)"
/>
v-model=
"child.timeValue"
:disabled=
"editStatus"
format=
"HH:mm"
value-format=
"HH:mm"
@
change=
"timeValueChange(child)"
/>
</div>
</div>
<!-- 不带时分 -->
<!-- 不带时分 -->
<el-date-picker
<el-date-picker
style=
"width: 100%"
v-if=
"child.domType === 'DatePicker'"
style=
"width: 100%"
v-model=
"form[child.key]"
type=
"date"
format=
"YYYY-MM-DD"
value-format=
"YYYY-MM-DD"
v-if=
"child.domType === 'DatePicker'"
:placeholder=
"child.placeholder"
:disabled=
"editStatus"
v-model=
"form[child.key]"
:disabled-date=
"time => disabledDate(time, child)"
@
change=
"handleDateChange(child)"
type=
"date"
@
clear=
"handleDateClear(child)"
/>
format=
"YYYY-MM-DD"
<el-input
v-if=
"child.domType === 'arrowRight'"
v-model=
"form[child.key]"
value-format=
"YYYY-MM-DD"
:placeholder=
"child.placeholder"
:suffix-icon=
"ArrowRight"
readonly
:placeholder=
"child.placeholder"
:disabled=
"editStatus"
@
focus=
"handleFoucs(child)"
>
:disabled=
"editStatus"
:disabled-date=
"time => disabledDate(time, child)"
@
change=
"handleDateChange(child)"
@
clear=
"handleDateClear(child)"
/>
<el-input
v-if=
"child.domType === 'arrowRight'"
v-model=
"form[child.key]"
:placeholder=
"child.placeholder"
:suffix-icon=
"ArrowRight"
readonly
:disabled=
"editStatus"
@
focus=
"handleFoucs(child)"
>
</el-input>
</el-input>
<el-select
<el-select
v-model=
"form[child.key]"
v-if=
"child.domType === 'SearchSelect'"
filterable
v-model=
"form[child.key]"
:allow-create=
"child.allowCreate"
reserve-keyword
v-if=
"child.domType === 'SearchSelect'"
filterable
:allow-create=
"child.allowCreate"
reserve-keyword
@
change=
"handleSelectChange(father, child)"
@
change=
"handleSelectChange(father, child)"
:remote-method=
"query => searchSelectList(query, child.key)"
:remote-method=
"query => searchSelectList(query, child.key)"
placeholder=
"请输入关键词搜索"
placeholder=
"请输入关键词搜索"
:loading=
"searchLoadingStates[child.key]"
:disabled=
"editStatus"
>
:loading=
"searchLoadingStates[child.key]"
<el-option
v-for=
"item in searchOptions[child.key] || []"
:key=
"item.id"
:disabled=
"editStatus"
:label=
"item.label"
:value=
"item.value"
/>
>
<el-option
v-for=
"item in searchOptions[child.key] || []"
:key=
"item.id"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<div
v-if=
"child.domType === 'Div'"
class=
"divClass"
>
<div
v-if=
"child.domType === 'Div'"
class=
"divClass"
>
<div
v-if=
"child.key == 'information'"
class=
"desBox"
>
<div
v-if=
"child.key == 'information'"
class=
"desBox"
>
<div
class=
"title"
>
{{
child
.
title
}}
:
</div>
<div
class=
"title"
>
{{
child
.
title
}}
:
</div>
<div
class=
"informationBox"
>
<div
class=
"informationBox"
>
<div
<div
v-for=
"(item, index) in child.informationList"
:key=
"index"
>
v-for=
"(item, index) in child.informationList"
:key=
"index"
>
{{
item
.
name
}}
{{
item
.
name
}}
</div>
</div>
</div>
</div>
...
@@ -184,15 +92,9 @@
...
@@ -184,15 +92,9 @@
<!-- 是表格数据 -->
<!-- 是表格数据 -->
<el-row
v-if=
"father.showTable"
>
<el-row
v-if=
"father.showTable"
>
<el-col
:span=
"24"
v-if=
"father.addChildren"
>
<el-col
:span=
"24"
v-if=
"father.addChildren"
>
<el-button
<el-button
:disabled=
"editStatus"
type=
"primary"
icon=
"Plus"
size=
"small"
:disabled=
"editStatus"
style=
"margin-bottom: 10px"
@
click=
"addChildren(father)"
>
{{ father.addChildrenTxt
type=
"primary"
}}
</el-button>
icon=
"Plus"
size=
"small"
style=
"margin-bottom: 10px"
@
click=
"addChildren(father)"
>
{{ father.addChildrenTxt }}
</el-button
>
</el-col>
</el-col>
<el-table
:data=
"father.data"
border
v-if=
"father.data.length > 0"
>
<el-table
:data=
"father.data"
border
v-if=
"father.data.length > 0"
>
<
template
v-if=
"father.key == 'referrerDtoList'"
>
<
template
v-if=
"father.key == 'referrerDtoList'"
>
...
@@ -201,23 +103,12 @@
...
@@ -201,23 +103,12 @@
<span
class=
"required-label"
>
姓名
</span>
<span
class=
"required-label"
>
姓名
</span>
</
template
>
</
template
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-select
<el-select
v-model=
"scope.row.realName"
filterable
remote
reserve-keyword
v-model=
"scope.row.realName"
placeholder=
"请输入关键词搜索"
:remote-method=
"query => searchSelectList(query, 'realName')"
filterable
:loading=
"searchLoadingStates['realName']"
:disabled=
"editStatus"
remote
@
change=
"handleTableSelectChange(father, scope.row, 'realName')"
>
reserve-keyword
<el-option
v-for=
"item in searchOptions['realName'] || []"
:key=
"item.id"
placeholder=
"请输入关键词搜索"
:label=
"item.label"
:value=
"item.value"
/>
:remote-method=
"query => searchSelectList(query, 'realName')"
:loading=
"searchLoadingStates['realName']"
:disabled=
"editStatus"
@
change=
"handleTableSelectChange(father, scope.row, 'realName')"
>
<el-option
v-for=
"item in searchOptions['realName'] || []"
:key=
"item.id"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-select>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
...
@@ -226,12 +117,8 @@
...
@@ -226,12 +117,8 @@
<span
class=
"required-label"
>
手机号
</span>
<span
class=
"required-label"
>
手机号
</span>
</
template
>
</
template
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
<el-input
v-model=
"scope.row.phone"
size=
"default"
placeholder=
"请输入"
v-model=
"scope.row.phone"
:disabled=
"editStatus"
/>
size=
"default"
placeholder=
"请输入"
:disabled=
"editStatus"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"邮箱"
prop=
"email"
align=
"center"
>
<el-table-column
label=
"邮箱"
prop=
"email"
align=
"center"
>
...
@@ -239,21 +126,15 @@
...
@@ -239,21 +126,15 @@
<span
class=
"required-label"
>
邮箱
</span>
<span
class=
"required-label"
>
邮箱
</span>
</
template
>
</
template
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
<el-input
v-model=
"scope.row.email"
size=
"default"
placeholder=
"请输入"
v-model=
"scope.row.email"
:disabled=
"editStatus"
/>
size=
"default"
placeholder=
"请输入"
:disabled=
"editStatus"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
width=
"60px"
align=
"center"
label=
"操作"
>
<el-table-column
width=
"60px"
align=
"center"
label=
"操作"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-icon
<el-icon
class=
"deleteIcon"
@
click=
"deleteChildren(father, scope.$index)"
>
class=
"deleteIcon"
<Delete
/>
@
click=
"deleteChildren(father, scope.$index)"
</el-icon>
><Delete
/></el-icon>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</template>
</template>
...
@@ -263,23 +144,12 @@
...
@@ -263,23 +144,12 @@
<span
class=
"required-label"
>
姓名
</span>
<span
class=
"required-label"
>
姓名
</span>
</
template
>
</
template
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-select
<el-select
v-model=
"scope.row.name"
filterable
remote
reserve-keyword
placeholder=
"请选择"
v-model=
"scope.row.name"
filterable
remote
reserve-keyword
placeholder=
"请选择"
:remote-method=
"query => searchSelectList(query, 'name')"
:remote-method=
"query => searchSelectList(query, 'name')"
:loading=
"searchLoadingStates['name']"
:loading=
"searchLoadingStates['name']"
:disabled=
"editStatus"
:disabled=
"editStatus"
@
change=
"handleTableSelectChange(father, scope.row, 'name')"
>
@
change=
"handleTableSelectChange(father, scope.row, 'name')"
<el-option
v-for=
"item in searchOptions['name'] || []"
:key=
"item.id"
>
:label=
"item.label"
:value=
"item.value"
/>
<el-option
v-for=
"item in searchOptions['name'] || []"
:key=
"item.id"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-select>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
...
@@ -288,12 +158,8 @@
...
@@ -288,12 +158,8 @@
<span
class=
"required-label"
>
手机号
</span>
<span
class=
"required-label"
>
手机号
</span>
</
template
>
</
template
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
<el-input
v-model=
"scope.row.phone"
size=
"default"
placeholder=
"请输入"
v-model=
"scope.row.phone"
:disabled=
"editStatus"
/>
size=
"default"
placeholder=
"请输入"
:disabled=
"editStatus"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"执业编码"
prop=
"practiceCode"
align=
"center"
>
<el-table-column
label=
"执业编码"
prop=
"practiceCode"
align=
"center"
>
...
@@ -301,59 +167,37 @@
...
@@ -301,59 +167,37 @@
<span
class=
"required-label"
>
执业编码
</span>
<span
class=
"required-label"
>
执业编码
</span>
</
template
>
</
template
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
<el-input
v-model=
"scope.row.practiceCode"
size=
"default"
placeholder=
"请输入"
v-model=
"scope.row.practiceCode"
:disabled=
"editStatus"
/>
size=
"default"
placeholder=
"请输入"
:disabled=
"editStatus"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"邮箱"
prop=
"email"
align=
"center"
>
<el-table-column
label=
"邮箱"
prop=
"email"
align=
"center"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
<el-input
v-model=
"scope.row.email"
size=
"default"
placeholder=
"请输入"
v-model=
"scope.row.email"
:disabled=
"editStatus"
/>
size=
"default"
placeholder=
"请输入"
:disabled=
"editStatus"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"证件类型"
prop=
"cardType"
align=
"center"
>
<el-table-column
label=
"证件类型"
prop=
"cardType"
align=
"center"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-select
<el-select
v-model=
"scope.row.cardType"
placeholder=
"请选择"
:disabled=
"editStatus"
v-model=
"scope.row.cardType"
clearable
>
placeholder=
"请选择"
<el-option
v-for=
"item in fetchDictData('csf_id_type')"
:key=
"item.value"
:disabled=
"editStatus"
:label=
"item.label"
:value=
"item.value"
/>
clearable
>
<el-option
v-for=
"item in fetchDictData('csf_id_type')"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-select>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"证件号"
prop=
"cardNo"
align=
"center"
>
<el-table-column
label=
"证件号"
prop=
"cardNo"
align=
"center"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
<el-input
v-model=
"scope.row.cardNo"
size=
"default"
placeholder=
"请输入"
v-model=
"scope.row.cardNo"
:disabled=
"editStatus"
/>
size=
"default"
placeholder=
"请输入"
:disabled=
"editStatus"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
width=
"60px"
align=
"center"
label=
"操作"
>
<el-table-column
width=
"60px"
align=
"center"
label=
"操作"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-icon
<el-icon
@
click=
"deleteChildren(father, scope.$index)"
class=
"deleteIcon"
>
@
click=
"deleteChildren(father, scope.$index)"
<Delete
/>
class=
"deleteIcon"
</el-icon>
><Delete
/></el-icon>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</template>
</template>
...
@@ -369,26 +213,12 @@
...
@@ -369,26 +213,12 @@
</CommonForm>
</CommonForm>
</div>
</div>
<!-- 历史签约记录 -->
<!-- 历史签约记录 -->
<CommonDialog
<CommonDialog
dialogTitle=
"历史记录"
:showConfirm=
"false"
cancleText=
"关闭"
dialogWidth=
"70%"
:openDialog=
"openList"
dialogTitle=
"历史记录"
:showClose=
"true"
@
close=
"openList = false"
>
:showConfirm=
"false"
cancleText=
"关闭"
dialogWidth=
"70%"
:openDialog=
"openList"
:showClose=
"true"
@
close=
"openList = false"
>
<div
class=
"dialogBox"
>
<div
class=
"dialogBox"
>
<CommonPage
<CommonPage
:showSearchForm=
"false"
:show-pagination=
"true"
:currentPage=
"queryParams.pageNo"
:total=
"total"
:showSearchForm=
"false"
:pageSize=
"queryParams.pageSize"
@
current-change=
"changePageNo"
@
size-change=
"changePageSize"
:show-pagination=
"true"
:showOperationBtn=
"false"
>
:currentPage=
"queryParams.pageNo"
:total=
"total"
:pageSize=
"queryParams.pageSize"
@
current-change=
"changePageNo"
@
size-change=
"changePageSize"
:showOperationBtn=
"false"
>
<
template
#
table
>
<
template
#
table
>
<el-table
v-loading=
"tableLoading"
:data=
"tableData"
border
height=
"350px"
>
<el-table
v-loading=
"tableLoading"
:data=
"tableData"
border
height=
"350px"
>
<el-table-column
label=
"创建人"
align=
"center"
prop=
"creatorName"
/>
<el-table-column
label=
"创建人"
align=
"center"
prop=
"creatorName"
/>
...
@@ -400,13 +230,8 @@
...
@@ -400,13 +230,8 @@
}}
</span>
}}
</span>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
label=
"操作"
align=
"center"
width=
"100"
class-name=
"small-padding fixed-width"
label=
"操作"
fixed=
"right"
>
align=
"center"
width=
"100"
class-name=
"small-padding fixed-width"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"primary"
@
click=
"viewDetail(scope.row)"
>
查看
</el-button>
<el-button
link
type=
"primary"
@
click=
"viewDetail(scope.row)"
>
查看
</el-button>
</
template
>
</
template
>
...
@@ -417,15 +242,8 @@
...
@@ -417,15 +242,8 @@
</div>
</div>
</CommonDialog>
</CommonDialog>
<!-- 签约详情 -->
<!-- 签约详情 -->
<CommonDialog
<CommonDialog
:dialogTitle=
"detailTitle"
:showConfirm=
"false"
cancleText=
"关闭"
dialogWidth=
"70%"
:dialogTitle=
"detailTitle"
:openDialog=
"showDetail"
:showClose=
"true"
@
close=
"showDetail = false"
>
:showConfirm=
"false"
cancleText=
"关闭"
dialogWidth=
"70%"
:openDialog=
"showDetail"
:showClose=
"true"
@
close=
"showDetail = false"
>
<el-scrollbar
max-height=
"600px"
>
<el-scrollbar
max-height=
"600px"
>
<div
class=
"dialogBox"
>
<div
class=
"dialogBox"
>
<AppointmentDetail
:detailInfo=
"detailInfo"
:editSatus=
"true"
></AppointmentDetail>
<AppointmentDetail
:detailInfo=
"detailInfo"
:editSatus=
"true"
></AppointmentDetail>
...
@@ -433,52 +251,22 @@
...
@@ -433,52 +251,22 @@
</el-scrollbar>
</el-scrollbar>
</CommonDialog>
</CommonDialog>
<!-- 行程单详情 -->
<!-- 行程单详情 -->
<CommonDialog
<CommonDialog
dialogTitle=
"香港行程安排"
confirmText=
"下载行程单"
dialogWidth=
"70%"
:openDialog=
"showItinerary"
dialogTitle=
"香港行程安排"
@
confirm=
"handleExprotPdf"
@
close=
"showItinerary = false"
:showClose=
"true"
:showCancle=
"false"
confirmText=
"下载行程单"
:confirmLoading=
"exportLoading"
>
dialogWidth=
"70%"
:openDialog=
"showItinerary"
@
confirm=
"handleExprotPdf"
@
close=
"showItinerary = false"
:showClose=
"true"
:showCancle=
"false"
:confirmLoading=
"exportLoading"
>
<div
class=
"itineraryDialogBox"
>
<div
class=
"itineraryDialogBox"
>
<div
class=
"dialogItem"
v-for=
"item in itineraryData"
>
<div
class=
"dialogItem"
v-for=
"item in itineraryData"
>
<div
class=
"dialogItemTitle"
>
{{ item.title }}
</div>
<div
class=
"dialogItemTitle"
>
{{ item.title }}
</div>
<DetailPanel
<DetailPanel
:data=
"item.data"
:row-span=
"24"
col-gap=
"10px"
label-width=
"120px"
row-height=
"45px"
:data=
"item.data"
:show-col-border=
"true"
/>
:row-span=
"24"
col-gap=
"10px"
label-width=
"120px"
row-height=
"45px"
:show-col-border=
"true"
/>
</div>
</div>
</div>
</div>
</CommonDialog>
</CommonDialog>
<Phone
<Phone
@
close=
"handleCloseDrawer"
:showDrawer=
"showPhoneDrawer"
:drawerInfo=
"drawerInfo"
@
close=
"handleCloseDrawer"
:phoneMenuList=
"phoneMenuList"
:phoneQuickList=
"phoneQuickList"
@
confirmDrawer=
"confirmDrawer"
/>
:showDrawer=
"showPhoneDrawer"
<Address
@
close=
"handleCloseDrawer"
:showAddressDrawer=
"showAddressDrawer"
:drawerInfo=
"drawerInfo"
:drawerInfo=
"drawerInfo"
:addressMenuList=
"addressMenuList"
:addressQuickList=
"addressQuickList"
@
confirmDrawer=
"confirmDrawer"
/>
:phoneMenuList=
"phoneMenuList"
<Country
:showCountryDrawer=
"showCountryDrawer"
@
close=
"handleCloseDrawer"
@
confirmCountry=
"confirmDrawer"
/>
:phoneQuickList=
"phoneQuickList"
@
confirmDrawer=
"confirmDrawer"
/>
<Address
@
close=
"handleCloseDrawer"
:showAddressDrawer=
"showAddressDrawer"
:drawerInfo=
"drawerInfo"
:addressMenuList=
"addressMenuList"
:addressQuickList=
"addressQuickList"
@
confirmDrawer=
"confirmDrawer"
/>
<Country
:showCountryDrawer=
"showCountryDrawer"
@
close=
"handleCloseDrawer"
@
confirmCountry=
"confirmDrawer"
/>
</div>
</div>
</template>
</template>
<
script
setup
name=
"appointmentInfo"
>
<
script
setup
name=
"appointmentInfo"
>
...
@@ -793,6 +581,7 @@ const timeValueChange = child => {
...
@@ -793,6 +581,7 @@ const timeValueChange = child => {
proxy
.
$message
.
warning
(
`请先选择
${
child
.
label
}
日期`
)
proxy
.
$message
.
warning
(
`请先选择
${
child
.
label
}
日期`
)
child
.
timeValue
=
''
child
.
timeValue
=
''
}
}
console
.
log
(
'signDate'
,
child
.
finishTime
)
}
}
// 签约详情
// 签约详情
const
viewDetail
=
row
=>
{
const
viewDetail
=
row
=>
{
...
@@ -1010,6 +799,7 @@ const handleDateClear = child => {
...
@@ -1010,6 +799,7 @@ const handleDateClear = child => {
}
}
}
}
const
handleDateChange
=
child
=>
{
const
handleDateChange
=
child
=>
{
// debugger;
if
(
child
.
key
==
'openAccountStartTime'
&&
form
.
value
[
'openAccountStartTime'
])
{
if
(
child
.
key
==
'openAccountStartTime'
&&
form
.
value
[
'openAccountStartTime'
])
{
resetShow
({
type
:
'child'
,
key
:
'openAccountEndTime'
,
status
:
false
,
flag
:
'disabled'
})
resetShow
({
type
:
'child'
,
key
:
'openAccountEndTime'
,
status
:
false
,
flag
:
'disabled'
})
disabledDate
(
form
.
value
[
'openAccountStartTime'
],
{
key
:
'openAccountEndTime'
})
disabledDate
(
form
.
value
[
'openAccountStartTime'
],
{
key
:
'openAccountEndTime'
})
...
@@ -1017,12 +807,11 @@ const handleDateChange = child => {
...
@@ -1017,12 +807,11 @@ const handleDateChange = child => {
// 拼接日期与时分
// 拼接日期与时分
if
(
child
.
key
==
'arrivalTime'
&&
child
.
finishTime
&&
child
.
finishTime
.
split
(
' '
).
length
==
2
)
{
if
(
child
.
key
==
'arrivalTime'
&&
child
.
finishTime
&&
child
.
finishTime
.
split
(
' '
).
length
==
2
)
{
child
.
finishTime
=
`
${
form
.
value
[
child
.
key
]}
${
child
.
timeValue
}
:00`
child
.
finishTime
=
`
${
form
.
value
[
child
.
key
]}
${
child
.
timeValue
}
:00`
}
else
if
(
}
else
if
(
child
.
key
==
'departureTime'
&&
child
.
finishTime
&&
child
.
finishTime
.
split
(
' '
).
length
==
2
)
{
child
.
key
==
'departureTime'
&&
child
.
finishTime
=
`
${
form
.
value
[
child
.
key
]}
${
child
.
timeValue
}
:00`
child
.
finishTime
&&
}
else
if
(
child
.
key
==
'signDate'
&&
child
.
finishTime
&&
child
.
finishTime
.
split
(
' '
).
length
==
2
)
{
child
.
finishTime
.
split
(
' '
).
length
==
2
)
{
child
.
finishTime
=
`
${
form
.
value
[
child
.
key
]}
${
child
.
timeValue
}
:00`
child
.
finishTime
=
`
${
form
.
value
[
child
.
key
]}
${
child
.
timeValue
}
:00`
console
.
log
(
'signDate'
,
child
.
finishTime
)
}
}
// 离港时间在到港时间之前
// 离港时间在到港时间之前
if
(
if
(
...
@@ -1204,8 +993,7 @@ const confirmDrawer = info => {
...
@@ -1204,8 +993,7 @@ const confirmDrawer = info => {
newObj
.
objType
=
drawerInfo
.
value
.
drawerType
newObj
.
objType
=
drawerInfo
.
value
.
drawerType
// 因为电话有多个,根据点击的电话类型在抽屉里回显,所以要用drawerInfo.value.code来控制
// 因为电话有多个,根据点击的电话类型在抽屉里回显,所以要用drawerInfo.value.code来控制
newObj
.
key
=
drawerInfo
.
value
.
key
newObj
.
key
=
drawerInfo
.
value
.
key
form
.
value
[
info
.
key
]
=
newObj
.
phoneString
=
`
${
newObj
[
drawerInfo
.
value
.
code
]}
${
form
.
value
[
info
.
key
]
=
newObj
.
phoneString
=
`
${
newObj
[
drawerInfo
.
value
.
code
]}
${
newObj
[
drawerInfo
.
value
.
key
]
newObj
[
drawerInfo
.
value
.
key
]
}
`
}
`
saveKey
.
value
[
drawerInfo
.
value
.
key
]
=
newObj
saveKey
.
value
[
drawerInfo
.
value
.
key
]
=
newObj
// 检查数组中是否已存在key的电话
// 检查数组中是否已存在key的电话
...
@@ -1377,7 +1165,11 @@ const setFormValue = (obj, formData) => {
...
@@ -1377,7 +1165,11 @@ const setFormValue = (obj, formData) => {
if
(
field
.
key
==
'confirmAppointmentTime'
&&
props
.
appointmentStatus
!==
0
)
{
if
(
field
.
key
==
'confirmAppointmentTime'
&&
props
.
appointmentStatus
!==
0
)
{
field
.
show
=
true
field
.
show
=
true
}
}
if
(
field
.
compositionTime
){
field
.
finishTime
=
obj
[
field
.
key
]
form
.
value
[
field
.
key
]
=
proxy
.
formatToDate
(
obj
[
field
.
key
])
field
.
timeValue
=
obj
[
field
.
key
].
split
(
' '
)[
1
]
}
// 处理时间
// 处理时间
if
(
field
.
key
==
'openAccountEndTime'
&&
obj
[
field
.
key
])
{
if
(
field
.
key
==
'openAccountEndTime'
&&
obj
[
field
.
key
])
{
// 开始时间是否在结束时间之前
// 开始时间是否在结束时间之前
...
@@ -1428,8 +1220,7 @@ const setFormValue = (obj, formData) => {
...
@@ -1428,8 +1220,7 @@ const setFormValue = (obj, formData) => {
}
}
if
(
phoneObj
[
field
.
key
])
{
if
(
phoneObj
[
field
.
key
])
{
phoneObj
.
phoneString
=
form
.
value
[
field
.
key
]
=
`
${
phoneObj
[
field
.
code
]}
${
phoneObj
.
phoneString
=
form
.
value
[
field
.
key
]
=
`
${
phoneObj
[
field
.
code
]}
${
phoneObj
[
field
.
key
]
phoneObj
[
field
.
key
]
}
`
}
`
tempPhoneList
.
push
(
phoneObj
)
tempPhoneList
.
push
(
phoneObj
)
}
}
...
@@ -1505,7 +1296,7 @@ const setFormValue = (obj, formData) => {
...
@@ -1505,7 +1296,7 @@ const setFormValue = (obj, formData) => {
addressQuickList
.
value
=
removeDuplicates
(
tempAddressList
,
'addressString'
)
addressQuickList
.
value
=
removeDuplicates
(
tempAddressList
,
'addressString'
)
processedAppointmentData
.
value
=
oldAppointmentData
.
value
=
processedData
processedAppointmentData
.
value
=
oldAppointmentData
.
value
=
processedData
oldObjInfo
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
form
.
value
))
oldObjInfo
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
form
.
value
))
console
.
log
(
'
form.value
'
,
form
.
value
)
console
.
log
(
'
辉县
'
,
form
.
value
)
}
}
// 数组去重
// 数组去重
function
removeDuplicates
(
arr
,
key
)
{
function
removeDuplicates
(
arr
,
key
)
{
...
@@ -1594,6 +1385,19 @@ const handleFormValues = () => {
...
@@ -1594,6 +1385,19 @@ const handleFormValues = () => {
practiceCode
:
'签单员执业编码'
practiceCode
:
'签单员执业编码'
}
}
processedAppointmentData
.
value
.
forEach
(
item
=>
{
processedAppointmentData
.
value
.
forEach
(
item
=>
{
if
(
item
.
data
){
item
.
data
.
forEach
(
item1
=>
{
if
(
item1
.
key
==
'signDate'
&&!
item1
.
timeValue
){
errorFields
.
value
.
push
({
message
:
'请选择签单日的时分'
})
}
if
(
item1
.
compositionTime
)
{
submitObj
[
item1
.
key
]
=
item1
.
finishTime
}
})
}
if
(
item
.
key
==
'referrerDtoList'
)
{
if
(
item
.
key
==
'referrerDtoList'
)
{
if
(
form
.
value
[
'isReferrerAccompany'
]
==
1
&&
item
.
data
.
length
>
0
)
{
if
(
form
.
value
[
'isReferrerAccompany'
]
==
1
&&
item
.
data
.
length
>
0
)
{
item
.
data
.
forEach
((
item1
,
index
)
=>
{
item
.
data
.
forEach
((
item1
,
index
)
=>
{
...
@@ -1612,13 +1416,7 @@ const handleFormValues = () => {
...
@@ -1612,13 +1416,7 @@ const handleFormValues = () => {
})
})
}
}
}
}
if
(
item
.
key
==
'position'
)
{
item
.
data
.
forEach
((
item1
,
index
)
=>
{
if
(
item1
.
compositionTime
)
{
submitObj
[
item1
.
key
]
=
item1
.
finishTime
}
})
}
if
(
item
.
key
==
'userSignDtoList'
&&
item
.
data
.
length
>
0
)
{
if
(
item
.
key
==
'userSignDtoList'
&&
item
.
data
.
length
>
0
)
{
item
.
data
.
forEach
((
item1
,
index
)
=>
{
item
.
data
.
forEach
((
item1
,
index
)
=>
{
for
(
const
key
in
obj1
)
{
for
(
const
key
in
obj1
)
{
...
@@ -1632,9 +1430,7 @@ const handleFormValues = () => {
...
@@ -1632,9 +1430,7 @@ const handleFormValues = () => {
submitObj
[
'userSignDtoList'
]
=
item
.
data
submitObj
[
'userSignDtoList'
]
=
item
.
data
}
}
})
})
if
(
submitObj
[
'signDate'
])
{
submitObj
[
'signDate'
]
=
proxy
.
formatToDateTime
(
submitObj
[
'signDate'
])
}
console
.
log
(
'submitObj'
,
submitObj
)
console
.
log
(
'submitObj'
,
submitObj
)
if
(
submitObj
[
'departureTime'
])
{
if
(
submitObj
[
'departureTime'
])
{
// 开始时间是否在结束时间之前
// 开始时间是否在结束时间之前
...
@@ -1733,6 +1529,7 @@ defineExpose({
...
@@ -1733,6 +1529,7 @@ defineExpose({
color
:
#f56c6c
;
color
:
#f56c6c
;
margin-right
:
4px
;
margin-right
:
4px
;
}
}
.domEmpty
{
.domEmpty
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
...
@@ -1744,25 +1541,30 @@ defineExpose({
...
@@ -1744,25 +1541,30 @@ defineExpose({
color
:
#a8abb2
;
color
:
#a8abb2
;
margin-top
:
100px
;
margin-top
:
100px
;
}
}
.topBtn
{
.topBtn
{
width
:
100%
;
width
:
100%
;
display
:
flex
;
display
:
flex
;
justify-content
:
space-between
;
justify-content
:
space-between
;
margin-bottom
:
10px
;
margin-bottom
:
10px
;
}
}
.formBox
{
.formBox
{
width
:
100%
;
width
:
100%
;
.fatherLable
{
.fatherLable
{
font-size
:
18px
;
font-size
:
18px
;
border-left
:
4px
solid
#165dff
;
border-left
:
4px
solid
#165dff
;
padding-left
:
5px
;
padding-left
:
5px
;
}
}
.fatherDes
{
.fatherDes
{
font-size
:
14px
;
font-size
:
14px
;
color
:
#a8abb2
;
color
:
#a8abb2
;
margin-top
:
5px
;
margin-top
:
5px
;
margin-bottom
:
20px
;
margin-bottom
:
20px
;
}
}
.inputBox
{
.inputBox
{
width
:
100%
;
width
:
100%
;
border
:
1px
solid
#dcdfe6
;
border
:
1px
solid
#dcdfe6
;
...
@@ -1772,11 +1574,13 @@ defineExpose({
...
@@ -1772,11 +1574,13 @@ defineExpose({
justify-content
:
space-between
;
justify-content
:
space-between
;
min-height
:
32px
;
min-height
:
32px
;
padding
:
0px
11px
;
padding
:
0px
11px
;
.rightArrow
{
.rightArrow
{
font-size
:
14px
;
font-size
:
14px
;
color
:
#a8abb2
;
color
:
#a8abb2
;
}
}
}
}
.desBox
{
.desBox
{
.title
{
.title
{
width
:
120px
;
width
:
120px
;
...
@@ -1786,6 +1590,7 @@ defineExpose({
...
@@ -1786,6 +1590,7 @@ defineExpose({
color
:
#606266
;
color
:
#606266
;
font-weight
:
700
;
font-weight
:
700
;
}
}
.informationBox
{
.informationBox
{
font-size
:
14px
;
font-size
:
14px
;
border
:
1px
solid
#dcdfe6
;
border
:
1px
solid
#dcdfe6
;
...
@@ -1796,6 +1601,7 @@ defineExpose({
...
@@ -1796,6 +1601,7 @@ defineExpose({
}
}
}
}
}
}
.tabButton
{
.tabButton
{
box-shadow
:
0
-1px
14px
#00000014
;
box-shadow
:
0
-1px
14px
#00000014
;
width
:
100%
;
width
:
100%
;
...
@@ -1804,6 +1610,7 @@ defineExpose({
...
@@ -1804,6 +1610,7 @@ defineExpose({
justify-content
:
center
;
justify-content
:
center
;
/* padding-right: 20px; */
/* padding-right: 20px; */
padding-top
:
20px
;
padding-top
:
20px
;
.sumbitBtn
{
.sumbitBtn
{
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
...
@@ -1813,34 +1620,40 @@ defineExpose({
...
@@ -1813,34 +1620,40 @@ defineExpose({
background-color
:
#165dff
;
background-color
:
#165dff
;
color
:
#fff
;
color
:
#fff
;
padding
:
0
30px
;
padding
:
0
30px
;
.buttonIcon
{
.buttonIcon
{
font-size
:
16px
;
font-size
:
16px
;
color
:
#fff
;
color
:
#fff
;
}
}
}
}
}
}
.customerBox
{
.customerBox
{
.customerItem
{
.customerItem
{
padding
:
10px
;
padding
:
10px
;
border-radius
:
5px
;
border-radius
:
5px
;
margin-bottom
:
20px
;
margin-bottom
:
20px
;
box-shadow
:
0
-1px
14px
#00000014
;
box-shadow
:
0
-1px
14px
#00000014
;
.top
{
.top
{
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
justify-content
:
space-between
;
justify-content
:
space-between
;
width
:
100%
;
width
:
100%
;
.left
{
.left
{
width
:
40%
;
width
:
40%
;
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
justify-content
:
flex-start
;
justify-content
:
flex-start
;
.gender
{
.gender
{
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
}
}
}
}
}
}
.bottom
{
.bottom
{
.infoItem
{
.infoItem
{
display
:
flex
;
display
:
flex
;
...
@@ -1849,20 +1662,24 @@ defineExpose({
...
@@ -1849,20 +1662,24 @@ defineExpose({
}
}
}
}
}
}
.customerItem
:last-child
{
.customerItem
:last-child
{
margin-bottom
:
0px
;
margin-bottom
:
0px
;
}
}
}
}
.deleteIcon
{
.deleteIcon
{
color
:
red
;
color
:
red
;
font-size
:
18px
;
font-size
:
18px
;
padding-top
:
10px
;
padding-top
:
10px
;
}
}
.compositionDateTime
{
.compositionDateTime
{
display
:
flex
;
display
:
flex
;
width
:
100%
;
width
:
100%
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
}
.itineraryDialogBox
{
.itineraryDialogBox
{
.dialogItem
{
.dialogItem
{
.dialogItemTitle
{
.dialogItemTitle
{
...
@@ -1873,6 +1690,7 @@ defineExpose({
...
@@ -1873,6 +1690,7 @@ defineExpose({
}
}
}
}
}
}
@media
only
screen
and
(
min-width
:
768px
)
{
@media
only
screen
and
(
min-width
:
768px
)
{
.formBtn
{
.formBtn
{
margin-top
:
0
!important
;
margin-top
:
0
!important
;
...
...
src/views/sign/policyReceipts/premiumRecon.vue
View file @
8857fdea
...
@@ -302,6 +302,7 @@ import { getBankList } from '@/api/common'
...
@@ -302,6 +302,7 @@ import { getBankList } from '@/api/common'
import
useUserStore
from
'@/store/modules/user'
import
useUserStore
from
'@/store/modules/user'
import
{
loadDicts
,
getDictLabel
}
from
'@/utils/useDict'
import
{
loadDicts
,
getDictLabel
}
from
'@/utils/useDict'
import
{
getToken
}
from
'@/utils/auth'
import
{
getToken
}
from
'@/utils/auth'
import
{
getNowTime
,
formatToDate
,
formatToDateTime
}
from
'@/utils/date'
const
{
proxy
}
=
getCurrentInstance
()
const
{
proxy
}
=
getCurrentInstance
()
const
userStore
=
useUserStore
()
const
userStore
=
useUserStore
()
// 分页相关
// 分页相关
...
@@ -493,7 +494,7 @@ const affirmConfig = [
...
@@ -493,7 +494,7 @@ const affirmConfig = [
placeholder
:
'请选择'
,
placeholder
:
'请选择'
,
maxDate
:
'today'
,
maxDate
:
'today'
,
visible
:
formData
=>
visible
:
formData
=>
formData
.
remainingUnpaidAmount
&&
Number
(
formData
.
remainingUnpaidAmount
)
<=
0
,
formData
.
remainingUnpaidAmount
&&
Number
(
formData
.
remainingUnpaidAmount
)
<
0
||
Number
(
formData
.
remainingUnpaidAmount
)
=
=
0
,
rules
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blur'
}]
rules
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blur'
}]
},
},
{
{
...
@@ -504,7 +505,7 @@ const affirmConfig = [
...
@@ -504,7 +505,7 @@ const affirmConfig = [
maxDate
:
'today'
,
maxDate
:
'today'
,
rules
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blur'
}],
rules
:
[{
required
:
true
,
message
:
'请输入'
,
trigger
:
'blur'
}],
visible
:
formData
=>
visible
:
formData
=>
formData
.
remainingUnpaidAmount
&&
Number
(
formData
.
remainingUnpaidAmount
)
<=
0
formData
.
remainingUnpaidAmount
&&
Number
(
formData
.
remainingUnpaidAmount
)
<
0
||
Number
(
formData
.
remainingUnpaidAmount
)
==
0
,
},
},
{
{
type
:
'select'
,
type
:
'select'
,
...
@@ -512,7 +513,7 @@ const affirmConfig = [
...
@@ -512,7 +513,7 @@ const affirmConfig = [
label
:
'保单状态'
,
label
:
'保单状态'
,
dictType
:
'csf_policy_status_new'
,
dictType
:
'csf_policy_status_new'
,
visible
:
formData
=>
visible
:
formData
=>
formData
.
remainingUnpaidAmount
&&
Number
(
formData
.
remainingUnpaidAmount
)
<=
0
formData
.
remainingUnpaidAmount
&&
Number
(
formData
.
remainingUnpaidAmount
)
<
0
||
Number
(
formData
.
remainingUnpaidAmount
)
==
0
,
}
}
]
]
//计算待付金额
//计算待付金额
...
@@ -534,6 +535,7 @@ const calculateAmount = async () => {
...
@@ -534,6 +535,7 @@ const calculateAmount = async () => {
const
confirmAffirm
=
async
()
=>
{
const
confirmAffirm
=
async
()
=>
{
try
{
try
{
const
formData
=
await
affirmFormRef
.
value
.
validate
()
const
formData
=
await
affirmFormRef
.
value
.
validate
()
console
.
log
(
formData
.
value
)
let
newObj
=
JSON
.
parse
(
JSON
.
stringify
(
formData
))
let
newObj
=
JSON
.
parse
(
JSON
.
stringify
(
formData
))
for
(
const
key
in
newObj
)
{
for
(
const
key
in
newObj
)
{
if
(
/Date/
.
test
(
key
))
{
if
(
/Date/
.
test
(
key
))
{
...
...
src/views/sign/underwritingMain/index.vue
View file @
8857fdea
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
<el-table-column
prop=
"insured"
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=
"insuranceCompany"
label=
"保险公司"
width=
"200"
sortable
/>
<el-table-column
prop=
"productName"
label=
"产品计划"
width=
"200"
sortable
/>
<el-table-column
prop=
"productName"
label=
"产品计划"
width=
"200"
sortable
/>
<el-table-column
prop=
"
paymentTerm
"
label=
"缴费年期"
width=
"120"
sortable
/>
<el-table-column
prop=
"
issueNumber
"
label=
"缴费年期"
width=
"120"
sortable
/>
<el-table-column
fixed=
"right"
label=
"操作"
min-width=
"80"
>
<el-table-column
fixed=
"right"
label=
"操作"
min-width=
"80"
>
<
template
#
default=
"{ row }"
>
<
template
#
default=
"{ row }"
>
<el-popover
placement=
"right"
:width=
"200"
trigger=
"click"
>
<el-popover
placement=
"right"
:width=
"200"
trigger=
"click"
>
...
...
src/views/sign/underwritingMain/policyDetail.vue
View file @
8857fdea
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
<div
class=
"form-page"
>
<div
class=
"form-page"
>
<el-form
ref=
"formRef"
:model=
"localData"
label-width=
"120px"
size=
"default"
>
<el-form
ref=
"formRef"
:model=
"localData"
label-width=
"120px"
size=
"default"
>
<!-- Tabs -->
<!-- Tabs -->
<el-tabs
v-model=
"activeTab"
@
tab-click=
"handleTabClick"
>
<el-tabs
v-model=
"activeTab"
@
tab-click=
"handleTabClick"
@
before-leave=
"() => handleBeforeLeave()"
>
<el-tab-pane
label=
"基础信息"
name=
"basic"
></el-tab-pane>
<el-tab-pane
label=
"基础信息"
name=
"basic"
></el-tab-pane>
<el-tab-pane
label=
"产品计划"
name=
"productPlan"
></el-tab-pane>
<el-tab-pane
label=
"产品计划"
name=
"productPlan"
></el-tab-pane>
<el-tab-pane
label=
"首期缴费"
name=
"firstPayment"
></el-tab-pane>
<el-tab-pane
label=
"首期缴费"
name=
"firstPayment"
></el-tab-pane>
...
@@ -54,7 +54,8 @@
...
@@ -54,7 +54,8 @@
v-model=
"firstPremiumFormData"
/>
v-model=
"firstPremiumFormData"
/>
<h3
class=
"sectionTitle"
>
首期对账信息
</h3>
<h3
class=
"sectionTitle"
>
首期对账信息
</h3>
<el-table
:data=
"firstPremiumTableData"
border
style=
"width: 100%"
>
<el-table
:data=
"firstPremiumTableData"
border
style=
"width: 100%"
>
<el-table-column
prop=
"createTime"
label=
"申请对账日期"
width=
"180"
/>
<el-table-column
prop=
"createTime"
label=
"申请对账日期"
width=
"180"
:formatter=
"(row, col, val) => formatToDateTime(val, 'YYYY-MM-DD HH:mm:ss')"
/>
<el-table-column
prop=
"reconciliationStatus"
label=
"对账状态"
width=
"180"
/>
<el-table-column
prop=
"reconciliationStatus"
label=
"对账状态"
width=
"180"
/>
<el-table-column
prop=
"paymentMethod"
label=
"缴费方式"
width=
"180"
/>
<el-table-column
prop=
"paymentMethod"
label=
"缴费方式"
width=
"180"
/>
<el-table-column
prop=
"paymentAmount"
label=
"汇款金额"
width=
"180"
/>
<el-table-column
prop=
"paymentAmount"
label=
"汇款金额"
width=
"180"
/>
...
@@ -155,20 +156,33 @@
...
@@ -155,20 +156,33 @@
import
{
ref
,
reactive
,
watch
,
nextTick
,
onMounted
,
computed
}
from
'vue'
import
{
ref
,
reactive
,
watch
,
nextTick
,
onMounted
,
computed
}
from
'vue'
import
SearchForm
from
'@/components/SearchForm/SearchForm.vue'
import
SearchForm
from
'@/components/SearchForm/SearchForm.vue'
import
CommonDialog
from
'@/components/commonDialog'
import
CommonDialog
from
'@/components/commonDialog'
import
{
ElMessage
}
from
'element-plus'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
Delete
,
Edit
,
Search
,
Share
,
Upload
}
from
'@element-plus/icons-vue'
import
{
Delete
,
Edit
,
Search
,
Share
,
Upload
}
from
'@element-plus/icons-vue'
import
{
getPolicyfollow
,
getProductList
}
from
'@/api/sign/underwritingMain'
import
{
getPolicyfollow
,
getProductList
}
from
'@/api/sign/underwritingMain'
import
{
uploadOssFileList
}
from
'@/api/common'
import
{
uploadOssFileList
}
from
'@/api/common'
import
{
getProcessDetail
}
from
'@/api/sign/fna'
import
{
getProcessDetail
}
from
'@/api/sign/fna'
import
{
premiumReconciliationList
}
from
'@/api/sign/policy'
import
{
premiumReconciliationList
}
from
'@/api/sign/policy'
import
{
loadDicts
,
getDictLabel
}
from
'@/utils/useDict'
import
{
loadDicts
,
getDictLabel
}
from
'@/utils/useDict'
import
{
formatToDat
e
}
from
'@/utils/date'
import
{
getNowTime
,
formatToDate
,
formatToDateTim
e
}
from
'@/utils/date'
import
EditableTable
from
'@/components/csf-common/EditableTable.vue'
import
EditableTable
from
'@/components/csf-common/EditableTable.vue'
import
useUserStore
from
'@/store/modules/user'
import
useUserStore
from
'@/store/modules/user'
const
{
proxy
}
=
getCurrentInstance
()
proxy
.
useDictLists
([
'sys_no_yes'
,
'csf_ap_frequency'
,
'bx_currency_type'
,
'csf_ap_first_issue'
,
'csf_ap_dividend'
,
'csf_fortune_status'
,
'csf_ap_mailing_method'
,
'receipt_status'
])
const
router
=
useRouter
()
const
router
=
useRouter
()
const
userStore
=
useUserStore
()
const
userStore
=
useUserStore
()
const
files
=
ref
(
''
)
const
files
=
ref
(
''
)
const
fileUploadDialogFlag
=
ref
(
false
)
const
fileUploadDialogFlag
=
ref
(
false
)
// 记录每个 tab 是否有未保存的修改(dirty 状态)
const
tabDirty
=
ref
({
basic
:
false
,
productPlan
:
false
,
firstPayment
:
false
,
introducer
:
false
,
postal
:
false
,
related
:
false
,
attachment
:
false
})
// ===== Props & Emits =====
// ===== Props & Emits =====
const
props
=
defineProps
({
const
props
=
defineProps
({
modelValue
:
{
modelValue
:
{
...
@@ -461,7 +475,6 @@ const basicPlanFormConfig = ref([
...
@@ -461,7 +475,6 @@ const basicPlanFormConfig = ref([
valueKey
:
'insuranceCompanyBizId'
,
valueKey
:
'insuranceCompanyBizId'
,
labelKey
:
'fullName'
,
labelKey
:
'fullName'
,
transform
:
(
res
)
=>
{
transform
:
(
res
)
=>
{
console
.
log
(
res
)
return
res
?.
data
.
records
||
[]
return
res
?.
data
.
records
||
[]
},
},
onChangeExtraFields
:
{
onChangeExtraFields
:
{
...
@@ -497,8 +510,9 @@ const basicPlanFormConfig = ref([
...
@@ -497,8 +510,9 @@ const basicPlanFormConfig = ref([
projectBizId
:
userStore
.
projectInfo
.
projectBizId
,
projectBizId
:
userStore
.
projectInfo
.
projectBizId
,
fieldBizId
:
'field_olk1qZe81qHHKXbw'
,
fieldBizId
:
'field_olk1qZe81qHHKXbw'
,
fieldValueBizId
:
'field_value_uOfJH5ucA2YwJpbn'
,
fieldValueBizId
:
'field_value_uOfJH5ucA2YwJpbn'
,
categoryCodeList
:
[
basicPlanFormData
.
value
.
insuranceCategoryBizId
],
// ✅ 确认这里用的是正确的字段(code 或 bizId)
insuranceCompanyBizIdList
:
[
basicPlanFormData
.
value
.
insuranceCompanyBizId
],
categoryCodeList
:
[
basicPlanFormData
.
value
.
insuranceCategoryCode
||
''
],
insuranceCompanyBizIdList
:
[
basicPlanFormData
.
value
.
insuranceCompanyBizId
||
''
],
pageNo
:
1
,
pageNo
:
1
,
pageSize
:
20
pageSize
:
20
}),
}),
...
@@ -506,12 +520,15 @@ const basicPlanFormConfig = ref([
...
@@ -506,12 +520,15 @@ const basicPlanFormConfig = ref([
debounceWait
:
500
,
debounceWait
:
500
,
valueKey
:
'productName'
,
valueKey
:
'productName'
,
labelKey
:
'productName'
,
labelKey
:
'productName'
,
transform
:
(
res
)
=>
res
?.
data
.
records
||
[],
transform
:
(
res
)
=>
{
// ✅ 关键:当选择产品时,自动回填其他字段
console
.
log
(
'======子组件选择选项后,父组件接收的值 :'
,
res
?.
data
.
records
||
[])
return
res
?.
data
.
records
||
[]
},
onChangeExtraFields
:
{
onChangeExtraFields
:
{
// 格式:targetProp: sourcePathInRawObject
apiAttributeSettingDtoList
:
'apiAttributeSettingDtoList'
,
apiAttributeSettingDtoList
:
'apiAttributeSettingDtoList'
,
productLaunchBizId
:
'productLaunchBizId'
,
productLaunchBizId
:
'productLaunchBizId'
,
insuranceCategoryCode
:
'code'
,
// 如果需要,也可以回填其他字段
},
},
},
},
{
{
...
@@ -729,11 +746,12 @@ const localData = ref(defaultFormData())
...
@@ -729,11 +746,12 @@ const localData = ref(defaultFormData())
// ✅ 只在挂载时初始化一次(避免 watch 形成闭环)
// ✅ 只在挂载时初始化一次(避免 watch 形成闭环)
onMounted
(
async
()
=>
{
onMounted
(
async
()
=>
{
if
(
props
.
modelValue
)
{
if
(
props
.
modelValue
)
{
console
.
log
(
'🚀 父组件 props.modelValue 挂载时:'
,
props
.
modelValue
)
// 深拷贝 + 合并默认值,防止缺失字段
// 深拷贝 + 合并默认值,防止缺失字段
localData
.
value
=
{
...
defaultFormData
(),
...
props
.
modelValue
}
localData
.
value
=
{
...
defaultFormData
(),
...
props
.
modelValue
}
}
}
try
{
try
{
await
loadDicts
([
'sys_no_yes'
,
'csf_ap_frequency'
,
'bx_currency_type'
,
'csf_ap_first_issue'
,
'csf_ap_dividend'
,
'csf_fortune_status'
,
'csf_ap_mailing_method'
,
'receipt_status'
])
getPolicyfollowDetail
()
getPolicyfollowDetail
()
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
'字典加载失败'
,
error
)
console
.
error
(
'字典加载失败'
,
error
)
...
@@ -745,11 +763,25 @@ onMounted(async () => {
...
@@ -745,11 +763,25 @@ onMounted(async () => {
policyInfoFormConfig
.
value
=
policyInfoFormConfig
?
applyViewMode
(
policyInfoFormConfig
.
value
,
props
.
mode
)
:
[]
policyInfoFormConfig
.
value
=
policyInfoFormConfig
?
applyViewMode
(
policyInfoFormConfig
.
value
,
props
.
mode
)
:
[]
})
})
watch
(
()
=>
({
...
basicInfoFormData
.
value
,
...
policyInfoFormData
.
value
,
...
firstPremiumFormData
.
value
,
...
postalFormData
.
value
,
...
basicPlanFormData
.
value
}),
()
=>
{
console
.
log
(
'========父组件监听basicPlanFormData的变化'
,
basicPlanFormData
.
value
)
tabDirty
.
value
.
basic
=
true
},
{
deep
:
true
}
)
// ✅ 监听 localData 变化,emit 出去(用于 v-model)
// ✅ 监听 localData 变化,emit 出去(用于 v-model)
watch
(
watch
(
()
=>
localData
.
value
,
()
=>
localData
.
value
,
(
newVal
)
=>
{
(
newVal
)
=>
{
console
.
log
(
'========父组件监测的localData:'
,
newVal
)
emit
(
'update:modelValue'
,
newVal
)
emit
(
'update:modelValue'
,
newVal
)
},
},
{
deep
:
true
}
{
deep
:
true
}
...
@@ -757,12 +789,46 @@ watch(
...
@@ -757,12 +789,46 @@ watch(
// ===== 表单引用 & 验证规则 =====
// ===== 表单引用 & 验证规则 =====
const
formRef
=
ref
()
const
formRef
=
ref
()
const
activeTab
=
ref
(
'basic'
)
const
activeTab
=
ref
(
'basic'
)
// ========================
// ✅ 新增:切换前确认
// ========================
const
handleBeforeLeave
=
async
(
newTabName
,
oldTabName
)
=>
{
console
.
log
(
'切换前确认'
,
newTabName
,
oldTabName
)
if
(
tabDirty
.
value
[
oldTabName
])
{
try
{
await
ElMessageBox
.
confirm
(
`“
${
getTabLabel
(
oldTabName
)}
” 有未保存的内容,确定要切换吗?`
,
'提示'
,
{
confirmButtonText
:
'继续切换'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}
)
return
true
// 允许切换
}
catch
{
return
false
// 阻止切换
}
}
return
true
// 无未保存内容,允许切换
}
const
getTabLabel
=
(
name
)
=>
{
const
labels
=
{
basic
:
'基础信息'
,
productPlan
:
'产品计划'
,
firstPayment
:
'首期缴费'
,
introducer
:
'介绍人'
,
postal
:
'邮寄信息'
,
related
:
'关联记录'
,
attachment
:
'附件'
}
return
labels
[
name
]
||
name
}
const
handleTabClick
=
(
tab
)
=>
{
const
handleTabClick
=
(
tab
)
=>
{
if
(
tab
.
props
.
name
===
'firstPayment'
)
{
if
(
tab
.
props
.
name
===
'firstPayment'
)
{
firstPremiumFormConfig
.
value
=
firstPremiumFormConfig
?
applyViewMode
(
firstPremiumFormConfig
.
value
,
props
.
mode
)
:
[]
firstPremiumFormConfig
.
value
=
firstPremiumFormConfig
?
applyViewMode
(
firstPremiumFormConfig
.
value
,
props
.
mode
)
:
[]
if
(
!
basic
InfoFormData
.
value
.
policyNo
)
return
if
(
!
policy
InfoFormData
.
value
.
policyNo
)
return
getPremiumReconciliationList
(
basic
InfoFormData
.
value
.
policyNo
)
getPremiumReconciliationList
(
policy
InfoFormData
.
value
.
policyNo
)
}
else
if
(
tab
.
props
.
name
===
'postal'
)
{
}
else
if
(
tab
.
props
.
name
===
'postal'
)
{
postalFormConfig
.
value
=
postalFormConfig
?
applyViewMode
(
postalFormConfig
.
value
,
props
.
mode
)
:
[]
postalFormConfig
.
value
=
postalFormConfig
?
applyViewMode
(
postalFormConfig
.
value
,
props
.
mode
)
:
[]
}
else
if
(
tab
.
props
.
name
===
'related'
)
{
}
else
if
(
tab
.
props
.
name
===
'related'
)
{
...
@@ -782,6 +848,7 @@ const handleSubmit = () => {
...
@@ -782,6 +848,7 @@ const handleSubmit = () => {
formRef
.
value
?.
validate
((
valid
)
=>
{
formRef
.
value
?.
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
valid
)
{
console
.
log
(
'提交数据'
,
introducerTableData
.
value
)
console
.
log
(
'提交数据'
,
introducerTableData
.
value
)
savTabList
.
value
.
push
(
activeTab
.
value
)
if
(
activeTab
.
value
===
'postal'
)
{
if
(
activeTab
.
value
===
'postal'
)
{
emit
(
'submit'
,
{
...
postalFormData
.
value
,
activeTab
:
activeTab
.
value
})
emit
(
'submit'
,
{
...
postalFormData
.
value
,
activeTab
:
activeTab
.
value
})
}
else
if
(
activeTab
.
value
===
'firstPayment'
)
{
}
else
if
(
activeTab
.
value
===
'firstPayment'
)
{
...
@@ -826,12 +893,14 @@ const getPolicyfollowDetail = () => {
...
@@ -826,12 +893,14 @@ const getPolicyfollowDetail = () => {
}
}
getPolicyfollow
(
props
.
policyBizId
).
then
(
res
=>
{
getPolicyfollow
(
props
.
policyBizId
).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
console
.
log
(
'====父组件在赋值basicPlanFormData前'
,
basicPlanFormData
.
value
)
newOrderData
.
value
=
res
.
data
newOrderData
.
value
=
res
.
data
policyInfoFormData
.
value
=
transformToFormData
(
res
.
data
,
policyInfoFormConfig
.
value
)
;
policyInfoFormData
.
value
=
{
...
transformToFormData
(
res
.
data
,
policyInfoFormConfig
.
value
)
}
;
basicPlanFormData
.
value
=
transformToFormData
(
res
.
data
,
basicPlanFormConfig
.
value
)
;
basicPlanFormData
.
value
=
{
...
transformToFormData
(
res
.
data
,
basicPlanFormConfig
.
value
)
}
;
basicInfoFormData
.
value
=
transformToFormData
(
res
.
data
,
basicInfoFormConfig
.
value
)
;
basicInfoFormData
.
value
=
{
...
transformToFormData
(
res
.
data
,
basicInfoFormConfig
.
value
)
}
;
firstPremiumFormData
.
value
=
transformToFormData
(
res
.
data
,
firstPremiumFormConfig
.
value
)
;
firstPremiumFormData
.
value
=
{
...
transformToFormData
(
res
.
data
,
firstPremiumFormConfig
.
value
)
}
;
introducerTableData
.
value
=
res
.
data
.
brokerList
||
[]
introducerTableData
.
value
=
res
.
data
.
brokerList
||
[]
console
.
log
(
'====父组件在赋值basicPlanFormData后'
,
basicPlanFormData
.
value
)
}
}
})
})
...
@@ -931,17 +1000,23 @@ const viewRecordDetail = (e) => {
...
@@ -931,17 +1000,23 @@ const viewRecordDetail = (e) => {
}
}
})
})
}
}
const
handleSelectChange
=
(
prop
,
value
,
item
,
type
)
=>
{
const
handleSelectChange
=
async
(
prop
,
value
,
item
,
type
)
=>
{
console
.
log
(
basicPlanFormData
.
value
)
await
nextTick
()
// console.log('======子组件选择选项后,父组件接收的值 :', basicPlanFormData.value)
if
(
type
===
'basicPlan'
)
{
if
(
type
===
'basicPlan'
)
{
const
params
=
{
const
params
=
{
tenantBizId
:
userStore
.
projectInfo
.
tenantBizId
,
tenantBizId
:
userStore
.
projectInfo
.
tenantBizId
,
projectBizId
:
userStore
.
projectInfo
.
projectBizId
,
projectBizId
:
userStore
.
projectInfo
.
projectBizId
,
fieldBizId
:
'field_olk1qZe81qHHKXbw'
,
fieldValueBizId
:
'field_value_uOfJH5ucA2YwJpbn'
,
insuranceCompanyBizIdList
:
[
basicPlanFormData
.
value
.
insuranceCompanyBizId
],
insuranceCompanyBizIdList
:
[
basicPlanFormData
.
value
.
insuranceCompanyBizId
],
categoryCodeList
:
[
basicPlanFormData
.
value
.
insuranceCategoryCode
],
pageNo
:
1
,
pageNo
:
1
,
pageSize
:
100
,
pageSize
:
100
,
}
}
console
.
log
(
'====父组件拿到值,去调用产品列表查询接口'
,
params
)
getProductLists
(
params
)
getProductLists
(
params
)
}
}
}
}
...
...
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