Commit 8fe36d78 by yuzhenWang

Merge branch 'feature-20250827wyz-写业务' into 'test'

预约前端已经写完发布测试

See merge request !6
parents 6d6b77eb 11c7857a
...@@ -54,6 +54,14 @@ export function getAppointmentDetail(appointmentBizId) { ...@@ -54,6 +54,14 @@ export function getAppointmentDetail(appointmentBizId) {
method: 'get' method: 'get'
}) })
} }
// 获取行程单详情
export function getItineraryDetail(appointmentBizId) {
return request({
url: `/csf/api/appointmentFile/pdf/itinerary/detail?appointmentBizId=${appointmentBizId}`,
method: 'get'
})
}
// 获取预约健康信息数据 // 获取预约健康信息数据
export function getQuestionnaires(appointmentBizId) { export function getQuestionnaires(appointmentBizId) {
return request({ return request({
...@@ -61,6 +69,14 @@ export function getQuestionnaires(appointmentBizId) { ...@@ -61,6 +69,14 @@ export function getQuestionnaires(appointmentBizId) {
method: 'get' method: 'get'
}) })
} }
// 预约-提交健康信息模块
export function saveQuestionnaires(data) {
return request({
url: '/question/api/questionnaires/answer/save',
method: 'post',
data: data
})
}
// 预约-提交预约信息模块 // 预约-提交预约信息模块
export function editAppointmentInfo(data) { export function editAppointmentInfo(data) {
return request({ return request({
...@@ -171,6 +187,19 @@ export function getAppointmentFile(data) { ...@@ -171,6 +187,19 @@ export function getAppointmentFile(data) {
data: 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) { export function delFile(appointmentFileBizId) {
return request({ return request({
......
...@@ -13,7 +13,11 @@ const customer = [ ...@@ -13,7 +13,11 @@ const customer = [
maxLength: 5, maxLength: 5,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '名字', label: '名字',
...@@ -24,7 +28,11 @@ const customer = [ ...@@ -24,7 +28,11 @@ const customer = [
maxLength: 10, maxLength: 10,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '姓名', label: '姓名',
...@@ -35,7 +43,11 @@ const customer = [ ...@@ -35,7 +43,11 @@ const customer = [
maxLength: 15, maxLength: 15,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '姓氏拼音', label: '姓氏拼音',
...@@ -46,7 +58,11 @@ const customer = [ ...@@ -46,7 +58,11 @@ const customer = [
maxLength: 30, maxLength: 30,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '姓名拼音', label: '姓名拼音',
...@@ -57,7 +73,11 @@ const customer = [ ...@@ -57,7 +73,11 @@ const customer = [
maxLength: 30, maxLength: 30,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '名字-英文', label: '名字-英文',
...@@ -68,7 +88,11 @@ const customer = [ ...@@ -68,7 +88,11 @@ const customer = [
maxLength: 30, maxLength: 30,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '称谓', label: '称谓',
...@@ -78,7 +102,11 @@ const customer = [ ...@@ -78,7 +102,11 @@ const customer = [
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
dictType: 'csf_customer_title', dictType: 'csf_customer_title',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '性别', label: '性别',
...@@ -88,7 +116,11 @@ const customer = [ ...@@ -88,7 +116,11 @@ const customer = [
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
dictType: 'sys_gender', dictType: 'sys_gender',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '生日', label: '生日',
...@@ -97,7 +129,11 @@ const customer = [ ...@@ -97,7 +129,11 @@ const customer = [
required: false, required: false,
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '年龄', label: '年龄',
...@@ -108,7 +144,11 @@ const customer = [ ...@@ -108,7 +144,11 @@ const customer = [
required: true, required: true,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '移动电话', label: '移动电话',
...@@ -121,7 +161,11 @@ const customer = [ ...@@ -121,7 +161,11 @@ const customer = [
drawerType: 'phone', drawerType: 'phone',
phone: {}, phone: {},
code: 'areaCode', code: 'areaCode',
value: '' value: '',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '邮箱', label: '邮箱',
...@@ -132,7 +176,11 @@ const customer = [ ...@@ -132,7 +176,11 @@ const customer = [
required: true, required: true,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '是否吸烟', label: '是否吸烟',
...@@ -142,7 +190,11 @@ const customer = [ ...@@ -142,7 +190,11 @@ const customer = [
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
dictType: 'sys_no_yes', dictType: 'sys_no_yes',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '吸烟数量(支/天)', label: '吸烟数量(支/天)',
...@@ -153,7 +205,11 @@ const customer = [ ...@@ -153,7 +205,11 @@ const customer = [
required: false, required: false,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: false show: false,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
// { // {
// label: '公司类型', // label: '公司类型',
...@@ -173,7 +229,11 @@ const customer = [ ...@@ -173,7 +229,11 @@ const customer = [
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
dictType: 'csf_customer_type', dictType: 'csf_customer_type',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
// { // {
// label: '客户来源', // label: '客户来源',
...@@ -194,7 +254,11 @@ const customer = [ ...@@ -194,7 +254,11 @@ const customer = [
required: true, required: true,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
} }
] ]
}, },
...@@ -212,7 +276,11 @@ const customer = [ ...@@ -212,7 +276,11 @@ const customer = [
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
dictType: 'csf_marriage', dictType: 'csf_marriage',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '国籍(国家/地区)', label: '国籍(国家/地区)',
...@@ -222,7 +290,11 @@ const customer = [ ...@@ -222,7 +290,11 @@ const customer = [
disabled: false, disabled: false,
placeholder: '请填写', placeholder: '请填写',
show: true, show: true,
drawerType: 'country' drawerType: 'country',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '出生地', label: '出生地',
...@@ -233,7 +305,11 @@ const customer = [ ...@@ -233,7 +305,11 @@ const customer = [
maxLength: 300, maxLength: 300,
disabled: false, disabled: false,
placeholder: '请输入出生地(省市)', placeholder: '请输入出生地(省市)',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '教育程度', label: '教育程度',
...@@ -243,7 +319,11 @@ const customer = [ ...@@ -243,7 +319,11 @@ const customer = [
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
dictType: 'csf_education', dictType: 'csf_education',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '住宅电话', label: '住宅电话',
...@@ -256,7 +336,11 @@ const customer = [ ...@@ -256,7 +336,11 @@ const customer = [
drawerType: 'phone', drawerType: 'phone',
residenceTelephone: {}, residenceTelephone: {},
code: 'residenceAreaCode', code: 'residenceAreaCode',
maxLength: 20 maxLength: 20,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '固定电话', label: '固定电话',
...@@ -267,7 +351,11 @@ const customer = [ ...@@ -267,7 +351,11 @@ const customer = [
disabled: false, disabled: false,
placeholder: '请填写', placeholder: '请填写',
show: true, show: true,
maxLength: 20 maxLength: 20,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '是否长期出国', label: '是否长期出国',
...@@ -277,7 +365,11 @@ const customer = [ ...@@ -277,7 +365,11 @@ const customer = [
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
dictType: 'sys_no_yes', dictType: 'sys_no_yes',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '通讯地址', label: '通讯地址',
...@@ -288,7 +380,11 @@ const customer = [ ...@@ -288,7 +380,11 @@ const customer = [
placeholder: '请填写', placeholder: '请填写',
show: true, show: true,
drawerType: 'address', drawerType: 'address',
residenceAddress: {} residenceAddress: {},
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '住宅地址', label: '住宅地址',
...@@ -299,7 +395,11 @@ const customer = [ ...@@ -299,7 +395,11 @@ const customer = [
placeholder: '请填写', placeholder: '请填写',
show: true, show: true,
drawerType: 'address', drawerType: 'address',
residentialAddress: {} residentialAddress: {},
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '邮寄地址', label: '邮寄地址',
...@@ -310,7 +410,11 @@ const customer = [ ...@@ -310,7 +410,11 @@ const customer = [
placeholder: '请填写', placeholder: '请填写',
show: true, show: true,
drawerType: 'address', drawerType: 'address',
mailingAddress: {} mailingAddress: {},
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
} }
] ]
}, },
...@@ -328,7 +432,11 @@ const customer = [ ...@@ -328,7 +432,11 @@ const customer = [
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
dictType: 'csf_id_type', dictType: 'csf_id_type',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '证件号码', label: '证件号码',
...@@ -339,7 +447,11 @@ const customer = [ ...@@ -339,7 +447,11 @@ const customer = [
maxLength: 20, maxLength: 20,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
} }
] ]
}, },
...@@ -357,7 +469,11 @@ const customer = [ ...@@ -357,7 +469,11 @@ const customer = [
maxLength: 300, maxLength: 300,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '公司电话', label: '公司电话',
...@@ -370,7 +486,11 @@ const customer = [ ...@@ -370,7 +486,11 @@ const customer = [
drawerType: 'phone', drawerType: 'phone',
companyTelephone: {}, companyTelephone: {},
code: 'companyAreaCode', code: 'companyAreaCode',
maxLength: 20 maxLength: 20,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '职位', label: '职位',
...@@ -381,7 +501,11 @@ const customer = [ ...@@ -381,7 +501,11 @@ const customer = [
maxLength: 300, maxLength: 300,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '总工作年期', label: '总工作年期',
...@@ -392,7 +516,11 @@ const customer = [ ...@@ -392,7 +516,11 @@ const customer = [
maxLength: 300, maxLength: 300,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '现时每月收入', label: '现时每月收入',
...@@ -403,7 +531,11 @@ const customer = [ ...@@ -403,7 +531,11 @@ const customer = [
maxLength: 300, maxLength: 300,
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
}, },
{ {
label: '公司地址', label: '公司地址',
...@@ -414,7 +546,11 @@ const customer = [ ...@@ -414,7 +546,11 @@ const customer = [
placeholder: '请填写', placeholder: '请填写',
show: true, show: true,
drawerType: 'address', drawerType: 'address',
companyAddress: {} companyAddress: {},
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数
} }
] ]
} }
......
...@@ -35,9 +35,9 @@ const fnaForm = [ ...@@ -35,9 +35,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
labelPosition: 'right', //标签的位置
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
...@@ -51,11 +51,10 @@ const fnaForm = [ ...@@ -51,11 +51,10 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelWidth: '130px', //标签宽度 labelPosition: 'top', //标签的位置
sm: 12, //栅格布局份数 labelWidth: '140px', //标签宽度
lg: 8, //栅格布局份数, sm: 8, //栅格布局份数
labelPosition: 'right', //标签的位置 lg: 8 //栅格布局份数
labelWidth: '140px'
}, },
{ {
label: '理财顾问内部编码', label: '理财顾问内部编码',
...@@ -67,9 +66,9 @@ const fnaForm = [ ...@@ -67,9 +66,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '130px', //标签宽度 labelWidth: '130px', //标签宽度
labelPosition: 'right', //标签的位置 sm: 8, //栅格布局份数
sm: 12, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -82,9 +81,9 @@ const fnaForm = [ ...@@ -82,9 +81,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
labelPosition: 'right', //标签的位置 sm: 8, //栅格布局份数
sm: 12, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -97,9 +96,9 @@ const fnaForm = [ ...@@ -97,9 +96,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
labelPosition: 'right', //标签的位置
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -112,9 +111,9 @@ const fnaForm = [ ...@@ -112,9 +111,9 @@ const fnaForm = [
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
dictType: 'csf_employment', dictType: 'csf_employment',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
labelPosition: 'right', //标签的位置 sm: 8, //栅格布局份数
sm: 12, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -127,9 +126,9 @@ const fnaForm = [ ...@@ -127,9 +126,9 @@ const fnaForm = [
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
dictType: 'sys_no_yes', dictType: 'sys_no_yes',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
labelPosition: 'right', //标签的位置 sm: 8, //栅格布局份数
sm: 12, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -142,9 +141,9 @@ const fnaForm = [ ...@@ -142,9 +141,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
labelPosition: 'right', //标签的位置 sm: 8, //栅格布局份数
sm: 12, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
...@@ -158,9 +157,9 @@ const fnaForm = [ ...@@ -158,9 +157,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: false, show: false,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
labelPosition: 'right', //标签的位置 sm: 8, //栅格布局份数
sm: 12, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
} }
] ]
...@@ -190,8 +189,9 @@ const fnaForm = [ ...@@ -190,8 +189,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 10, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -204,8 +204,9 @@ const fnaForm = [ ...@@ -204,8 +204,9 @@ const fnaForm = [
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
dictType: 'sys_no_yes', dictType: 'sys_no_yes',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 10, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
} }
] ]
...@@ -226,8 +227,9 @@ const fnaForm = [ ...@@ -226,8 +227,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 10, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -240,8 +242,9 @@ const fnaForm = [ ...@@ -240,8 +242,9 @@ const fnaForm = [
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
dictType: 'sys_no_yes', dictType: 'sys_no_yes',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 10, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
} }
] ]
...@@ -262,8 +265,9 @@ const fnaForm = [ ...@@ -262,8 +265,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 10, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -276,8 +280,9 @@ const fnaForm = [ ...@@ -276,8 +280,9 @@ const fnaForm = [
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
dictType: 'sys_no_yes', dictType: 'sys_no_yes',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 10, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
} }
] ]
...@@ -308,8 +313,9 @@ const fnaForm = [ ...@@ -308,8 +313,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -322,8 +328,9 @@ const fnaForm = [ ...@@ -322,8 +328,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -336,8 +343,9 @@ const fnaForm = [ ...@@ -336,8 +343,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -351,8 +359,9 @@ const fnaForm = [ ...@@ -351,8 +359,9 @@ const fnaForm = [
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
dictType: 'bx_currency_type', dictType: 'bx_currency_type',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -364,8 +373,9 @@ const fnaForm = [ ...@@ -364,8 +373,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
} }
] ]
...@@ -395,8 +405,9 @@ const fnaForm = [ ...@@ -395,8 +405,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -409,8 +420,9 @@ const fnaForm = [ ...@@ -409,8 +420,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -423,8 +435,9 @@ const fnaForm = [ ...@@ -423,8 +435,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -438,8 +451,9 @@ const fnaForm = [ ...@@ -438,8 +451,9 @@ const fnaForm = [
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
dictType: 'bx_currency_type', dictType: 'bx_currency_type',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -451,8 +465,9 @@ const fnaForm = [ ...@@ -451,8 +465,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
} }
] ]
...@@ -483,8 +498,9 @@ const fnaForm = [ ...@@ -483,8 +498,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '180px', //标签宽度 labelWidth: '180px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -498,8 +514,9 @@ const fnaForm = [ ...@@ -498,8 +514,9 @@ const fnaForm = [
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
dictType: 'bx_currency_type', dictType: 'bx_currency_type',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -512,8 +529,9 @@ const fnaForm = [ ...@@ -512,8 +529,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '220px', //标签宽度 labelWidth: '220px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
} }
] ]
...@@ -542,8 +560,9 @@ const fnaForm = [ ...@@ -542,8 +560,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -557,8 +576,9 @@ const fnaForm = [ ...@@ -557,8 +576,9 @@ const fnaForm = [
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
dictType: 'bx_currency_type', dictType: 'bx_currency_type',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -571,8 +591,9 @@ const fnaForm = [ ...@@ -571,8 +591,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
} }
] ]
...@@ -597,8 +618,9 @@ const fnaForm = [ ...@@ -597,8 +618,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '220px', //标签宽度 labelWidth: '220px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -611,8 +633,9 @@ const fnaForm = [ ...@@ -611,8 +633,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelWidth: '200px', //标签宽度 labelPosition: 'top', //标签的位置
sm: 12, //栅格布局份数 labelWidth: '220px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -626,8 +649,9 @@ const fnaForm = [ ...@@ -626,8 +649,9 @@ const fnaForm = [
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
dictType: 'bx_currency_type', dictType: 'bx_currency_type',
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -640,8 +664,9 @@ const fnaForm = [ ...@@ -640,8 +664,9 @@ const fnaForm = [
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelWidth: '170px', //标签宽度 labelPosition: 'top', //标签的位置
sm: 12, //栅格布局份数 labelWidth: '220px', //标签宽度
sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
} }
] ]
...@@ -683,7 +708,8 @@ const fnaForm = [ ...@@ -683,7 +708,8 @@ const fnaForm = [
inputWidth: '300px', //输入框宽度 inputWidth: '300px', //输入框宽度
labelWidth: '260px', //标签宽度 labelWidth: '260px', //标签宽度
sm: 24, //栅格布局份数 sm: 24, //栅格布局份数
lg: 12 //栅格布局份数 lg: 12, //栅格布局份数
labelPosition: 'top' //标签的位置
} }
] ]
}, },
...@@ -707,7 +733,7 @@ const fnaForm = [ ...@@ -707,7 +733,7 @@ const fnaForm = [
labelWidth: '220px', //标签宽度 labelWidth: '220px', //标签宽度
sm: 24, //栅格布局份数 sm: 24, //栅格布局份数
lg: 12, //栅格布局份数 lg: 12, //栅格布局份数
labelPosition: 'right' //标签的位置 labelPosition: 'top' //标签的位置
}, },
{ {
label: '流动资产种类', label: '流动资产种类',
...@@ -719,24 +745,24 @@ const fnaForm = [ ...@@ -719,24 +745,24 @@ const fnaForm = [
placeholder: '请输入金额(HKD)', placeholder: '请输入金额(HKD)',
show: true, show: true,
labelWidth: '100px', //标签宽度 labelWidth: '100px', //标签宽度
sm: 20, //栅格布局份数 sm: 18, //栅格布局份数
lg: 20, //栅格布局份数 lg: 16, //栅格布局份数
labelPosition: 'right', //标签的位置 labelPosition: 'top', //标签的位置
dictType: 'csf_liquid_asset_type' dictType: 'csf_liquid_asset_type'
}, },
{ {
label: '', label: '',
key: 'otherLiquidAsset', key: 'otherLiquidAsset',
domType: 'Input', inputType: 'Input',
required: false, required: false,
maxLength: 300, maxLength: 300,
disabled: false, disabled: false,
placeholder: '请输入说明', placeholder: '请输入说明',
show: true, show: true,
labelWidth: '0px', //标签宽度 labelWidth: '0px', //标签宽度
sm: 4, //栅格布局份数 sm: 6, //栅格布局份数
lg: 4, //栅格布局份数 lg: 8, //栅格布局份数
labelPosition: 'right' //标签的位置 labelPosition: 'top' //标签的位置
} }
] ]
}, },
...@@ -760,6 +786,7 @@ const fnaForm = [ ...@@ -760,6 +786,7 @@ const fnaForm = [
labelWidth: '180px', //标签宽度 labelWidth: '180px', //标签宽度
sm: 24, //栅格布局份数 sm: 24, //栅格布局份数
lg: 24, //栅格布局份数 lg: 24, //栅格布局份数
labelPosition: 'top', //标签的位置
dictType: 'csf_premium_funding_source' dictType: 'csf_premium_funding_source'
} }
] ]
......
...@@ -186,7 +186,7 @@ const productPlan = [ ...@@ -186,7 +186,7 @@ const productPlan = [
required: false, required: false,
disabled: false, disabled: false,
placeholder: '请选择', placeholder: '请选择',
show: true, show: false,
labelPosition: 'top', //标签的位置 labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 12, //栅格布局份数 sm: 12, //栅格布局份数
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -23,11 +23,17 @@ ...@@ -23,11 +23,17 @@
<div class="fatherLable">{{ father.fatherTitle }}</div> <div class="fatherLable">{{ father.fatherTitle }}</div>
<div class="fatherDes">{{ father.description }}</div> <div class="fatherDes">{{ father.description }}</div>
<el-row> <el-row :gutter="20">
<template v-for="child in father.data" :key="child.key"> <template v-for="child in father.data" :key="child.key">
<el-col :span="8" class="formItem" v-if="child.show"> <el-col :sm="child.sm" :lg="child.lg" class="formItem" v-if="child.show">
<div> <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 <el-input
v-if="child.type === 'Input'" v-if="child.type === 'Input'"
:type="child.inputType" :type="child.inputType"
...@@ -180,8 +186,7 @@ import Country from '@/views/components/country' ...@@ -180,8 +186,7 @@ import Country from '@/views/components/country'
import Phone from '@/views/components/phone' import Phone from '@/views/components/phone'
import Address from '@/views/components/address' import Address from '@/views/components/address'
import { watch } from 'vue'
import { watch, } from 'vue'
import { addCustomer, getCustomerDetail, editCustomer, getCustomerList } from '@/api/sign/fna' import { addCustomer, getCustomerDetail, editCustomer, getCustomerList } from '@/api/sign/fna'
import useDictStore from '@/store/modules/dict' import useDictStore from '@/store/modules/dict'
const dictStore = useDictStore() //获取字典数据 const dictStore = useDictStore() //获取字典数据
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
<div class="fatherLable">{{ father.fatherTitle }}</div> <div class="fatherLable">{{ father.fatherTitle }}</div>
<div class="subTitle" v-if="father.subTitle">{{ father.subTitle }}</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"> <template v-for="child in father.data" :key="child.key">
<el-col :sm="child.sm" :lg="child.lg" class="formItem" v-if="child.show"> <el-col :sm="child.sm" :lg="child.lg" class="formItem" v-if="child.show">
<div> <div>
...@@ -40,6 +40,16 @@ ...@@ -40,6 +40,16 @@
:disabled="child.disabled" :disabled="child.disabled"
:style="{ width: child.inputWidth ? child.inputWidth : '100%' }" :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 <el-select
v-if="child.domType === 'Select'" v-if="child.domType === 'Select'"
v-model="form[father.key][child.key]" v-model="form[father.key][child.key]"
...@@ -99,7 +109,7 @@ ...@@ -99,7 +109,7 @@
</template> </template>
</el-row> </el-row>
<!-- 有子孙的dom --> <!-- 有子孙的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"> <template v-for="(child, childIndex) in father.data" :key="child.id">
<el-col :span="child.span"> <el-col :span="child.span">
<div class="childLabel" v-if="father.key == 'familyMembers'"> <div class="childLabel" v-if="father.key == 'familyMembers'">
...@@ -130,6 +140,7 @@ ...@@ -130,6 +140,7 @@
:prop="grandchildren.key" :prop="grandchildren.key"
:key="grandchildren.key" :key="grandchildren.key"
:label-width="grandchildren.labelWidth" :label-width="grandchildren.labelWidth"
:label-position="grandchildren.labelPosition"
> >
<el-input <el-input
v-if="grandchildren.domType === 'Input'" v-if="grandchildren.domType === 'Input'"
...@@ -139,6 +150,7 @@ ...@@ -139,6 +150,7 @@
maxlength="30" maxlength="30"
:disabled="grandchildren.disabled" :disabled="grandchildren.disabled"
/> />
<el-select <el-select
v-if="grandchildren.domType === 'Select'" v-if="grandchildren.domType === 'Select'"
v-model="form[father.key][childIndex][grandchildren.key]" v-model="form[father.key][childIndex][grandchildren.key]"
...@@ -169,9 +181,7 @@ ...@@ -169,9 +181,7 @@
style="margin-left: 10px" style="margin-left: 10px"
@click="deleteChildren(father, childIndex)" @click="deleteChildren(father, childIndex)"
> >
<el-icon style="color: red; font-size: 18px; padding-top: 15px" <el-icon class="deleteIcon"><Delete /></el-icon>
><Delete
/></el-icon>
</el-col> </el-col>
</template> </template>
<el-col <el-col
...@@ -179,7 +189,11 @@ ...@@ -179,7 +189,11 @@
v-if="father.addFamilyChildren" v-if="father.addFamilyChildren"
style="display: flex; justify-content: flex-end" 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-button >添加儿女</el-button
> >
</el-col> </el-col>
...@@ -382,6 +396,10 @@ const processFormData = async () => { ...@@ -382,6 +396,10 @@ const processFormData = async () => {
} }
// 添加表单子级dom // 添加表单子级dom
const addChildren = father => { const addChildren = father => {
if (editStatus.value) {
proxy.$modal.confirm(`请先点击编辑再添加儿女`, { showCancel: '0', title: '填写提示' })
return
}
const processedData = JSON.parse(JSON.stringify(processedFanFormData.value)) const processedData = JSON.parse(JSON.stringify(processedFanFormData.value))
let obj = { let obj = {
type: '4', type: '4',
...@@ -402,8 +420,9 @@ const addChildren = father => { ...@@ -402,8 +420,9 @@ const addChildren = father => {
disabled: false, disabled: false,
placeholder: '请输入', placeholder: '请输入',
show: true, show: true,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 10, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
}, },
{ {
...@@ -417,8 +436,9 @@ const addChildren = father => { ...@@ -417,8 +436,9 @@ const addChildren = father => {
show: true, show: true,
dictType: 'sys_no_yes', dictType: 'sys_no_yes',
options: noYesList.value, options: noYesList.value,
labelPosition: 'top', //标签的位置
labelWidth: '120px', //标签宽度 labelWidth: '120px', //标签宽度
sm: 10, //栅格布局份数 sm: 8, //栅格布局份数
lg: 8 //栅格布局份数 lg: 8 //栅格布局份数
} }
] ]
...@@ -804,12 +824,12 @@ watch( ...@@ -804,12 +824,12 @@ watch(
} }
.subTitle { .subTitle {
font-size: 16px; font-size: 16px;
padding-left: 8px; /* padding-left: 8px; */
margin-bottom: 10px; margin-bottom: 10px;
} }
.childLabel { .childLabel {
font-size: 14px; font-size: 14px;
padding-left: 15px; /* padding-left: 15px; */
margin-bottom: 15px; margin-bottom: 15px;
} }
.fatherDes { .fatherDes {
...@@ -832,6 +852,11 @@ watch( ...@@ -832,6 +852,11 @@ watch(
color: #a8abb2; color: #a8abb2;
} }
} }
.deleteIcon {
color: red;
font-size: 18px;
padding-top: 15px;
}
} }
.tabButton { .tabButton {
box-shadow: 0 -1px 14px #00000014; box-shadow: 0 -1px 14px #00000014;
...@@ -894,14 +919,17 @@ watch( ...@@ -894,14 +919,17 @@ watch(
margin-right: 10px; margin-right: 10px;
} }
/* 确保标签对齐方式正确 */ @media only screen and (min-width: 768px) {
/* :deep(.el-form-item) { .formInput,
display: flex; .deleteIcon {
align-items: center; margin-top: 30px !important;
} */ }
}
/* :deep(.el-form-item__content) { @media only screen and (min-width: 1200px) {
flex: 1; .formInput,
margin-left: 0 !important; .deleteIcon {
} */ margin-top: 30px !important;
}
}
</style> </style>
...@@ -265,7 +265,8 @@ const getDictsData = async () => { ...@@ -265,7 +265,8 @@ const getDictsData = async () => {
'csf_ap_movie', 'csf_ap_movie',
'csf_ap_game', 'csf_ap_game',
'wj_question_first_category', 'wj_question_first_category',
'wj_question_second_category' 'wj_question_second_category',
'csf_ap_policy_transfer'
]) ])
} }
......
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<el-table-column label="流程编号" align="center" prop="fnaNo" width="200" /> <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="policyId" />
<el-table-column label="保单号" align="center" prop="policyNo" width="150" /> <el-table-column label="保单号" align="center" prop="policyNo" width="150" />
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" sortable align="center" prop="createTime" width="150"> <el-table-column label="创建时间" sortable align="center" prop="createTime" width="200">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
......
...@@ -35,12 +35,26 @@ ...@@ -35,12 +35,26 @@
</div> </div>
<div class="right"> <div class="right">
<el-button type="success" :icon="Check" @click="handleSubmit('submit')">提交</el-button> <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> </div>
<div class="tabsBox"> <div class="tabsBox">
<el-row v-if="embed"> <el-row v-if="embed">
<el-col> <el-col>
<div class="topButtonBox"> <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 type="success" :icon="Check" @click="handleSubmit('submit')"
>提交</el-button >提交</el-button
> >
...@@ -167,6 +181,36 @@ ...@@ -167,6 +181,36 @@
</el-tabs> </el-tabs>
</div> </div>
</el-card> </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> </div>
</template> </template>
<script setup name="AppointmentEdit"> <script setup name="AppointmentEdit">
...@@ -187,7 +231,8 @@ import { ...@@ -187,7 +231,8 @@ import {
addAppointment, addAppointment,
getAppointmentDetail, getAppointmentDetail,
storageAppointment, storageAppointment,
editAppointmentDetail editAppointmentDetail,
uploadExcel
} from '@/api/sign/appointment' } from '@/api/sign/appointment'
import { listTenantUser, getInsuranceProductList, getAdditionalProductList } from '@/api/common' import { listTenantUser, getInsuranceProductList, getAdditionalProductList } from '@/api/common'
import { Check } from '@element-plus/icons-vue' import { Check } from '@element-plus/icons-vue'
...@@ -222,13 +267,15 @@ const customerInfo = ref({}) ...@@ -222,13 +267,15 @@ const customerInfo = ref({})
const idsObj = ref({}) //各个模块的bizId const idsObj = ref({}) //各个模块的bizId
// const appointmentSummeryInfo = ref({ apiAppointmentInfoDto: { appointmentBizId: '' } }) //预约详情总信息 // const appointmentSummeryInfo = ref({ apiAppointmentInfoDto: { appointmentBizId: '' } }) //预约详情总信息
const appointmentSummeryInfo = ref({}) //预约详情总信息 const appointmentSummeryInfo = ref({}) //预约详情总信息
const currentFile = ref(null)
const processInfo = ref({ const processInfo = ref({
fnaNo: '暂无', fnaNo: '暂无',
status: '未完成', status: '未完成',
createTime: proxy.parseTime(new Date()), createTime: proxy.parseTime(new Date()),
customerName: userStore.name customerName: userStore.name
}) })
const execlDialog = ref(false)
const tabsList = ref([ const tabsList = ref([
{ {
label: '预约信息', label: '预约信息',
...@@ -315,11 +362,112 @@ const tabsList = ref([ ...@@ -315,11 +362,112 @@ const tabsList = ref([
// key: 'fnaBizId' // 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) { function getAppointmentInfo(appointmentBizId, changeTab) {
getAppointmentDetail(appointmentBizId).then(res => { getAppointmentDetail(appointmentBizId).then(res => {
if (res.code == 200) { if (res.code == 200) {
appointmentSummeryInfo.value = res.data 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) { if (!appointmentSummeryInfo.value.apiAppointmentInfoDto.appointmentBizId) {
showStorage.value = true showStorage.value = true
} }
...@@ -413,7 +561,8 @@ const getDictsData = async () => { ...@@ -413,7 +561,8 @@ const getDictsData = async () => {
'csf_ap_game', 'csf_ap_game',
'csf_ap_policy_transfer', 'csf_ap_policy_transfer',
'wj_question_first_category', 'wj_question_first_category',
'wj_question_second_category' 'wj_question_second_category',
'csf_ap_status'
]) ])
} }
// Tab切换前的验证 // Tab切换前的验证
...@@ -464,6 +613,10 @@ const handleSubmit = type => { ...@@ -464,6 +613,10 @@ const handleSubmit = type => {
submitAppointmentObj.value.apiAppointmentInfoDto.policyTransfer = submitAppointmentObj.value.apiAppointmentInfoDto.policyTransfer =
policyTransferRef.value[0].form.policyTransfer policyTransferRef.value[0].form.policyTransfer
} }
if (questionnairesInfoRef.value) {
submitAppointmentObj.value.answerSessionsDtoList =
questionnairesInfoRef.value[0].handleFormValues().answerSessionsDtoList
}
// 代表新增预约 // 代表新增预约
if (formStatus.value == 'appointmentAdd' && !idsObj.value.appointmentBizId) { if (formStatus.value == 'appointmentAdd' && !idsObj.value.appointmentBizId) {
submitAppointmentObj.value.apiAppointmentInfoDto.customerBizId = submitAppointmentObj.value.apiAppointmentInfoDto.customerBizId =
...@@ -502,20 +655,44 @@ const handleSubmit = type => { ...@@ -502,20 +655,44 @@ const handleSubmit = type => {
) { ) {
submitAppointmentObj.value[key2] = appointmentSummeryInfo.value[key1] 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 => { editAppointmentDetail(submitAppointmentObj.value).then(res => {
if (res.code == 200) { if (res.code == 200) {
getAppointmentInfo(idsObj.value.appointmentBizId) getAppointmentInfo(idsObj.value.appointmentBizId)
appointmentInfoRef.value[0].handleEditStatus() appointmentInfoRef.value[0].handleEditStatus(true)
productPlanRef.value[0].handleEditStatus() productPlanRef.value[0].handleEditStatus(true)
policyHolderInfoRef.value[0].handleEditStatus() policyHolderInfoRef.value[0].handleEditStatus(true)
insuredInfoRef.value[0].handleEditStatus() insuredInfoRef.value[0].handleEditStatus(true)
secondHolderInfoRef.value[0].handleEditStatus() secondHolderInfoRef.value[0].handleEditStatus(true)
beneficiaryInfoRef.value[0].handleEditStatus() beneficiaryInfoRef.value[0].handleEditStatus(true)
policyTransferRef.value[0].handleEditStatus() policyTransferRef.value[0].handleEditStatus(true)
questionnairesInfoRef.value[0].handleEditStatus() questionnairesInfoRef.value[0].handleEditStatus(true)
proxy.$message.success('修改预约单成功') proxy.$message.success('修改预约单成功')
} }
}) })
...@@ -732,7 +909,7 @@ onUnmounted(() => { ...@@ -732,7 +909,7 @@ onUnmounted(() => {
min-height: calc(100vh - 84.5px); min-height: calc(100vh - 84.5px);
} }
.embed-container { .embed-container {
min-height: calc(100vh - 317px); min-height: calc(100vh - 325px);
} }
.appointment-container { .appointment-container {
display: flex; display: flex;
...@@ -792,6 +969,7 @@ onUnmounted(() => { ...@@ -792,6 +969,7 @@ onUnmounted(() => {
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
margin-bottom: 10px;
} }
.tabButton { .tabButton {
box-shadow: 0 -1px 14px #00000014; box-shadow: 0 -1px 14px #00000014;
...@@ -905,4 +1083,25 @@ onUnmounted(() => { ...@@ -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> </style>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
v-if="props.idsObj.appointmentBizId" v-if="props.idsObj.appointmentBizId"
type="primary" type="primary"
icon="EditPen" icon="EditPen"
@click="handleEditStatus" @click="handleEditStatus(!editStatus)"
>编辑</el-button >编辑</el-button
> >
</div> </div>
...@@ -126,6 +126,7 @@ ...@@ -126,6 +126,7 @@
</el-row> </el-row>
</el-form> </el-form>
</div> </div>
<!-- <div v-else class="domEmpty" v-loading="loading"></div> -->
<Phone <Phone
@close="handleCloseDrawer" @close="handleCloseDrawer"
:showDrawer="showPhoneDrawer" :showDrawer="showPhoneDrawer"
...@@ -489,8 +490,8 @@ const handleSelectChange = (father, child) => { ...@@ -489,8 +490,8 @@ const handleSelectChange = (father, child) => {
} }
} }
// 改变编辑状态 // 改变编辑状态
const handleEditStatus = () => { const handleEditStatus = status => {
editStatus.value = !editStatus.value editStatus.value = status
// 深拷贝原始数据 // 深拷贝原始数据
const processedData = JSON.parse(JSON.stringify(processedAppointmentData.value)) const processedData = JSON.parse(JSON.stringify(processedAppointmentData.value))
for (const section of processedData) { for (const section of processedData) {
...@@ -726,7 +727,7 @@ const submitForm = () => { ...@@ -726,7 +727,7 @@ const submitForm = () => {
if (props.idsObj.appointmentBizId) { if (props.idsObj.appointmentBizId) {
editAppointmentInfo(submitObj).then(res => { editAppointmentInfo(submitObj).then(res => {
if (res.code == 200) { if (res.code == 200) {
handleEditStatus() handleEditStatus(true)
proxy.$message.success('预约信息修改成功') proxy.$message.success('预约信息修改成功')
emit('handleSuccessEdit') emit('handleSuccessEdit')
} }
...@@ -772,6 +773,7 @@ watch( ...@@ -772,6 +773,7 @@ watch(
setTimeout(() => { setTimeout(() => {
processFormData() processFormData()
}, 500) }, 500)
// processFormData()
} }
} }
) )
...@@ -791,6 +793,17 @@ defineExpose({ ...@@ -791,6 +793,17 @@ defineExpose({
}) })
</script> </script>
<style lang="scss" scoped> <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 { .topBtn {
width: 100%; width: 100%;
display: flex; display: flex;
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
v-if="props.idsObj.appointmentBizId" v-if="props.idsObj.appointmentBizId"
type="primary" type="primary"
icon="EditPen" icon="EditPen"
@click="handleEditStatus" @click="handleEditStatus(!editStatus)"
>编辑</el-button >编辑</el-button
> >
</div> </div>
...@@ -174,6 +174,7 @@ ...@@ -174,6 +174,7 @@
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
<!-- <div v-else class="domEmpty" v-loading="loading"></div> -->
<Phone <Phone
@close="handleCloseDrawer" @close="handleCloseDrawer"
:showDrawer="showPhoneDrawer" :showDrawer="showPhoneDrawer"
...@@ -692,8 +693,8 @@ const handleSelectChange = (child, l1, l2) => { ...@@ -692,8 +693,8 @@ const handleSelectChange = (child, l1, l2) => {
} }
} }
// 改变编辑状态 // 改变编辑状态
const handleEditStatus = () => { const handleEditStatus = status => {
editStatus.value = !editStatus.value editStatus.value = status
console.log('触发了编辑状态', editStatus.value) console.log('触发了编辑状态', editStatus.value)
// 深拷贝原始数据 // 深拷贝原始数据
...@@ -891,21 +892,21 @@ const handleFormValues = () => { ...@@ -891,21 +892,21 @@ const handleFormValues = () => {
if (pattern.test(key) && section[key]) { if (pattern.test(key) && section[key]) {
section[key] = proxy.formatToDateTime(section[key]) section[key] = proxy.formatToDateTime(section[key])
} }
if (section['customerType'] == 'COMPANY') { // if (section['customerType'] == 'COMPANY') {
for (const key1 in companyObj.value) { // for (const key1 in companyObj.value) {
if (key == key1 && section[key]) { // if (key == key1 && section[key]) {
submitObj[key1] = section[key] // submitObj[key1] = section[key]
} // }
if (key == 'companyMobile' && section[key]) { // if (key == 'companyMobile' && section[key]) {
submitObj[key] = section[key].split(' ')[1] // submitObj[key] = section[key].split(' ')[1]
submitObj['companyMobileCode'] = section[key].split(' ')[0] // submitObj['companyMobileCode'] = section[key].split(' ')[0]
} // }
if (key == 'authMobile' && section[key]) { // if (key == 'authMobile' && section[key]) {
submitObj[key] = section[key].split(' ')[1] // submitObj[key] = section[key].split(' ')[1]
submitObj['authMobileCode'] = section[key].split(' ')[0] // submitObj['authMobileCode'] = section[key].split(' ')[0]
} // }
} // }
} // }
if (section['customerType'] == 'INDIVIDUAL' && section[key]) { if (section['customerType'] == 'INDIVIDUAL' && section[key]) {
for (const key1 in personalObj.value) { for (const key1 in personalObj.value) {
if (key == key1) { if (key == key1) {
...@@ -914,6 +915,18 @@ const handleFormValues = () => { ...@@ -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 => { phoneOraddressKey.value.forEach(item => {
if (item.drawerType == 'address' && item.id === section.id) { if (item.drawerType == 'address' && item.id === section.id) {
submitObj.addressList.push({ submitObj.addressList.push({
...@@ -958,7 +971,7 @@ const submitForm = () => { ...@@ -958,7 +971,7 @@ const submitForm = () => {
apiBeneficiaryInfoDtoList: submitObj apiBeneficiaryInfoDtoList: submitObj
}).then(res => { }).then(res => {
if (res.code == 200) { if (res.code == 200) {
handleEditStatus() handleEditStatus(true)
proxy.$message.success('受益人修改成功') proxy.$message.success('受益人修改成功')
emit('handleSuccessEdit') emit('handleSuccessEdit')
} }
...@@ -1026,6 +1039,17 @@ defineExpose({ ...@@ -1026,6 +1039,17 @@ defineExpose({
}) })
</script> </script>
<style lang="scss" scoped> <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 { .topBtn {
width: 100%; width: 100%;
display: flex; display: flex;
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
@sort-change="sortChange" @sort-change="sortChange"
> >
<!-- <el-table-column type="selection" width="55" /> --> <!-- <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="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="policyId" width="150" />
<el-table-column label="保单号" align="center" prop="policyNo" width="150" /> <el-table-column label="保单号" align="center" prop="policyNo" width="150" />
<el-table-column label="客户姓名" align="center" prop="customerName" width="100" /> <el-table-column label="客户姓名" align="center" prop="customerName" width="100" />
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" sortable align="center" prop="createTime" width="150"> <el-table-column label="创建时间" sortable align="center" prop="createTime" width="200">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
v-if="props.idsObj.appointmentBizId" v-if="props.idsObj.appointmentBizId"
type="primary" type="primary"
icon="EditPen" icon="EditPen"
@click="handleEditStatus" @click="handleEditStatus(!editStatus)"
>编辑</el-button >编辑</el-button
> >
</div> </div>
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
<el-row style="margin-bottom: 10px"> <el-row style="margin-bottom: 10px">
<div class="formBox"> <div class="formBox">
<div class="fatherLable">{{ level1.firstCategoryName }}</div> <div class="fatherLable">{{ level1.firstCategoryName }}</div>
<!-- <div class="fatherDes">{{ father.description }}</div> -->
<el-row :gutter="20"> <el-row :gutter="20">
<template <template
...@@ -30,140 +29,144 @@ ...@@ -30,140 +29,144 @@
:key="level2.secondCategory" :key="level2.secondCategory"
> >
<el-col :sm="level2.sm" :lg="level2.lg" class="formItem"> <el-col :sm="level2.sm" :lg="level2.lg" class="formItem">
<div class="level2Title">{{ level2.secondCategoryName }}</div> <div class="level2Title">
<div class="level2Content" v-for="(level3, l3) in level2.questionsDtoList"> {{ level2.secondCategoryName }}
<div class="level2Left"> </div>
{{ l3 + 1 }}/{{ level2.questionsDtoList.length }} <div>
</div> <div class="level2Content" v-for="(level3, l3) in level2.questionsDtoList">
<div class="level2Right"> <div
<div class="level3Title">{{ level3.text }}</div> class="level2Left"
<!-- <el-form-item v-if="level2.secondCategory !== 'MEDICAL_CONDITION'"
:label-width="level3.labelWidth" >
:key="level3.key" {{ l3 + 1 }}/{{ level2.questionsDtoList.length }}
:label-position="level3.labelPosition" </div>
> --> <div class="level2Right">
<div class="level3Content"> <div
<el-radio-group class="level3Title"
v-model=" v-if="level2.secondCategory !== 'MEDICAL_CONDITION'"
form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3][
'answerSessionsDto'
]['optionBizId']
"
@change="handleRadioChange(l1, l2, l3, level3)"
> >
<el-radio {{ level3.text }}
v-for="dict in level3.optionsDtoList" </div>
:key="dict.optionBizId"
:value="dict.optionBizId"
>{{ dict.text }}</el-radio
>
</el-radio-group>
<div <div
v-if=" class="level3Content"
form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3][ v-if="level2.secondCategory !== 'MEDICAL_CONDITION'"
'answerSessionsDto'
]['optionBizId'] == 'option_1002'
"
style="width: 100%"
> >
<div v-for="level4 in level3.addQuestionsDtoList"> <!-- 回显得时候拿不到optionBizId -->
<!-- --> <el-radio-group
<el-form-item v-model="
label-position="top" form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3][
:key="level4.addQuestionsBizId" 'answerSessionsDto'
:label="level4.text" ]['optionBizId']
:rules=" "
level4.isRequired @change="handleRadioChange(l1, l2, l3, level3)"
? [ :disabled="editStatus"
{ >
required: true, <el-radio
message: `${level4.text}不能为空`, v-for="dict in level3.optionsDtoList"
trigger: 'blur' :key="dict.optionBizId"
} :value="dict.optionBizId"
] >{{ dict.text }}</el-radio
: []
"
> >
<div class="level4Content"> </el-radio-group>
<el-input <!--选择是才展示附加条件 -->
v-if="level4.type === 'TEXT'" <div
:type="level4.type" v-if="
placeholder="请输入" form[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3][
maxlength="30" 'answerSessionsDto'
style="width: 50%" ]['optionBizId'] == 'option_1002'
@blur="inputBlur(l1, l2, l3, level4)" "
/> style="width: 100%"
<!-- @change="handleDateChange(child)" --> >
<el-date-picker <!-- 附加问题 -->
style="width: 50%" <div v-for="(level4, l4) in level3.addQuestionsDtoList">
v-if="level4.type === 'DATE'" <el-form-item
:type="level4.type" label-position="top"
placeholder="请输入" :key="level4.addQuestionsBizId"
:disabled-date="disabledDate" :label="level4.text"
/> :rules="
</div> level4.isRequired
</el-form-item> ? [
{
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> </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-button
>
</div>
</div> </div>
<!-- </el-form-item> -->
</div> </div>
</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> </el-col>
</template> </template>
</el-row> </el-row>
...@@ -185,91 +188,23 @@ ...@@ -185,91 +188,23 @@
type="primary" type="primary"
icon="Check" icon="Check"
@click="submitForm" @click="submitForm"
size="large"
:disabled="editStatus" :disabled="editStatus"
size="large"
>提交</el-button >提交</el-button
> >
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </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> </div>
<Phone <div v-else class="domEmpty" v-loading="loading"></div>
@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> </div>
</template> </template>
<script setup name="secondHolderInfo"> <script setup name="secondHolderInfo">
import { calculateExactAge } from '@/utils/date' import { Plus } from '@element-plus/icons-vue'
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 { watch, nextTick } from 'vue' import { watch } from 'vue'
import { getCustomerList } from '@/api/sign/fna' import { getQuestionnaires, saveQuestionnaires } from '@/api/sign/appointment'
import { editSecondHolderInfo, getQuestionnaires } from '@/api/sign/appointment'
import useDictStore from '@/store/modules/dict' import useDictStore from '@/store/modules/dict'
const dictStore = useDictStore() //获取字典数据 const dictStore = useDictStore() //获取字典数据
...@@ -284,90 +219,14 @@ const props = defineProps({ ...@@ -284,90 +219,14 @@ const props = defineProps({
}) })
const emit = defineEmits(['handleSuccessEdit']) const emit = defineEmits(['handleSuccessEdit'])
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
// const { csf_id_type, sys_gender } = proxy.useDict('csf_id_type', 'sys_gender') const loading = ref(false)
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 errorFields = ref([]) // 存储校验失败的字段信息 const errorFields = ref([]) // 存储校验失败的字段信息
const editStatus = ref(true) // 表单是否可编辑,若是修改初始不可编辑 const editStatus = ref(true) // 表单是否可编辑,若是修改初始不可编辑
const openList = ref(false) // 客户列表弹窗
const oldObjInfo = ref({}) // 修改时存储原始数据,便于撤销操作 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({ const data = reactive({
form: {}, form: [],
tempSecondHolderForm: {}, //由于切换tab的时候,表单数据会重置,所以需要 tempSecondHolderForm: [], //由于切换tab的时候,表单数据会重置,所以需要
questionnairesDom: [], // 处理后的表单数据 questionnairesDom: [], // 处理后的表单数据
oldAppointmentData: [], // 保存旧的表单Dom,便于撤销操作 oldAppointmentData: [], // 保存旧的表单Dom,便于撤销操作
rules: {}, //表单验证规则, rules: {}, //表单验证规则,
...@@ -379,97 +238,68 @@ const data = reactive({ ...@@ -379,97 +238,68 @@ const data = reactive({
}) })
const { form, rules, questionnairesDom, queryParams, oldAppointmentData, tempSecondHolderForm } = const { form, rules, questionnairesDom, queryParams, oldAppointmentData, tempSecondHolderForm } =
toRefs(data) 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) => { const handleRadioChange = (l1, l2, l3, level3) => {
let answer = JSON.parse( let answer = JSON.parse(
JSON.stringify( JSON.stringify(
form.value[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3]['answerSessionsDto'] form.value[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3]['answerSessionsDto']
) )
) )
let optionItem = level3.optionsDtoList.filter(item => item.optionBizId === answer.optionBizId) let optionItem = level3.optionsDtoList.filter(item => item.optionBizId === answer.optionBizId)
if (optionItem[0].value == 'YES') { let newObj = {
let newObj = { optionBizId: optionItem[0].optionBizId,
optionBizId: optionItem[0].optionBizId, content: optionItem[0].value
content: optionItem[0].value }
} // 检查数组中是否已存在相同ID的地址
// 检查数组中是否已存在相同ID的地址 const existingIndex = answer.optionJsonDtoList.findIndex(
const existingIndex = answer.optionJsonDtoList.findIndex( item => item.optionBizId === optionItem[0].optionBizId
item => item.optionBizId === optionItem[0].optionBizId )
)
if (existingIndex !== -1) { if (existingIndex !== -1) {
// 更新已存在的地址 // 更新已存在的数据
answer.optionJsonDtoList[existingIndex] = { ...newObj } answer.optionJsonDtoList[existingIndex] = { ...newObj }
} else { } else {
// 添加新地址 // 添加新的数据
answer.optionJsonDtoList.push({ ...newObj }) answer.optionJsonDtoList.push({ ...newObj })
}
} }
form.value[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3]['answerSessionsDto'] = answer 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 => { const handleDateChange = (l1, l2, l3, l4) => {
let age = null let time =
if (child.key == 'birthTime') { form.value[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3]['addQuestionsDtoList'][l4][
age = calculateExactAge(proxy.formatToDate(form.value.birthTime)) 'content'
if (age >= 0) { ]
form.value.age = age time = proxy.formatToDate(time)
} form.value[l1]['secondCategoryDtoList'][l2]['questionsDtoList'][l3]['addQuestionsDtoList'][l4][
} 'content'
] = time
} }
const disabledDate = time => { const disabledDate = time => {
return time.getTime() > Date.now() 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 => { const fetchDictData = dictType => {
...@@ -486,288 +316,12 @@ const fetchDictData = dictType => { ...@@ -486,288 +316,12 @@ const fetchDictData = dictType => {
return [] 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 = () => { const handleEditStatus = status => {
editStatus.value = !editStatus.value editStatus.value = status
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
} }
// 数组去重
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 getInvalidFields = fields => {
const errors = [] const errors = []
...@@ -784,36 +338,64 @@ const getInvalidFields = fields => { ...@@ -784,36 +338,64 @@ const getInvalidFields = fields => {
// 处理表单填写得数据 // 处理表单填写得数据
const handleFormValues = () => { const handleFormValues = () => {
let submitObj = {} let submitObj = []
if (props.activeName == 'secondHolder') { if (props.activeName == 'questionnaires') {
submitObj = JSON.parse(JSON.stringify(form.value)) submitObj = JSON.parse(JSON.stringify(form.value))
console.log('1111', submitObj)
} else { } else {
submitObj = JSON.parse(JSON.stringify(tempSecondHolderForm.value)) // submitObj = JSON.parse(JSON.stringify(tempSecondHolderForm.value))
// console.log('2222', submitObj)
} }
//处理表单数据 let answerSessionsDtoList = []
for (const key1 in submitObj) { // 处理表单数据
if (key1 == 'birthTime') { submitObj.forEach(level1 => {
submitObj[key1] = proxy.formatToDateTime(submitObj[key1]) 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 = () => { const submitForm = () => {
proxy.$refs['heathFormRef'].validate((valid, fields) => { proxy.$refs['heathFormRef'].validate((valid, fields) => {
if (valid) { if (valid) {
let submitObj = handleFormValues() let submitObj = handleFormValues()
console.log('====================================')
console.log('submitObj', submitObj)
console.log('====================================')
// return
if (props.idsObj.appointmentBizId) { if (props.idsObj.appointmentBizId) {
editSecondHolderInfo(submitObj).then(res => { saveQuestionnaires(submitObj).then(res => {
if (res.code == 200) { if (res.code == 200) {
handleEditStatus() handleEditStatus(true)
proxy.$message.success('第二持有人修改成功') proxy.$message.success('健康信息修改成功')
emit('handleSuccessEdit') emit('handleSuccessEdit')
} }
}) })
...@@ -846,6 +428,7 @@ const resetForm = () => { ...@@ -846,6 +428,7 @@ const resetForm = () => {
.catch(() => {}) .catch(() => {})
} }
const getQuestionnairesInfo = () => { const getQuestionnairesInfo = () => {
loading.value = true
getQuestionnaires(props.idsObj.appointmentBizId).then(res => { getQuestionnaires(props.idsObj.appointmentBizId).then(res => {
if (res.code == 200) { if (res.code == 200) {
let result = res.data.firstAndSecondCategoryDtoList let result = res.data.firstAndSecondCategoryDtoList
...@@ -871,11 +454,59 @@ const getQuestionnairesInfo = () => { ...@@ -871,11 +454,59 @@ const getQuestionnairesInfo = () => {
level3.labelWidth = '100%' level3.labelWidth = '100%'
level3.labelPosition = 'top' level3.labelPosition = 'top'
level3.key = level3.id level3.key = level3.id
if (level3.optionsDtoList && level3.optionsDtoList.length > 0) {
level3.optionsDtoList.forEach((level4, l4) => {})
}
if (!level3.answerSessionsDto) { if (!level3.answerSessionsDto) {
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 = []
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 = () => { ...@@ -883,6 +514,7 @@ const getQuestionnairesInfo = () => {
}) })
questionnairesDom.value = form.value = result questionnairesDom.value = form.value = result
loading.value = false
} }
}) })
} }
...@@ -894,6 +526,9 @@ watch( ...@@ -894,6 +526,9 @@ watch(
tempSecondHolderForm.value = { ...form.value } tempSecondHolderForm.value = { ...form.value }
if (newVal === 'questionnaires') { if (newVal === 'questionnaires') {
if (props.idsObj.appointmentBizId) {
editStatus.value = true
}
getQuestionnairesInfo() getQuestionnairesInfo()
} }
} }
...@@ -906,6 +541,17 @@ defineExpose({ ...@@ -906,6 +541,17 @@ defineExpose({
}) })
</script> </script>
<style lang="scss" scoped> <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 { .topBtn {
width: 100%; width: 100%;
display: flex; display: flex;
...@@ -951,6 +597,22 @@ defineExpose({ ...@@ -951,6 +597,22 @@ defineExpose({
width: 100%; width: 100%;
} }
} }
.questionContent {
display: flex;
align-items: center;
.questionTitle {
margin-right: 10px;
font-size: 13px;
}
.addBtn {
margin-top: 10px;
}
.deleteIcon {
font-size: 20px;
color: red;
margin-left: 5px;
}
}
} }
} }
.inputBox { .inputBox {
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
v-if="props.idsObj.appointmentBizId" v-if="props.idsObj.appointmentBizId"
type="primary" type="primary"
icon="EditPen" icon="EditPen"
@click="handleEditStatus" @click="handleEditStatus(!editStatus)"
>编辑</el-button >编辑</el-button
> >
</div> </div>
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
style="width: 100%" style="width: 100%"
v-if="child.domType === 'DatePicker'" v-if="child.domType === 'DatePicker'"
type="date" type="date"
:disabled-date="disabledDate"
:placeholder="child.placeholder" :placeholder="child.placeholder"
:disabled="child.disabled" :disabled="child.disabled"
/> />
...@@ -169,6 +170,7 @@ ...@@ -169,6 +170,7 @@
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
<!-- <div v-else class="domEmpty" v-loading="loading"></div> -->
<Phone <Phone
@close="handleCloseDrawer" @close="handleCloseDrawer"
:showDrawer="showPhoneDrawer" :showDrawer="showPhoneDrawer"
...@@ -313,6 +315,9 @@ const data = reactive({ ...@@ -313,6 +315,9 @@ const data = reactive({
}) })
const { form, rules, processedinsuredData, queryParams, oldAppointmentData, tempPolicyForm } = const { form, rules, processedinsuredData, queryParams, oldAppointmentData, tempPolicyForm } =
toRefs(data) toRefs(data)
const disabledDate = time => {
return time.getTime() > Date.now()
}
const exportInfo = () => { const exportInfo = () => {
if (props.customerBizId && editStatus.value) { if (props.customerBizId && editStatus.value) {
proxy.$modal.confirm(`请先点击编辑在导入客户信息`, { showCancel: '0', title: '填写提示' }) proxy.$modal.confirm(`请先点击编辑在导入客户信息`, { showCancel: '0', title: '填写提示' })
...@@ -776,10 +781,8 @@ const handleSelectChange = (father, child) => { ...@@ -776,10 +781,8 @@ const handleSelectChange = (father, child) => {
} }
} }
// 改变编辑状态 // 改变编辑状态
const handleEditStatus = () => { const handleEditStatus = status => {
editStatus.value = !editStatus.value editStatus.value = status
console.log('触发了编辑状态', editStatus.value)
// 深拷贝原始数据 // 深拷贝原始数据
const processedData = JSON.parse(JSON.stringify(processedinsuredData.value)) const processedData = JSON.parse(JSON.stringify(processedinsuredData.value))
for (const section of processedData) { for (const section of processedData) {
...@@ -921,13 +924,15 @@ const handleFormValues = () => { ...@@ -921,13 +924,15 @@ const handleFormValues = () => {
submitObj['authMobileCode'] = submitObj['authMobile'].split(' ')[0] submitObj['authMobileCode'] = submitObj['authMobile'].split(' ')[0]
submitObj['authMobile'] = submitObj['authMobile'].split(' ')[1] submitObj['authMobile'] = submitObj['authMobile'].split(' ')[1]
} }
console.log('====================================')
console.log('受保人submitObj', submitObj)
console.log('====================================')
// 删除多余字段 // 删除多余字段
deleteKeyList.value.forEach(item => { deleteKeyList.value.forEach(item => {
delete submitObj[item] delete submitObj[item]
}) })
console.log('====================================')
console.log('受保人submitObj', submitObj)
console.log('====================================')
return submitObj return submitObj
} }
// 表单提交 // 表单提交
...@@ -953,7 +958,7 @@ const submitForm = () => { ...@@ -953,7 +958,7 @@ const submitForm = () => {
submitObj['insurantBizId'] = props.apiInsurantInfoDto.insurantBizId submitObj['insurantBizId'] = props.apiInsurantInfoDto.insurantBizId
editInsurantInfo(submitObj).then(res => { editInsurantInfo(submitObj).then(res => {
if (res.code == 200) { if (res.code == 200) {
handleEditStatus() handleEditStatus(true)
proxy.$message.success('受保人修改成功') proxy.$message.success('受保人修改成功')
emit('handleSuccessEdit') emit('handleSuccessEdit')
} }
...@@ -1022,6 +1027,17 @@ defineExpose({ ...@@ -1022,6 +1027,17 @@ defineExpose({
}) })
</script> </script>
<style lang="scss" scoped> <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 { .topBtn {
width: 100%; width: 100%;
display: flex; display: flex;
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
v-if="props.idsObj.appointmentBizId" v-if="props.idsObj.appointmentBizId"
type="primary" type="primary"
icon="EditPen" icon="EditPen"
@click="handleEditStatus" @click="handleEditStatus(!editStatus)"
>编辑</el-button >编辑</el-button
> >
</div> </div>
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
style="width: 100%" style="width: 100%"
v-if="child.domType === 'DatePicker'" v-if="child.domType === 'DatePicker'"
type="date" type="date"
:disabled-date="disabledDate"
:placeholder="child.placeholder" :placeholder="child.placeholder"
:disabled="child.disabled" :disabled="child.disabled"
/> />
...@@ -169,6 +170,7 @@ ...@@ -169,6 +170,7 @@
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
<!-- <div v-else class="domEmpty" v-loading="loading"></div> -->
<Phone <Phone
@close="handleCloseDrawer" @close="handleCloseDrawer"
:showDrawer="showPhoneDrawer" :showDrawer="showPhoneDrawer"
...@@ -200,7 +202,7 @@ import Phone from '@/views/components/phone' ...@@ -200,7 +202,7 @@ import Phone from '@/views/components/phone'
import Address from '@/views/components/address' import Address from '@/views/components/address'
import { watch, nextTick } from 'vue' 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 { editPolicyholderInfo } from '@/api/sign/appointment'
import useDictStore from '@/store/modules/dict' import useDictStore from '@/store/modules/dict'
...@@ -313,6 +315,9 @@ const data = reactive({ ...@@ -313,6 +315,9 @@ const data = reactive({
}) })
const { form, rules, processedPolicyData, queryParams, oldAppointmentData, tempPolicyForm } = const { form, rules, processedPolicyData, queryParams, oldAppointmentData, tempPolicyForm } =
toRefs(data) toRefs(data)
const disabledDate = time => {
return time.getTime() > Date.now()
}
const exportInfo = () => { const exportInfo = () => {
if (props.customerBizId && editStatus.value) { if (props.customerBizId && editStatus.value) {
proxy.$modal.confirm(`请先点击编辑在导入客户信息`, { showCancel: '0', title: '填写提示' }) proxy.$modal.confirm(`请先点击编辑在导入客户信息`, { showCancel: '0', title: '填写提示' })
...@@ -660,11 +665,7 @@ const confirmDrawer = info => { ...@@ -660,11 +665,7 @@ const confirmDrawer = info => {
// info 为抽屉返回的值 // info 为抽屉返回的值
if (drawerInfo.value.domType == 'arrowRight' && drawerInfo.value.drawerType) { if (drawerInfo.value.domType == 'arrowRight' && drawerInfo.value.drawerType) {
let newObj = info[drawerInfo.value.key] let newObj = info[drawerInfo.value.key]
// if (form.value['customerType'] == 'COMPANY') {
// newObj.fatherKey = 'company'
// } else if (form.value['customerType'] == 'INDIVIDUAL') {
// newObj.fatherKey = 'person'
// }
//要判断drawerType //要判断drawerType
switch (drawerInfo.value.drawerType) { switch (drawerInfo.value.drawerType) {
case 'phone': case 'phone':
...@@ -772,10 +773,8 @@ const handleSelectChange = (father, child) => { ...@@ -772,10 +773,8 @@ const handleSelectChange = (father, child) => {
} }
} }
// 改变编辑状态 // 改变编辑状态
const handleEditStatus = () => { const handleEditStatus = status => {
editStatus.value = !editStatus.value editStatus.value = status
console.log('触发了编辑状态', editStatus.value)
// 深拷贝原始数据 // 深拷贝原始数据
const processedData = JSON.parse(JSON.stringify(processedPolicyData.value)) const processedData = JSON.parse(JSON.stringify(processedPolicyData.value))
for (const section of processedData) { for (const section of processedData) {
...@@ -924,6 +923,8 @@ const handleFormValues = () => { ...@@ -924,6 +923,8 @@ const handleFormValues = () => {
delete submitObj[item] delete submitObj[item]
}) })
console.log('投保人', submitObj)
return submitObj return submitObj
} }
// 表单提交 // 表单提交
...@@ -931,10 +932,6 @@ const submitForm = () => { ...@@ -931,10 +932,6 @@ const submitForm = () => {
proxy.$refs['policyholderInfoFormRef'].validate((valid, fields) => { proxy.$refs['policyholderInfoFormRef'].validate((valid, fields) => {
if (valid) { if (valid) {
let submitObj = handleFormValues() let submitObj = handleFormValues()
console.log('====================================')
console.log('submitObj', submitObj)
console.log('====================================')
// return
if (props.idsObj.appointmentBizId) { if (props.idsObj.appointmentBizId) {
submitObj['appointmentBizId'] = props.apiPolicyholderInfoDto.appointmentBizId submitObj['appointmentBizId'] = props.apiPolicyholderInfoDto.appointmentBizId
...@@ -942,7 +939,7 @@ const submitForm = () => { ...@@ -942,7 +939,7 @@ const submitForm = () => {
submitObj['policyholderBizId'] = props.apiPolicyholderInfoDto.policyholderBizId submitObj['policyholderBizId'] = props.apiPolicyholderInfoDto.policyholderBizId
editPolicyholderInfo(submitObj).then(res => { editPolicyholderInfo(submitObj).then(res => {
if (res.code == 200) { if (res.code == 200) {
handleEditStatus() handleEditStatus(true)
proxy.$message.success('投保人修改成功') proxy.$message.success('投保人修改成功')
emit('handleSuccessEdit') emit('handleSuccessEdit')
} }
...@@ -974,15 +971,7 @@ const resetForm = () => { ...@@ -974,15 +971,7 @@ const resetForm = () => {
.catch(() => {}) .catch(() => {})
} }
// 获取流程详情
// function getCustomerInfo(customerBizId, formData) {
// getCustomerDetail(customerBizId).then(async res => {
// if (res.code == 200) {
// // 回显值
// setFormValue(res.data, formData)
// }
// })
// }
watch( watch(
() => props.activeName, () => props.activeName,
newVal => { newVal => {
...@@ -1018,6 +1007,17 @@ defineExpose({ ...@@ -1018,6 +1007,17 @@ defineExpose({
}) })
</script> </script>
<style lang="scss" scoped> <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 { .topBtn {
width: 100%; width: 100%;
display: flex; display: flex;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
v-if="props.idsObj.appointmentBizId" v-if="props.idsObj.appointmentBizId"
type="primary" type="primary"
icon="EditPen" icon="EditPen"
@click="handleEditStatus" @click="handleEditStatus(!editStatus)"
>编辑</el-button >编辑</el-button
> >
</div> </div>
...@@ -52,18 +52,13 @@ ...@@ -52,18 +52,13 @@
<el-row> <el-row>
<el-col> <el-col>
<div class="tabButton"> <div class="tabButton">
<el-button <!-- :disabled="editStatus" -->
type="primary" <el-button type="primary" icon="Check" @click="submitForm" size="large">提交</el-button>
icon="Check"
@click="submitForm"
size="large"
:disabled="editStatus"
>提交</el-button
>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
<!-- <div v-else class="domEmpty" v-loading="loading"></div> -->
</div> </div>
</template> </template>
<script setup name="PolicyTransferInfo"> <script setup name="PolicyTransferInfo">
...@@ -85,6 +80,7 @@ const props = defineProps({ ...@@ -85,6 +80,7 @@ const props = defineProps({
const emit = defineEmits(['handleSuccessEdit']) const emit = defineEmits(['handleSuccessEdit'])
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
// const { csf_id_type, sys_gender } = proxy.useDict('csf_id_type', 'sys_gender') // const { csf_id_type, sys_gender } = proxy.useDict('csf_id_type', 'sys_gender')
const loading = ref(false)
const editStatus = ref(false) //编辑状态 const editStatus = ref(false) //编辑状态
const errorFields = ref([]) // 存储校验失败的字段信息 const errorFields = ref([]) // 存储校验失败的字段信息
const data = reactive({ const data = reactive({
...@@ -135,6 +131,7 @@ const validateEnglish = (rule, value, callback) => { ...@@ -135,6 +131,7 @@ const validateEnglish = (rule, value, callback) => {
*/ */
const processFormData = async obj => { const processFormData = async obj => {
form.value = {} form.value = {}
loading.value = true
// 深拷贝原始数据 // 深拷贝原始数据
const processedData = JSON.parse(JSON.stringify(obj.domdata)) const processedData = JSON.parse(JSON.stringify(obj.domdata))
...@@ -150,10 +147,11 @@ const processFormData = async obj => { ...@@ -150,10 +147,11 @@ const processFormData = async obj => {
} }
} }
policyTransferData.value = processedData policyTransferData.value = processedData
loading.value = false
} }
// 改变编辑状态 // 改变编辑状态
const handleEditStatus = () => { const handleEditStatus = status => {
editStatus.value = !editStatus.value editStatus.value = status
console.log('触发了编辑状态', editStatus.value) console.log('触发了编辑状态', editStatus.value)
// 深拷贝原始数据 // 深拷贝原始数据
...@@ -213,7 +211,7 @@ const submitForm = () => { ...@@ -213,7 +211,7 @@ const submitForm = () => {
if (props.idsObj.appointmentBizId) { if (props.idsObj.appointmentBizId) {
editPolicytransfer(submitObj).then(res => { editPolicytransfer(submitObj).then(res => {
if (res.code == 200) { if (res.code == 200) {
// handleEditStatus() // handleEditStatus(true)
proxy.$message.success('转保声明修改成功') proxy.$message.success('转保声明修改成功')
emit('handleSuccessEdit') emit('handleSuccessEdit')
} }
...@@ -252,6 +250,17 @@ defineExpose({ ...@@ -252,6 +250,17 @@ defineExpose({
}) })
</script> </script>
<style lang="scss" scoped> <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 { .content {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
v-if="props.idsObj.appointmentBizId" v-if="props.idsObj.appointmentBizId"
type="primary" type="primary"
icon="EditPen" icon="EditPen"
@click="handleEditStatus" @click="handleEditStatus(!editStatus)"
>编辑</el-button >编辑</el-button
> >
</div> </div>
...@@ -684,14 +684,24 @@ const handleSelectChange = (father, child) => { ...@@ -684,14 +684,24 @@ const handleSelectChange = (father, child) => {
} }
break 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: default:
break break
} }
} }
// 改变编辑状态 // 改变编辑状态
const handleEditStatus = () => { const handleEditStatus = status => {
editStatus.value = !editStatus.value editStatus.value = status
// 深拷贝原始数据 // 深拷贝原始数据
const processedData = JSON.parse(JSON.stringify(processedProductData.value)) const processedData = JSON.parse(JSON.stringify(processedProductData.value))
for (const section of processedData) { for (const section of processedData) {
...@@ -867,6 +877,8 @@ const setFormValue = (obj, formData) => { ...@@ -867,6 +877,8 @@ const setFormValue = (obj, formData) => {
const processedData = JSON.parse(JSON.stringify(formData)) const processedData = JSON.parse(JSON.stringify(formData))
for (const section of processedData) { for (const section of processedData) {
for (const key in newForm) { for (const key in newForm) {
console.log('key', key)
//回显的数据有的没填写就会是null,收集表单值得时候和dom对应不上,对于null值得项要根据section得keyType给form正确得数据类型 //回显的数据有的没填写就会是null,收集表单值得时候和dom对应不上,对于null值得项要根据section得keyType给form正确得数据类型
if (!newForm[key]) { if (!newForm[key]) {
if (section.keyType == 'Array') { if (section.keyType == 'Array') {
...@@ -885,6 +897,18 @@ const setFormValue = (obj, formData) => { ...@@ -885,6 +897,18 @@ const setFormValue = (obj, formData) => {
section.data.push(newChildren) section.data.push(newChildren)
} }
for (const field of section.data) { 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) { if (section.child == 'yes' && field.children && field.children.length > 0) {
for (const child of field.children) { for (const child of field.children) {
if (props.idsObj.appointmentBizId) { if (props.idsObj.appointmentBizId) {
...@@ -936,6 +960,9 @@ const handleSubmitForm = () => { ...@@ -936,6 +960,9 @@ const handleSubmitForm = () => {
for (const key in result) { for (const key in result) {
if (isObject(result[key])) { if (isObject(result[key])) {
for (const key2 in 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]) { if (key2 == 'policyEffectiveDate' && result[key][key2]) {
result[key][key2] = proxy.formatToDateTime(result[key][key2]) result[key][key2] = proxy.formatToDateTime(result[key][key2])
} }
...@@ -992,10 +1019,11 @@ const submitForm = saveType => { ...@@ -992,10 +1019,11 @@ const submitForm = saveType => {
console.log('====================================') console.log('====================================')
console.log('提交的数据', result) console.log('提交的数据', result)
console.log('====================================') console.log('====================================')
// return
if (props.idsObj.appointmentBizId) { if (props.idsObj.appointmentBizId) {
editProductPlanInfo(result).then(res => { editProductPlanInfo(result).then(res => {
if (res.code == 200) { if (res.code == 200) {
handleEditStatus() handleEditStatus(true)
proxy.$message.success('产品计划修改成功') proxy.$message.success('产品计划修改成功')
emit('handleSuccessEdit') emit('handleSuccessEdit')
} }
...@@ -1034,11 +1062,7 @@ watch( ...@@ -1034,11 +1062,7 @@ watch(
} }
} }
) )
if (props.formStatus == 'appointmentAdd') {
setTimeout(() => {
processFormData()
}, 1000)
}
// 暴露给父组件 // 暴露给父组件
defineExpose({ defineExpose({
handleSubmitForm, handleSubmitForm,
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
v-if="props.idsObj.appointmentBizId" v-if="props.idsObj.appointmentBizId"
type="primary" type="primary"
icon="EditPen" icon="EditPen"
@click="handleEditStatus" @click="handleEditStatus(!editStatus)"
>编辑</el-button >编辑</el-button
> >
</div> </div>
...@@ -270,8 +270,6 @@ const phoneMenuList = ref([ ...@@ -270,8 +270,6 @@ const phoneMenuList = ref([
} }
]) ])
const phoneQuickList = ref([]) const phoneQuickList = ref([])
const personalObj = ref({}) //存储个人key
const companyObj = ref({}) //存储公司key
const commonObj = ref({}) //存储个人和公司的公共key const commonObj = ref({}) //存储个人和公司的公共key
const deleteKeyList = ref([ const deleteKeyList = ref([
'objType', 'objType',
...@@ -450,8 +448,6 @@ const processFormData = async obj => { ...@@ -450,8 +448,6 @@ const processFormData = async obj => {
//弹出右侧抽屉 //弹出右侧抽屉
const handleFoucs = child => { const handleFoucs = child => {
if (child.disabled) return if (child.disabled) return
console.log('saveKey.value', saveKey.value)
console.log('child', child)
drawerInfo.value = JSON.parse(JSON.stringify(child)) drawerInfo.value = JSON.parse(JSON.stringify(child))
switch (child.drawerType) { switch (child.drawerType) {
...@@ -617,8 +613,8 @@ const handleSelectChange = (father, child) => { ...@@ -617,8 +613,8 @@ const handleSelectChange = (father, child) => {
} }
} }
// 改变编辑状态 // 改变编辑状态
const handleEditStatus = () => { const handleEditStatus = status => {
editStatus.value = !editStatus.value editStatus.value = status
console.log('触发了编辑状态', editStatus.value) console.log('触发了编辑状态', editStatus.value)
// 深拷贝原始数据 // 深拷贝原始数据
...@@ -686,15 +682,10 @@ const submitForm = () => { ...@@ -686,15 +682,10 @@ const submitForm = () => {
proxy.$refs['secondHolderFormRef'].validate((valid, fields) => { proxy.$refs['secondHolderFormRef'].validate((valid, fields) => {
if (valid) { if (valid) {
let submitObj = handleFormValues() let submitObj = handleFormValues()
console.log('====================================')
console.log('submitObj', submitObj)
console.log('====================================')
// return
if (props.idsObj.appointmentBizId) { if (props.idsObj.appointmentBizId) {
editSecondHolderInfo(submitObj).then(res => { editSecondHolderInfo(submitObj).then(res => {
if (res.code == 200) { if (res.code == 200) {
handleEditStatus() handleEditStatus(true)
proxy.$message.success('第二持有人修改成功') proxy.$message.success('第二持有人修改成功')
emit('handleSuccessEdit') emit('handleSuccessEdit')
} }
...@@ -742,6 +733,10 @@ watch( ...@@ -742,6 +733,10 @@ watch(
exportValue: null exportValue: null
}) })
}, 500) }, 500)
// processFormData({
// domdata: secondHolderDomData,
// exportValue: null
// })
} }
} }
) )
...@@ -806,7 +801,7 @@ defineExpose({ ...@@ -806,7 +801,7 @@ defineExpose({
} }
} }
.tabButton { .tabButton {
box-shadow: 0 -1px 14px #00000014; /* box-shadow: 0 -1px 14px #00000014; */
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -16,12 +16,6 @@ ...@@ -16,12 +16,6 @@
v-show="showSearch" v-show="showSearch"
label-width="100px" 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-form-item label="确认预约时间" style="width: 300px">
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
...@@ -144,22 +138,31 @@ ...@@ -144,22 +138,31 @@
<!-- 展示行程单详情 --> <!-- 展示行程单详情 -->
<el-dialog v-model="dialogVisible" width="70%"> <el-dialog v-model="dialogVisible" width="70%">
<div class="dialogBox"> <div class="dialogBox">
<div class="dialogTitle"> <div class="dialogTitle">香港行程安排</div>
{{ appointmentSummeryInfo.apiAppointmentInfoDto.creatorName }} - 香港行程安排
</div>
<div class="dialogItem" v-for="item in detailData"> <div class="dialogItem" v-for="item in detailData">
<div class="dialogItemTitle">{{ item.title }}</div> <div class="dialogItemTitle">{{ item.title }}</div>
<DetailPanel <DetailPanel
:data="item.data" :data="item.data"
:row-span="24" :row-span="24"
col-gap="16px" col-gap="10px"
label-width="120px" label-width="120px"
row-height="45px" row-height="45px"
:show-col-border="true" :show-col-border="true"
/> />
</div> </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"> <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 >下载行程单</el-button
> >
</div> </div>
...@@ -176,7 +179,7 @@ import { ...@@ -176,7 +179,7 @@ import {
getAppointmentList, getAppointmentList,
getAppointmentExprot, getAppointmentExprot,
delSigleAppointment, delSigleAppointment,
getAppointmentDetail, getItineraryDetail,
getItineraryExprot getItineraryExprot
} from '@/api/sign/appointment' } from '@/api/sign/appointment'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
...@@ -209,7 +212,11 @@ const data = reactive({ ...@@ -209,7 +212,11 @@ const data = reactive({
}) })
const { queryParams, form, rules } = toRefs(data) 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 = () => { const handleExprotPdf = () => {
exportLoading.value = true exportLoading.value = true
getItineraryExprot(appointmentSummeryInfo.value.apiAppointmentInfoDto.appointmentBizId).then( getItineraryExprot(appointmentSummeryInfo.value.apiAppointmentInfoDto.appointmentBizId).then(
...@@ -222,7 +229,7 @@ const handleExprotPdf = () => { ...@@ -222,7 +229,7 @@ const handleExprotPdf = () => {
// 设置下载文件名(重要) // 设置下载文件名(重要)
// 从URL中提取文件名,或者使用返回的文件名 // 从URL中提取文件名,或者使用返回的文件名
const fileName = `${appointmentSummeryInfo.value.apiAppointmentInfoDto.creatorName} - 香港行程安排.pdf` const fileName = `香港行程安排.pdf`
link.download = fileName link.download = fileName
// 触发下载 // 触发下载
...@@ -238,13 +245,18 @@ const handleExprotPdf = () => { ...@@ -238,13 +245,18 @@ const handleExprotPdf = () => {
} }
// 获取预约详情 // 获取预约详情
function getAppointmentInfo(appointmentBizId) { function getAppointmentInfo(appointmentBizId) {
getAppointmentDetail(appointmentBizId).then(res => { getItineraryDetail(appointmentBizId).then(res => {
if (res.code == 200) { if (res.code == 200) {
appointmentSummeryInfo.value = res.data appointmentSummeryInfo.value = res.data
let appointment = appointmentSummeryInfo.value.apiAppointmentInfoDto csf_ap_meeting_point._object.csf_ap_meeting_point.forEach(item => {
let insurant = appointmentSummeryInfo.value.apiInsurantInfoDto if (item.value == appointmentSummeryInfo.value.meetingPoint) {
let productPlan = appointmentSummeryInfo.value.apiProductPlanInfoDto.apiProductPlanMainInfoDto appointmentSummeryInfo.value.meetingPoint = item.label
productPlan.total = (productPlan.paymentTerm * productPlan.eachIssuePremium).toFixed(2) }
})
if (appointmentSummeryInfo.value.total) {
appointmentSummeryInfo.value.total = Number(appointmentSummeryInfo.value.total).toFixed(2)
}
detailData.value = [ detailData.value = [
{ {
title: '集合信息', title: '集合信息',
...@@ -252,17 +264,17 @@ function getAppointmentInfo(appointmentBizId) { ...@@ -252,17 +264,17 @@ function getAppointmentInfo(appointmentBizId) {
// 第一行:2列布局(各占12) // 第一行:2列布局(各占12)
{ {
label: '集合时间', label: '集合时间',
value: appointment.arrivalTime, value: appointmentSummeryInfo.value.arrivalTime,
span: 12 // 占12/24 span: 12 // 占12/24
}, },
{ {
label: '集合地点', label: '集合地点',
value: appointment.meetingPoint, value: appointmentSummeryInfo.value.meetingPoint,
span: 12 // 占12/24 span: 12 // 占12/24
}, },
{ {
label: '意向地点', label: '意向地点',
value: appointment.signingAddress, value: appointmentSummeryInfo.value.signingAddress,
span: 12 // 占12/24 span: 12 // 占12/24
} }
] ]
...@@ -273,13 +285,14 @@ function getAppointmentInfo(appointmentBizId) { ...@@ -273,13 +285,14 @@ function getAppointmentInfo(appointmentBizId) {
// 第一行:2列布局(各占12) // 第一行:2列布局(各占12)
{ {
label: '姓名', label: '姓名',
value: appointment.businessRepresentName1, value: appointmentSummeryInfo.value.businessRepresentName1,
span: 12 // 占12/24 span: 12 // 占12/24
}, },
{ {
label: '联系电话', label: '联系电话',
value: appointment.businessRepresentMobile1 value: appointmentSummeryInfo.value.businessRepresentMobile1
? appointment.businessRepresentMobile1Code + appointment.businessRepresentMobile1 ? appointmentSummeryInfo.value.businessRepresentMobile1Code +
appointmentSummeryInfo.value.businessRepresentMobile1
: '-', : '-',
span: 12 // 占12/24 span: 12 // 占12/24
} }
...@@ -291,43 +304,42 @@ function getAppointmentInfo(appointmentBizId) { ...@@ -291,43 +304,42 @@ function getAppointmentInfo(appointmentBizId) {
// 第一行:2列布局(各占12) // 第一行:2列布局(各占12)
{ {
label: '咨询人', label: '咨询人',
value: appointment.arrivalTime, value: appointmentSummeryInfo.value.name,
span: 12 // 占12/24 span: 12 // 占12/24
}, },
{ {
label: '受保人', label: '受保人',
value: insurant.insurantName, value: appointmentSummeryInfo.value.insurantName,
span: 12 // 占12/24 span: 12 // 占12/24
}, },
{ {
label: '意向缴费年期', label: '意向缴费年期',
value: productPlan.paymentTerm, value: appointmentSummeryInfo.value.paymentTerm,
span: 12 // 占12/24 span: 12 // 占12/24
}, },
{ {
label: '保单费', label: '保单费',
value: productPlan.policyFee || '-', value: appointmentSummeryInfo.value.policyFee || '-',
span: 12 // 占12/24 span: 12 // 占12/24
}, },
{ {
label: '币种', label: '币种',
value: productPlan.currency, value: appointmentSummeryInfo.value.currency,
span: 12 // 占12/24 span: 12 // 占12/24
}, },
{ {
label: '意向咨询产品', label: '意向咨询产品',
value: productPlan.productName, value: appointmentSummeryInfo.value.productName,
span: 12 // 占12/24 span: 12 // 占12/24
}, },
{ {
label: '合计金额', label: '合计金额',
value: productPlan.total, value: appointmentSummeryInfo.value.total,
span: 12 // 占12/24 span: 12 // 占12/24
} }
] ]
} }
] ]
console.log('detailData.value', detailData.value)
dialogVisible.value = true dialogVisible.value = true
} }
...@@ -381,7 +393,7 @@ const goToAppointment = type => { ...@@ -381,7 +393,7 @@ const goToAppointment = type => {
if (type == 'previousStep') { if (type == 'previousStep') {
router.push({ path: '/sign/FnaList' }) router.push({ path: '/sign/FnaList' })
} else if (type == 'nextStep') { } else if (type == 'nextStep') {
router.push({ path: '/sign/appointment' }) router.push({ path: '/sign/underwritingMain' })
} }
} }
/** 查询租户列表 */ /** 查询租户列表 */
...@@ -505,6 +517,24 @@ getList() ...@@ -505,6 +517,24 @@ getList()
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 500;
margin: 10px 0; 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 { .exprotBtn {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment