Browse Source

rewrite setting-management service and view

pull/69/head
cKey 6 years ago
parent
commit
15836ae17a
  1. 39
      aspnet-core/modules/common/LINGYUN.Abp.EventBus.CAP/LINGYUN.Abp.EventBus.CAP.xml
  2. 13
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/ISettingAppService.cs
  3. 134
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingAppService.cs
  4. 41
      aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs
  5. 4
      vueJs/src/api/abpconfiguration.ts
  6. 1
      vueJs/src/api/filemanagement.ts
  7. 4
      vueJs/src/api/roles.ts
  8. 50
      vueJs/src/api/settings.ts
  9. 14
      vueJs/src/api/users.ts
  10. 1
      vueJs/src/icons/components/index.ts
  11. 12
      vueJs/src/icons/components/setting.ts
  12. 1
      vueJs/src/icons/svg/setting.svg
  13. 2
      vueJs/src/router/modules/file-management.ts
  14. 2
      vueJs/src/shims.d.ts
  15. 1
      vueJs/src/store/modules/user.ts
  16. 20
      vueJs/src/views/admin/settings/components/GlobalSettingEditForm.vue
  17. 81
      vueJs/src/views/admin/settings/components/SettingEditForm.vue
  18. 22
      vueJs/src/views/admin/settings/components/TenantSettingEditForm.vue
  19. 22
      vueJs/src/views/admin/settings/components/UserSettingEditForm.vue
  20. 45
      vueJs/src/views/admin/settings/index.vue
  21. 2
      vueJs/src/views/permission/role.vue

39
aspnet-core/modules/common/LINGYUN.Abp.EventBus.CAP/LINGYUN.Abp.EventBus.CAP.xml

@ -121,6 +121,45 @@
</summary>
<param name="context"></param>
</member>
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException">
<summary>
AbpECAPExecutionFailedException
</summary>
</member>
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.MessageType">
<summary>
MessageType
</summary>
</member>
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.Origin">
<summary>
Message
</summary>
</member>
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.#ctor(DotNetCore.CAP.Messages.MessageType,DotNetCore.CAP.Messages.Message)">
<summary>
constructor
</summary>
<param name="messageType"></param>
<param name="prigin"></param>
</member>
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.#ctor(DotNetCore.CAP.Messages.MessageType,DotNetCore.CAP.Messages.Message,System.String)">
<summary>
constructor
</summary>
<param name="messageType"></param>
<param name="prigin"></param>
<param name="message"></param>
</member>
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.#ctor(DotNetCore.CAP.Messages.MessageType,DotNetCore.CAP.Messages.Message,System.String,System.Exception)">
<summary>
constructor
</summary>
<param name="messageType"></param>
<param name="prigin"></param>
<param name="message"></param>
<param name="innerException"></param>
</member>
<member name="T:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus">
<summary>
CAP分布式事件总线

13
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/ISettingAppService.cs

@ -11,15 +11,18 @@ namespace LINGYUN.Abp.SettingManagement
{
Task<ListResultDto<SettingDto>> GetAllGlobalAsync();
Task<ListResultDto<SettingDto>> GetAllForTenantAsync();
Task SetGlobalAsync(UpdateSettingsDto input);
Task<ListResultDto<SettingDto>> GetAllForCurrentTenantAsync();
Task SetCurrentTenantAsync(UpdateSettingsDto input);
Task<ListResultDto<SettingDto>> GetAllForUserAsync([Required] Guid userId);
Task<ListResultDto<SettingDto>> GetAllForCurrentUserAsync();
Task SetForUserAsync([Required] Guid userId, UpdateSettingsDto input);
[Obsolete("The best way to do this is to separate the individual configurations")]
Task<ListResultDto<SettingDto>> GetAsync([NotNull] string providerName, [NotNull] string providerKey);
Task<ListResultDto<SettingDto>> GetAllForCurrentUserAsync();
Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdateSettingsDto input);
Task SetCurrentUserAsync(UpdateSettingsDto input);
}
}

134
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingAppService.cs

@ -1,5 +1,4 @@
using JetBrains.Annotations;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
@ -8,9 +7,11 @@ using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Caching;
using Volo.Abp.MultiTenancy;
using Volo.Abp.SettingManagement;
using Volo.Abp.SettingManagement.Localization;
using Volo.Abp.Settings;
using Volo.Abp.Users;
namespace LINGYUN.Abp.SettingManagement
{
@ -32,109 +33,147 @@ namespace LINGYUN.Abp.SettingManagement
LocalizationResource = typeof(AbpSettingManagementResource);
}
public virtual async Task<ListResultDto<SettingDto>> GetAsync([NotNull] string providerName, [NotNull] string providerKey)
[Authorize(AbpSettingManagementPermissions.Settings.Manager)]
public virtual async Task SetGlobalAsync(UpdateSettingsDto input)
{
foreach (var setting in input.Settings)
{
await SettingManager.SetGlobalAsync(setting.Name, setting.Value);
var settingDefinition = SettingDefinitionManager.GetOrNull(setting.Name);
if (settingDefinition != null)
{
foreach (var provider in settingDefinition.Providers)
{
// 同步变更缓存配置
await SetCacheItemAsync(setting.Name, setting.Value, provider, null);
}
}
}
await CurrentUnitOfWork.SaveChangesAsync();
}
[Authorize(AbpSettingManagementPermissions.Settings.Manager)]
public virtual async Task SetCurrentTenantAsync(UpdateSettingsDto input)
{
return await GetAllSettingAsync(providerName, providerKey);
if (CurrentTenant.IsAvailable)
{
foreach (var setting in input.Settings)
{
await SettingManager.SetForTenantAsync(CurrentTenant.GetId(), setting.Name, setting.Value);
// 同步变更缓存配置
await SetCacheItemAsync(setting.Name, setting.Value, TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString());
}
await CurrentUnitOfWork.SaveChangesAsync();
}
}
[Authorize(AbpSettingManagementPermissions.Settings.Manager)]
public virtual async Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdateSettingsDto input)
public virtual async Task SetForUserAsync([Required] Guid userId, UpdateSettingsDto input)
{
foreach (var setting in input.Settings)
{
await SettingManager.SetAsync(setting.Name, setting.Value, providerName, providerKey);
await SettingManager.SetForUserAsync(userId, setting.Name, setting.Value);
// 同步变更缓存配置
var settingCacheKey = CalculateCacheKey(setting.Name, providerName, providerKey);
var settignCacheItem = new SettingCacheItem(setting.Value);
await Cache.SetAsync(settingCacheKey, settignCacheItem);
await SetCacheItemAsync(setting.Name, setting.Value, UserSettingValueProvider.ProviderName, userId.ToString());
}
await CurrentUnitOfWork.SaveChangesAsync();
}
[Authorize]
public virtual async Task SetCurrentUserAsync(UpdateSettingsDto input)
{
foreach (var setting in input.Settings)
{
await SettingManager.SetForUserAsync(CurrentUser.GetId(), setting.Name, setting.Value);
// 同步变更缓存配置
await SetCacheItemAsync(setting.Name, setting.Value, UserSettingValueProvider.ProviderName, CurrentUser.GetId().ToString());
}
await CurrentUnitOfWork.SaveChangesAsync();
}
[AllowAnonymous]
public virtual async Task<ListResultDto<SettingDto>> GetAllGlobalAsync()
{
var globalSettings = await SettingManager.GetAllGlobalAsync();
// return GetAllSetting(await SettingManager.GetAllGlobalAsync());
return GetAllSetting(globalSettings);
return await GetAllSettingAsync(GlobalSettingValueProvider.ProviderName, null);
}
public virtual async Task<ListResultDto<SettingDto>> GetAllForTenantAsync()
public virtual async Task<ListResultDto<SettingDto>> GetAllForCurrentTenantAsync()
{
if (CurrentTenant.IsAvailable)
{
var tenantSettings = await SettingManager.GetAllForTenantAsync(CurrentTenant.Id.Value);
return GetAllSetting(tenantSettings);
// return GetAllSetting(await SettingManager.GetAllForTenantAsync(CurrentTenant.GetId(), false));
return await GetAllSettingAsync(TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString());
}
return new ListResultDto<SettingDto>();
}
public virtual async Task<ListResultDto<SettingDto>> GetAllForUserAsync([Required] Guid userId)
{
var userSettings = await SettingManager.GetAllForUserAsync(userId);
return GetAllSetting(userSettings);
// return GetAllSetting(await SettingManager.GetAllForUserAsync(userId));
return await GetAllSettingAsync(UserSettingValueProvider.ProviderName, userId.ToString());
}
[Authorize]
public virtual async Task<ListResultDto<SettingDto>> GetAllForCurrentUserAsync()
{
var userSettings = await SettingManager.GetAllForUserAsync(CurrentUser.Id.Value);
return GetAllSetting(userSettings);
// return GetAllSetting(await SettingManager.GetAllForUserAsync(CurrentUser.GetId()));
return await GetAllSettingAsync(UserSettingValueProvider.ProviderName, CurrentUser.GetId().ToString());
}
protected virtual async Task<ListResultDto<SettingDto>> GetAllSettingAsync(
string providerName, string providerKey)
protected virtual ListResultDto<SettingDto> GetAllSetting(List<SettingValue> settings)
{
var settingsDto = new List<SettingDto>();
var settingDefinitions = SettingDefinitionManager.GetAll();
foreach (var setting in settingDefinitions)
foreach (var setting in settings)
{
if (setting.Providers.Any() && !setting.Providers.Contains(providerName))
{
continue;
}
// 既然是配置服务,那必须能管理所有配置才对
//if (!setting.IsVisibleToClients)
//{
// continue;
//}
var settingValue = await SettingManager.GetOrNullAsync(setting.Name, providerName, providerKey);
var settingDefinition = SettingDefinitionManager.Get(setting.Name);
var settingInfo = new SettingDto
{
Name = setting.Name,
Value = settingValue,
DefaultValue = setting.DefaultValue,
Description = setting.Description.Localize(StringLocalizerFactory),
DisplayName = setting.DisplayName.Localize(StringLocalizerFactory)
Value = setting.Value ?? settingDefinition.DefaultValue,
DefaultValue = settingDefinition.DefaultValue,
Description = settingDefinition.Description.Localize(StringLocalizerFactory),
DisplayName = settingDefinition.DisplayName.Localize(StringLocalizerFactory)
};
settingsDto.Add(settingInfo);
}
return new ListResultDto<SettingDto>(settingsDto);
}
protected virtual ListResultDto<SettingDto> GetAllSetting(
List<SettingValue> settings)
protected virtual async Task<ListResultDto<SettingDto>> GetAllSettingAsync(string providerName, string providerKey)
{
var settingsDto = new List<SettingDto>();
var settings = await SettingManager.GetAllAsync(providerName, providerKey);
foreach (var setting in settings)
{
var settingDefinition = SettingDefinitionManager.Get(setting.Name);
if (!settingDefinition.IsVisibleToClients)
if (settingDefinition.Providers.Count > 0 &&
!settingDefinition.Providers.Any(p => p.Equals(providerName)))
{
continue;
}
var settingInfo = new SettingDto
var settingInfo = new SettingDto
{
Name = setting.Name,
Value = setting.Value,
Value = setting.Value ?? settingDefinition.DefaultValue,
DefaultValue = settingDefinition.DefaultValue,
Description = settingDefinition.Description.Localize(StringLocalizerFactory),
DisplayName = settingDefinition.DisplayName.Localize(StringLocalizerFactory)
};
settingsDto.Add(settingInfo);
}
return new ListResultDto<SettingDto>(settingsDto);
}
@ -142,5 +181,12 @@ namespace LINGYUN.Abp.SettingManagement
{
return SettingCacheItem.CalculateCacheKey(name, providerName, providerKey);
}
protected virtual async Task SetCacheItemAsync(string name, string value, string providerName, string providerKey)
{
var settingCacheKey = CalculateCacheKey(name, providerName, providerKey);
var settignCacheItem = new SettingCacheItem(value);
await Cache.SetAsync(settingCacheKey, settignCacheItem);
}
}
}

41
aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs

@ -1,5 +1,4 @@
using JetBrains.Annotations;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using System;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
@ -10,8 +9,8 @@ using Volo.Abp.AspNetCore.Mvc;
namespace LINGYUN.Abp.SettingManagement
{
[RemoteService(Name = AbpSettingManagementRemoteServiceConsts.RemoteServiceName)]
[Area("settings")]
[Route("api/settings")]
[Area("settingManagement")]
[Route("api/setting-management/settings")]
public class SettingController : AbpController, ISettingAppService
{
private readonly ISettingAppService _settingAppService;
@ -28,14 +27,14 @@ namespace LINGYUN.Abp.SettingManagement
}
[HttpGet]
[Route("by-tenant")]
public virtual async Task<ListResultDto<SettingDto>> GetAllForTenantAsync()
[Route("by-current-tenant")]
public virtual async Task<ListResultDto<SettingDto>> GetAllForCurrentTenantAsync()
{
return await _settingAppService.GetAllForTenantAsync();
return await _settingAppService.GetAllForCurrentTenantAsync();
}
[HttpGet]
[Route("by-user")]
[Route("by-user/{userId}")]
public virtual async Task<ListResultDto<SettingDto>> GetAllForUserAsync([Required] Guid userId)
{
return await _settingAppService.GetAllForUserAsync(userId);
@ -48,16 +47,32 @@ namespace LINGYUN.Abp.SettingManagement
return await _settingAppService.GetAllGlobalAsync();
}
[HttpGet]
public virtual async Task<ListResultDto<SettingDto>> GetAsync([NotNull] string providerName, [NotNull] string providerKey)
[HttpPut]
[Route("by-current-user")]
public virtual async Task SetCurrentUserAsync(UpdateSettingsDto input)
{
await _settingAppService.SetCurrentUserAsync(input);
}
[HttpPut]
[Route("by-current-tenant")]
public virtual async Task SetCurrentTenantAsync(UpdateSettingsDto input)
{
await _settingAppService.SetCurrentTenantAsync(input);
}
[HttpPut]
[Route("by-user/{userId}")]
public virtual async Task SetForUserAsync([Required] Guid userId, UpdateSettingsDto input)
{
return await _settingAppService.GetAsync(providerName, providerKey);
await _settingAppService.SetForUserAsync(userId, input);
}
[HttpPut]
public virtual async Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdateSettingsDto input)
[Route("by-global")]
public virtual async Task SetGlobalAsync(UpdateSettingsDto input)
{
await _settingAppService.UpdateAsync(providerName, providerKey, input);
await _settingAppService.SetGlobalAsync(input);
}
}
}

4
vueJs/src/api/abpconfiguration.ts

@ -70,7 +70,7 @@ export class Localization {
currentCulture!: CurrentCulture
defaultResourceName?: string
languages!: Language[]
values!: {[key:string]: {[key:string]: string}}
values!: {[key: string]: {[key: string]: string}}
}
export class MultiTenancy {
@ -78,7 +78,7 @@ export class MultiTenancy {
}
export class Setting {
values?: {[key:string]: string}
values?: {[key: string]: string}
}
export interface IAbpConfiguration {

1
vueJs/src/api/filemanagement.ts

@ -1,4 +1,3 @@
import qs from 'qs'
import ApiService from './serviceBase'
import { PagedAndSortedResultRequestDto, PagedResultDto } from './types'

4
vueJs/src/api/roles.ts

@ -28,12 +28,12 @@ export default class RoleService {
public static getRoleOrganizationUnits(roleId: string) {
const _url = '/api/identity/roles/organization-units/' + roleId
return ApiService.Get<ListResultDto<OrganizationUnit>>(_url, IdentityServiceUrl);
return ApiService.Get<ListResultDto<OrganizationUnit>>(_url, IdentityServiceUrl)
}
public static changeRoleOrganizationUnits(roleId: string, payload: ChangeRoleOrganizationUnitDto) {
const _url = '/api/identity/roles/organization-units/' + roleId
return ApiService.Put<void>(_url, payload, IdentityServiceUrl);
return ApiService.Put<void>(_url, payload, IdentityServiceUrl)
}
public static createRole(input: CreateRoleDto) {

50
vueJs/src/api/settings.ts

@ -5,51 +5,69 @@ const IdentityService = process.env.VUE_APP_BASE_API
export default class SettingApiService {
/**
*
* @param providerName
* @param providerKey
* @returns ListResultDto<SettingDto>
*
*/
public static getSettings(providerName: string, providerKey: string) {
let _url = '/api/settings'
_url += '?providerName=' + providerName
_url += '&providerKey=' + providerKey
public static getGlobalSettings() {
const _url = '/api/setting-management/settings/by-global'
return ApiService.Get<ListResultDto<Setting>>(_url, IdentityService)
}
/**
*
*
*/
public static getGlobalSettings() {
const _url = '/api/settings/by-global'
return ApiService.Get<ListResultDto<Setting>>(_url, IdentityService)
public static setGlobalSettings(payload: SettingsUpdate) {
const _url = '/api/setting-management/settings/by-global'
return ApiService.Put<any>(_url, payload, IdentityService)
}
/**
*
*/
public static getCurrentTenantSettings() {
const _url = '/api/settings/by-current-tenant'
const _url = '/api/setting-management/settings/by-current-tenant'
return ApiService.Get<ListResultDto<Setting>>(_url, IdentityService)
}
/**
*
*/
public static setCurrentTenantSettings(payload: SettingsUpdate) {
const _url = '/api/setting-management/settings/by-current-tenant'
return ApiService.Put<any>(_url, payload, IdentityService)
}
/**
*
*/
public static getCurrentUserSettings() {
const _url = '/api/settings/by-current-user'
const _url = '/api/setting-management/settings/by-current-user'
return ApiService.Get<ListResultDto<Setting>>(_url, IdentityService)
}
/**
*
*/
public static setCurrentUserSettings(payload: SettingsUpdate) {
const _url = '/api/setting-management/settings/by-current-user'
return ApiService.Put<any>(_url, payload, IdentityService)
}
/**
*
*/
public static getUserSettings(userId: string) {
let _url = '/api/settings/by-user'
_url += '?userId=' + userId
const _url = '/api/setting-management/settings/by-user/' + userId
return ApiService.Get<ListResultDto<Setting>>(_url, IdentityService)
}
/**
*
*/
public static setUserSettings(userId: string, payload: SettingsUpdate) {
const _url = '/api/setting-management/settings/by-user/' + userId
return ApiService.Put<any>(_url, payload, IdentityService)
}
/**
*
* @param providerName

14
vueJs/src/api/users.ts

@ -1,15 +1,13 @@
import qs from 'querystring'
import { pagerFormat } from '@/utils/index'
import { PagedAndSortedResultRequestDto, FullAuditedEntityDto, PagedResultDto } from '@/api/types'
import { PagedAndSortedResultRequestDto, FullAuditedEntityDto, PagedResultDto, ListResultDto } from '@/api/types'
import { OrganizationUnit } from './organizationunit'
import ApiService from './serviceBase'
import { ListResultDto } from './types'
const IdentityServiceUrl = process.env.VUE_APP_BASE_API
const IdentityServerUrl = process.env.VUE_APP_BASE_IDENTITY_SERVER
export default class UserApiService {
public static getUsers(input: UsersGetPagedDto) {
let _url = '/api/identity/users'
// 因为abp设计的原因, 需要前端组合页面
@ -62,12 +60,12 @@ export default class UserApiService {
public static getUserOrganizationUnits(userId: string) {
const _url = '/api/identity/users/organization-units/' + userId
return ApiService.Get<ListResultDto<OrganizationUnit>>(_url, IdentityServiceUrl);
return ApiService.Get<ListResultDto<OrganizationUnit>>(_url, IdentityServiceUrl)
}
public static changeUserOrganizationUnits(roleId: string, payload: ChangeUserOrganizationUnitDto) {
const _url = '/api/identity/users/organization-units/' + roleId
return ApiService.Put<void>(_url, payload, IdentityServiceUrl);
return ApiService.Put<void>(_url, payload, IdentityServiceUrl)
}
public static setUserRoles(userId: string, roles: string[]) {
@ -186,7 +184,7 @@ export default class UserApiService {
data: qs.stringify(refresh),
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': token
Authorization: token
}
})
}
@ -249,13 +247,13 @@ export class UserLoginData {
export enum VerifyType {
Register = 0,
Signin = 10,
Signin = 10,
ResetPassword = 20
}
export class PhoneVerify {
phoneNumber!: string
verifyType!:VerifyType
verifyType!: VerifyType
}
export class UserResetPasswordData {

1
vueJs/src/icons/components/index.ts

@ -54,6 +54,7 @@ import './qq'
import './role'
import './route'
import './search'
import './setting'
import './shopping'
import './size'
import './skill'

12
vueJs/src/icons/components/setting.ts

@ -0,0 +1,12 @@
/* eslint-disable */
/* tslint:disable */
// @ts-ignore
import icon from 'vue-svgicon'
icon.register({
'setting': {
width: 128,
height: 128,
viewBox: '0 0 1024 1024',
data: '<defs/><path pid="0" d="M400.896 261.157l20.041-100.206a18.286 18.286 0 0117.92-14.665h146.286a18.286 18.286 0 0117.92 14.701l20.041 100.17c17.847 7.899 34.78 17.7 50.542 29.22l96.804-32.768a18.286 18.286 0 0121.687 8.192l73.143 126.684a18.286 18.286 0 01-3.767 22.893l-76.763 67.475a277.211 277.211 0 010 58.294l76.8 67.475a18.286 18.286 0 013.73 22.893L792.137 758.2a18.286 18.286 0 01-21.687 8.192l-96.804-32.768a272.722 272.722 0 01-50.542 29.22L603.063 863.05a18.286 18.286 0 01-17.92 14.665H438.857a18.286 18.286 0 01-17.92-14.701l-20.041-100.17a273.993 273.993 0 01-50.542-29.22L253.55 766.39a18.286 18.286 0 01-21.687-8.192L158.72 631.515a18.286 18.286 0 013.767-22.893l76.763-67.475a277.211 277.211 0 010-58.294l-76.8-67.475a18.286 18.286 0 01-3.73-22.893L231.863 265.8a18.286 18.286 0 0121.687-8.192l96.804 32.768a272.722 272.722 0 0150.542-29.22zM603.429 512a91.429 91.429 0 10-182.858 0 91.429 91.429 0 00182.858 0zM640 512a128 128 0 11-256 0 128 128 0 01256 0zM434.834 277.833a18.286 18.286 0 01-11.117 13.385 237.422 237.422 0 00-58.698 33.939 18.286 18.286 0 01-17.188 2.962l-91.794-31.086-58.149 100.754 72.777 63.964a18.286 18.286 0 016.034 16.31 239.909 239.909 0 000 67.877 18.286 18.286 0 01-6.034 16.311l-72.777 63.964L256 726.93l91.794-31.085a18.286 18.286 0 0117.189 2.998 237.422 237.422 0 0058.697 33.939 18.286 18.286 0 0111.154 13.385l19.017 94.976H570.15l19.017-94.976a18.286 18.286 0 0111.117-13.385 237.422 237.422 0 0058.698-33.939 18.286 18.286 0 0117.188-2.962l91.794 31.086 58.149-100.754-72.777-63.964a18.286 18.286 0 01-6.034-16.31 239.909 239.909 0 000-67.877 18.286 18.286 0 016.034-16.311l72.777-63.964L768 297.07l-91.794 31.085a18.286 18.286 0 01-17.189-2.998 237.422 237.422 0 00-58.697-33.939 18.286 18.286 0 01-11.154-13.385l-19.017-94.976H453.85l-19.017 94.976z"/>'
}
})

1
vueJs/src/icons/svg/setting.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1598604785448" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2358" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M400.896 261.156571l20.041143-100.205714A18.285714 18.285714 0 0 1 438.857143 146.285714h146.285714a18.285714 18.285714 0 0 1 17.92 14.701715l20.041143 100.169142c17.846857 7.899429 34.779429 17.700571 50.541714 29.220572l96.804572-32.768a18.285714 18.285714 0 0 1 21.686857 8.192l73.142857 126.683428a18.285714 18.285714 0 0 1-3.766857 22.893715l-76.763429 67.474285a277.211429 277.211429 0 0 1 0 58.294858l76.8 67.474285a18.285714 18.285714 0 0 1 3.730286 22.893715l-73.142857 126.683428a18.285714 18.285714 0 0 1-21.686857 8.192l-96.804572-32.768c-15.762286 11.52-32.694857 21.321143-50.541714 29.220572l-20.041143 100.205714A18.285714 18.285714 0 0 1 585.142857 877.714286h-146.285714a18.285714 18.285714 0 0 1-17.92-14.701715l-20.041143-100.169142a273.993143 273.993143 0 0 1-50.541714-29.220572l-96.804572 32.768a18.285714 18.285714 0 0 1-21.686857-8.192l-73.142857-126.683428a18.285714 18.285714 0 0 1 3.766857-22.893715l76.763429-67.474285a277.211429 277.211429 0 0 1 0-58.294858l-76.8-67.474285a18.285714 18.285714 0 0 1-3.730286-22.893715l73.142857-126.683428a18.285714 18.285714 0 0 1 21.686857-8.192l96.804572 32.768c15.762286-11.52 32.694857-21.321143 50.541714-29.220572zM603.428571 512a91.428571 91.428571 0 1 0-182.857142 0 91.428571 91.428571 0 0 0 182.857142 0z m36.571429 0a128 128 0 1 1-256 0 128 128 0 0 1 256 0z m-205.165714-234.166857a18.285714 18.285714 0 0 1-11.117715 13.385143 237.421714 237.421714 0 0 0-58.697142 33.938285 18.285714 18.285714 0 0 1-17.188572 2.962286l-91.794286-31.085714-58.148571 100.754286 72.777143 63.963428a18.285714 18.285714 0 0 1 6.034286 16.310857 239.908571 239.908571 0 0 0 0 67.876572 18.285714 18.285714 0 0 1-6.034286 16.310857l-72.777143 63.963428L256 726.930286l91.794286-31.085715a18.285714 18.285714 0 0 1 17.188571 2.998858 237.421714 237.421714 0 0 0 58.697143 33.938285 18.285714 18.285714 0 0 1 11.154286 13.385143L453.851429 841.142857h116.297142l19.017143-94.976a18.285714 18.285714 0 0 1 11.117715-13.385143 237.421714 237.421714 0 0 0 58.697142-33.938285 18.285714 18.285714 0 0 1 17.188572-2.962286l91.794286 31.085714 58.148571-100.754286-72.777143-63.963428a18.285714 18.285714 0 0 1-6.034286-16.310857 239.908571 239.908571 0 0 0 0-67.876572 18.285714 18.285714 0 0 1 6.034286-16.310857l72.777143-63.963428L768 297.069714l-91.794286 31.085715a18.285714 18.285714 0 0 1-17.188571-2.998858 237.421714 237.421714 0 0 0-58.697143-33.938285 18.285714 18.285714 0 0 1-11.154286-13.385143L570.148571 182.857143h-116.297142l-19.017143 94.976z" p-id="2359"></path></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

2
vueJs/src/router/modules/file-management.ts

@ -13,7 +13,7 @@ const fileManagementRouter: RouteConfig = {
children: [
{
path: 'file-system',
component: () => import(/* webpackChunkName: "file-system" */ '@/views/file-management/index.vue'),
component: () => import(/* webpackChunkName: "file-system" */ '@/views/file-management/index.vue'),
name: 'filesystem',
meta: {
title: 'filesystem',

2
vueJs/src/shims.d.ts

@ -30,4 +30,4 @@ declare module 'vue-splitpane'
declare module 'vue-simple-uploader'
// TODO vue-contextmenujs
declare module 'vue-contextmenujs'
declare module 'vue-contextmenujs'

1
vueJs/src/store/modules/user.ts

@ -18,7 +18,6 @@ export interface IUserState {
email: string
}
const scopeKey = 'vue_typescript_admin_scope'
const tokenKey = 'vue_typescript_admin_token'
const refreshTokenKey = 'vue_typescript_admin_refresh_token'

20
vueJs/src/views/admin/settings/components/GlobalSettingEditForm.vue

@ -1,12 +1,14 @@
<template>
<SettingEditForm
provider-name="G"
:settings="settings"
@onSettingSaving="onSettingSaving"
/>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
import SettingEditForm from './SettingEditForm.vue'
import SettingService, { Setting, SettingsUpdate } from '@/api/settings'
@Component({
name: 'GlobalSettingEditForm',
@ -14,5 +16,19 @@ import SettingEditForm from './SettingEditForm.vue'
SettingEditForm
}
})
export default class extends Vue {}
export default class extends Vue {
private settings = new Array<Setting>()
mounted() {
SettingService.getGlobalSettings().then(res => {
this.settings = res.items
})
}
private onSettingSaving(settings: SettingsUpdate) {
SettingService.setGlobalSettings(settings).then(() => {
this.$message.success(this.$t('AbpSettingManagement.SuccessfullySaved').toString())
})
}
}
</script>

81
vueJs/src/views/admin/settings/components/SettingEditForm.vue

@ -12,6 +12,7 @@
:label="$t('settings.systemSetting')"
>
<el-form-item
v-if="hasSettingExistsed('Abp.Localization.DefaultLanguage')"
v-popover:DefaultLanguage
prop="setting['Abp.Localization.DefaultLanguage'].value"
>
@ -64,7 +65,9 @@
v-if="hasSettingExistsed('Abp.Identity.Password.RequiredLength')"
:label="$t('settings.passwordSecurity')"
>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Identity.Password.RequiredLength')"
>
<el-popover
ref="PasswordRequiredLength"
trigger="hover"
@ -237,7 +240,9 @@
v-if="hasSettingExistsed('Abp.Identity.SignIn.RequireConfirmedEmail')"
:label="$t('settings.userAccount')"
>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Identity.SignIn.RequireConfirmedEmail')"
>
<el-popover
ref="SignInRequireConfirmedEmail"
trigger="hover"
@ -418,6 +423,7 @@
<el-input
v-model="setting['Abp.Account.PhoneVerifyCodeExpiration'].value"
:placeholder="setting['Abp.Account.PhoneVerifyCodeExpiration'].description"
type="number"
@input="(value) => handleSettingValueChanged('Abp.Account.PhoneVerifyCodeExpiration', value)"
/>
</el-form-item>
@ -462,7 +468,9 @@
v-if="hasSettingExistsed('Abp.Mailing.Smtp.Host')"
:label="$t('settings.mailing')"
>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Mailing.Smtp.Host')"
>
<el-popover
ref="SmtpHost"
trigger="hover"
@ -479,7 +487,9 @@
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Host', value)"
/>
</el-form-item>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Mailing.Smtp.Port')"
>
<el-popover
ref="SmtpPort"
trigger="hover"
@ -493,10 +503,13 @@
<el-input
v-model="setting['Abp.Mailing.Smtp.Port'].value"
:placeholder="setting['Abp.Mailing.Smtp.Port'].description"
type="number"
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Port', value)"
/>
</el-form-item>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Mailing.Smtp.UserName')"
>
<el-popover
ref="SmtpUserName"
trigger="hover"
@ -513,7 +526,9 @@
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.UserName', value)"
/>
</el-form-item>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Mailing.Smtp.Password')"
>
<el-popover
ref="SmtpPassword"
trigger="hover"
@ -527,10 +542,13 @@
<el-input
v-model="setting['Abp.Mailing.Smtp.Password'].value"
:placeholder="setting['Abp.Mailing.Smtp.Password'].description"
type="password"
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Password', value)"
/>
</el-form-item>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Mailing.Smtp.Domain')"
>
<el-popover
ref="SmtpDomain"
trigger="hover"
@ -547,7 +565,9 @@
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Domain', value)"
/>
</el-form-item>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Mailing.Smtp.EnableSsl')"
>
<el-popover
ref="SmtpEnableSsl"
trigger="hover"
@ -563,7 +583,9 @@
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.EnableSsl', value)"
/>
</el-form-item>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Mailing.Smtp.UseDefaultCredentials')"
>
<el-popover
ref="SmtpUseDefaultCredentials"
trigger="hover"
@ -579,7 +601,9 @@
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.UseDefaultCredentials', value)"
/>
</el-form-item>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Mailing.DefaultFromAddress')"
>
<el-popover
ref="MailingDefaultFromAddress"
trigger="hover"
@ -596,7 +620,9 @@
@input="(value) => handleSettingValueChanged('Abp.Mailing.DefaultFromAddress', value)"
/>
</el-form-item>
<el-form-item>
<el-form-item
v-if="hasSettingExistsed('Abp.Mailing.DefaultFromDisplayName')"
>
<el-popover
ref="MailingDefaultFromDisplayName"
trigger="hover"
@ -663,7 +689,7 @@
</el-tabs>
<el-form-item
v-if="setting"
v-if="settings.length>0"
>
<el-button
type="primary"
@ -678,23 +704,21 @@
</template>
<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator'
import { Component, Prop, Watch, Vue } from 'vue-property-decorator'
import { AbpModule } from '@/store/modules/abp'
import SettingService, { Setting, SettingUpdate, SettingsUpdate } from '@/api/settings'
import { Setting, SettingUpdate, SettingsUpdate } from '@/api/settings'
const booleanStrings = ['True', 'true', 'False', 'false']
@Component({
name: 'TenantSettingEditForm'
name: 'SettingEditForm'
})
export default class extends Vue {
@Prop({ default: '' })
private providerName!: string
@Prop({ default: '' })
private providerKey!: string
@Prop({ default: () => { return Array<Setting>() } })
private settings!: Setting[]
private setting: {[key: string]: Setting} = {}
private settingChangeKeys = new Array<string>()
get definedLanguages() {
@ -704,13 +728,10 @@ export default class extends Vue {
return languages
}
mounted() {
this.handleGetSettings()
}
private handleGetSettings() {
SettingService.getSettings(this.providerName, this.providerKey).then(settings => {
settings.items.forEach(setting => {
@Watch('settings', { immediate: true })
private onSettingChanged() {
if (this.settings.length > 0) {
this.settings.forEach(setting => {
if (setting.value) {
const value = setting.value.toLowerCase()
if (booleanStrings.includes(value)) {
@ -727,7 +748,7 @@ export default class extends Vue {
this.setting[setting.name] = setting
})
this.$forceUpdate()
})
}
}
private hasSettingExistsed(key: string) {
@ -754,9 +775,7 @@ export default class extends Vue {
updateSettings.settings.push(updateSetting)
})
if (updateSettings.settings.length > 0) {
SettingService.setSettings(this.providerName, this.providerKey, updateSettings).then(() => {
this.$message.success(this.$t('AbpSettingManagement.SuccessfullySaved').toString())
})
this.$emit('onSettingSaving', updateSettings)
}
}
}

22
vueJs/src/views/admin/settings/components/TenantSettingEditForm.vue

@ -1,13 +1,14 @@
<template>
<SettingEditForm
provider-name="T"
:provider-key="tenantId"
:settings="settings"
@onSettingSaving="onSettingSaving"
/>
</template>
<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator'
import { Component, Vue } from 'vue-property-decorator'
import SettingEditForm from './SettingEditForm.vue'
import SettingService, { Setting, SettingsUpdate } from '@/api/settings'
@Component({
name: 'TenantSettingEditForm',
@ -16,7 +17,18 @@ import SettingEditForm from './SettingEditForm.vue'
}
})
export default class extends Vue {
@Prop({ default: '' })
private tenantId?: string
private settings = new Array<Setting>()
mounted() {
SettingService.getCurrentTenantSettings().then(res => {
this.settings = res.items
})
}
private onSettingSaving(settings: SettingsUpdate) {
SettingService.setCurrentTenantSettings(settings).then(() => {
this.$message.success(this.$t('AbpSettingManagement.SuccessfullySaved').toString())
})
}
}
</script>

22
vueJs/src/views/admin/settings/components/UserSettingEditForm.vue

@ -1,22 +0,0 @@
<template>
<SettingEditForm
provider-name="U"
:provider-key="userId"
/>
</template>
<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator'
import SettingEditForm from './SettingEditForm.vue'
@Component({
name: 'TenantSettingEditForm',
components: {
SettingEditForm
}
})
export default class extends Vue {
@Prop({ default: '' })
private userId?: string
}
</script>

45
vueJs/src/views/admin/settings/index.vue

@ -1,48 +1,25 @@
<template>
<el-tabs
tab-position="left"
>
<el-tab-pane
v-if="!currentTenantId"
:label="$t('settings.globalSetting')"
>
<GlobalSettingEditForm />
</el-tab-pane>
<el-tab-pane
v-if="currentTenantId"
:label="$t('settings.tenantSetting')"
>
<TenantSettingEditForm
:tenant-id="currentTenantId"
/>
</el-tab-pane>
<el-tab-pane
:label="$t('settings.userSetting')"
>
<UserSettingEditForm
:user-id="currentUserId"
/>
</el-tab-pane>
</el-tabs>
<div class="app-container">
<component :is="currentSettingForm" />
</div>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
import { UserModule } from '@/store/modules/user'
import { AbpModule } from '@/store/modules/abp'
import UserSettingEditForm from './components/UserSettingEditForm.vue'
import TenantSettingEditForm from './components/TenantSettingEditForm.vue'
import GlobalSettingEditForm from './components/GlobalSettingEditForm.vue'
@Component({
name: 'Settings',
components: {
UserSettingEditForm,
TenantSettingEditForm,
GlobalSettingEditForm
}
})
export default class extends Vue {
private currentSettingForm = 'global-setting-editForm'
get currentTenantId() {
if (AbpModule.configuration.currentTenant.isAvailable) {
return AbpModule.configuration.currentTenant.id
@ -50,14 +27,10 @@ export default class extends Vue {
return ''
}
get currentUserId() {
return UserModule.id
created() {
if (this.currentTenantId) {
this.currentSettingForm = 'tenant-setting-editForm'
}
}
}
</script>
<style lang="scss" scoped>
.el-tabs__item {
width: 160px;
}
</style>

2
vueJs/src/views/permission/role.vue

@ -263,7 +263,7 @@ export default class extends Vue {
}
private handleDelete(scope: any) {
const { $index, row } = scope
const { $index } = scope
this.$confirm('Confirm to remove the role?', 'Warning', {
confirmButtonText: 'Confirm',
cancelButtonText: 'Cancel',

Loading…
Cancel
Save