diff --git a/src/components/AutoDataForm/utils.js b/src/components/AutoDataForm/utils.js
index 9cd971771..ff7289cda 100644
--- a/src/components/AutoDataForm/utils.js
+++ b/src/components/AutoDataForm/utils.js
@@ -2,6 +2,7 @@ import Vue from 'vue'
import Select2 from '@/components/Select2'
import NestedField from '@/components/AutoDataForm/components/NestedField'
import rules from '@/components/DataForm/rules'
+import { assignIfNot } from '@/utils/common'
export class FormFieldGenerator {
constructor() {
@@ -109,19 +110,21 @@ export class FormFieldGenerator {
return field
}
generateField(name, fieldsMeta, remoteFieldsMeta) {
- let field = { id: name, prop: name, el: {}, attrs: {}}
+ let field = { id: name, prop: name, el: {}, attrs: {}, rules: [] }
const remoteFieldMeta = remoteFieldsMeta[name] || {}
- Vue.$log.debug('FieldsMeta: ', fieldsMeta, name)
const fieldMeta = fieldsMeta[name] || {}
- Vue.$log.debug('FieldMeta is: ', fieldMeta)
field.label = remoteFieldMeta.label
field.helpText = remoteFieldMeta.help_text
field = this.generateFieldByType(remoteFieldMeta.type, field, fieldMeta, remoteFieldMeta)
field = this.generateFieldByName(name, field)
field = this.generateFieldByOther(field, fieldMeta, remoteFieldMeta)
- const el = Object.assign(field.el || {}, fieldMeta.el || {})
- field = Object.assign(field, fieldMeta || {}, { el: el })
+ const el = assignIfNot(fieldMeta.el || {}, field.el)
+ const rules = fieldMeta.rules || field.rules
+ field = Object.assign(field, fieldMeta)
+ field.el = el
+ field.rules = rules
_.set(field, 'attrs.error', '')
+ Vue.$log.debug('Generate field: ', name, field)
return field
}
generateFieldGroup(field, fieldsMeta, remoteFieldsMeta) {
diff --git a/src/utils/common.js b/src/utils/common.js
index 4811b9863..7cfd1a3ec 100644
--- a/src/utils/common.js
+++ b/src/utils/common.js
@@ -1,3 +1,5 @@
+const _ = require('lodash')
+
function getTimeUnits(u) {
const units = {
'd': '天',
@@ -200,6 +202,12 @@ export function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time))
}
+function customizer(objValue, srcValue) {
+ return _.isUndefined(objValue) ? srcValue : objValue
+}
+
+export const assignIfNot = _.partialRight(_.assignInWith, customizer)
+
const scheme = document.location.protocol
const port = document.location.port ? ':' + document.location.port : ''
const BASE_URL = scheme + '//' + document.location.hostname + port
diff --git a/src/views/assets/SystemUser/SystemUserCreate/database.vue b/src/views/assets/SystemUser/SystemUserCreate/database.vue
index 8231b64c6..b76b1040c 100644
--- a/src/views/assets/SystemUser/SystemUserCreate/database.vue
+++ b/src/views/assets/SystemUser/SystemUserCreate/database.vue
@@ -4,13 +4,13 @@
diff --git a/src/views/assets/SystemUser/SystemUserCreate/ssh.vue b/src/views/assets/SystemUser/SystemUserCreate/ssh.vue
index f3f90a591..fd184e195 100644
--- a/src/views/assets/SystemUser/SystemUserCreate/ssh.vue
+++ b/src/views/assets/SystemUser/SystemUserCreate/ssh.vue
@@ -4,17 +4,14 @@
diff --git a/src/views/assets/SystemUser/SystemUserCreate/vncAndTelnet.vue b/src/views/assets/SystemUser/SystemUserCreate/vncAndTelnet.vue
index 42bb0a5cb..ef0aa7f36 100644
--- a/src/views/assets/SystemUser/SystemUserCreate/vncAndTelnet.vue
+++ b/src/views/assets/SystemUser/SystemUserCreate/vncAndTelnet.vue
@@ -4,7 +4,7 @@