diff --git a/aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db b/aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db index 75f99141b..3d97c9220 100644 Binary files a/aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db and b/aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db differ diff --git a/vueJs/src/api/abpconfiguration.ts b/vueJs/src/api/abpconfiguration.ts index 5d3921e8c..a8117b077 100644 --- a/vueJs/src/api/abpconfiguration.ts +++ b/vueJs/src/api/abpconfiguration.ts @@ -18,19 +18,19 @@ export default class AbpConfigurationService { /** 授权 */ export class Auth { /** 权限集合 */ - policies?: { [key: string]: boolean} + policies?: { [key: string]: boolean} = {} /** 已授权集合 */ - grantedPolicies?: { [key: string]: boolean} + grantedPolicies?: { [key: string]: boolean} = {} } /** 当前租户 */ export class CurrentTenant { /** 标识 */ - id?: string + id? = '' /** 名称 */ - name?: string + name? = '' /** 是否可用 */ - isAvailable!: boolean + isAvailable = false public clear() { this.id = '' @@ -42,101 +42,101 @@ export class CurrentTenant { /** 当前用户 */ export class CurrentUser { /** 标识 */ - id?: string + id? = '' /** 邮件地址 */ - email?: string + email? = '' /** 邮件已验证 */ - emailVerified!: boolean + emailVerified = false /** 手机号 */ - phoneNumber?: string + phoneNumber? = '' /** 手机号已验证 */ - phoneNumberVerified!: boolean + phoneNumberVerified = false /** 名称 */ - name?: string + name? = '' /** 简称 */ - surName?: string + surName? = '' /** 用户名 */ - userName?: string + userName? = '' /** 所属租户 */ - tenantId?: string + tenantId? = '' /** 是否已认证 */ - isAuthenticated!: boolean + isAuthenticated = false /** 所属角色列表 */ - roles!: string[] + roles = new Array() } /** 功能 */ export class Feature { /** 功能集合 */ - values?: { [key: string]: string} + values?: { [key: string]: string} = {} } /** 时区转换 */ export class DateTimeFormat { /** 日历算法 */ - calendarAlgorithmType!: string + calendarAlgorithmType = '' /** 日期分隔符 */ - dateSeparator!: string + dateSeparator = '' /** 日期时间格式 */ - dateTimeFormatLong!: string + dateTimeFormatLong = '' /** 完整日期时间格式 */ - fullDateTimePattern!: string + fullDateTimePattern = '' /** 长时间格式 */ - longTimePattern!: string + longTimePattern = '' /** 短日期格式 */ - shortDatePattern!: string + shortDatePattern = '' /** 短时间格式 */ - shortTimePattern!: string + shortTimePattern = '' } /** 当前区域信息 */ export class CurrentCulture { /** 本地化名称 */ - cultureName!: string + cultureName = '' /** 显示名称 */ - displayName!: string + displayName = '' /** 英文名称 */ - englishName!: string + englishName = '' /** 是否从右到左 */ - isRightToLeft!: boolean + isRightToLeft = false /** 名称 */ - name!: string + name = '' /** 本地名称 */ - nativeName!: string + nativeName = '' /** 三个字母的ISO名称 */ - threeLetterIsoLanguageName!: string + threeLetterIsoLanguageName = '' /** 两个字母的ISO名称 */ - twoLetterIsoLanguageName!: string + twoLetterIsoLanguageName = '' /** 日期时间格式 */ - dateTimeFormat!: DateTimeFormat + dateTimeFormat = new DateTimeFormat() } /** 语言 */ export class Language { /** 本地化名称 */ - cultureName!: string + cultureName = '' /** 显示名称 */ - displayName!: string + displayName = '' /** 图标 */ - flagIcon?: string + flagIcon = '' /** 用户界面本地化名称 */ - uiCultureName!: string + uiCultureName = '' } /** 本地化 */ export class Localization { /** 当前区域 */ - currentCulture!: CurrentCulture + currentCulture = new CurrentCulture() /** 默认本地化资源名称 */ - defaultResourceName?: string + defaultResourceName = '' /** 支持的语言列表 */ - languages!: Language[] + languages = new Array() /** 本地化资源集合 */ - values!: {[key: string]: {[key: string]: string}} + values: {[key: string]: {[key: string]: string}} = {} /** 语言映射集合 */ - languagesMap?: {[key: string]: INameValue[]} + languagesMap: {[key: string]: INameValue[]} = {} /** 语言文档映射集合 */ - languageFilesMap?: {[key: string]: INameValue[]} + languageFilesMap: {[key: string]: INameValue[]} = {} } /** 多租户配置 */ @@ -148,7 +148,7 @@ export class MultiTenancy { /** 全局设置 */ export class Setting { /** 设置集合 */ - values?: {[key: string]: any} + values: {[key: string]: any} = {} } /** 实体查询属性扩展 */ @@ -166,11 +166,11 @@ export class ExtensionPropertyApiUpdate extends Available { /** 实体属性api定义 */ export class ExtensionPropertyApi { /** 查询时 */ - onGet!: ExtensionPropertyApiGet + onGet = new ExtensionPropertyApiGet() /** 创建时 */ - onCreate!: ExtensionPropertyApiCreate + onCreate = new ExtensionPropertyApiCreate() /** 更新时 */ - onUpdate!: ExtensionPropertyApiUpdate + onUpdate = new ExtensionPropertyApiUpdate() } export class ExtensionPropertyUiTable extends Available { @@ -180,55 +180,55 @@ export class ExtensionPropertyUiForm extends Available { } export class ExtensionPropertyUi { - onTable!: ExtensionPropertyUiTable - onCreateForm!: ExtensionPropertyUiForm - onEditForm!: ExtensionPropertyUiForm + onTable = new ExtensionPropertyUiTable() + onCreateForm = new ExtensionPropertyUiForm() + onEditForm = new ExtensionPropertyUiForm() } export class LocalizableString { - name!: string - resource?: string + name = '' + resource = '' } export class ExtensionPropertyAttribute { - typeSimple?: string - config?: {[key: string]: any} + typeSimple = '' + config: {[key: string]: any} = {} } export class ExtensionProperty { - type!: string - typeSimple!: string - displayName?: LocalizableString - api!: ExtensionPropertyApi - ui!: ExtensionPropertyUi - attributes!: ExtensionPropertyAttribute[] - configuration!: {[key: string]: any} - defaultValue!: any + type = '' + typeSimple = '' + displayName = new LocalizableString() + api = new ExtensionPropertyApi() + ui = new ExtensionPropertyUi() + attributes = new Array() + configuration: {[key: string]: any} = {} + defaultValue: any = '' } export class EntityExtension { - properties!: {[key: string]: ExtensionProperty} - configuration!: {[key: string]: any} + properties: {[key: string]: ExtensionProperty} = {} + configuration: {[key: string]: any} = {} } export class ModuleExtension { - entities!: {[key: string]: EntityExtension} - configuration!: {[key: string]: any} + entities: {[key: string]: EntityExtension} = {} + configuration: {[key: string]: any} = {} } export class ExtensionEnumField { - name!: string - value!: any + name = '' + value: any = '' } export class ExtensionEnum { - fields!: ExtensionEnumField[] - localizationResource!: string + fields = new Array() + localizationResource = '' } export class ObjectExtension { - modules!: {[key: string]: ModuleExtension} - enums!: {[key: string]: ExtensionEnum} + modules: {[key: string]: ModuleExtension} = {} + enums: {[key: string]: ExtensionEnum} = {} } /** abp框架信息 */ @@ -254,25 +254,14 @@ export interface IAbpConfiguration { } export class AbpConfiguration implements IAbpConfiguration { - auth!: Auth - currentTenant!: CurrentTenant - currentUser!: CurrentUser - features!: Feature - localization!: Localization - multiTenancy!: MultiTenancy - objectExtensions!: ObjectExtension - setting!: Setting - - constructor() { - this.auth = new Auth() - this.setting = new Setting() - this.features = new Feature() - this.currentUser = new CurrentUser() - this.localization = new Localization() - this.multiTenancy = new MultiTenancy() - this.currentTenant = new CurrentTenant() - this.objectExtensions = new ObjectExtension() - } + auth = new Auth() + currentTenant = new CurrentTenant() + currentUser = new CurrentUser() + features = new Feature() + localization = new Localization() + multiTenancy = new MultiTenancy() + objectExtensions = new ObjectExtension() + setting = new Setting() public getSetting(key: string) { if (this.setting.values && this.setting.values[key]) { diff --git a/vueJs/src/api/users.ts b/vueJs/src/api/users.ts index 587955894..ba01efa95 100644 --- a/vueJs/src/api/users.ts +++ b/vueJs/src/api/users.ts @@ -1,5 +1,5 @@ import qs from 'querystring' -import { PagedAndSortedResultRequestDto, FullAuditedEntityDto, PagedResultDto, ListResultDto } from '@/api/types' +import { PagedAndSortedResultRequestDto, FullAuditedEntityDto, PagedResultDto, ListResultDto, ExtensibleObject } from '@/api/types' import { OrganizationUnit } from './organizationunit' import ApiService from './serviceBase' @@ -17,25 +17,25 @@ export default class UserApiService { if (input.filter) { _url += '&filter=' + input.filter } - return ApiService.Get>(_url, IdentityServiceUrl) + return ApiService.Get>(_url, IdentityServiceUrl) } public static getUserById(userId: string) { let _url = '/api/identity/users/' _url += userId - return ApiService.Get(_url, IdentityServiceUrl) + return ApiService.Get(_url, IdentityServiceUrl) } public static getUserByName(userName: string) { let _url = '/api/identity/users/by-username/' _url += userName - return ApiService.Get(_url, IdentityServiceUrl) + return ApiService.Get(_url, IdentityServiceUrl) } - public static updateUser(userId: string | undefined, userData: UserUpdateDto) { + public static updateUser(userId: string, userData: UserUpdate) { let _url = '/api/identity/users/' _url += userId - return ApiService.Put(_url, userData, IdentityServiceUrl) + return ApiService.Put(_url, userData, IdentityServiceUrl) } public static deleteUser(userId: string | undefined) { @@ -44,9 +44,9 @@ export default class UserApiService { return ApiService.Delete(_url, IdentityServiceUrl) } - public static createUser(userData: UserCreateDto) { + public static createUser(userData: UserCreate) { const _url = '/api/identity/users' - return ApiService.Post(_url, userData, IdentityServiceUrl) + return ApiService.Post(_url, userData, IdentityServiceUrl) } public static getUserRoles(userId: string) { @@ -122,7 +122,7 @@ export default class UserApiService { public static userRegister(registerData: UserRegisterData) { const _url = '/api/account/phone/register' - return ApiService.HttpRequest({ + return ApiService.HttpRequest({ baseURL: IdentityServiceUrl, url: _url, method: 'POST', @@ -317,34 +317,6 @@ export class UserLoginResult { refresh_token!: string } -/** 创建用户对象 */ -export class UserCreateDto { - /** 用户名 */ - name!: string - /** 用户账户 */ - userName!: string - /** 用户密码 */ - password!: string - /** 用户简称 */ - surname?: string - /** 邮件地址 */ - email!: string - /** 联系方式 */ - phoneNumber: number | undefined - /** 双因素验证 */ - twoFactorEnabled!: boolean - /** 登录失败锁定 */ - lockoutEnabled!: boolean - /** 用户列表 */ - roleNames?: string[] - - constructor() { - this.twoFactorEnabled = false - this.lockoutEnabled = true - this.roleNames = new Array() - } -} - /** 用户密码变更对象 */ export class UserChangePasswordDto { /** 当前密码 */ @@ -375,68 +347,68 @@ export class UserRole implements IUserRole { isStatic!: boolean /** 是否公共角色 */ isPublic!: boolean - /** 并发令牌 */ - concurrencyStamp: string | undefined } -/** 变更用户对象 */ -export class UserUpdateDto implements IUserData { +export class UserCreateOrUpdate extends ExtensibleObject { /** 用户名 */ - name!: string; + name = '' /** 用户账户 */ - userName!: string; + userName = '' /** 用户简称 */ - surname?: string; + surname = '' /** 邮件地址 */ - email!: string; + email = '' /** 联系方式 */ - phoneNumber?: number; - /** 双因素验证 */ - twoFactorEnabled!: boolean; + phoneNumber = '' /** 登录锁定 */ - lockoutEnabled!: boolean; + lockoutEnabled = false + /** 角色列表 */ + roleNames: string[] | null = null + /** 密码 */ + password: string | null = null +} + +/** 变更用户对象 */ +export class UserUpdate extends UserCreateOrUpdate { /** 并发令牌 */ - concurrencyStamp!: string; - /** 用户角色列表 */ - roles: string[] + concurrencyStamp = '' +} - constructor() { - this.roles = new Array() - } +export class UserCreate extends UserCreateOrUpdate { } /** 用户对象 */ -export class UserDataDto extends FullAuditedEntityDto implements IUserData { +export class User extends FullAuditedEntityDto implements IUser { /** 用户名 */ - name!: string + name = '' /** 用户账户 */ - userName!: string + userName = '' /** 用户简称 */ - surname!: string + surname = '' /** 邮件地址 */ - email!: string + email = '' /** 联系方式 */ - phoneNumber?: number + phoneNumber = '' /** 双因素验证 */ - twoFactorEnabled!: boolean + twoFactorEnabled = false /** 登录锁定 */ - lockoutEnabled!: boolean - /** 并发令牌 */ - concurrencyStamp!: string + lockoutEnabled = false /** 用户标识 */ - id!: string + id = '' /** 租户标识 */ - tenentId: string | undefined + tenentId? = '' /** 邮箱已验证 */ - emailConfirmed!: boolean + emailConfirmed = false /** 联系方式已验证 */ - phoneNumberConfirmed!: boolean + phoneNumberConfirmed = false /** 锁定截止时间 */ - lockoutEnd: Date | undefined + lockoutEnd?: Date = undefined + /** 并发令牌 */ + concurrencyStamp = '' } /** 用户对象接口 */ -export interface IUserData { +export interface IUser { /** 用户名 */ name: string /** 用户账户 */ @@ -446,13 +418,11 @@ export interface IUserData { /** 邮件地址 */ email: string /** 联系方式 */ - phoneNumber?: number + phoneNumber?: string /** 双因素验证 */ twoFactorEnabled: boolean /** 登录锁定 */ lockoutEnabled: boolean - /** 锁定截止时间 */ - concurrencyStamp: string | undefined } /** 用户角色接口 */ @@ -467,8 +437,6 @@ export interface IUserRole { isStatic: boolean /** 公共角色 */ isPublic: boolean - /** 并发令牌 */ - concurrencyStamp: string | undefined } export class ChangeUserOrganizationUnitDto { diff --git a/vueJs/src/components/PermissionForm/index.vue b/vueJs/src/components/PermissionForm/index.vue index 06065499e..0378882f1 100644 --- a/vueJs/src/components/PermissionForm/index.vue +++ b/vueJs/src/components/PermissionForm/index.vue @@ -21,6 +21,7 @@ @@ -236,6 +237,8 @@ export default class PermissionForm extends Vue { @Prop({ default: false }) private readonly!: boolean + /** 激活tab页 */ + private activeTabPane = '' /** 确认按钮忙碌状态 */ private confirmButtonBusy = false /** 当前编辑权限实体名称 */ @@ -350,6 +353,7 @@ export default class PermissionForm extends Vue { * 获取权限集合 */ private handleGetPermissions() { + this.activeTabPane = '' this.permissionGroups.length = 0 if (this.showDialog && this.providerName) { PermissionApiService.getPermissionsByKey(this.providerName, this.providerKey).then(res => { @@ -366,6 +370,9 @@ export default class PermissionForm extends Vue { }) this.permissionGroups.push(group) }) + if (this.permissionGroups.length > 0) { + this.activeTabPane = this.permissionGroups[0].name + } }) } } diff --git a/vueJs/src/lang/zh.ts b/vueJs/src/lang/zh.ts index f0260b3dc..e27972ac0 100644 --- a/vueJs/src/lang/zh.ts +++ b/vueJs/src/lang/zh.ts @@ -654,5 +654,17 @@ export default { uploadSuccess: '上传成功', folderNameIsRequired: '目录名称不能为空', folderCreateSuccess: '目录 {name} 已创建!' + }, + AbpValidation: { + ThisFieldIsNotAValidEmailAddress: '字段不是有效的邮箱地址', + ThisFieldMustBeAStringWithAMinimumLengthOf: '字段必须是最小长度为{0}的字符串', + 'ThisFieldMustBeAStringWithAMinimumLengthOf{0}AndAMaximumLengthOf{1}':'字段必须是最小长度为{0}并且最大长度{1}的字符串' + }, + AbpIdentity: { + Lock: '锁定', + LockoutEnd: '锁定日期', + LockoutEnabled: '登录尝试失败后锁定帐户', + RoleList: '角色列表', + HasRoles: '已有角色' } } diff --git a/vueJs/src/mixins/EventBusMiXin.ts b/vueJs/src/mixins/EventBusMiXin.ts index 89f5de908..a59ed6a59 100644 --- a/vueJs/src/mixins/EventBusMiXin.ts +++ b/vueJs/src/mixins/EventBusMiXin.ts @@ -44,8 +44,8 @@ export default class EventBusMiXin extends Vue { * @param name 事件名称 * @param callback 注销回调 */ - protected unSubscribe(name: string, callback: (eventData: any) => void | undefined) { - this.$events.off(name, callback) + protected unSubscribe(name: string) { + this.$events.off(name, undefined) } /** diff --git a/vueJs/src/views/admin/roles/components/RoleEditForm.vue b/vueJs/src/views/admin/roles/components/RoleEditForm.vue index 3e92ac16e..3949144d6 100644 --- a/vueJs/src/views/admin/roles/components/RoleEditForm.vue +++ b/vueJs/src/views/admin/roles/components/RoleEditForm.vue @@ -41,19 +41,6 @@ @onOrganizationUnitsChanged="onOrganizationUnitsChanged" /> - - - - - diff --git a/vueJs/src/views/admin/users/components/UserCreateOrUpdateForm.vue b/vueJs/src/views/admin/users/components/UserCreateOrUpdateForm.vue new file mode 100644 index 000000000..836c0abcb --- /dev/null +++ b/vueJs/src/views/admin/users/components/UserCreateOrUpdateForm.vue @@ -0,0 +1,321 @@ + + + + + diff --git a/vueJs/src/views/admin/users/components/UserEditForm.vue b/vueJs/src/views/admin/users/components/UserEditForm.vue deleted file mode 100644 index 270051932..000000000 --- a/vueJs/src/views/admin/users/components/UserEditForm.vue +++ /dev/null @@ -1,373 +0,0 @@ - - - - - diff --git a/vueJs/src/views/admin/users/index.vue b/vueJs/src/views/admin/users/index.vue index a48e8c534..1ab0800e3 100644 --- a/vueJs/src/views/admin/users/index.vue +++ b/vueJs/src/views/admin/users/index.vue @@ -17,15 +17,15 @@ type="primary" @click="refreshPagedData" > - {{ $t('users.searchList') }} + {{ $t('AbpIdentity.Search') }} - {{ $t('users.createUser') }} + {{ $t('AbpIdentity.NewUser') }} @@ -40,7 +40,7 @@ @sort-change="handleSortChange" > + + + - - - - diff --git a/vueJs/src/views/example/components/Dropdown/Comment.vue b/vueJs/src/views/example/components/Dropdown/Comment.vue deleted file mode 100644 index 9e8c14ee6..000000000 --- a/vueJs/src/views/example/components/Dropdown/Comment.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/vueJs/src/views/example/components/Dropdown/Platform.vue b/vueJs/src/views/example/components/Dropdown/Platform.vue deleted file mode 100644 index d7baf10d3..000000000 --- a/vueJs/src/views/example/components/Dropdown/Platform.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - diff --git a/vueJs/src/views/example/components/Dropdown/SourceUrl.vue b/vueJs/src/views/example/components/Dropdown/SourceUrl.vue deleted file mode 100644 index 7f60ebc7a..000000000 --- a/vueJs/src/views/example/components/Dropdown/SourceUrl.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - diff --git a/vueJs/src/views/example/components/Dropdown/index.ts b/vueJs/src/views/example/components/Dropdown/index.ts deleted file mode 100644 index b3ad9df1d..000000000 --- a/vueJs/src/views/example/components/Dropdown/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as CommentDropdown } from './Comment.vue' -export { default as PlatformDropdown } from './Platform.vue' -export { default as SourceUrlDropdown } from './SourceUrl.vue' diff --git a/vueJs/src/views/example/components/Warning.vue b/vueJs/src/views/example/components/Warning.vue deleted file mode 100644 index bd79ed435..000000000 --- a/vueJs/src/views/example/components/Warning.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/vueJs/src/views/example/create.vue b/vueJs/src/views/example/create.vue deleted file mode 100644 index b8946f92f..000000000 --- a/vueJs/src/views/example/create.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/vueJs/src/views/example/edit.vue b/vueJs/src/views/example/edit.vue deleted file mode 100644 index 36cd9d511..000000000 --- a/vueJs/src/views/example/edit.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/vueJs/src/views/example/list.vue b/vueJs/src/views/example/list.vue deleted file mode 100644 index 68feba2db..000000000 --- a/vueJs/src/views/example/list.vue +++ /dev/null @@ -1,158 +0,0 @@ - - - - -