From 5d060666b6ca972cc81bf27f1fbe63e9da129c5d Mon Sep 17 00:00:00 2001 From: cKey <35512826+colinin@users.noreply.github.com> Date: Sun, 18 Oct 2020 11:27:39 +0800 Subject: [PATCH] refactoring component :UserComponent --- .../LINGYUN.ApiGateway.Host/event-bus-cap.db | Bin 32768 -> 32768 bytes vueJs/src/api/abpconfiguration.ts | 171 ++++---- vueJs/src/api/users.ts | 120 ++---- vueJs/src/components/PermissionForm/index.vue | 7 + vueJs/src/lang/zh.ts | 12 + vueJs/src/mixins/EventBusMiXin.ts | 4 +- .../admin/roles/components/RoleEditForm.vue | 46 +- vueJs/src/views/admin/roles/index.vue | 32 +- .../admin/users/components/UserCreateForm.vue | 204 --------- .../components/UserCreateOrUpdateForm.vue | 321 ++++++++++++++ .../admin/users/components/UserEditForm.vue | 373 ----------------- vueJs/src/views/admin/users/index.vue | 183 ++++---- .../example/components/ArticleDetail.vue | 396 ------------------ .../example/components/Dropdown/Comment.vue | 48 --- .../example/components/Dropdown/Platform.vue | 51 --- .../example/components/Dropdown/SourceUrl.vue | 50 --- .../example/components/Dropdown/index.ts | 3 - .../src/views/example/components/Warning.vue | 18 - vueJs/src/views/example/create.vue | 16 - vueJs/src/views/example/edit.vue | 16 - vueJs/src/views/example/list.vue | 158 ------- 21 files changed, 600 insertions(+), 1629 deletions(-) delete mode 100644 vueJs/src/views/admin/users/components/UserCreateForm.vue create mode 100644 vueJs/src/views/admin/users/components/UserCreateOrUpdateForm.vue delete mode 100644 vueJs/src/views/admin/users/components/UserEditForm.vue delete mode 100644 vueJs/src/views/example/components/ArticleDetail.vue delete mode 100644 vueJs/src/views/example/components/Dropdown/Comment.vue delete mode 100644 vueJs/src/views/example/components/Dropdown/Platform.vue delete mode 100644 vueJs/src/views/example/components/Dropdown/SourceUrl.vue delete mode 100644 vueJs/src/views/example/components/Dropdown/index.ts delete mode 100644 vueJs/src/views/example/components/Warning.vue delete mode 100644 vueJs/src/views/example/create.vue delete mode 100644 vueJs/src/views/example/edit.vue delete mode 100644 vueJs/src/views/example/list.vue 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 75f99141b6152b9646fa1b10597c9abfa7b65c46..3d97c9220dc83927e506c3678837a57392931934 100644 GIT binary patch delta 112 zcmZo@U}|V!njp=XGf~EwF=u1KLVkYkECyzlHU>^Pwo5E+ENz() } /** 功能 */ 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 @@ - - - - -