fix: Fix unique name when create/edit volume type

1. Check unique name when create volume type
2. Check unique name when edit volume type

Change-Id: I4d736c3b30ff718a8dd00d05890cb67cdbabec94
This commit is contained in:
zhangjingwei 2021-07-14 16:20:15 +08:00 committed by Jingwei.Zhang
parent 542f0bc94b
commit 8dac045ee2
3 changed files with 20 additions and 8 deletions

View File

@ -42,6 +42,7 @@ export default class index extends Component {
static isFormItem = true; static isFormItem = true;
getRules({ getRules({
names,
rules, rules,
withoutChinese, withoutChinese,
isFile, isFile,
@ -51,6 +52,16 @@ export default class index extends Component {
isImage, isImage,
isInstance, isInstance,
}) { }) {
const uniqueNameValidate = (rule, value) => {
if (names && names.length && names.includes(value)) {
const message = t('Name can not be duplicated');
return Promise.reject(new Error(`${t('Invalid: ')}${message}`));
}
return Promise.resolve(true);
};
const uniqueRule = {
validator: uniqueNameValidate,
};
let validator = nameValidate; let validator = nameValidate;
if (isFile) { if (isFile) {
validator = fileNameValidate; validator = fileNameValidate;
@ -67,16 +78,13 @@ export default class index extends Component {
} else if (isCrontab) { } else if (isCrontab) {
validator = crontabNameValidate; validator = crontabNameValidate;
} }
let newRules = { const newRules = {
validator, validator,
}; };
if (rules && rules.length > 0) { if (rules && rules.length > 0) {
newRules = { return [...rules, newRules, uniqueRule];
...newRules,
...rules[0],
};
} }
return [newRules]; return [newRules, uniqueRule];
} }
getMessage({ getMessage({
@ -122,6 +130,7 @@ export default class index extends Component {
isCrontab, isCrontab,
isImage, isImage,
isInstance, isInstance,
names,
...componentRest ...componentRest
} = componentProps; } = componentProps;
const placeholder = isFile const placeholder = isFile
@ -133,6 +142,7 @@ export default class index extends Component {
}; };
const { rules, ...rest } = formItemProps; const { rules, ...rest } = formItemProps;
const newRules = this.getRules({ const newRules = this.getRules({
names,
rules, rules,
withoutChinese, withoutChinese,
isFile, isFile,

View File

@ -111,7 +111,7 @@ export default class Create extends ModalAction {
name: 'name', name: 'name',
label: t('Name'), label: t('Name'),
type: 'input-name', type: 'input-name',
placeholder: t('Please input name'), names: this.store.list.data.map((it) => it.name),
required: true, required: true,
}, },
// TODO: get cinder service list // TODO: get cinder service list

View File

@ -42,7 +42,9 @@ export default class EditAction extends ModalAction {
name: 'name', name: 'name',
label: t('Name'), label: t('Name'),
type: 'input-name', type: 'input-name',
placeholder: t('Please input name'), names: this.store.list.data
.filter((it) => it.id !== this.item.id)
.map((it) => it.name),
required: true, required: true,
}, },
{ {