231231 :placeholder =" field.description"
232232 />
233233 </span >
234- <span v-else-if =" field.name==='password' || field.name==='currentpassword'" >
234+ <span v-else-if =" field.name==='password' || field.name==='currentpassword' || field.name==='confirmpassword' " >
235235 <a-input-password
236236 v-decorator =" [field.name, {
237- rules: [{ required: field.required, message: `${$t('message.error.required.input')}` }]
237+ rules: [
238+ {
239+ required: field.required,
240+ message: `${$t('message.error.required.input')}`
241+ },
242+ {
243+ validator: validateTwoPassword
244+ }
245+ ]
238246 }]"
239247 :placeholder =" field.description"
248+ @blur =" ($event) => handleConfirmBlur($event, field.name)"
240249 />
241250 </span >
242251 <span v-else-if =" field.name==='certificate' || field.name==='privatekey' || field.name==='certchain'" >
@@ -357,7 +366,8 @@ export default {
357366 treeData: [],
358367 treeSelected: {},
359368 actionData: [],
360- formModel: {}
369+ formModel: {},
370+ confirmDirty: false
361371 }
362372 },
363373 computed: {
@@ -609,6 +619,7 @@ export default {
609619 this .currentAction = {}
610620 },
611621 execAction (action ) {
622+ const self = this
612623 this .form = this .$form .createForm (this )
613624 this .formModel = {}
614625 this .actionData = []
@@ -635,6 +646,14 @@ export default {
635646 }
636647 if (args .length > 0 ) {
637648 this .currentAction .paramFields = args .map (function (arg ) {
649+ if (arg === ' confirmpassword' ) {
650+ return {
651+ type: ' password' ,
652+ name: ' confirmpassword' ,
653+ required: true ,
654+ description: self .$t (' label.confirmpassword.description' )
655+ }
656+ }
638657 return paramFields .filter (function (param ) {
639658 return param .name .toLowerCase () === arg .toLowerCase ()
640659 })[0 ]
@@ -908,6 +927,40 @@ export default {
908927 },
909928 finishLoading () {
910929 this .loading = false
930+ },
931+ handleConfirmBlur (e , name ) {
932+ if (name !== ' confirmpassword' ) {
933+ return
934+ }
935+ const value = e .target .value
936+ this .confirmDirty = this .confirmDirty || !! value
937+ },
938+ validateTwoPassword (rule , value , callback ) {
939+ if (! value || value .length === 0 ) {
940+ callback ()
941+ } else if (rule .field === ' confirmpassword' ) {
942+ const form = this .form
943+ const messageConfirm = this .$t (' message.validate.equalto' )
944+ const passwordVal = form .getFieldValue (' password' )
945+ if (passwordVal && passwordVal !== value) {
946+ callback (messageConfirm)
947+ } else {
948+ callback ()
949+ }
950+ } else if (rule .field === ' password' ) {
951+ const form = this .form
952+ const confirmPasswordVal = form .getFieldValue (' confirmpassword' )
953+ if (! confirmPasswordVal || confirmPasswordVal .length === 0 ) {
954+ callback ()
955+ } else if (value && this .confirmDirty ) {
956+ form .validateFields ([' confirmpassword' ], { force: true })
957+ callback ()
958+ } else {
959+ callback ()
960+ }
961+ } else {
962+ callback ()
963+ }
911964 }
912965 }
913966}
0 commit comments