diff --git a/src/components/FormItem/index.jsx b/src/components/FormItem/index.jsx
index 6e9a6a76..160e6d9f 100644
--- a/src/components/FormItem/index.jsx
+++ b/src/components/FormItem/index.jsx
@@ -259,7 +259,9 @@ export default class FormItem extends React.Component {
getSelectTableValidator = (rule, value) => {
if (!value || value.selectedRowKeys.length === 0) {
- return Promise.reject(t('Please select!'));
+ return Promise.reject(
+ new Error(rule.placeholder || `${t('Please select')}${rule.label}!`)
+ );
}
return Promise.resolve();
};
@@ -288,6 +290,7 @@ export default class FormItem extends React.Component {
name,
hidden,
label,
+ placeholder,
} = this.props;
if (hidden) {
return [];
@@ -299,9 +302,16 @@ export default class FormItem extends React.Component {
const newRule = {};
const requiredRule = {};
if (required) {
- if (tip && type.indexOf('select-table') < 0) {
+ if (type && type.includes('select-table')) {
requiredRule.required = true;
- requiredRule.message = `${t('Please input') + label}!`;
+ requiredRule.validator = (rule, value) =>
+ this.getSelectTableValidator({ ...rule, ...this.props }, value);
+ } else if (type && type.includes('select')) {
+ requiredRule.required = true;
+ requiredRule.message = placeholder || `${t('Please select') + label}!`;
+ } else if (tip) {
+ requiredRule.required = true;
+ requiredRule.message = placeholder || `${t('Please input') + label}!`;
} else {
newRule.required = required;
}
@@ -311,9 +321,7 @@ export default class FormItem extends React.Component {
}
if (validator) {
newRule.validator = validator;
- } else if (type.indexOf('select-table') >= 0 && required) {
- newRule.validator = this.getSelectTableValidator;
- } else if (type.indexOf('textarea') >= 0 && name === 'description') {
+ } else if (type && type.includes('textarea') && name === 'description') {
newRule.validator = this.getDescriptionValidator;
}
if (!isEmpty(newRule)) {
diff --git a/src/pages/compute/containers/Instance/actions/CreateIronic/BaseStep/index.jsx b/src/pages/compute/containers/Instance/actions/CreateIronic/BaseStep/index.jsx
index d80c46ff..e402acbc 100644
--- a/src/pages/compute/containers/Instance/actions/CreateIronic/BaseStep/index.jsx
+++ b/src/pages/compute/containers/Instance/actions/CreateIronic/BaseStep/index.jsx
@@ -171,6 +171,7 @@ export class BaseStep extends Base {
{
name: 'flavor',
label: t('Specification'),
+ type: 'select-table',
component: (
),
diff --git a/src/pages/compute/containers/Instance/actions/Resize.jsx b/src/pages/compute/containers/Instance/actions/Resize.jsx
index 1fae1ee4..a8d0aec3 100644
--- a/src/pages/compute/containers/Instance/actions/Resize.jsx
+++ b/src/pages/compute/containers/Instance/actions/Resize.jsx
@@ -110,6 +110,7 @@ export class Resize extends ModalAction {
{
name: 'newFlavor',
label: t('Flavor'),
+ type: 'select-table',
component: (
),
diff --git a/src/pages/compute/containers/Instance/actions/ResizeOnline.jsx b/src/pages/compute/containers/Instance/actions/ResizeOnline.jsx
index 16693640..866ca7e8 100644
--- a/src/pages/compute/containers/Instance/actions/ResizeOnline.jsx
+++ b/src/pages/compute/containers/Instance/actions/ResizeOnline.jsx
@@ -109,6 +109,7 @@ export class ResizeOnline extends ModalAction {
{
name: 'newFlavor',
label: t('Flavor'),
+ type: 'select-table',
component: (