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
11c7857a
Commit
11c7857a
authored
Oct 15, 2025
by
yuzhenWang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
预约前端已经写完发布测试
parent
2e0664dc
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
1117 additions
and
913 deletions
+1117
-913
src/api/sign/appointment.js
+29
-0
src/formJson/customer.js
+170
-34
src/formJson/fnaForm.js
+85
-58
src/formJson/productPlan.js
+1
-1
src/utils/2.js
+0
-0
src/utils/date.js
+6
-0
src/views/sign/FnaList/components/customer.vue
+10
-5
src/views/sign/FnaList/components/fanForm.vue
+47
-19
src/views/sign/FnaList/edit.vue
+2
-1
src/views/sign/FnaList/index.vue
+2
-2
src/views/sign/appointment/appointmentEdit.vue
+212
-13
src/views/sign/appointment/components/appointmentInfo.vue
+17
-4
src/views/sign/appointment/components/beneficiaryInfo.vue
+43
-19
src/views/sign/appointment/components/fnaInfo.vue
+4
-4
src/views/sign/appointment/components/healthInfo.vue
+311
-649
src/views/sign/appointment/components/insuredInfo.vue
+25
-9
src/views/sign/appointment/components/policyHolderInfo.vue
+25
-25
src/views/sign/appointment/components/policyTransferInfo.vue
+21
-12
src/views/sign/appointment/components/productPlan.vue
+33
-9
src/views/sign/appointment/components/secondHolderInfo.vue
+9
-14
src/views/sign/appointment/index.vue
+65
-35
No files found.
src/api/sign/appointment.js
View file @
11c7857a
...
...
@@ -54,6 +54,14 @@ export function getAppointmentDetail(appointmentBizId) {
method
:
'get'
})
}
// 获取行程单详情
export
function
getItineraryDetail
(
appointmentBizId
)
{
return
request
({
url
:
`/csf/api/appointmentFile/pdf/itinerary/detail?appointmentBizId=
${
appointmentBizId
}
`
,
method
:
'get'
})
}
// 获取预约健康信息数据
export
function
getQuestionnaires
(
appointmentBizId
)
{
return
request
({
...
...
@@ -61,6 +69,14 @@ export function getQuestionnaires(appointmentBizId) {
method
:
'get'
})
}
// 预约-提交健康信息模块
export
function
saveQuestionnaires
(
data
)
{
return
request
({
url
:
'/question/api/questionnaires/answer/save'
,
method
:
'post'
,
data
:
data
})
}
// 预约-提交预约信息模块
export
function
editAppointmentInfo
(
data
)
{
return
request
({
...
...
@@ -171,6 +187,19 @@ export function getAppointmentFile(data) {
data
:
data
})
}
// 上传Execl
export
function
uploadExcel
(
data
)
{
return
request
({
url
:
'/csf/api/appointmentFile/excel/import/appointment'
,
method
:
'post'
,
data
:
data
,
// 重要:不要手动设置 Content-Type,让浏览器自动设置
headers
:
{
// 如果您的请求拦截器中有默认的 Content-Type,可能需要覆盖
'Content-Type'
:
'multipart/form-data'
}
})
}
// 删除单个附件
export
function
delFile
(
appointmentFileBizId
)
{
return
request
({
...
...
src/formJson/customer.js
View file @
11c7857a
...
...
@@ -13,7 +13,11 @@ const customer = [
maxLength
:
5
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'名字'
,
...
...
@@ -24,7 +28,11 @@ const customer = [
maxLength
:
10
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'姓名'
,
...
...
@@ -35,7 +43,11 @@ const customer = [
maxLength
:
15
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'姓氏拼音'
,
...
...
@@ -46,7 +58,11 @@ const customer = [
maxLength
:
30
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'姓名拼音'
,
...
...
@@ -57,7 +73,11 @@ const customer = [
maxLength
:
30
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'名字-英文'
,
...
...
@@ -68,7 +88,11 @@ const customer = [
maxLength
:
30
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'称谓'
,
...
...
@@ -78,7 +102,11 @@ const customer = [
disabled
:
false
,
placeholder
:
'请选择'
,
dictType
:
'csf_customer_title'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'性别'
,
...
...
@@ -88,7 +116,11 @@ const customer = [
disabled
:
false
,
placeholder
:
'请选择'
,
dictType
:
'sys_gender'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'生日'
,
...
...
@@ -97,7 +129,11 @@ const customer = [
required
:
false
,
disabled
:
false
,
placeholder
:
'请选择'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'年龄'
,
...
...
@@ -108,7 +144,11 @@ const customer = [
required
:
true
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'移动电话'
,
...
...
@@ -121,7 +161,11 @@ const customer = [
drawerType
:
'phone'
,
phone
:
{},
code
:
'areaCode'
,
value
:
''
value
:
''
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'邮箱'
,
...
...
@@ -132,7 +176,11 @@ const customer = [
required
:
true
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'是否吸烟'
,
...
...
@@ -142,7 +190,11 @@ const customer = [
disabled
:
false
,
placeholder
:
'请选择'
,
dictType
:
'sys_no_yes'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'吸烟数量(支/天)'
,
...
...
@@ -153,7 +205,11 @@ const customer = [
required
:
false
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
false
show
:
false
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
// {
// label: '公司类型',
...
...
@@ -173,7 +229,11 @@ const customer = [
disabled
:
false
,
placeholder
:
'请选择'
,
dictType
:
'csf_customer_type'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
// {
// label: '客户来源',
...
...
@@ -194,7 +254,11 @@ const customer = [
required
:
true
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
},
...
...
@@ -212,7 +276,11 @@ const customer = [
disabled
:
false
,
placeholder
:
'请选择'
,
dictType
:
'csf_marriage'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'国籍(国家/地区)'
,
...
...
@@ -222,7 +290,11 @@ const customer = [
disabled
:
false
,
placeholder
:
'请填写'
,
show
:
true
,
drawerType
:
'country'
drawerType
:
'country'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'出生地'
,
...
...
@@ -233,7 +305,11 @@ const customer = [
maxLength
:
300
,
disabled
:
false
,
placeholder
:
'请输入出生地(省市)'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'教育程度'
,
...
...
@@ -243,7 +319,11 @@ const customer = [
disabled
:
false
,
placeholder
:
'请选择'
,
dictType
:
'csf_education'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'住宅电话'
,
...
...
@@ -256,7 +336,11 @@ const customer = [
drawerType
:
'phone'
,
residenceTelephone
:
{},
code
:
'residenceAreaCode'
,
maxLength
:
20
maxLength
:
20
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'固定电话'
,
...
...
@@ -267,7 +351,11 @@ const customer = [
disabled
:
false
,
placeholder
:
'请填写'
,
show
:
true
,
maxLength
:
20
maxLength
:
20
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'是否长期出国'
,
...
...
@@ -277,7 +365,11 @@ const customer = [
disabled
:
false
,
placeholder
:
'请选择'
,
dictType
:
'sys_no_yes'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'通讯地址'
,
...
...
@@ -288,7 +380,11 @@ const customer = [
placeholder
:
'请填写'
,
show
:
true
,
drawerType
:
'address'
,
residenceAddress
:
{}
residenceAddress
:
{},
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'住宅地址'
,
...
...
@@ -299,7 +395,11 @@ const customer = [
placeholder
:
'请填写'
,
show
:
true
,
drawerType
:
'address'
,
residentialAddress
:
{}
residentialAddress
:
{},
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'邮寄地址'
,
...
...
@@ -310,7 +410,11 @@ const customer = [
placeholder
:
'请填写'
,
show
:
true
,
drawerType
:
'address'
,
mailingAddress
:
{}
mailingAddress
:
{},
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
},
...
...
@@ -328,7 +432,11 @@ const customer = [
disabled
:
false
,
placeholder
:
'请选择'
,
dictType
:
'csf_id_type'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'证件号码'
,
...
...
@@ -339,7 +447,11 @@ const customer = [
maxLength
:
20
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
},
...
...
@@ -357,7 +469,11 @@ const customer = [
maxLength
:
300
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'公司电话'
,
...
...
@@ -370,7 +486,11 @@ const customer = [
drawerType
:
'phone'
,
companyTelephone
:
{},
code
:
'companyAreaCode'
,
maxLength
:
20
maxLength
:
20
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'职位'
,
...
...
@@ -381,7 +501,11 @@ const customer = [
maxLength
:
300
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'总工作年期'
,
...
...
@@ -392,7 +516,11 @@ const customer = [
maxLength
:
300
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'现时每月收入'
,
...
...
@@ -403,7 +531,11 @@ const customer = [
maxLength
:
300
,
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'公司地址'
,
...
...
@@ -414,7 +546,11 @@ const customer = [
placeholder
:
'请填写'
,
show
:
true
,
drawerType
:
'address'
,
companyAddress
:
{}
companyAddress
:
{},
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
}
...
...
src/formJson/fnaForm.js
View file @
11c7857a
...
...
@@ -35,9 +35,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
labelPosition
:
'right'
,
//标签的位置
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
...
...
@@ -51,11 +51,10 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelWidth
:
'130px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
lg
:
8
,
//栅格布局份数,
labelPosition
:
'right'
,
//标签的位置
labelWidth
:
'140px'
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'140px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
label
:
'理财顾问内部编码'
,
...
...
@@ -67,9 +66,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'130px'
,
//标签宽度
labelPosition
:
'right'
,
//标签的位置
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -82,9 +81,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
labelPosition
:
'right'
,
//标签的位置
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -97,9 +96,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
labelPosition
:
'right'
,
//标签的位置
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -112,9 +111,9 @@ const fnaForm = [
placeholder
:
'请输入'
,
show
:
true
,
dictType
:
'csf_employment'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
labelPosition
:
'right'
,
//标签的位置
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -127,9 +126,9 @@ const fnaForm = [
placeholder
:
'请输入'
,
show
:
true
,
dictType
:
'sys_no_yes'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
labelPosition
:
'right'
,
//标签的位置
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -142,9 +141,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
labelPosition
:
'right'
,
//标签的位置
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
...
...
@@ -158,9 +157,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
false
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
labelPosition
:
'right'
,
//标签的位置
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
...
...
@@ -190,8 +189,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
10
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -204,8 +204,9 @@ const fnaForm = [
placeholder
:
'请输入'
,
show
:
true
,
dictType
:
'sys_no_yes'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
10
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
...
...
@@ -226,8 +227,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
10
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -240,8 +242,9 @@ const fnaForm = [
placeholder
:
'请输入'
,
show
:
true
,
dictType
:
'sys_no_yes'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
10
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
...
...
@@ -262,8 +265,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
10
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -276,8 +280,9 @@ const fnaForm = [
placeholder
:
'请输入'
,
show
:
true
,
dictType
:
'sys_no_yes'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
10
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
...
...
@@ -308,8 +313,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -322,8 +328,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -336,8 +343,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -351,8 +359,9 @@ const fnaForm = [
placeholder
:
'请输入'
,
show
:
true
,
dictType
:
'bx_currency_type'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -364,8 +373,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
...
...
@@ -395,8 +405,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -409,8 +420,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -423,8 +435,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -438,8 +451,9 @@ const fnaForm = [
placeholder
:
'请输入'
,
show
:
true
,
dictType
:
'bx_currency_type'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -451,8 +465,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
...
...
@@ -483,8 +498,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'180px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -498,8 +514,9 @@ const fnaForm = [
placeholder
:
'请输入'
,
show
:
true
,
dictType
:
'bx_currency_type'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -512,8 +529,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'220px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
...
...
@@ -542,8 +560,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -557,8 +576,9 @@ const fnaForm = [
placeholder
:
'请输入'
,
show
:
true
,
dictType
:
'bx_currency_type'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -571,8 +591,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
...
...
@@ -597,8 +618,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'220px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -611,8 +633,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelWidth
:
'200px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'220px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -626,8 +649,9 @@ const fnaForm = [
placeholder
:
'请输入'
,
show
:
true
,
dictType
:
'bx_currency_type'
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
},
{
...
...
@@ -640,8 +664,9 @@ const fnaForm = [
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelWidth
:
'170px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'220px'
,
//标签宽度
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
...
...
@@ -683,7 +708,8 @@ const fnaForm = [
inputWidth
:
'300px'
,
//输入框宽度
labelWidth
:
'260px'
,
//标签宽度
sm
:
24
,
//栅格布局份数
lg
:
12
//栅格布局份数
lg
:
12
,
//栅格布局份数
labelPosition
:
'top'
//标签的位置
}
]
},
...
...
@@ -707,7 +733,7 @@ const fnaForm = [
labelWidth
:
'220px'
,
//标签宽度
sm
:
24
,
//栅格布局份数
lg
:
12
,
//栅格布局份数
labelPosition
:
'
right
'
//标签的位置
labelPosition
:
'
top
'
//标签的位置
},
{
label
:
'流动资产种类'
,
...
...
@@ -719,24 +745,24 @@ const fnaForm = [
placeholder
:
'请输入金额(HKD)'
,
show
:
true
,
labelWidth
:
'100px'
,
//标签宽度
sm
:
20
,
//栅格布局份数
lg
:
20
,
//栅格布局份数
labelPosition
:
'
right
'
,
//标签的位置
sm
:
18
,
//栅格布局份数
lg
:
16
,
//栅格布局份数
labelPosition
:
'
top
'
,
//标签的位置
dictType
:
'csf_liquid_asset_type'
},
{
label
:
''
,
key
:
'otherLiquidAsset'
,
dom
Type
:
'Input'
,
input
Type
:
'Input'
,
required
:
false
,
maxLength
:
300
,
disabled
:
false
,
placeholder
:
'请输入说明'
,
show
:
true
,
labelWidth
:
'0px'
,
//标签宽度
sm
:
4
,
//栅格布局份数
lg
:
4
,
//栅格布局份数
labelPosition
:
'
right
'
//标签的位置
sm
:
6
,
//栅格布局份数
lg
:
8
,
//栅格布局份数
labelPosition
:
'
top
'
//标签的位置
}
]
},
...
...
@@ -760,6 +786,7 @@ const fnaForm = [
labelWidth
:
'180px'
,
//标签宽度
sm
:
24
,
//栅格布局份数
lg
:
24
,
//栅格布局份数
labelPosition
:
'top'
,
//标签的位置
dictType
:
'csf_premium_funding_source'
}
]
...
...
src/formJson/productPlan.js
View file @
11c7857a
...
...
@@ -186,7 +186,7 @@ const productPlan = [
required
:
false
,
disabled
:
false
,
placeholder
:
'请选择'
,
show
:
tru
e
,
show
:
fals
e
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
12
,
//栅格布局份数
...
...
src/utils/2.js
View file @
11c7857a
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/utils/date.js
View file @
11c7857a
...
...
@@ -53,3 +53,9 @@ export const calculateExactAge = birthDate => {
return
0
}
}
export
default
{
formatIsoToDateTime
,
formatToDateTime
,
formatToDate
,
getNowTime
}
src/views/sign/FnaList/components/customer.vue
View file @
11c7857a
...
...
@@ -23,11 +23,17 @@
<div
class=
"fatherLable"
>
{{
father
.
fatherTitle
}}
</div>
<div
class=
"fatherDes"
>
{{
father
.
description
}}
</div>
<el-row>
<el-row
:gutter=
"20"
>
<template
v-for=
"child in father.data"
:key=
"child.key"
>
<el-col
:s
pan=
"8
"
class=
"formItem"
v-if=
"child.show"
>
<el-col
:s
m=
"child.sm"
:lg=
"child.lg
"
class=
"formItem"
v-if=
"child.show"
>
<div>
<el-form-item
:label=
"child.label"
:prop=
"child.key"
:key=
"child.key"
>
<el-form-item
:label=
"child.label"
:prop=
"child.key"
:key=
"child.key"
:label-width=
"child.labelWidth"
:label-position=
"child.labelPosition"
>
<el-input
v-if=
"child.type === 'Input'"
:type=
"child.inputType"
...
...
@@ -180,8 +186,7 @@ import Country from '@/views/components/country'
import
Phone
from
'@/views/components/phone'
import
Address
from
'@/views/components/address'
import
{
watch
,
}
from
'vue'
import
{
watch
}
from
'vue'
import
{
addCustomer
,
getCustomerDetail
,
editCustomer
,
getCustomerList
}
from
'@/api/sign/fna'
import
useDictStore
from
'@/store/modules/dict'
const
dictStore
=
useDictStore
()
//获取字典数据
...
...
src/views/sign/FnaList/components/fanForm.vue
View file @
11c7857a
...
...
@@ -20,7 +20,7 @@
<div
class=
"fatherLable"
>
{{
father
.
fatherTitle
}}
</div>
<div
class=
"subTitle"
v-if=
"father.subTitle"
>
{{
father
.
subTitle
}}
</div>
<el-row
v-if=
"father.child == 'no'"
>
<el-row
v-if=
"father.child == 'no'"
:gutter=
"20"
>
<template
v-for=
"child in father.data"
:key=
"child.key"
>
<el-col
:sm=
"child.sm"
:lg=
"child.lg"
class=
"formItem"
v-if=
"child.show"
>
<div>
...
...
@@ -40,6 +40,16 @@
:disabled=
"child.disabled"
:style=
"
{ width: child.inputWidth ? child.inputWidth : '100%' }"
/>
<el-input
v-if=
"child.inputType === 'Input'"
:type=
"child.inputType"
v-model=
"form[father.key][child.key]"
:placeholder=
"child.placeholder"
maxlength=
"30"
:disabled=
"child.disabled"
:style=
"
{ width: child.inputWidth ? child.inputWidth : '100%' }"
class="formInput"
/>
<el-select
v-if=
"child.domType === 'Select'"
v-model=
"form[father.key][child.key]"
...
...
@@ -99,7 +109,7 @@
</
template
>
</el-row>
<!-- 有子孙的dom -->
<el-row
v-if=
"father.child == 'yes'"
>
<el-row
v-if=
"father.child == 'yes'"
:gutter=
"20"
>
<
template
v-for=
"(child, childIndex) in father.data"
:key=
"child.id"
>
<el-col
:span=
"child.span"
>
<div
class=
"childLabel"
v-if=
"father.key == 'familyMembers'"
>
...
...
@@ -130,6 +140,7 @@
:
prop
=
"grandchildren.key"
:
key
=
"grandchildren.key"
:
label
-
width
=
"grandchildren.labelWidth"
:
label
-
position
=
"grandchildren.labelPosition"
>
<
el
-
input
v
-
if
=
"grandchildren.domType === 'Input'"
...
...
@@ -139,6 +150,7 @@
maxlength
=
"30"
:
disabled
=
"grandchildren.disabled"
/>
<
el
-
select
v
-
if
=
"grandchildren.domType === 'Select'"
v
-
model
=
"form[father.key][childIndex][grandchildren.key]"
...
...
@@ -169,9 +181,7 @@
style
=
"margin-left: 10px"
@
click
=
"deleteChildren(father, childIndex)"
>
<
el
-
icon
style
=
"color: red; font-size: 18px; padding-top: 15px"
><
Delete
/><
/el-icon
>
<
el
-
icon
class
=
"deleteIcon"
><
Delete
/><
/el-icon
>
<
/el-col
>
<
/template
>
<
el
-
col
...
...
@@ -179,7 +189,11 @@
v
-
if
=
"father.addFamilyChildren"
style
=
"display: flex; justify-content: flex-end"
>
<
el
-
button
type
=
"primary"
icon
=
"Plus"
@
click
=
"addChildren(father)"
<
el
-
button
:
disabled
=
"editStatus"
type
=
"primary"
icon
=
"Plus"
@
click
=
"addChildren(father)"
>
添加儿女
<
/el-butto
n
>
<
/el-col
>
...
...
@@ -382,6 +396,10 @@ const processFormData = async () => {
}
// 添加表单子级dom
const
addChildren
=
father
=>
{
if
(
editStatus
.
value
)
{
proxy
.
$modal
.
confirm
(
`请先点击编辑再添加儿女`
,
{
showCancel
:
'0'
,
title
:
'填写提示'
}
)
return
}
const
processedData
=
JSON
.
parse
(
JSON
.
stringify
(
processedFanFormData
.
value
))
let
obj
=
{
type
:
'4'
,
...
...
@@ -402,8 +420,9 @@ const addChildren = father => {
disabled
:
false
,
placeholder
:
'请输入'
,
show
:
true
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
10
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
,
{
...
...
@@ -417,8 +436,9 @@ const addChildren = father => {
show
:
true
,
dictType
:
'sys_no_yes'
,
options
:
noYesList
.
value
,
labelPosition
:
'top'
,
//标签的位置
labelWidth
:
'120px'
,
//标签宽度
sm
:
10
,
//栅格布局份数
sm
:
8
,
//栅格布局份数
lg
:
8
//栅格布局份数
}
]
...
...
@@ -804,12 +824,12 @@ watch(
}
.
subTitle
{
font
-
size
:
16
px
;
padding
-
left
:
8
px
;
/* padding-left: 8px; */
margin
-
bottom
:
10
px
;
}
.
childLabel
{
font
-
size
:
14
px
;
padding
-
left
:
15
px
;
/* padding-left: 15px; */
margin
-
bottom
:
15
px
;
}
.
fatherDes
{
...
...
@@ -832,6 +852,11 @@ watch(
color
:
#
a8abb2
;
}
}
.
deleteIcon
{
color
:
red
;
font
-
size
:
18
px
;
padding
-
top
:
15
px
;
}
}
.
tabButton
{
box
-
shadow
:
0
-
1
px
14
px
#
00000014
;
...
...
@@ -894,14 +919,17 @@ watch(
margin
-
right
:
10
px
;
}
/* 确保标签对齐方式正确 */
/* :deep(.el-form-item) {
display: flex;
align-items: center;
}
*/
@
media
only
screen
and
(
min
-
width
:
768
px
)
{
.
formInput
,
.
deleteIcon
{
margin
-
top
:
30
px
!
important
;
}
}
/* :deep(.el-form-item__content) {
flex: 1;
margin-left: 0 !important;
}
*/
@
media
only
screen
and
(
min
-
width
:
1200
px
)
{
.
formInput
,
.
deleteIcon
{
margin
-
top
:
30
px
!
important
;
}
}
<
/style
>
src/views/sign/FnaList/edit.vue
View file @
11c7857a
...
...
@@ -265,7 +265,8 @@ const getDictsData = async () => {
'csf_ap_movie'
,
'csf_ap_game'
,
'wj_question_first_category'
,
'wj_question_second_category'
'wj_question_second_category'
,
'csf_ap_policy_transfer'
])
}
...
...
src/views/sign/FnaList/index.vue
View file @
11c7857a
...
...
@@ -83,7 +83,7 @@
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
type=
"index"
width=
"50"
/>
<el-table-column
label=
"流程编号"
align=
"center"
prop=
"fnaNo"
width=
"200"
/>
<el-table-column
label=
"预约编号"
align=
"center"
prop=
"appointmentNo"
/>
<el-table-column
label=
"预约编号"
align=
"center"
prop=
"appointmentNo"
width=
"200"
/>
<el-table-column
label=
"新单编号"
align=
"center"
prop=
"policyId"
/>
<el-table-column
label=
"保单号"
align=
"center"
prop=
"policyNo"
width=
"150"
/>
...
...
@@ -102,7 +102,7 @@
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间"
sortable
align=
"center"
prop=
"createTime"
width=
"
15
0"
>
<el-table-column
label=
"创建时间"
sortable
align=
"center"
prop=
"createTime"
width=
"
20
0"
>
<
template
#
default=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
createTime
)
}}
</span>
</
template
>
...
...
src/views/sign/appointment/appointmentEdit.vue
View file @
11c7857a
...
...
@@ -35,12 +35,26 @@
</div>
<div
class=
"right"
>
<el-button
type=
"success"
:icon=
"Check"
@
click=
"handleSubmit('submit')"
>
提交
</el-button>
<el-button
v-if=
"idsObj.appointmentBizId"
type=
"primary"
icon=
"Plus"
@
click=
"handleAddExecl"
>
上传EXECL
</el-button
>
</div>
</div>
<div
class=
"tabsBox"
>
<el-row
v-if=
"embed"
>
<el-col>
<div
class=
"topButtonBox"
>
<el-button
v-if=
"idsObj.appointmentBizId"
type=
"primary"
icon=
"Plus"
@
click=
"handleAddExecl"
>
上传EXECL
</el-button
>
<el-button
type=
"success"
:icon=
"Check"
@
click=
"handleSubmit('submit')"
>
提交
</el-button
>
...
...
@@ -167,6 +181,36 @@
</el-tabs>
</div>
</el-card>
<!-- 展示行程单详情 -->
<el-dialog
v-model=
"execlDialog"
title=
"Excel导入"
width=
"40%"
>
<div
class=
"dialogBox"
>
<div>
<div
class=
"tipTitle"
>
您需要准备
</div>
<div
class=
"tipContent"
>
<div>
1、下载模板 Excel
<span
class=
"downloadBtn"
@
click=
"downloadExcel"
><el-icon><Download
/></el-icon>
点击下载
</span
>
</div>
<div
class=
""
>
2、将数据复制到模板 Excel 中
</div>
<div
class=
""
>
3、填写后在这上传模板Excel
</div>
</div>
</div>
<div
class=
"exprotBtn"
>
<!-- :action="uploadImgUrl"
:headers="headers" :on-success="uploadSuccess" -->
<el-upload
:show-file-list=
"false"
:auto-upload=
"false"
:on-change=
"handleFileChange"
accept=
".xlsx,.xls"
>
<el-button
type=
"primary"
@
click=
"execlUpload"
>
上传文件
</el-button>
</el-upload>
</div>
</div>
</el-dialog>
</div>
</
template
>
<
script
setup
name=
"AppointmentEdit"
>
...
...
@@ -187,7 +231,8 @@ import {
addAppointment
,
getAppointmentDetail
,
storageAppointment
,
editAppointmentDetail
editAppointmentDetail
,
uploadExcel
}
from
'@/api/sign/appointment'
import
{
listTenantUser
,
getInsuranceProductList
,
getAdditionalProductList
}
from
'@/api/common'
import
{
Check
}
from
'@element-plus/icons-vue'
...
...
@@ -222,13 +267,15 @@ const customerInfo = ref({})
const
idsObj
=
ref
({})
//各个模块的bizId
// const appointmentSummeryInfo = ref({ apiAppointmentInfoDto: { appointmentBizId: '' } }) //预约详情总信息
const
appointmentSummeryInfo
=
ref
({})
//预约详情总信息
const
currentFile
=
ref
(
null
)
const
processInfo
=
ref
({
fnaNo
:
'暂无'
,
status
:
'未完成'
,
createTime
:
proxy
.
parseTime
(
new
Date
()),
customerName
:
userStore
.
name
})
const
execlDialog
=
ref
(
false
)
const
tabsList
=
ref
([
{
label
:
'预约信息'
,
...
...
@@ -315,11 +362,112 @@ const tabsList = ref([
// key: 'fnaBizId'
// },
])
// 获取字典数据
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
[]
}
}
// 上传EXECL
const
handleAddExecl
=
()
=>
{
execlDialog
.
value
=
true
}
const
downloadExcel
=
()
=>
{
// 创建隐藏的下载链接
const
link
=
document
.
createElement
(
'a'
)
link
.
href
=
'https://yd-ali-oss.oss-cn-shanghai-finance-1-pub.aliyuncs.com/xlsx/2025/10/13/1e7a3124c5c04c6b83a43c99fd5af241.xlsx'
// link.target = '_blank' // 新窗口打开
// 设置下载文件名(重要)
// 从URL中提取文件名,或者使用返回的文件名
const
fileName
=
`预约模板.pdf`
link
.
download
=
fileName
// 触发下载
document
.
body
.
appendChild
(
link
)
link
.
click
()
document
.
body
.
removeChild
(
link
)
}
const
handleFileChange
=
async
file
=>
{
// 文件验证
const
isExcel
=
file
.
name
.
endsWith
(
'.xlsx'
)
||
file
.
name
.
endsWith
(
'.xls'
)
if
(
!
isExcel
)
{
ElMessage
.
error
(
'只能上传 Excel 文件!'
)
return
false
}
if
(
file
.
name
.
includes
(
','
))
{
ElMessage
.
error
(
'文件名不正确,不能包含英文逗号!'
)
return
false
}
const
isLt
=
file
.
size
/
1024
/
1024
<
10
if
(
!
isLt
)
{
ElMessage
.
error
(
`上传文件大小不能超过10MB!`
)
return
false
}
// 直接上传
try
{
// 创建 FormData 对象
const
formData
=
new
FormData
()
// 获取原始文件对象(重要!)
const
rawFile
=
file
.
raw
// 添加文件到 FormData(第二个参数是文件对象,第三个参数是文件名)
formData
.
append
(
'file'
,
rawFile
,
rawFile
.
name
)
// 添加其他参数
formData
.
append
(
'appointmentBizId'
,
idsObj
.
value
.
appointmentBizId
)
const
res
=
await
uploadExcel
(
formData
)
if
(
res
.
code
===
200
)
{
proxy
.
$message
.
success
(
'上传文件成功'
)
execlDialog
.
value
=
false
}
}
catch
(
error
)
{
proxy
.
$message
.
error
(
'上传失败'
)
console
.
error
(
'Upload error:'
,
error
)
}
return
false
// 阻止自动上传
}
const
execlUpload
=
()
=>
{
let
data
=
{
appointmentBizId
:
idsObj
.
value
.
appointmentBizId
,
file
:
currentFile
.
value
}
if
(
currentFile
.
value
)
{
uploadExcel
(
data
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
proxy
.
$message
.
success
(
'上传文件成功'
)
execlDialog
.
value
=
false
}
})
}
}
// 获取预约详情
function
getAppointmentInfo
(
appointmentBizId
,
changeTab
)
{
getAppointmentDetail
(
appointmentBizId
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
appointmentSummeryInfo
.
value
=
res
.
data
let
options
=
fetchDictData
(
'csf_ap_status'
)
options
.
forEach
(
item
=>
{
if
(
item
.
value
==
appointmentSummeryInfo
.
value
.
status
)
{
processInfo
.
value
.
status
=
item
.
label
}
})
if
(
!
appointmentSummeryInfo
.
value
.
apiAppointmentInfoDto
.
appointmentBizId
)
{
showStorage
.
value
=
true
}
...
...
@@ -413,7 +561,8 @@ const getDictsData = async () => {
'csf_ap_game'
,
'csf_ap_policy_transfer'
,
'wj_question_first_category'
,
'wj_question_second_category'
'wj_question_second_category'
,
'csf_ap_status'
])
}
// Tab切换前的验证
...
...
@@ -464,6 +613,10 @@ const handleSubmit = type => {
submitAppointmentObj
.
value
.
apiAppointmentInfoDto
.
policyTransfer
=
policyTransferRef
.
value
[
0
].
form
.
policyTransfer
}
if
(
questionnairesInfoRef
.
value
)
{
submitAppointmentObj
.
value
.
answerSessionsDtoList
=
questionnairesInfoRef
.
value
[
0
].
handleFormValues
().
answerSessionsDtoList
}
// 代表新增预约
if
(
formStatus
.
value
==
'appointmentAdd'
&&
!
idsObj
.
value
.
appointmentBizId
)
{
submitAppointmentObj
.
value
.
apiAppointmentInfoDto
.
customerBizId
=
...
...
@@ -502,20 +655,44 @@ const handleSubmit = type => {
)
{
submitAppointmentObj
.
value
[
key2
]
=
appointmentSummeryInfo
.
value
[
key1
]
}
// if()
if
(
key2
==
'apiPolicyholderInfoDto'
&&
Object
.
keys
(
submitAppointmentObj
.
value
[
key2
]).
length
!==
0
)
{
submitAppointmentObj
.
value
[
key2
][
'appointmentBizId'
]
=
appointmentSummeryInfo
.
value
.
apiPolicyholderInfoDto
.
appointmentBizId
submitAppointmentObj
.
value
[
key2
][
'id'
]
=
appointmentSummeryInfo
.
value
.
apiPolicyholderInfoDto
.
id
submitAppointmentObj
.
value
[
key2
][
'policyholderBizId'
]
=
appointmentSummeryInfo
.
value
.
apiPolicyholderInfoDto
.
policyholderBizId
}
if
(
key2
==
'apiInsurantInfoDto'
&&
Object
.
keys
(
submitAppointmentObj
.
value
[
key2
]).
length
!==
0
)
{
submitAppointmentObj
.
value
[
key2
][
'appointmentBizId'
]
=
appointmentSummeryInfo
.
value
.
apiInsurantInfoDto
.
appointmentBizId
submitAppointmentObj
.
value
[
key2
][
'id'
]
=
appointmentSummeryInfo
.
value
.
apiInsurantInfoDto
.
id
submitAppointmentObj
.
value
[
key2
][
'insurantBizId'
]
=
appointmentSummeryInfo
.
value
.
apiInsurantInfoDto
.
insurantBizId
}
}
}
// 新增预约单
// 编辑预约单
editAppointmentDetail
(
submitAppointmentObj
.
value
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
getAppointmentInfo
(
idsObj
.
value
.
appointmentBizId
)
appointmentInfoRef
.
value
[
0
].
handleEditStatus
()
productPlanRef
.
value
[
0
].
handleEditStatus
()
policyHolderInfoRef
.
value
[
0
].
handleEditStatus
()
insuredInfoRef
.
value
[
0
].
handleEditStatus
()
secondHolderInfoRef
.
value
[
0
].
handleEditStatus
()
beneficiaryInfoRef
.
value
[
0
].
handleEditStatus
()
policyTransferRef
.
value
[
0
].
handleEditStatus
()
questionnairesInfoRef
.
value
[
0
].
handleEditStatus
()
appointmentInfoRef
.
value
[
0
].
handleEditStatus
(
true
)
productPlanRef
.
value
[
0
].
handleEditStatus
(
true
)
policyHolderInfoRef
.
value
[
0
].
handleEditStatus
(
true
)
insuredInfoRef
.
value
[
0
].
handleEditStatus
(
true
)
secondHolderInfoRef
.
value
[
0
].
handleEditStatus
(
true
)
beneficiaryInfoRef
.
value
[
0
].
handleEditStatus
(
true
)
policyTransferRef
.
value
[
0
].
handleEditStatus
(
true
)
questionnairesInfoRef
.
value
[
0
].
handleEditStatus
(
true
)
proxy
.
$message
.
success
(
'修改预约单成功'
)
}
})
...
...
@@ -732,7 +909,7 @@ onUnmounted(() => {
min-height
:
calc
(
100vh
-
84.5px
);
}
.embed-container
{
min-height
:
calc
(
100vh
-
3
17
px
);
min-height
:
calc
(
100vh
-
3
25
px
);
}
.appointment-container
{
display
:
flex
;
...
...
@@ -792,6 +969,7 @@ onUnmounted(() => {
width
:
100%
;
display
:
flex
;
justify-content
:
flex-end
;
margin-bottom
:
10px
;
}
.tabButton
{
box-shadow
:
0
-1px
14px
#00000014
;
...
...
@@ -905,4 +1083,25 @@ onUnmounted(() => {
}
}
}
.dialogBox
{
.tipTitle
{
font-size
:
16px
;
font-weight
:
600
;
}
.tipContent
{
margin-top
:
10px
;
div
{
margin-top
:
10px
;
.downloadBtn
{
color
:
#165dff
;
}
}
}
.exprotBtn
{
width
:
100%
;
display
:
flex
;
align-items
:
center
;
justify-content
:
flex-end
;
}
}
</
style
>
src/views/sign/appointment/components/appointmentInfo.vue
View file @
11c7857a
...
...
@@ -8,7 +8,7 @@
v-if=
"props.idsObj.appointmentBizId"
type=
"primary"
icon=
"EditPen"
@
click=
"handleEditStatus"
@
click=
"handleEditStatus
(!editStatus)
"
>
编辑
</el-button
>
</div>
...
...
@@ -126,6 +126,7 @@
</el-row>
</el-form>
</div>
<!-- <div v-else class="domEmpty" v-loading="loading"></div> -->
<Phone
@
close=
"handleCloseDrawer"
:showDrawer=
"showPhoneDrawer"
...
...
@@ -489,8 +490,8 @@ const handleSelectChange = (father, child) => {
}
}
// 改变编辑状态
const
handleEditStatus
=
()
=>
{
editStatus
.
value
=
!
editStatus
.
value
const
handleEditStatus
=
status
=>
{
editStatus
.
value
=
status
// 深拷贝原始数据
const
processedData
=
JSON
.
parse
(
JSON
.
stringify
(
processedAppointmentData
.
value
))
for
(
const
section
of
processedData
)
{
...
...
@@ -726,7 +727,7 @@ const submitForm = () => {
if
(
props
.
idsObj
.
appointmentBizId
)
{
editAppointmentInfo
(
submitObj
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
handleEditStatus
()
handleEditStatus
(
true
)
proxy
.
$message
.
success
(
'预约信息修改成功'
)
emit
(
'handleSuccessEdit'
)
}
...
...
@@ -772,6 +773,7 @@ watch(
setTimeout
(()
=>
{
processFormData
()
},
500
)
// processFormData()
}
}
)
...
...
@@ -791,6 +793,17 @@ defineExpose({
})
</
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
;
...
...
src/views/sign/appointment/components/beneficiaryInfo.vue
View file @
11c7857a
...
...
@@ -15,7 +15,7 @@
v-if=
"props.idsObj.appointmentBizId"
type=
"primary"
icon=
"EditPen"
@
click=
"handleEditStatus"
@
click=
"handleEditStatus
(!editStatus)
"
>
编辑
</el-button
>
</div>
...
...
@@ -174,6 +174,7 @@
</div>
</el-dialog>
</div>
<!-- <div v-else class="domEmpty" v-loading="loading"></div> -->
<Phone
@
close=
"handleCloseDrawer"
:showDrawer=
"showPhoneDrawer"
...
...
@@ -692,8 +693,8 @@ const handleSelectChange = (child, l1, l2) => {
}
}
// 改变编辑状态
const
handleEditStatus
=
()
=>
{
editStatus
.
value
=
!
editStatus
.
value
const
handleEditStatus
=
status
=>
{
editStatus
.
value
=
status
console
.
log
(
'触发了编辑状态'
,
editStatus
.
value
)
// 深拷贝原始数据
...
...
@@ -891,21 +892,21 @@ const handleFormValues = () => {
if
(
pattern
.
test
(
key
)
&&
section
[
key
])
{
section
[
key
]
=
proxy
.
formatToDateTime
(
section
[
key
])
}
if
(
section
[
'customerType'
]
==
'COMPANY'
)
{
for
(
const
key1
in
companyObj
.
value
)
{
if
(
key
==
key1
&&
section
[
key
])
{
submitObj
[
key1
]
=
section
[
key
]
}
if
(
key
==
'companyMobile'
&&
section
[
key
])
{
submitObj
[
key
]
=
section
[
key
].
split
(
' '
)[
1
]
submitObj
[
'companyMobileCode'
]
=
section
[
key
].
split
(
' '
)[
0
]
}
if
(
key
==
'authMobile'
&&
section
[
key
])
{
submitObj
[
key
]
=
section
[
key
].
split
(
' '
)[
1
]
submitObj
[
'authMobileCode'
]
=
section
[
key
].
split
(
' '
)[
0
]
}
}
}
//
if (section['customerType'] == 'COMPANY') {
//
for (const key1 in companyObj.value) {
//
if (key == key1 && section[key]) {
//
submitObj[key1] = section[key]
//
}
//
if (key == 'companyMobile' && section[key]) {
//
submitObj[key] = section[key].split(' ')[1]
//
submitObj['companyMobileCode'] = section[key].split(' ')[0]
//
}
//
if (key == 'authMobile' && section[key]) {
//
submitObj[key] = section[key].split(' ')[1]
//
submitObj['authMobileCode'] = section[key].split(' ')[0]
//
}
//
}
//
}
if
(
section
[
'customerType'
]
==
'INDIVIDUAL'
&&
section
[
key
])
{
for
(
const
key1
in
personalObj
.
value
)
{
if
(
key
==
key1
)
{
...
...
@@ -914,6 +915,18 @@ const handleFormValues = () => {
}
}
}
if
(
submitObj
[
'companyMobile'
])
{
submitObj
[
'companyMobileCode'
]
=
submitObj
[
'companyMobile'
].
split
(
' '
)[
0
]
submitObj
[
'companyMobile'
]
=
submitObj
[
'companyMobile'
].
split
(
' '
)[
1
]
}
if
(
submitObj
[
'mobile'
])
{
submitObj
[
'mobileCode'
]
=
submitObj
[
'mobile'
].
split
(
' '
)[
0
]
submitObj
[
'mobile'
]
=
submitObj
[
'mobile'
].
split
(
' '
)[
1
]
}
if
(
submitObj
[
'authMobile'
])
{
submitObj
[
'authMobileCode'
]
=
submitObj
[
'authMobile'
].
split
(
' '
)[
0
]
submitObj
[
'authMobile'
]
=
submitObj
[
'authMobile'
].
split
(
' '
)[
1
]
}
phoneOraddressKey
.
value
.
forEach
(
item
=>
{
if
(
item
.
drawerType
==
'address'
&&
item
.
id
===
section
.
id
)
{
submitObj
.
addressList
.
push
({
...
...
@@ -958,7 +971,7 @@ const submitForm = () => {
apiBeneficiaryInfoDtoList
:
submitObj
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
handleEditStatus
()
handleEditStatus
(
true
)
proxy
.
$message
.
success
(
'受益人修改成功'
)
emit
(
'handleSuccessEdit'
)
}
...
...
@@ -1026,6 +1039,17 @@ defineExpose({
})
</
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
;
...
...
src/views/sign/appointment/components/fnaInfo.vue
View file @
11c7857a
...
...
@@ -7,10 +7,10 @@
@
sort-change=
"sortChange"
>
<!--
<el-table-column
type=
"selection"
width=
"55"
/>
-->
<el-table-column
type=
"index"
width=
"50"
/>
<el-table-column
type=
"index"
width=
"50"
label=
"序号"
/>
<el-table-column
label=
"流程编号"
align=
"center"
prop=
"fnaNo"
width=
"200"
/>
<el-table-column
label=
"预约编号"
align=
"center"
prop=
"appointmentNo"
/>
<el-table-column
label=
"新单编号"
align=
"center"
prop=
"policyId"
/>
<el-table-column
label=
"预约编号"
align=
"center"
prop=
"appointmentNo"
width=
"200"
/>
<el-table-column
label=
"新单编号"
align=
"center"
prop=
"policyId"
width=
"150"
/>
<el-table-column
label=
"保单号"
align=
"center"
prop=
"policyNo"
width=
"150"
/>
<el-table-column
label=
"客户姓名"
align=
"center"
prop=
"customerName"
width=
"100"
/>
...
...
@@ -28,7 +28,7 @@
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间"
sortable
align=
"center"
prop=
"createTime"
width=
"
15
0"
>
<el-table-column
label=
"创建时间"
sortable
align=
"center"
prop=
"createTime"
width=
"
20
0"
>
<
template
#
default=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
createTime
)
}}
</span>
</
template
>
...
...
src/views/sign/appointment/components/healthInfo.vue
View file @
11c7857a
...
...
@@ -11,7 +11,7 @@
v-if=
"props.idsObj.appointmentBizId"
type=
"primary"
icon=
"EditPen"
@
click=
"handleEditStatus"
@
click=
"handleEditStatus
(!editStatus)
"
>
编辑
</el-button
>
</div>
...
...
@@ -22,7 +22,6 @@
<el-row
style=
"margin-bottom: 10px"
>
<div
class=
"formBox"
>
<div
class=
"fatherLable"
>
{{
level1
.
firstCategoryName
}}
</div>
<!--
<div
class=
"fatherDes"
>
{{
father
.
description
}}
</div>
-->
<el-row
:gutter=
"20"
>
<template
...
...
@@ -30,140 +29,144 @@
:key=
"level2.secondCategory"
>
<el-col
:sm=
"level2.sm"
:lg=
"level2.lg"
class=
"formItem"
>
<div
class=
"level2Title"
>
{{
level2
.
secondCategoryName
}}
</div>
<div
class=
"level2Content"
v-for=
"(level3, l3) in level2.questionsDtoList"
>
<div
class=
"level2Left"
>
{{
l3
+
1
}}
/
{{
level2
.
questionsDtoList
.
length
}}
</div>
<div
class=
"level2Right"
>
<div
class=
"level3Title"
>
{{
level3
.
text
}}
</div>
<!--
<el-form-item
:label-width=
"level3.labelWidth"
:key=
"level3.key"
:label-position=
"level3.labelPosition"
>
-->
<div
class=
"level3Content"
>
<el-radio-group
v-model=
"
form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3][
'answerSessionsDto'
]['optionBizId']
"
@
change=
"handleRadioChange(l1, l2, l3, level3)"
<div
class=
"level2Title"
>
{{
level2
.
secondCategoryName
}}
</div>
<div>
<div
class=
"level2Content"
v-for=
"(level3, l3) in level2.questionsDtoList"
>
<div
class=
"level2Left"
v-if=
"level2.secondCategory !== 'MEDICAL_CONDITION'"
>
{{
l3
+
1
}}
/
{{
level2
.
questionsDtoList
.
length
}}
</div>
<div
class=
"level2Right"
>
<div
class=
"level3Title"
v-if=
"level2.secondCategory !== 'MEDICAL_CONDITION'"
>
<el-radio
v-for=
"dict in level3.optionsDtoList"
:key=
"dict.optionBizId"
:value=
"dict.optionBizId"
>
{{
dict
.
text
}}
</el-radio
>
</el-radio-group>
{{
level3
.
text
}}
</div>
<div
v-if=
"
form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3][
'answerSessionsDto'
]['optionBizId'] == 'option_1002'
"
style=
"width: 100%"
class=
"level3Content"
v-if=
"level2.secondCategory !== 'MEDICAL_CONDITION'"
>
<div
v-for=
"level4 in level3.addQuestionsDtoList"
>
<!-- -->
<el-form-item
label-position=
"top"
:key=
"level4.addQuestionsBizId"
:label=
"level4.text"
:rules=
"
level4.isRequired
? [
{
required: true,
message: `${level4.text}不能为空`,
trigger: 'blur'
}
]
: []
"
<!-- 回显得时候拿不到optionBizId -->
<el-radio-group
v-model=
"
form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3][
'answerSessionsDto'
]['optionBizId']
"
@
change=
"handleRadioChange(l1, l2, l3, level3)"
:disabled=
"editStatus"
>
<el-radio
v-for=
"dict in level3.optionsDtoList"
:key=
"dict.optionBizId"
:value=
"dict.optionBizId"
>
{{
dict
.
text
}}
</el-radio
>
<div
class=
"level4Content"
>
<el-input
v-if=
"level4.type === 'TEXT'"
:type=
"level4.type"
placeholder=
"请输入"
maxlength=
"30"
style=
"width: 50%"
@
blur=
"inputBlur(l1, l2, l3, level4)"
/>
<!-- @change="handleDateChange(child)" -->
<el-date-picker
style=
"width: 50%"
v-if=
"level4.type === 'DATE'"
:type=
"level4.type"
placeholder=
"请输入"
:disabled-date=
"disabledDate"
/>
</div>
</el-form-item>
</el-radio-group>
<!--选择是才展示附加条件 -->
<div
v-if=
"
form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3][
'answerSessionsDto'
]['optionBizId'] == 'option_1002'
"
style=
"width: 100%"
>
<!-- 附加问题 -->
<div
v-for=
"(level4, l4) in level3.addQuestionsDtoList"
>
<el-form-item
label-position=
"top"
:key=
"level4.addQuestionsBizId"
:label=
"level4.text"
:rules=
"
level4.isRequired
? [
{
required: true,
message: `${level4.text}不能为空`,
trigger: 'blur'
}
]
: []
"
>
<div
class=
"level4Content"
>
<el-input
v-if=
"level4.type === 'TEXT'"
:type=
"level4.type"
v-model=
"
form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][
l3
]['addQuestionsDtoList'][l4]['content']
"
placeholder=
"请输入"
maxlength=
"30"
style=
"width: 50%"
:disabled=
"editStatus"
/>
<el-date-picker
style=
"width: 50%"
v-if=
"level4.type === 'DATE'"
:disabled=
"editStatus"
v-model=
"
form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][
l3
]['addQuestionsDtoList'][l4]['content']
"
type=
"date"
placeholder=
"请输入"
:disabled-date=
"disabledDate"
@
change=
"handleDateChange(l1, l2, l3, l4)"
/>
</div>
</el-form-item>
</div>
</div>
</div>
<div
v-if=
"level2.secondCategory == 'MEDICAL_CONDITION'"
>
<div
v-for=
"(question, q4) in level3.answerSessionsDto
.questionTextJsonDtoList"
style=
"margin-bottom: 10px"
>
<div
class=
"questionContent"
>
<div
class=
"questionTitle"
>
{{
`${question.title
}
${q4 + 1
}
`
}}
<
/div
>
<
el
-
input
type
=
"text"
:
disabled
=
"editStatus"
v
-
model
=
"
form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3][
'answerSessionsDto'
]['questionTextJsonDtoList'][q4]['content']
"
placeholder
=
"请输入"
maxlength
=
"300"
style
=
"width: 70%"
/>
<
el
-
icon
class
=
"deleteIcon"
@
click
=
"deleteMedical(l1, l2, l3, q4)"
><
Remove
/><
/el-icon
>
<
/div
>
<
/div
>
<
el
-
button
class
=
"addBtn"
type
=
"primary"
:
icon
=
"Plus"
size
=
"small"
@
click
=
"addMedical(l1, l2, l3)"
:
disabled
=
"editStatus"
>
继续添加
<
/el-butto
n
>
<
/div
>
<
/div
>
<!--
</el-form-item>
-->
<
/div
>
<
/div
>
<!--
<div>
<el-form-item
:label-width=
"child.labelWidth"
:label=
"child.label"
:prop=
"child.key"
:key=
"child.key"
:label-position=
"child.labelPosition"
>
<el-input
v-if=
"child.domType === 'Input'"
:type=
"child.inputType"
v-model=
"form[child.key]"
:placeholder=
"child.placeholder"
maxlength=
"30"
:disabled=
"child.disabled"
/>
<el-select
v-if=
"child.domType === 'Select'"
v-model=
"form[child.key]"
:placeholder=
"child.placeholder"
@
change=
"handleSelectChange(father, child)"
:disabled=
"child.disabled"
>
<el-option
v-for=
"item in child.options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
<el-date-picker
v-model=
"form[child.key]"
style=
"width: 100%"
v-if=
"child.domType === 'DatePicker'"
type=
"date"
:placeholder=
"child.placeholder"
:disabled=
"child.disabled"
:disabled-date=
"disabledDate"
@
change=
"handleDateChange(child)"
/>
<el-input
v-if=
"child.domType === 'arrowRight'"
v-model=
"form[child.key]"
:placeholder=
"child.placeholder"
@
click=
"handleFoucs(child)"
:suffix-icon=
"ArrowRight"
readonly
:disabled=
"child.disabled"
>
</el-input>
<el-button
v-if=
"child.domType === 'button'"
:type=
"child.buttonType"
>
{{
child
.
buttonTxt
}}
</el-button>
</el-form-item>
</div>
-->
<
/el-col
>
<
/template
>
<
/el-row
>
...
...
@@ -185,91 +188,23 @@
type
=
"primary"
icon
=
"Check"
@
click
=
"submitForm"
size=
"large"
:
disabled
=
"editStatus"
size
=
"large"
>
提交
<
/el-butto
n
>
<
/div
>
<
/el-col
>
<
/el-row
>
<
/el-form
>
<el-dialog
title=
"联系人信息"
v-model=
"openList"
width=
"600px"
append-to-body
>
<div>
<el-form
:model=
"queryParams"
ref=
"queryRef"
:inline=
"true"
label-width=
"85px"
>
<el-form-item
label=
"联系人姓名"
prop=
"name"
>
<el-input
v-model=
"queryParams.name"
placeholder=
"请输入姓名"
@
input=
"customerList"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"Search"
circle
@
click=
"customerList"
/>
<el-button
type=
"info"
icon=
"Refresh"
circle
@
click=
"resetCustomerList"
/>
</el-form-item>
</el-form>
<div
class=
"customerBox"
>
<div
class=
"customerItem"
v-for=
"item in tableData"
:key=
"item.id"
>
<div
class=
"top"
>
<div
class=
"right"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"handleExport(item)"
>
导入联系人
</el-button
>
</div>
</div>
<div
class=
"bottom"
>
<div
class=
"left"
>
<div
class=
"infoItem"
>
<span>
姓名:
</span>
<span>
{{ item.name || '暂无' }}
</span>
</div>
<div
class=
"infoItem"
>
<span>
性别:
</span>
<span>
<dict-tag
:options=
"fetchDictData('sys_gender')"
:value=
"item.gender"
/></span>
</div>
<div
class=
"infoItem"
>
<span>
年龄:
</span>
<span>
{{ item.age || '暂无' }}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</el-dialog>
<
/div
>
<Phone
@
close=
"handleCloseDrawer"
:showDrawer=
"showPhoneDrawer"
:drawerInfo=
"drawerInfo"
:phoneMenuList=
"phoneMenuList"
: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
v
-
else
class
=
"domEmpty"
v
-
loading
=
"loading"
><
/div
>
<
/div
>
<
/template
>
<
script
setup
name
=
"secondHolderInfo"
>
import
{
calculateExactAge
}
from
'@/utils/date'
import
{
ArrowRight
}
from
'@element-plus/icons-vue'
import
secondHolderDomData
from
'@/formJson/secondHolder'
import
Country
from
'@/views/components/country'
import
Phone
from
'@/views/components/phone'
import
Address
from
'@/views/components/address'
import
{
Plus
}
from
'@element-plus/icons-vue'
import
{
watch
,
nextTick
}
from
'vue'
import
{
getCustomerList
}
from
'@/api/sign/fna'
import
{
editSecondHolderInfo
,
getQuestionnaires
}
from
'@/api/sign/appointment'
import
{
watch
}
from
'vue'
import
{
getQuestionnaires
,
saveQuestionnaires
}
from
'@/api/sign/appointment'
import
useDictStore
from
'@/store/modules/dict'
const
dictStore
=
useDictStore
()
//获取字典数据
...
...
@@ -284,90 +219,14 @@ const props = defineProps({
}
)
const
emit
=
defineEmits
([
'handleSuccessEdit'
])
const
{
proxy
}
=
getCurrentInstance
()
// const { csf_id_type, sys_gender } = proxy.useDict('csf_id_type', 'sys_gender')
const
showPhoneDrawer
=
ref
(
false
)
//电话抽屉开关
const
showAddressDrawer
=
ref
(
false
)
//地址抽屉开关
const
showCountryDrawer
=
ref
(
false
)
//国家/地区抽屉开关
const
drawerInfo
=
ref
({})
// 用于存储所有arrowRight类型的输入框输入值
const
saveKey
=
ref
({})
// 用于存储当前点击的drawer框返回的对象,修改的时候回显值也要存key
const
tempSaveKey
=
ref
({})
// 用于tab切换的时候保存一份临时的值,防止切换的时候数据丢失
const
loading
=
ref
(
false
)
const
errorFields
=
ref
([])
// 存储校验失败的字段信息
const
editStatus
=
ref
(
true
)
// 表单是否可编辑,若是修改初始不可编辑
const
openList
=
ref
(
false
)
// 客户列表弹窗
const
oldObjInfo
=
ref
({
}
)
// 修改时存储原始数据,便于撤销操作
const
showContacts
=
ref
(
true
)
const
tableLoading
=
ref
(
false
)
const
tableData
=
ref
([])
const
total
=
ref
(
0
)
// 地址组件菜单数据
const
addressMenuList
=
ref
([
{
name
:
'国家/地区'
,
icon
:
false
,
value
:
''
,
placeholder
:
'请输入国家/地区'
,
key
:
'region'
},
{
name
:
'省市'
,
icon
:
false
,
value
:
''
,
placeholder
:
'请输入省市'
,
key
:
'city'
},
{
name
:
'街道'
,
icon
:
false
,
value
:
''
,
placeholder
:
'请输入街道'
,
key
:
'street'
},
{
name
:
'详细地址'
,
icon
:
false
,
value
:
''
,
placeholder
:
'请输入详细地址'
,
key
:
'location'
}
])
// 快捷地址的数据
const
addressQuickList
=
ref
([])
const
phoneMenuList
=
ref
([
{
name
:
'区号'
,
icon
:
true
,
value
:
''
,
placeholder
:
'请输入区号'
,
arrow
:
true
,
type
:
'string'
},
{
name
:
'电话号码'
,
icon
:
false
,
value
:
''
,
placeholder
:
'请输入电话号码'
,
type
:
'number'
}
])
const
phoneQuickList
=
ref
([])
const
personalObj
=
ref
({})
//存储个人key
const
companyObj
=
ref
({})
//存储公司key
const
commonObj
=
ref
({})
//存储个人和公司的公共key
const
deleteKeyList
=
ref
([
'objType'
,
'mailingAddress'
,
'residentialAddress'
,
'residenceAddress'
,
'companyAddress'
,
'txAddress'
,
'companyEnterAddress'
,
'phoneString'
,
'phoneCode'
])
// 存储需要删除的key
const
data
=
reactive
({
form
:
{}
,
tempSecondHolderForm
:
{}
,
//由于切换tab的时候,表单数据会重置,所以需要
form
:
[]
,
tempSecondHolderForm
:
[]
,
//由于切换tab的时候,表单数据会重置,所以需要
questionnairesDom
:
[],
// 处理后的表单数据
oldAppointmentData
:
[],
// 保存旧的表单Dom,便于撤销操作
rules
:
{
}
,
//表单验证规则,
...
...
@@ -379,97 +238,68 @@ const data = reactive({
}
)
const
{
form
,
rules
,
questionnairesDom
,
queryParams
,
oldAppointmentData
,
tempSecondHolderForm
}
=
toRefs
(
data
)
const
addMedical
=
(
l1
,
l2
,
l3
)
=>
{
form
.
value
[
l1
][
'secondCategoryDtoList'
][
l2
][
'questionsDtoList'
][
l3
][
'answerSessionsDto'
][
'questionTextJsonDtoList'
].
push
({
title
:
'病况'
,
content
:
''
}
)
}
const
deleteMedical
=
(
l1
,
l2
,
l3
,
index
)
=>
{
if
(
editStatus
.
value
)
{
proxy
.
$modal
.
confirm
(
`请先点击编辑在删除病况`
,
{
showCancel
:
'0'
,
title
:
'填写提示'
}
)
return
}
form
.
value
[
l1
][
'secondCategoryDtoList'
][
l2
][
'questionsDtoList'
][
l3
][
'answerSessionsDto'
][
'questionTextJsonDtoList'
].
splice
(
index
,
1
)
questionnairesDom
.
value
[
l1
][
'secondCategoryDtoList'
][
l2
][
'questionsDtoList'
][
l3
][
'answerSessionsDto'
][
'questionTextJsonDtoList'
].
splice
(
index
,
1
)
}
const
handleRadioChange
=
(
l1
,
l2
,
l3
,
level3
)
=>
{
let
answer
=
JSON
.
parse
(
JSON
.
stringify
(
form
.
value
[
l1
][
'secondCategoryDtoList'
][
l2
][
'questionsDtoList'
][
l3
][
'answerSessionsDto'
]
)
)
let
optionItem
=
level3
.
optionsDtoList
.
filter
(
item
=>
item
.
optionBizId
===
answer
.
optionBizId
)
if
(
optionItem
[
0
].
value
==
'YES'
)
{
let
newObj
=
{
optionBizId
:
optionItem
[
0
].
optionBizId
,
content
:
optionItem
[
0
].
value
}
// 检查数组中是否已存在相同ID的地址
const
existingIndex
=
answer
.
optionJsonDtoList
.
findIndex
(
item
=>
item
.
optionBizId
===
optionItem
[
0
].
optionBizId
)
let
newObj
=
{
optionBizId
:
optionItem
[
0
].
optionBizId
,
content
:
optionItem
[
0
].
value
}
// 检查数组中是否已存在相同ID的地址
const
existingIndex
=
answer
.
optionJsonDtoList
.
findIndex
(
item
=>
item
.
optionBizId
===
optionItem
[
0
].
optionBizId
)
if
(
existingIndex
!==
-
1
)
{
// 更新已存在的地址
answer
.
optionJsonDtoList
[
existingIndex
]
=
{
...
newObj
}
}
else
{
// 添加新地址
answer
.
optionJsonDtoList
.
push
({
...
newObj
})
}
if
(
existingIndex
!==
-
1
)
{
// 更新已存在的数据
answer
.
optionJsonDtoList
[
existingIndex
]
=
{
...
newObj
}
}
else
{
// 添加新的数据
answer
.
optionJsonDtoList
.
push
({
...
newObj
}
)
}
form
.
value
[
l1
][
'secondCategoryDtoList'
][
l2
][
'questionsDtoList'
][
l3
][
'answerSessionsDto'
]
=
answer
console
.
log
(
'===================================='
)
console
.
log
(
'改变'
,
form
.
value
[
l1
][
'secondCategoryDtoList'
][
l2
][
'questionsDtoList'
][
l3
][
'answerSessionsDto'
]
)
console
.
log
(
'===================================='
)
}
const
inputBlur
=
(
l1
,
l2
,
l3
,
level4
)
=>
{
// 写到这了
let
answer
=
JSON
.
parse
(
JSON
.
stringify
(
form
.
value
[
l1
][
'secondCategoryDtoList'
][
l2
][
'questionsDtoList'
][
l3
][
'answerSessionsDto'
]
)
)
}
const
handleDateChange
=
child
=>
{
let
age
=
null
if
(
child
.
key
==
'birthTime'
)
{
age
=
calculateExactAge
(
proxy
.
formatToDate
(
form
.
value
.
birthTime
))
if
(
age
>=
0
)
{
form
.
value
.
age
=
age
}
}
const
handleDateChange
=
(
l1
,
l2
,
l3
,
l4
)
=>
{
let
time
=
form
.
value
[
l1
][
'secondCategoryDtoList'
][
l2
][
'questionsDtoList'
][
l3
][
'addQuestionsDtoList'
][
l4
][
'content'
]
time
=
proxy
.
formatToDate
(
time
)
form
.
value
[
l1
][
'secondCategoryDtoList'
][
l2
][
'questionsDtoList'
][
l3
][
'addQuestionsDtoList'
][
l4
][
'content'
]
=
time
}
const
disabledDate
=
time
=>
{
return
time
.
getTime
()
>
Date
.
now
()
}
const
exportInfo
=
()
=>
{
if
(
props
.
customerBizId
&&
editStatus
.
value
)
{
proxy
.
$modal
.
confirm
(
`请先点击编辑在导入客户信息`
,
{
showCancel
:
'0'
,
title
:
'填写提示'
})
return
}
openList
.
value
=
true
customerList
()
}
const
customerList
=
()
=>
{
tableLoading
.
value
=
true
getCustomerList
(
queryParams
.
value
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
tableData
.
value
=
res
.
data
.
records
total
.
value
=
res
.
data
.
total
tableLoading
.
value
=
false
}
})
}
const
resetCustomerList
=
()
=>
{
queryParams
.
value
=
{
pageNo
:
1
,
pageSize
:
4
,
name
:
undefined
}
customerList
()
}
// 从客户列表中导入客户信息到当前表单
const
handleExport
=
row
=>
{
oldObjInfo
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
form
.
value
))
// 修改时存储原始数据,便于撤销操作
processFormData
({
domdata
:
questionnairesDom
.
value
,
customerInfo
:
row
,
exportValue
:
true
})
openList
.
value
=
false
}
// 获取字典数据
const
fetchDictData
=
dictType
=>
{
...
...
@@ -486,288 +316,12 @@ const fetchDictData = dictType => {
return
[]
}
}
// 添加英文校验函数
const
validateEnglish
=
(
rule
,
value
,
callback
)
=>
{
if
(
value
&&
!
/^
[
A-Za-z
]
*$/
.
test
(
value
))
{
// 清空非英文字符
form
.
value
.
firstNamePinyin
=
''
callback
(
new
Error
(
'只能输入英文字母'
))
}
else
{
callback
()
}
}
// 处理表单配置,添加字典数据
/**
* domdata:表单的dom数据
* customerInfo:根据客户信息回显表单
* exportValue:是否从导入联系人列表中导入客户信息到当前表单
*/
const
processFormData
=
async
obj
=>
{
form
.
value
=
{}
// 深拷贝原始数据
const
processedData
=
JSON
.
parse
(
JSON
.
stringify
(
obj
.
domdata
))
for
(
const
section
of
processedData
)
{
if
(
section
.
data
)
{
for
(
const
field
of
section
.
data
)
{
if
(
field
.
dictType
)
{
// 获取字典数据
field
.
options
=
fetchDictData
(
field
.
dictType
)
}
if
(
field
.
required
)
{
if
(
field
.
showEn
)
{
rules
.
value
[
field
.
key
]
=
[
{
required
:
true
,
message
:
`
${
field
.
label
}
不能为空`
,
trigger
:
'blur'
},
{
validator
:
validateEnglish
,
trigger
:
'change'
}
]
}
else
{
rules
.
value
[
field
.
key
]
=
[
{
required
:
true
,
message
:
`
${
field
.
label
}
不能为空`
,
trigger
:
'blur'
}
]
}
}
if
(
obj
.
customerInfo
)
{
for
(
const
key1
in
obj
.
customerInfo
)
{
if
(
key1
==
'birthdate'
&&
obj
.
customerInfo
[
key1
])
{
obj
.
customerInfo
[
key1
]
=
proxy
.
formatToDate
(
obj
.
customerInfo
[
key1
])
}
// 对应客户和dom表单字段方便赋值
if
(
field
.
customerKey
&&
key1
==
field
.
customerKey
)
{
form
.
value
[
field
.
key
]
=
obj
.
customerInfo
[
key1
]
}
}
}
if
(
props
.
idsObj
.
appointmentBizId
)
{
field
.
disabled
=
true
}
else
{
if
(
field
.
key
==
'age'
)
{
field
.
disabled
=
true
}
else
{
field
.
disabled
=
false
}
}
}
}
}
//当tab切换走,在切换回来的时候,需要把之前保存的值赋值回来
if
(
JSON
.
stringify
(
tempSecondHolderForm
.
value
)
!==
'{}'
&&
!
props
.
idsObj
.
appointmentBizId
)
{
form
.
value
=
{
...
tempSecondHolderForm
.
value
}
}
if
(
props
.
idsObj
.
appointmentBizId
)
{
form
.
value
=
{
...
props
.
apiSecondHolderInfoDto
}
editStatus
.
value
=
true
}
else
{
editStatus
.
value
=
false
}
questionnairesDom
.
value
=
oldAppointmentData
.
value
=
processedData
}
//弹出右侧抽屉
const
handleFoucs
=
child
=>
{
if
(
child
.
disabled
)
return
console
.
log
(
'saveKey.value'
,
saveKey
.
value
)
console
.
log
(
'child'
,
child
)
drawerInfo
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
child
))
switch
(
child
.
drawerType
)
{
case
'phone'
:
phoneMenuList
.
value
[
0
].
key
=
child
.
code
phoneMenuList
.
value
[
1
].
key
=
child
.
key
phoneMenuList
.
value
.
forEach
(
item
=>
{
item
.
value
=
''
for
(
const
key
in
saveKey
.
value
)
{
if
(
key
==
child
.
key
)
{
for
(
const
key2
in
saveKey
.
value
[
key
])
{
if
(
item
.
key
==
key2
)
{
item
.
value
=
saveKey
.
value
[
key
][
key2
]
}
}
}
}
})
showPhoneDrawer
.
value
=
true
break
case
'address'
:
addressMenuList
.
value
.
forEach
(
item
=>
{
for
(
const
key
in
saveKey
.
value
)
{
if
(
key
==
child
.
key
)
{
for
(
const
key2
in
saveKey
.
value
[
key
])
{
if
(
item
.
key
==
key2
)
{
item
.
value
=
saveKey
.
value
[
key
][
key2
]
}
}
}
}
})
showAddressDrawer
.
value
=
true
break
case
'country'
:
showCountryDrawer
.
value
=
true
break
default
:
break
}
}
// 处理抽屉关闭
const
handleCloseDrawer
=
()
=>
{
showPhoneDrawer
.
value
=
false
showAddressDrawer
.
value
=
false
showCountryDrawer
.
value
=
false
drawerInfo
.
value
=
{}
}
const
confirmDrawer
=
info
=>
{
// info 为抽屉返回的值
if
(
drawerInfo
.
value
.
domType
==
'arrowRight'
&&
drawerInfo
.
value
.
drawerType
)
{
let
newObj
=
info
[
drawerInfo
.
value
.
key
]
if
(
form
.
value
[
'customerType'
]
==
'COMPANY'
)
{
newObj
.
fatherKey
=
'company'
}
else
if
(
form
.
value
[
'customerType'
]
==
'INDIVIDUAL'
)
{
newObj
.
fatherKey
=
'person'
}
//要判断drawerType
switch
(
drawerInfo
.
value
.
drawerType
)
{
case
'phone'
:
newObj
.
objType
=
drawerInfo
.
value
.
drawerType
// 因为电话有多个,根据点击的电话类型在抽屉里回显,所以要用drawerInfo.value.code来控制
form
.
value
[
info
.
key
]
=
`
${
newObj
[
drawerInfo
.
value
.
code
]}
${
newObj
[
drawerInfo
.
value
.
key
]}
`
saveKey
.
value
[
drawerInfo
.
value
.
key
]
=
newObj
break
case
'address'
:
newObj
.
objType
=
drawerInfo
.
value
.
drawerType
newObj
.
type
=
drawerInfo
.
value
.
key
form
.
value
[
info
.
key
]
=
`
${
newObj
.
region
}
${
newObj
.
city
}
${
newObj
.
street
}
${
newObj
.
location
}
`
saveKey
.
value
[
info
.
key
]
=
newObj
break
case
'country'
:
info
.
objType
=
drawerInfo
.
value
.
drawerType
form
.
value
[
drawerInfo
.
value
.
key
]
=
info
.
name
saveKey
.
value
[
drawerInfo
.
value
.
key
]
=
info
break
default
:
break
}
}
handleCloseDrawer
()
}
// 根据联动重置表单项的显示与否
const
resetShow
=
obj
=>
{
for
(
const
section
of
questionnairesDom
.
value
)
{
switch
(
obj
.
type
)
{
case
'father'
:
if
(
section
.
key
==
obj
.
key
)
{
section
.
showMoudle
=
obj
.
status
}
break
case
'child'
:
if
(
section
.
data
)
{
for
(
const
field
of
section
.
data
)
{
if
(
field
.
key
==
obj
.
key
)
{
// 获取字典数据
field
.
show
=
obj
.
status
}
}
}
break
default
:
break
}
}
}
const
handleSelectChange
=
(
father
,
child
)
=>
{
switch
(
child
.
key
)
{
case
'customerType'
:
if
(
form
.
value
[
child
.
key
]
==
'COMPANY'
)
{
showContacts
.
value
=
false
for
(
const
section
of
questionnairesDom
.
value
)
{
if
(
section
.
key
==
'company'
)
{
for
(
const
key1
in
saveKey
.
value
)
{
for
(
const
key2
in
commonObj
.
value
)
{
if
(
key1
==
key2
)
{
saveKey
.
value
[
key1
][
'fatherKey'
]
=
section
.
key
}
}
}
section
.
showMoudle
=
true
}
else
if
(
section
.
key
!==
'customer'
)
{
section
.
showMoudle
=
false
}
}
}
else
{
showContacts
.
value
=
true
for
(
const
section
of
questionnairesDom
.
value
)
{
if
(
section
.
key
==
'company'
)
{
section
.
showMoudle
=
false
}
else
{
section
.
showMoudle
=
true
}
}
}
break
case
'smokingAllowed'
:
// 选择吸烟,展示吸烟数量
if
(
form
.
value
[
child
.
key
]
==
'1'
)
{
resetShow
({
type
:
'child'
,
key
:
'smokingVolume'
,
status
:
true
})
}
else
{
resetShow
({
type
:
'child'
,
key
:
'smokingVolume'
,
status
:
false
})
}
break
case
'isVip'
:
// 选择vip,展示vip备注
if
(
form
.
value
[
child
.
key
]
==
'1'
)
{
resetShow
({
type
:
'child'
,
key
:
'vipRemark'
,
status
:
true
})
}
else
{
resetShow
({
type
:
'child'
,
key
:
'vipRemark'
,
status
:
false
})
}
break
default
:
break
}
}
// 改变编辑状态
const
handleEditStatus
=
()
=>
{
editStatus
.
value
=
!
editStatus
.
value
console
.
log
(
'触发了编辑状态'
,
editStatus
.
value
)
// 深拷贝原始数据
const
processedData
=
JSON
.
parse
(
JSON
.
stringify
(
questionnairesDom
.
value
))
for
(
const
section
of
processedData
)
{
if
(
section
.
data
)
{
for
(
const
field
of
section
.
data
)
{
if
(
editStatus
.
value
)
{
field
.
disabled
=
true
}
else
{
field
.
disabled
=
false
}
}
}
}
questionnairesDom
.
value
=
processedData
const
handleEditStatus
=
status
=>
{
editStatus
.
value
=
status
}
// 数组去重
function
removeDuplicates
(
arr
,
key
)
{
const
seen
=
new
Map
()
const
result
=
[]
for
(
const
item
of
arr
)
{
if
(
item
[
key
]
&&
!
seen
.
has
(
item
[
key
]))
{
seen
.
set
(
item
[
key
],
true
)
result
.
push
(
item
)
}
}
return
result
}
// 获取校验失败的字段信息
const
getInvalidFields
=
fields
=>
{
const
errors
=
[]
...
...
@@ -784,36 +338,64 @@ const getInvalidFields = fields => {
// 处理表单填写得数据
const
handleFormValues
=
()
=>
{
let
submitObj
=
{}
if
(
props
.
activeName
==
'
secondHolder
'
)
{
let
submitObj
=
[]
if
(
props
.
activeName
==
'
questionnaires
'
)
{
submitObj
=
JSON
.
parse
(
JSON
.
stringify
(
form
.
value
))
console
.
log
(
'1111'
,
submitObj
)
}
else
{
submitObj
=
JSON
.
parse
(
JSON
.
stringify
(
tempSecondHolderForm
.
value
))
// submitObj = JSON.parse(JSON.stringify(tempSecondHolderForm.value))
// console.log('2222', submitObj)
}
//处理表单数据
for
(
const
key1
in
submitObj
)
{
if
(
key1
==
'birthTime'
)
{
submitObj
[
key1
]
=
proxy
.
formatToDateTime
(
submitObj
[
key1
])
}
let
answerSessionsDtoList
=
[]
// 处理表单数据
submitObj
.
forEach
(
level1
=>
{
level1
.
secondCategoryDtoList
.
forEach
(
level2
=>
{
// 修正:应该是 questionsDtoList 而不是 questionDtoList
if
(
level2
.
questionsDtoList
&&
level2
.
questionsDtoList
.
length
>
0
)
{
level2
.
questionsDtoList
.
forEach
(
level3
=>
{
// 检查是否有答案数据和附加问题
//
if
(
level3
.
answerSessionsDto
)
{
// 问题选择了是
if
(
level3
.
answerSessionsDto
.
optionJsonDtoList
&&
level3
.
answerSessionsDto
.
optionBizId
&&
level3
.
answerSessionsDto
.
optionBizId
==
'option_1002'
)
{
level3
.
answerSessionsDto
.
optionJsonDtoList
.
forEach
(
level4
=>
{
level4
.
addQuestionsJsonDtoList
=
JSON
.
parse
(
JSON
.
stringify
(
level3
.
addQuestionsDtoList
)
)
}
)
}
answerSessionsDtoList
.
push
({
questionBizId
:
level3
.
questionBizId
,
...
level3
.
answerSessionsDto
}
)
}
}
)
}
}
)
}
)
return
{
questionnaireBizId
:
'questionnaires_1001'
,
objectBizId
:
props
.
idsObj
.
appointmentBizId
,
answerSessionsDtoList
}
return
submitObj
}
// 表单提交
const
submitForm
=
()
=>
{
proxy
.
$refs
[
'heathFormRef'
].
validate
((
valid
,
fields
)
=>
{
if
(
valid
)
{
let
submitObj
=
handleFormValues
()
console
.
log
(
'===================================='
)
console
.
log
(
'submitObj'
,
submitObj
)
console
.
log
(
'===================================='
)
// return
if
(
props
.
idsObj
.
appointmentBizId
)
{
editSecondHolderInfo
(
submitObj
).
then
(
res
=>
{
saveQuestionnaires
(
submitObj
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
handleEditStatus
()
proxy
.
$message
.
success
(
'
第二持有人
修改成功'
)
handleEditStatus
(
true
)
proxy
.
$message
.
success
(
'
健康信息
修改成功'
)
emit
(
'handleSuccessEdit'
)
}
}
)
...
...
@@ -846,6 +428,7 @@ const resetForm = () => {
.
catch
(()
=>
{
}
)
}
const
getQuestionnairesInfo
=
()
=>
{
loading
.
value
=
true
getQuestionnaires
(
props
.
idsObj
.
appointmentBizId
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
let
result
=
res
.
data
.
firstAndSecondCategoryDtoList
...
...
@@ -871,11 +454,59 @@ const getQuestionnairesInfo = () => {
level3
.
labelWidth
=
'100%'
level3
.
labelPosition
=
'top'
level3
.
key
=
level3
.
id
if
(
level3
.
optionsDtoList
&&
level3
.
optionsDtoList
.
length
>
0
)
{
level3
.
optionsDtoList
.
forEach
((
level4
,
l4
)
=>
{
}
)
}
if
(
!
level3
.
answerSessionsDto
)
{
level3
.
answerSessionsDto
=
{
}
if
(
!
level3
.
answerSessionsDto
.
optionJsonDtoList
)
{
if
(
level2
.
secondCategory
!==
'MEDICAL_CONDITION'
&&
!
level3
.
answerSessionsDto
.
optionJsonDtoList
)
{
level3
.
answerSessionsDto
.
optionJsonDtoList
=
[]
}
if
(
level2
.
secondCategory
==
'MEDICAL_CONDITION'
&&
!
level3
.
answerSessionsDto
.
questionTextJsonDtoList
)
{
level3
.
answerSessionsDto
.
questionTextJsonDtoList
=
[]
}
}
else
{
if
(
level2
.
secondCategory
!==
'MEDICAL_CONDITION'
&&
!
level3
.
answerSessionsDto
.
optionJsonDtoList
)
{
level3
.
answerSessionsDto
.
optionJsonDtoList
=
[]
level3
.
answerSessionsDto
.
optionJsonDtoList
.
addQuestionsJsonDtoList
=
[]
}
else
{
// 给单选框赋值,方便回显
if
(
level3
.
answerSessionsDto
.
optionJsonDtoList
&&
level3
.
answerSessionsDto
.
optionJsonDtoList
.
length
>
0
)
{
level3
.
answerSessionsDto
.
optionBizId
=
level3
.
answerSessionsDto
.
optionJsonDtoList
[
0
].
optionBizId
if
(
level3
.
answerSessionsDto
.
optionJsonDtoList
[
0
].
addQuestionsJsonDtoList
)
{
level3
.
addQuestionsDtoList
.
forEach
((
level5
,
l5
)
=>
{
level3
.
answerSessionsDto
.
optionJsonDtoList
[
0
].
addQuestionsJsonDtoList
.
forEach
(
(
level6
,
l6
)
=>
{
if
(
level5
.
addQuestionsBizId
==
level6
.
addQuestionsBizId
)
{
if
(
level5
.
type
==
'DATE'
)
{
level5
.
content
=
proxy
.
formatToDate
(
level6
.
content
)
}
else
{
level5
.
content
=
level6
.
content
}
}
}
)
}
)
}
}
}
if
(
level2
.
secondCategory
==
'MEDICAL_CONDITION'
&&
!
level3
.
answerSessionsDto
.
questionTextJsonDtoList
)
{
level3
.
answerSessionsDto
.
questionTextJsonDtoList
=
[]
}
}
}
)
...
...
@@ -883,6 +514,7 @@ const getQuestionnairesInfo = () => {
}
)
questionnairesDom
.
value
=
form
.
value
=
result
loading
.
value
=
false
}
}
)
}
...
...
@@ -894,6 +526,9 @@ watch(
tempSecondHolderForm
.
value
=
{
...
form
.
value
}
if
(
newVal
===
'questionnaires'
)
{
if
(
props
.
idsObj
.
appointmentBizId
)
{
editStatus
.
value
=
true
}
getQuestionnairesInfo
()
}
}
...
...
@@ -906,6 +541,17 @@ defineExpose({
}
)
<
/script
>
<
style
lang
=
"scss"
scoped
>
.
domEmpty
{
width
:
100
%
;
height
:
100
%
;
display
:
flex
;
align
-
items
:
center
;
justify
-
content
:
center
;
height
:
100
%
;
font
-
size
:
16
px
;
color
:
#
a8abb2
;
margin
-
top
:
100
px
;
}
.
topBtn
{
width
:
100
%
;
display
:
flex
;
...
...
@@ -951,6 +597,22 @@ defineExpose({
width
:
100
%
;
}
}
.
questionContent
{
display
:
flex
;
align
-
items
:
center
;
.
questionTitle
{
margin
-
right
:
10
px
;
font
-
size
:
13
px
;
}
.
addBtn
{
margin
-
top
:
10
px
;
}
.
deleteIcon
{
font
-
size
:
20
px
;
color
:
red
;
margin
-
left
:
5
px
;
}
}
}
}
.
inputBox
{
...
...
src/views/sign/appointment/components/insuredInfo.vue
View file @
11c7857a
...
...
@@ -16,7 +16,7 @@
v-if=
"props.idsObj.appointmentBizId"
type=
"primary"
icon=
"EditPen"
@
click=
"handleEditStatus"
@
click=
"handleEditStatus
(!editStatus)
"
>
编辑
</el-button
>
</div>
...
...
@@ -78,6 +78,7 @@
style=
"width: 100%"
v-if=
"child.domType === 'DatePicker'"
type=
"date"
:disabled-date=
"disabledDate"
:placeholder=
"child.placeholder"
:disabled=
"child.disabled"
/>
...
...
@@ -169,6 +170,7 @@
</div>
</el-dialog>
</div>
<!-- <div v-else class="domEmpty" v-loading="loading"></div> -->
<Phone
@
close=
"handleCloseDrawer"
:showDrawer=
"showPhoneDrawer"
...
...
@@ -313,6 +315,9 @@ const data = reactive({
})
const
{
form
,
rules
,
processedinsuredData
,
queryParams
,
oldAppointmentData
,
tempPolicyForm
}
=
toRefs
(
data
)
const
disabledDate
=
time
=>
{
return
time
.
getTime
()
>
Date
.
now
()
}
const
exportInfo
=
()
=>
{
if
(
props
.
customerBizId
&&
editStatus
.
value
)
{
proxy
.
$modal
.
confirm
(
`请先点击编辑在导入客户信息`
,
{
showCancel
:
'0'
,
title
:
'填写提示'
})
...
...
@@ -776,10 +781,8 @@ const handleSelectChange = (father, child) => {
}
}
// 改变编辑状态
const
handleEditStatus
=
()
=>
{
editStatus
.
value
=
!
editStatus
.
value
console
.
log
(
'触发了编辑状态'
,
editStatus
.
value
)
const
handleEditStatus
=
status
=>
{
editStatus
.
value
=
status
// 深拷贝原始数据
const
processedData
=
JSON
.
parse
(
JSON
.
stringify
(
processedinsuredData
.
value
))
for
(
const
section
of
processedData
)
{
...
...
@@ -921,13 +924,15 @@ const handleFormValues = () => {
submitObj
[
'authMobileCode'
]
=
submitObj
[
'authMobile'
].
split
(
' '
)[
0
]
submitObj
[
'authMobile'
]
=
submitObj
[
'authMobile'
].
split
(
' '
)[
1
]
}
console
.
log
(
'===================================='
)
console
.
log
(
'受保人submitObj'
,
submitObj
)
console
.
log
(
'===================================='
)
// 删除多余字段
deleteKeyList
.
value
.
forEach
(
item
=>
{
delete
submitObj
[
item
]
})
console
.
log
(
'===================================='
)
console
.
log
(
'受保人submitObj'
,
submitObj
)
console
.
log
(
'===================================='
)
return
submitObj
}
// 表单提交
...
...
@@ -953,7 +958,7 @@ const submitForm = () => {
submitObj
[
'insurantBizId'
]
=
props
.
apiInsurantInfoDto
.
insurantBizId
editInsurantInfo
(
submitObj
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
handleEditStatus
()
handleEditStatus
(
true
)
proxy
.
$message
.
success
(
'受保人修改成功'
)
emit
(
'handleSuccessEdit'
)
}
...
...
@@ -1022,6 +1027,17 @@ defineExpose({
})
</
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
;
...
...
src/views/sign/appointment/components/policyHolderInfo.vue
View file @
11c7857a
...
...
@@ -16,7 +16,7 @@
v-if=
"props.idsObj.appointmentBizId"
type=
"primary"
icon=
"EditPen"
@
click=
"handleEditStatus"
@
click=
"handleEditStatus
(!editStatus)
"
>
编辑
</el-button
>
</div>
...
...
@@ -78,6 +78,7 @@
style=
"width: 100%"
v-if=
"child.domType === 'DatePicker'"
type=
"date"
:disabled-date=
"disabledDate"
:placeholder=
"child.placeholder"
:disabled=
"child.disabled"
/>
...
...
@@ -169,6 +170,7 @@
</div>
</el-dialog>
</div>
<!-- <div v-else class="domEmpty" v-loading="loading"></div> -->
<Phone
@
close=
"handleCloseDrawer"
:showDrawer=
"showPhoneDrawer"
...
...
@@ -200,7 +202,7 @@ import Phone from '@/views/components/phone'
import
Address
from
'@/views/components/address'
import
{
watch
,
nextTick
}
from
'vue'
import
{
addCustomer
,
getCustomerDetail
,
editCustomer
,
getCustomerList
}
from
'@/api/sign/fna'
import
{
getCustomerList
}
from
'@/api/sign/fna'
import
{
editPolicyholderInfo
}
from
'@/api/sign/appointment'
import
useDictStore
from
'@/store/modules/dict'
...
...
@@ -313,6 +315,9 @@ const data = reactive({
})
const
{
form
,
rules
,
processedPolicyData
,
queryParams
,
oldAppointmentData
,
tempPolicyForm
}
=
toRefs
(
data
)
const
disabledDate
=
time
=>
{
return
time
.
getTime
()
>
Date
.
now
()
}
const
exportInfo
=
()
=>
{
if
(
props
.
customerBizId
&&
editStatus
.
value
)
{
proxy
.
$modal
.
confirm
(
`请先点击编辑在导入客户信息`
,
{
showCancel
:
'0'
,
title
:
'填写提示'
})
...
...
@@ -660,11 +665,7 @@ const confirmDrawer = info => {
// info 为抽屉返回的值
if
(
drawerInfo
.
value
.
domType
==
'arrowRight'
&&
drawerInfo
.
value
.
drawerType
)
{
let
newObj
=
info
[
drawerInfo
.
value
.
key
]
// if (form.value['customerType'] == 'COMPANY') {
// newObj.fatherKey = 'company'
// } else if (form.value['customerType'] == 'INDIVIDUAL') {
// newObj.fatherKey = 'person'
// }
//要判断drawerType
switch
(
drawerInfo
.
value
.
drawerType
)
{
case
'phone'
:
...
...
@@ -772,10 +773,8 @@ const handleSelectChange = (father, child) => {
}
}
// 改变编辑状态
const
handleEditStatus
=
()
=>
{
editStatus
.
value
=
!
editStatus
.
value
console
.
log
(
'触发了编辑状态'
,
editStatus
.
value
)
const
handleEditStatus
=
status
=>
{
editStatus
.
value
=
status
// 深拷贝原始数据
const
processedData
=
JSON
.
parse
(
JSON
.
stringify
(
processedPolicyData
.
value
))
for
(
const
section
of
processedData
)
{
...
...
@@ -924,6 +923,8 @@ const handleFormValues = () => {
delete
submitObj
[
item
]
})
console
.
log
(
'投保人'
,
submitObj
)
return
submitObj
}
// 表单提交
...
...
@@ -931,10 +932,6 @@ const submitForm = () => {
proxy
.
$refs
[
'policyholderInfoFormRef'
].
validate
((
valid
,
fields
)
=>
{
if
(
valid
)
{
let
submitObj
=
handleFormValues
()
console
.
log
(
'===================================='
)
console
.
log
(
'submitObj'
,
submitObj
)
console
.
log
(
'===================================='
)
// return
if
(
props
.
idsObj
.
appointmentBizId
)
{
submitObj
[
'appointmentBizId'
]
=
props
.
apiPolicyholderInfoDto
.
appointmentBizId
...
...
@@ -942,7 +939,7 @@ const submitForm = () => {
submitObj
[
'policyholderBizId'
]
=
props
.
apiPolicyholderInfoDto
.
policyholderBizId
editPolicyholderInfo
(
submitObj
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
handleEditStatus
()
handleEditStatus
(
true
)
proxy
.
$message
.
success
(
'投保人修改成功'
)
emit
(
'handleSuccessEdit'
)
}
...
...
@@ -974,15 +971,7 @@ const resetForm = () => {
.
catch
(()
=>
{})
}
// 获取流程详情
// function getCustomerInfo(customerBizId, formData) {
// getCustomerDetail(customerBizId).then(async res => {
// if (res.code == 200) {
// // 回显值
// setFormValue(res.data, formData)
// }
// })
// }
watch
(
()
=>
props
.
activeName
,
newVal
=>
{
...
...
@@ -1018,6 +1007,17 @@ defineExpose({
})
</
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
;
...
...
src/views/sign/appointment/components/policyTransferInfo.vue
View file @
11c7857a
...
...
@@ -8,7 +8,7 @@
v-if=
"props.idsObj.appointmentBizId"
type=
"primary"
icon=
"EditPen"
@
click=
"handleEditStatus"
@
click=
"handleEditStatus
(!editStatus)
"
>
编辑
</el-button
>
</div>
...
...
@@ -52,18 +52,13 @@
<el-row>
<el-col>
<div
class=
"tabButton"
>
<el-button
type=
"primary"
icon=
"Check"
@
click=
"submitForm"
size=
"large"
:disabled=
"editStatus"
>
提交
</el-button
>
<!-- :disabled="editStatus" -->
<el-button
type=
"primary"
icon=
"Check"
@
click=
"submitForm"
size=
"large"
>
提交
</el-button>
</div>
</el-col>
</el-row>
</div>
<!--
<div
v-else
class=
"domEmpty"
v-loading=
"loading"
></div>
-->
</div>
</
template
>
<
script
setup
name=
"PolicyTransferInfo"
>
...
...
@@ -85,6 +80,7 @@ const props = defineProps({
const
emit
=
defineEmits
([
'handleSuccessEdit'
])
const
{
proxy
}
=
getCurrentInstance
()
// const { csf_id_type, sys_gender } = proxy.useDict('csf_id_type', 'sys_gender')
const
loading
=
ref
(
false
)
const
editStatus
=
ref
(
false
)
//编辑状态
const
errorFields
=
ref
([])
// 存储校验失败的字段信息
const
data
=
reactive
({
...
...
@@ -135,6 +131,7 @@ const validateEnglish = (rule, value, callback) => {
*/
const
processFormData
=
async
obj
=>
{
form
.
value
=
{}
loading
.
value
=
true
// 深拷贝原始数据
const
processedData
=
JSON
.
parse
(
JSON
.
stringify
(
obj
.
domdata
))
...
...
@@ -150,10 +147,11 @@ const processFormData = async obj => {
}
}
policyTransferData
.
value
=
processedData
loading
.
value
=
false
}
// 改变编辑状态
const
handleEditStatus
=
()
=>
{
editStatus
.
value
=
!
editStatus
.
value
const
handleEditStatus
=
status
=>
{
editStatus
.
value
=
status
console
.
log
(
'触发了编辑状态'
,
editStatus
.
value
)
// 深拷贝原始数据
...
...
@@ -213,7 +211,7 @@ const submitForm = () => {
if
(
props
.
idsObj
.
appointmentBizId
)
{
editPolicytransfer
(
submitObj
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
// handleEditStatus()
// handleEditStatus(
true
)
proxy
.
$message
.
success
(
'转保声明修改成功'
)
emit
(
'handleSuccessEdit'
)
}
...
...
@@ -252,6 +250,17 @@ defineExpose({
})
</
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
;
}
.content
{
display
:
flex
;
flex-direction
:
column
;
...
...
src/views/sign/appointment/components/productPlan.vue
View file @
11c7857a
...
...
@@ -8,7 +8,7 @@
v-if=
"props.idsObj.appointmentBizId"
type=
"primary"
icon=
"EditPen"
@
click=
"handleEditStatus"
@
click=
"handleEditStatus
(!editStatus)
"
>
编辑
</el-button
>
</div>
...
...
@@ -684,14 +684,24 @@ const handleSelectChange = (father, child) => {
}
break
case
'isBacktrack'
:
// 选是,展示日期
if
(
form
.
value
[
father
.
key
][
child
.
key
]
==
'1'
)
{
resetShow
(
'policyEffectiveDate'
,
true
)
// form.value[father.key]['policyEffectiveDate'] = ''
}
else
{
resetShow
(
'policyEffectiveDate'
,
false
)
}
break
default
:
break
}
}
// 改变编辑状态
const
handleEditStatus
=
()
=>
{
editStatus
.
value
=
!
editStatus
.
value
const
handleEditStatus
=
status
=>
{
editStatus
.
value
=
status
// 深拷贝原始数据
const
processedData
=
JSON
.
parse
(
JSON
.
stringify
(
processedProductData
.
value
))
for
(
const
section
of
processedData
)
{
...
...
@@ -867,6 +877,8 @@ const setFormValue = (obj, formData) => {
const
processedData
=
JSON
.
parse
(
JSON
.
stringify
(
formData
))
for
(
const
section
of
processedData
)
{
for
(
const
key
in
newForm
)
{
console
.
log
(
'key'
,
key
)
//回显的数据有的没填写就会是null,收集表单值得时候和dom对应不上,对于null值得项要根据section得keyType给form正确得数据类型
if
(
!
newForm
[
key
])
{
if
(
section
.
keyType
==
'Array'
)
{
...
...
@@ -885,6 +897,18 @@ const setFormValue = (obj, formData) => {
section
.
data
.
push
(
newChildren
)
}
for
(
const
field
of
section
.
data
)
{
if
(
key
==
'apiProductPlanMainInfoDto'
)
{
for
(
const
key2
in
newForm
[
key
])
{
if
(
field
.
key
==
'policyEffectiveDate'
&&
newForm
[
key
][
field
.
key
]
&&
newForm
[
key
][
'isBacktrack'
]
==
'1'
)
{
field
.
show
=
true
}
}
}
if
(
section
.
child
==
'yes'
&&
field
.
children
&&
field
.
children
.
length
>
0
)
{
for
(
const
child
of
field
.
children
)
{
if
(
props
.
idsObj
.
appointmentBizId
)
{
...
...
@@ -936,6 +960,9 @@ const handleSubmitForm = () => {
for
(
const
key
in
result
)
{
if
(
isObject
(
result
[
key
]))
{
for
(
const
key2
in
result
[
key
])
{
if
(
key2
==
'isBacktrack'
&&
result
[
key
][
key2
]
==
'0'
)
{
result
[
key
][
'policyEffectiveDate'
]
=
null
}
if
(
key2
==
'policyEffectiveDate'
&&
result
[
key
][
key2
])
{
result
[
key
][
key2
]
=
proxy
.
formatToDateTime
(
result
[
key
][
key2
])
}
...
...
@@ -992,10 +1019,11 @@ const submitForm = saveType => {
console
.
log
(
'===================================='
)
console
.
log
(
'提交的数据'
,
result
)
console
.
log
(
'===================================='
)
// return
if
(
props
.
idsObj
.
appointmentBizId
)
{
editProductPlanInfo
(
result
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
handleEditStatus
()
handleEditStatus
(
true
)
proxy
.
$message
.
success
(
'产品计划修改成功'
)
emit
(
'handleSuccessEdit'
)
}
...
...
@@ -1034,11 +1062,7 @@ watch(
}
}
)
if
(
props
.
formStatus
==
'appointmentAdd'
)
{
setTimeout
(()
=>
{
processFormData
()
}
,
1000
)
}
// 暴露给父组件
defineExpose
({
handleSubmitForm
,
...
...
src/views/sign/appointment/components/secondHolderInfo.vue
View file @
11c7857a
...
...
@@ -11,7 +11,7 @@
v-if=
"props.idsObj.appointmentBizId"
type=
"primary"
icon=
"EditPen"
@
click=
"handleEditStatus"
@
click=
"handleEditStatus
(!editStatus)
"
>
编辑
</el-button
>
</div>
...
...
@@ -270,8 +270,6 @@ const phoneMenuList = ref([
}
])
const
phoneQuickList
=
ref
([])
const
personalObj
=
ref
({})
//存储个人key
const
companyObj
=
ref
({})
//存储公司key
const
commonObj
=
ref
({})
//存储个人和公司的公共key
const
deleteKeyList
=
ref
([
'objType'
,
...
...
@@ -450,8 +448,6 @@ const processFormData = async obj => {
//弹出右侧抽屉
const
handleFoucs
=
child
=>
{
if
(
child
.
disabled
)
return
console
.
log
(
'saveKey.value'
,
saveKey
.
value
)
console
.
log
(
'child'
,
child
)
drawerInfo
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
child
))
switch
(
child
.
drawerType
)
{
...
...
@@ -617,8 +613,8 @@ const handleSelectChange = (father, child) => {
}
}
// 改变编辑状态
const
handleEditStatus
=
()
=>
{
editStatus
.
value
=
!
editStatus
.
value
const
handleEditStatus
=
status
=>
{
editStatus
.
value
=
status
console
.
log
(
'触发了编辑状态'
,
editStatus
.
value
)
// 深拷贝原始数据
...
...
@@ -686,15 +682,10 @@ const submitForm = () => {
proxy
.
$refs
[
'secondHolderFormRef'
].
validate
((
valid
,
fields
)
=>
{
if
(
valid
)
{
let
submitObj
=
handleFormValues
()
console
.
log
(
'===================================='
)
console
.
log
(
'submitObj'
,
submitObj
)
console
.
log
(
'===================================='
)
// return
if
(
props
.
idsObj
.
appointmentBizId
)
{
editSecondHolderInfo
(
submitObj
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
handleEditStatus
()
handleEditStatus
(
true
)
proxy
.
$message
.
success
(
'第二持有人修改成功'
)
emit
(
'handleSuccessEdit'
)
}
...
...
@@ -742,6 +733,10 @@ watch(
exportValue
:
null
})
},
500
)
// processFormData({
// domdata: secondHolderDomData,
// exportValue: null
// })
}
}
)
...
...
@@ -806,7 +801,7 @@ defineExpose({
}
}
.tabButton
{
box-shadow
:
0
-1px
14px
#00000014
;
/* box-shadow: 0 -1px 14px #00000014; */
width
:
100%
;
display
:
flex
;
align-items
:
center
;
...
...
src/views/sign/appointment/index.vue
View file @
11c7857a
...
...
@@ -16,12 +16,6 @@
v-show=
"showSearch"
label-width=
"100px"
>
<el-form-item
><el-button
type=
"primary"
icon=
"Plus"
@
click=
"handleAdd"
>
上传EXECL
</el-button
></el-form-item
>
<el-form-item
label=
"确认预约时间"
style=
"width: 300px"
>
<el-date-picker
v-model=
"dateRange"
...
...
@@ -144,22 +138,31 @@
<!-- 展示行程单详情 -->
<el-dialog
v-model=
"dialogVisible"
width=
"70%"
>
<div
class=
"dialogBox"
>
<div
class=
"dialogTitle"
>
{{ appointmentSummeryInfo.apiAppointmentInfoDto.creatorName }} - 香港行程安排
</div>
<div
class=
"dialogTitle"
>
香港行程安排
</div>
<div
class=
"dialogItem"
v-for=
"item in detailData"
>
<div
class=
"dialogItemTitle"
>
{{ item.title }}
</div>
<DetailPanel
:data=
"item.data"
:row-span=
"24"
col-gap=
"1
6
px"
col-gap=
"1
0
px"
label-width=
"120px"
row-height=
"45px"
:show-col-border=
"true"
/>
</div>
<div
class=
"remarkBOx"
>
<div
class=
"remarkTitle"
>
备注
</div>
<div
class=
"remarkContent"
v-if=
"appointmentSummeryInfo.remark"
>
{{ appointmentSummeryInfo.remark }}
</div>
<div
class=
"remarkEmpty"
v-else
>
暂无备注
</div>
</div>
<div
class=
"exprotBtn"
>
<el-button
:loading=
"exportLoading"
type=
"primary"
@
click=
"handleExprotPdf"
<el-button
:loading=
"exportLoading"
type=
"primary"
style=
"margin-top: 15px"
@
click=
"handleExprotPdf"
>
下载行程单
</el-button
>
</div>
...
...
@@ -176,7 +179,7 @@ import {
getAppointmentList
,
getAppointmentExprot
,
delSigleAppointment
,
get
Appointment
Detail
,
get
Itinerary
Detail
,
getItineraryExprot
}
from
'@/api/sign/appointment'
import
useUserStore
from
'@/store/modules/user'
...
...
@@ -209,7 +212,11 @@ const data = reactive({
})
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
)
const
{
bx_currency_type
,
csf_ap_status
}
=
proxy
.
useDict
(
'bx_currency_type'
,
'csf_ap_status'
)
const
{
bx_currency_type
,
csf_ap_status
,
csf_ap_meeting_point
}
=
proxy
.
useDict
(
'bx_currency_type'
,
'csf_ap_status'
,
'csf_ap_meeting_point'
)
const
handleExprotPdf
=
()
=>
{
exportLoading
.
value
=
true
getItineraryExprot
(
appointmentSummeryInfo
.
value
.
apiAppointmentInfoDto
.
appointmentBizId
).
then
(
...
...
@@ -222,7 +229,7 @@ const handleExprotPdf = () => {
// 设置下载文件名(重要)
// 从URL中提取文件名,或者使用返回的文件名
const
fileName
=
`
${
appointmentSummeryInfo
.
value
.
apiAppointmentInfoDto
.
creatorName
}
-
香港行程安排.pdf`
const
fileName
=
`香港行程安排.pdf`
link
.
download
=
fileName
// 触发下载
...
...
@@ -238,13 +245,18 @@ const handleExprotPdf = () => {
}
// 获取预约详情
function
getAppointmentInfo
(
appointmentBizId
)
{
get
Appointment
Detail
(
appointmentBizId
).
then
(
res
=>
{
get
Itinerary
Detail
(
appointmentBizId
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
appointmentSummeryInfo
.
value
=
res
.
data
let
appointment
=
appointmentSummeryInfo
.
value
.
apiAppointmentInfoDto
let
insurant
=
appointmentSummeryInfo
.
value
.
apiInsurantInfoDto
let
productPlan
=
appointmentSummeryInfo
.
value
.
apiProductPlanInfoDto
.
apiProductPlanMainInfoDto
productPlan
.
total
=
(
productPlan
.
paymentTerm
*
productPlan
.
eachIssuePremium
).
toFixed
(
2
)
csf_ap_meeting_point
.
_object
.
csf_ap_meeting_point
.
forEach
(
item
=>
{
if
(
item
.
value
==
appointmentSummeryInfo
.
value
.
meetingPoint
)
{
appointmentSummeryInfo
.
value
.
meetingPoint
=
item
.
label
}
})
if
(
appointmentSummeryInfo
.
value
.
total
)
{
appointmentSummeryInfo
.
value
.
total
=
Number
(
appointmentSummeryInfo
.
value
.
total
).
toFixed
(
2
)
}
detailData
.
value
=
[
{
title
:
'集合信息'
,
...
...
@@ -252,17 +264,17 @@ function getAppointmentInfo(appointmentBizId) {
// 第一行:2列布局(各占12)
{
label
:
'集合时间'
,
value
:
appointment
.
arrivalTime
,
value
:
appointment
SummeryInfo
.
value
.
arrivalTime
,
span
:
12
// 占12/24
},
{
label
:
'集合地点'
,
value
:
appointment
.
meetingPoint
,
value
:
appointment
SummeryInfo
.
value
.
meetingPoint
,
span
:
12
// 占12/24
},
{
label
:
'意向地点'
,
value
:
appointment
.
signingAddress
,
value
:
appointment
SummeryInfo
.
value
.
signingAddress
,
span
:
12
// 占12/24
}
]
...
...
@@ -273,13 +285,14 @@ function getAppointmentInfo(appointmentBizId) {
// 第一行:2列布局(各占12)
{
label
:
'姓名'
,
value
:
appointment
.
businessRepresentName1
,
value
:
appointment
SummeryInfo
.
value
.
businessRepresentName1
,
span
:
12
// 占12/24
},
{
label
:
'联系电话'
,
value
:
appointment
.
businessRepresentMobile1
?
appointment
.
businessRepresentMobile1Code
+
appointment
.
businessRepresentMobile1
value
:
appointmentSummeryInfo
.
value
.
businessRepresentMobile1
?
appointmentSummeryInfo
.
value
.
businessRepresentMobile1Code
+
appointmentSummeryInfo
.
value
.
businessRepresentMobile1
:
'-'
,
span
:
12
// 占12/24
}
...
...
@@ -291,43 +304,42 @@ function getAppointmentInfo(appointmentBizId) {
// 第一行:2列布局(各占12)
{
label
:
'咨询人'
,
value
:
appointment
.
arrivalTi
me
,
value
:
appointment
SummeryInfo
.
value
.
na
me
,
span
:
12
// 占12/24
},
{
label
:
'受保人'
,
value
:
insurant
.
insurantName
,
value
:
appointmentSummeryInfo
.
value
.
insurantName
,
span
:
12
// 占12/24
},
{
label
:
'意向缴费年期'
,
value
:
productPlan
.
paymentTerm
,
value
:
appointmentSummeryInfo
.
value
.
paymentTerm
,
span
:
12
// 占12/24
},
{
label
:
'保单
证
费'
,
value
:
productPlan
.
policyFee
||
'-'
,
label
:
'保单
征
费'
,
value
:
appointmentSummeryInfo
.
value
.
policyFee
||
'-'
,
span
:
12
// 占12/24
},
{
label
:
'币种'
,
value
:
productPlan
.
currency
,
value
:
appointmentSummeryInfo
.
value
.
currency
,
span
:
12
// 占12/24
},
{
label
:
'意向咨询产品'
,
value
:
productPlan
.
productName
,
value
:
appointmentSummeryInfo
.
value
.
productName
,
span
:
12
// 占12/24
},
{
label
:
'合计金额'
,
value
:
productPlan
.
total
,
value
:
appointmentSummeryInfo
.
value
.
total
,
span
:
12
// 占12/24
}
]
}
]
console
.
log
(
'detailData.value'
,
detailData
.
value
)
dialogVisible
.
value
=
true
}
...
...
@@ -381,7 +393,7 @@ const goToAppointment = type => {
if
(
type
==
'previousStep'
)
{
router
.
push
({
path
:
'/sign/FnaList'
})
}
else
if
(
type
==
'nextStep'
)
{
router
.
push
({
path
:
'/sign/
appointment
'
})
router
.
push
({
path
:
'/sign/
underwritingMain
'
})
}
}
/** 查询租户列表 */
...
...
@@ -505,6 +517,24 @@ getList()
font-size
:
16px
;
font-weight
:
500
;
margin
:
10px
0
;
color
:
#333
;
}
}
.remarkBOx
{
padding
:
10px
;
box-sizing
:
border-box
;
background-color
:
#f5f5f5
;
border-radius
:
5px
;
.remarkTitle
{
font-size
:
16px
;
}
.remarkEmpty
{
width
:
100%
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
color
:
#999
;
margin-bottom
:
10px
;
}
}
.exprotBtn
{
...
...
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