Browse Source

Fixed feature management UI failing to validate numeric types

pull/216/head
cKey 5 years ago
parent
commit
bbb6d7d5b4
  1. 1
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissionDefinitionProvider.cs
  2. BIN
      aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db
  3. 2
      vueJs/src/api/feature-management.ts
  4. 53
      vueJs/src/views/admin/components/FeatureManagement.vue
  5. 38
      vueJs/src/views/oss-management/index.vue

1
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissionDefinitionProvider.cs

@ -17,6 +17,7 @@ namespace LINGYUN.Abp.OssManagement.Permissions
var ossobject = ossManagement.AddPermission(AbpOssManagementPermissions.OssObject.Default, L("Permission:OssObject"));
ossobject.AddChild(AbpOssManagementPermissions.OssObject.Create, L("Permission:Create"));
ossobject.AddChild(AbpOssManagementPermissions.OssObject.Delete, L("Permission:Delete"));
ossobject.AddChild(AbpOssManagementPermissions.OssObject.Download, L("Permission:Download"));
}
private static LocalizableString L(string name)

BIN
aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db

Binary file not shown.

2
vueJs/src/api/feature-management.ts

@ -32,7 +32,7 @@ export class ValueType {
export class Feature {
name!: string
displayName?: string
value!: string
value!: any
description?: string
valueType?: ValueType
depth?: number

53
vueJs/src/views/admin/components/FeatureManagement.vue

@ -36,8 +36,7 @@
v-if="feature.valueType.name === 'ToggleStringValueType'"
>
<el-switch
:value="getBooleanValue(feature.value)"
@change="(value) => handleValueChanged(feature, value)"
v-model="feature.value"
/>
</div>
<div
@ -46,7 +45,9 @@
<el-input
v-if="feature.valueType.validator.name === 'NUMERIC'"
v-model.number="feature.value"
@change="(value) => handleValueChanged(feature, value)"
:min="feature.valueType.validator.properties.MinValue"
:max="feature.valueType.validator.properties.MaxValue"
type="number"
/>
<el-input
v-else
@ -122,15 +123,9 @@ import { ElForm } from 'element-ui/types/form'
const featureRules: {[key: string]: any}[] = new Array<{[key: string]: any}>()
if (validator.name === 'NUMERIC' && validator.properties) {
const ruleRang: {[key: string]: any} = {}
// TODO:
//
// 使form-itemrules
// TODO...
ruleRang.pattern = RegExp('^[^' + validator.properties.MinValue + ']\\d{0,4}$|^' + validator.properties.MaxValue + '$')
// ruleRang.pattern = ^\d{0,11}$
// ruleRang.type = 'number'
// ruleRang.min = validator.properties.MinValue
// ruleRang.max = validator.properties.MaxValue
ruleRang.type = 'number'
ruleRang.min = validator.properties.MinValue
ruleRang.max = validator.properties.MaxValue
ruleRang.trigger = 'blur'
ruleRang.message = localizer('AbpFeatureManagement.ThisFieldMustBeBetween{0}And{1}', { 0: validator.properties.MinValue, 1: validator.properties.MaxValue })
featureRules.push(ruleRang)
@ -196,19 +191,24 @@ export default class extends Vue {
*/
private featureGroups = new FeatureGroups()
get numericValue() {
return (gi: number, fi: number) => {
if (this.featureGroups) {
return Number(this.featureGroups.groups[gi].features[fi].value)
}
return 0
}
}
mounted() {
this.handleGetFeatures()
}
@Watch('providerKey')
@Watch('loadFeature')
onProviderKeyChanged() {
this.handleGetFeatures()
}
private handleValueChanged(feature: Feature, value: any) {
feature.value = String(value)
}
/**
* 重置表单数据
*/
@ -226,6 +226,22 @@ export default class extends Vue {
.getFeatures(this.providerName, this.providerKey)
.then(res => {
this.featureGroups = res
// , ,
this.featureGroups
.groups
.forEach(group => {
group.features
.forEach(feature => {
switch (feature.valueType?.validator.name) {
case 'BOOLEAN' :
feature.value = feature.value === 'true'
break
case 'NUMERIC' :
feature.value = Number(feature.value)
break
}
})
})
if (this.featureGroups.groups.length > 0) {
this.selectTab = this.featureGroups.groups[0].name
}
@ -245,7 +261,8 @@ export default class extends Vue {
this.featureGroups.groups.forEach(group => {
group.features.forEach(feature => {
if (feature.valueType != null) {
updateFeatures.features.push(new Feature(feature.name, feature.value))
// string
updateFeatures.features.push(new Feature(feature.name, String(feature.value)))
}
})
})

38
vueJs/src/views/oss-management/index.vue

@ -118,6 +118,7 @@
</template>
</el-table-column>
<el-table-column
v-permission="['AbpOssManagement.OssObject']"
:label="$t('global.operaActions')"
align="center"
width="200"
@ -125,21 +126,20 @@
>
<template slot-scope="{row}">
<el-button
v-permission="['AbpOssManagement.FileSystem.FileManager']"
size="mini"
type="success"
icon="el-icon-tickets"
@click="handleShowOssObject(row)"
/>
<el-button
v-permission="[row.isFolder ? 'AbpFileManagement.FileSystem.Delete' : 'AbpFileManagement.FileSystem.FileManager.Delete']"
v-permission="['AbpOssManagement.OssObject.Delete']"
size="mini"
type="danger"
icon="el-icon-delete"
@click="handleDeleteOssObject(row)"
/>
<el-button
v-permission="['AbpFileManagement.FileSystem.FileManager.Download']"
v-permission="['AbpOssManagement.OssObject.Download']"
:disabled="row.isFolder"
size="mini"
type="info"
@ -293,6 +293,8 @@ export default class OssManagement extends Vue {
private onBucketChanged(bucket: string) {
this.bucket = bucket
this.fileSystemRoot.length = 1
this.getObjectRequest.prefix = ''
this.handleClearObjects()
this.handleGetObjects()
}
@ -378,9 +380,33 @@ export default class OssManagement extends Vue {
event.preventDefault()
$contextmenu({
items: [
{
label: '创建容器',
disabled: !checkPermission(['AbpOssManagement.Container.Create']),
onClick: () => {
this.$prompt(this.$t('global.pleaseInputBy', { key: this.$t('fileSystem.name') }).toString(),
'创建容器', {
showInput: true,
inputValidator: (val) => {
return !(!val || val.length === 0)
},
inputErrorMessage: '名称必须输入',
inputPlaceholder: this.$t('global.pleaseInputBy', { key: this.$t('fileSystem.name') }).toString()
}).then((val: any) => {
const name = val.value + '/'
OssManagerApi
.createBucket(name.replace('//', '/'))
.then(() => {
this.$message.success(this.l('successful'))
this.handleGetBuckets()
this.handleGetObjects()
})
}).catch(_ => _)
}
},
{
label: this.$t('fileSystem.addFolder'),
disabled: !checkPermission(['AbpFileManagement.FileSystem.Create']),
disabled: !checkPermission(['AbpOssManagement.OssObject.Create']),
onClick: () => {
this.$prompt(this.$t('global.pleaseInputBy', { key: this.$t('fileSystem.name') }).toString(),
this.$t('fileSystem.addFolder').toString(), {
@ -405,7 +431,7 @@ export default class OssManagement extends Vue {
},
{
label: this.$t('fileSystem.upload'),
disabled: !checkPermission(['AbpFileManagement.FileSystem.FileManager.Create']),
disabled: !checkPermission(['AbpOssManagement.OssObject.Create']),
onClick: () => {
this.uploadPath = this.getCurrentPath()
this.showUploadOss = true
@ -414,7 +440,7 @@ export default class OssManagement extends Vue {
},
{
label: this.$t('fileSystem.bacthDelete'),
disabled: !checkPermission(['AbpFileManagement.FileSystem.FileManager.Delete']),
disabled: !checkPermission(['AbpOssManagement.OssObject.Delete']),
onClick: () => {
//
const table = this.$refs.ossObjectTable as any

Loading…
Cancel
Save