Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mongo-ui
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ui
mongo-ui
Commits
f576da6c
Commit
f576da6c
authored
Aug 20, 2020
by
郭志伟
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 华贵表单验证完善
parent
20e7c738
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
161 additions
and
86 deletions
+161
-86
App.vue
src/App.vue
+1
-0
validation.js
src/service/validation.js
+18
-0
index.vue
src/views/Consultant/Plan/index.vue
+0
-54
index.vue
src/views/Policy/Add/index.vue
+142
-32
No files found.
src/App.vue
View file @
f576da6c
...
...
@@ -40,6 +40,7 @@ export default {
display: flex;
justify-content: center;
align-items: center;
z-index: 9999;
.loading {
padding: 6px;
border-radius: 6px;
...
...
src/service/validation.js
View file @
f576da6c
...
...
@@ -69,6 +69,15 @@ export function isIdNo(str) {
return
false
;
}
// 判断输入的字符是否为中文姓名最少两个中文字符
export
function
isChineseName
(
str
)
{
if
(
!
isNull
(
str
))
{
const
reg
=
/^
[\u
0391-
\u
FFE5
]{2,}
$/
;
return
reg
.
test
(
str
);
}
return
false
;
}
// 判断输入的字符是否以数字开头
export
function
isStartWithInteger
(
str
)
{
if
(
!
isNull
(
str
))
{
...
...
@@ -258,6 +267,15 @@ export function isBankNumber(str) {
return
false
;
}
// 判断中文地址不能少于5个汉字,且必须有一位数字
export
function
isChnAddress
(
str
)
{
if
(
!
isNull
(
str
))
{
const
reg
=
/^
(\d
|
[\u
4e00-
\u
9fa5
]){5,10}
$/
;
return
reg
.
test
(
str
);
}
return
false
;
}
// 判断微信环境
export
const
isWeixinBrower
=
window
.
navigator
.
userAgent
.
toLowerCase
().
match
(
/MicroMessenger/i
)
==
"
micromessenger
"
;
// 判断信用钱包环境
...
...
src/views/Consultant/Plan/index.vue
View file @
f576da6c
...
...
@@ -109,60 +109,6 @@ export default {
{
title
:
"
重疾险
"
,
price
:
"
50万
"
},
{
title
:
"
意外险
"
,
price
:
"
60万
"
},
{
title
:
"
寿险
"
,
price
:
"
350万
"
}
],
overviewList
:
[
{
id
:
1
,
goods
:
"
国民保·百万医疗险
"
,
type
:
"
mi
"
,
title
:
"
医疗险
"
,
amount
:
"
600万
"
,
range
:
"
1年
"
,
way
:
"
趸交
"
,
price
:
"
350元
"
,
goodsPirce
:
"
3000
"
,
goodsUnit
:
"
元/每年
"
,
reason
:
"
推荐理由推荐理由推荐理由推荐理由推荐理由推荐理由推荐理由
"
},
{
id
:
2
,
goods
:
"
康惠保2020终身重疾险
"
,
type
:
"
cii
"
,
title
:
"
重疾险
"
,
amount
:
"
50万
"
,
range
:
"
终身
"
,
way
:
"
20年
"
,
price
:
"
6000元
"
,
goodsPirce
:
"
6000
"
,
goodsUnit
:
"
元/每年
"
,
reason
:
"
推荐理由推荐理由推荐理由推荐理由推荐理由推荐理由推荐理由
"
},
{
id
:
3
,
goods
:
"
国民保·百万意外险
"
,
type
:
"
ai
"
,
title
:
"
意外险
"
,
amount
:
"
50万
"
,
range
:
"
1年
"
,
way
:
"
趸交
"
,
price
:
"
350元
"
,
goodsPirce
:
"
3000
"
,
goodsUnit
:
"
元/每年
"
,
reason
:
"
推荐理由推荐理由推荐理由推荐理由推荐理由推荐理由推荐理由
"
},
{
id
:
4
,
goods
:
"
国民保·百万寿险
"
,
type
:
"
li
"
,
title
:
"
寿险
"
,
amount
:
"
350万
"
,
range
:
"
保至70岁
"
,
way
:
"
20年
"
,
price
:
"
3725元
"
,
goodsPirce
:
"
3000
"
,
goodsUnit
:
"
元/每年
"
,
reason
:
"
推荐理由推荐理由推荐理由推荐理由推荐理由推荐理由推荐理由
"
}
]
};
},
...
...
src/views/Policy/Add/index.vue
View file @
f576da6c
...
...
@@ -15,9 +15,15 @@
v-model=
"formData.holderUserInfo.name"
name=
"holderUserInfo_name"
label=
"姓名"
placeholder=
"请
输入
投保人姓名"
placeholder=
"请
填写
投保人姓名"
:readonly=
"selfInfoReadonly"
:rules=
"[
{ required: true, message: '请输入投保人姓名' }]"
:rules=
"[
{ required: true, message: '请填写投保人姓名' },
{
validator: isChineseName,
message: '请填写正确的投保人姓名,最少2个中文字符'
}
]"
@click.native="inputClick"
/>
<cr-field
...
...
@@ -26,7 +32,13 @@
label=
"身份证号"
placeholder=
"请填写投保人身份证号"
:readonly=
"selfInfoReadonly"
:rules=
"[
{ required: true, message: '请填写投保人身份证号' }]"
:rules=
"[
{ required: true, message: '请填写投保人身份证号' },
{
validator: isIdNo,
message: '请填写正确的投保人身份证号'
}
]"
@click.native="inputClick"
/>
<cr-field
...
...
@@ -36,7 +48,13 @@
label=
"手机号"
placeholder=
"请填写投保人手机号"
:readonly=
"selfInfoReadonly"
:rules=
"[
{ required: true, message: '请填写投保人手机号' }]"
:rules=
"[
{ required: true, message: '请填写投保人手机号' },
{
validator: isPhone,
message: '请填写正确的投保人手机号'
}
]"
@click.native="inputClick"
/>
<cr-field
...
...
@@ -45,15 +63,21 @@
type=
"email"
label=
"电子邮箱"
placeholder=
"用户接收电子保单"
:rules=
"[
{ required: true, message: '请填写电子邮箱' }]"
:rules=
"[
{ required: true, message: '请填写电子邮箱' },
{
validator: isEmail,
message: '请填写正确的电子邮箱'
}
]"
/>
<cr-field
v-model=
"formData.holderUserInfo.annualIncome"
name=
"holderUserInfo_annualIncome"
label=
"年收入"
type=
"digit"
placeholder=
"请
输入
投保人年收入"
:rules=
"[
{ required: true, message: '请
输入
投保人年收入' }]"
placeholder=
"请
填写
投保人年收入"
:rules=
"[
{ required: true, message: '请
填写
投保人年收入' }]"
/>
<cr-field
v-model=
"formData.holderUserInfo.addressCode"
...
...
@@ -72,8 +96,14 @@
v-model=
"formData.holderUserInfo.addressDetail"
name=
"holderUserInfo_addressDetail"
label=
"详细地址"
placeholder=
"请输入居住详细地址"
:rules=
"[{ required: true, message: '请输入居住详细地址' }]"
placeholder=
"请填写居住详细地址"
:rules=
"[
{ required: true, message: '请填写投保人居住详细地址' },
{
validator: isChnAddress,
message: '请填写正确的地址,至少于5个汉字,且必须有1位数字'
}
]"
/>
<cr-field
v-model=
"formData.holderUserInfo.occupation"
...
...
@@ -92,7 +122,7 @@
v-model=
"formData.holderUserInfo.longTerm"
name=
"holderUserInfo_longTerm"
label=
"身份证有效期"
:rules=
"[{ required: true, message: '请选择身份证有效期' }]"
:rules=
"[{ required: true, message: '请选择
投保人
身份证有效期' }]"
>
<
template
#input
>
<cr-radio-btn
...
...
@@ -106,7 +136,13 @@
v-model=
"formData.holderUserInfo.validEnd"
name=
"holderUserInfo_validEnd"
label=
"有效期至"
:rules=
"[{ required: true, message: '请选择您的证件有效止期' }]"
:rules=
"[
{ required: true, message: '请选择投保人身份证止期' },
{
validator: isFutureDate,
message: '投保人身份证止期必须大于当前日期'
}
]"
>
<
template
#input
>
<popup-date-picker
...
...
@@ -151,7 +187,13 @@
label=
"身高"
type=
"number"
placeholder=
"请填写被保人身高"
:rules=
"[{ required: true, message: '请填写被保人身高' }]"
:rules=
"[
{ required: true, message: '请填写被保人身高' },
{
validator: isIntegerHeight,
message: '请填写正确的被保人身高,最多3个数字'
}
]"
>
<div
class=
"form-unit"
slot=
"button"
>
厘米
</div>
</cr-field>
...
...
@@ -161,7 +203,13 @@
label=
"体重"
type=
"number"
placeholder=
"请填写被保人体重"
:rules=
"[{ required: true, message: '请填写被保人体重' }]"
:rules=
"[
{ required: true, message: '请填写被保人体重' },
{
validator: isIntegerHeight,
message: '请填写正确的被保人体重,最多3个数字'
}
]"
>
<div
class=
"form-unit"
slot=
"button"
>
公斤
</div>
</cr-field>
...
...
@@ -170,44 +218,62 @@
v-model=
"formData.insuredUserInfo.name"
name=
"insuredUserInfo_name"
label=
"姓名"
placeholder=
"请
输入投
保人姓名"
placeholder=
"请
填写被
保人姓名"
:readonly=
"infoReadonly"
:rules=
"[
{ required: true, message: '请输入投保人姓名' }]"
:rules=
"[
{ required: true, message: '请填写投保人姓名' },
{
validator: isChineseName,
message: '请填写正确的被保人姓名,最少2个中文字符'
}
]"
/>
<cr-field
v-model=
"formData.insuredUserInfo.idNo"
name=
"insuredUserInfo_idNo"
label=
"身份证号"
placeholder=
"请填写
投
保人身份证号"
placeholder=
"请填写
被
保人身份证号"
:readonly=
"infoReadonly"
:rules=
"[
{ required: true, message: '请填写投保人身份证号' }]"
:rules=
"[
{ required: true, message: '请填写被保人身份证号' },
{
validator: isIdNo,
message: '请填写正确的被保人身份证号'
}
]"
/>
<cr-field
v-model=
"formData.insuredUserInfo.phoneNo"
name=
"insuredUserInfo_phoneNo"
label=
"手机号"
type=
"tel"
placeholder=
"请填写投保人手机号"
:rules=
"[
{ required: true, message: '请填写投保人手机号' }]"
placeholder=
"请填写被保人手机号"
:rules=
"[
{ required: true, message: '请填写被保人手机号' },
{
validator: isPhone,
message: '请填写正确的被保人手机号'
}
]"
/>
<cr-field
v-model=
"formData.insuredUserInfo.annualIncome"
name=
"insuredUserInfo_annualIncome"
label=
"年收入"
type=
"digit"
placeholder=
"请
输入投
保人年收入"
:rules=
"[
{ required: true, message: '请
输入投
保人年收入' }]"
placeholder=
"请
填写被
保人年收入"
:rules=
"[
{ required: true, message: '请
填写被
保人年收入' }]"
/>
<cr-field
v-model=
"formData.insuredUserInfo.addressCode"
name=
"insuredUserInfo_addressCode"
label=
"居住省市"
:rules=
"[
{ required: true, message: '请选择
投
保人居住省市' }]"
:rules=
"[
{ required: true, message: '请选择
被
保人居住省市' }]"
>
<template
#input
>
<popup-area-picker
v-model=
"formData.insuredUserInfo.addressCode"
placeholder=
"请选择
投
保人居住省市"
placeholder=
"请选择
被
保人居住省市"
/>
</
template
>
</cr-field>
...
...
@@ -215,8 +281,14 @@
v-model=
"formData.insuredUserInfo.addressDetail"
name=
"insuredUserInfo_weigaddressDetailht"
label=
"详细地址"
placeholder=
"请输入居住详细地址"
:rules=
"[{ required: true, message: '请输入居住详细地址' }]"
placeholder=
"请填写被保人居住详细地址"
:rules=
"[
{ required: true, message: '请填写被保人居住详细地址' },
{
validator: isChnAddress,
message: '请填写正确的地址,至少于5个汉字,且必须有1位数字'
}
]"
/>
<cr-field
v-model=
"formData.insuredUserInfo.occupation"
...
...
@@ -236,7 +308,7 @@
v-model=
"formData.insuredUserInfo.longTerm"
name=
"insuredUserInfo_longTerm"
label=
"身份证有效期"
:rules=
"[{ required: true, message: '请选择身份证有效期' }]"
:rules=
"[{ required: true, message: '请选择
被保人
身份证有效期' }]"
>
<
template
#input
>
<cr-radio-btn
...
...
@@ -250,7 +322,13 @@
v-model=
"formData.insuredUserInfo.validEnd"
name=
"insuredUserInfo_validEnd"
label=
"有效期至"
:rules=
"[{ required: true, message: '请选择您的证件有效止期' }]"
:rules=
"[
{ required: true, message: '请选择被保人身份证止期' },
{
validator: isFutureDate,
message: '被保人身份证止期必须大于当前日期'
}
]"
>
<
template
#input
>
<popup-date-picker
...
...
@@ -312,8 +390,8 @@
v-model=
"formData.holderUserInfo.bankCardName"
name=
"insuredUserInfo_bankCardName"
label=
"持卡人"
placeholder=
"请
输入
持卡人姓名"
:rules=
"[{ required: true, message: '请
输入
持卡人姓名' }]"
placeholder=
"请
填写
持卡人姓名"
:rules=
"[{ required: true, message: '请
填写
持卡人姓名' }]"
/>
<cr-field
v-model=
"formData.holderUserInfo.bankCardCode"
...
...
@@ -334,8 +412,14 @@
name=
"insuredUserInfo_bankCardNo"
label=
"银行卡号"
type=
"digit"
placeholder=
"请输入银行卡号"
:rules=
"[{ required: true, message: '请输入银行卡号' }]"
placeholder=
"请填写银行卡号"
:rules=
"[
{ required: true, message: '请填写银行卡号' },
{
validator: isBankNumber,
message: '请填写正确的银行卡号'
}
]"
/>
</cr-cell-group>
<good-action
@
leftClick=
"goInsureState = true"
:content=
"goodActionInfo"
/>
...
...
@@ -393,7 +477,15 @@ import Detail from "@/api/detail.huagui.shouxian";
import
{
list
,
trail
}
from
"
@/api/product
"
;
import
{
getFamilyList
}
from
"
@/api/user
"
;
import
{
parseTime
}
from
"
@/service/utils
"
;
import
{
isIdNo
}
from
"
@/service/validation
"
;
import
{
isIdNo
,
isChineseName
,
isPhone
,
isEmail
,
isInteger
,
isBankNumber
,
isChnAddress
}
from
"
@/service/validation
"
;
const
AUTO_SAVE_KEY
=
"
PolicyFormData
"
;
const
AUTO_SAVE_TARGET
=
"
formData
"
;
...
...
@@ -556,6 +648,23 @@ export default {
this
.
getFamilyList
();
},
methods
:
{
isIdNo
,
isChineseName
,
isPhone
,
isEmail
,
isBankNumber
,
isChnAddress
,
isIntegerHeight
(
str
)
{
return
isInteger
(
str
)
&&
str
.
length
<=
3
;
},
isFutureDate
(
str
)
{
if
(
str
)
{
const
currentTimestamp
=
new
Date
().
valueOf
();
const
selectTimestamp
=
new
Date
(
str
).
valueOf
();
return
selectTimestamp
>
currentTimestamp
;
}
return
false
;
},
...
mapActions
([
"
setAuthXyqb
"
]),
...
mapActions
(
"
user
"
,
[
"
setUserInfo
"
]),
inputClick
()
{
...
...
@@ -567,6 +676,7 @@ export default {
this
.
goInsureState
=
true
;
},
onFormFailed
(
errorInfo
)
{
console
.
log
(
errorInfo
);
const
{
errors
}
=
errorInfo
;
this
.
$notify
({
type
:
"
warning
"
,
message
:
errors
[
0
].
message
});
},
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment