29 changed files with 1162 additions and 964 deletions
@ -0,0 +1,43 @@ |
|||
using Microsoft.Extensions.Configuration; |
|||
using MySql.Data.MySqlClient; |
|||
using System; |
|||
using System.IO; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.IO; |
|||
|
|||
namespace DataSeeder |
|||
{ |
|||
public class ApiGatewayAdminDataSeedContributor : IDataSeedContributor, IScopedDependency |
|||
{ |
|||
protected IConfiguration Configuration { get; } |
|||
public ApiGatewayAdminDataSeedContributor( |
|||
IConfiguration configuration) |
|||
{ |
|||
Configuration = configuration; |
|||
} |
|||
|
|||
public virtual async Task SeedAsync(DataSeedContext context) |
|||
{ |
|||
// Search file: ApiGateway-init.sql
|
|||
var scriptCommandFilePath = Path.Combine(Directory.GetCurrentDirectory(), "../../../database"); |
|||
var scriptCommandFile = Path.Combine(scriptCommandFilePath, "ApiGateway-Init.sql"); |
|||
if (File.Exists(scriptCommandFile)) |
|||
{ |
|||
// read all script
|
|||
var apigatewayInitScript = await FileHelper.ReadAllTextAsync(scriptCommandFile); |
|||
if (!apigatewayInitScript.IsNullOrWhiteSpace()) |
|||
{ |
|||
// open connection and excute the apigateway-init script
|
|||
var connectionString = Configuration.GetConnectionString("ApiGateway"); |
|||
using var connection = new MySqlConnection(connectionString); |
|||
await connection.OpenAsync(); |
|||
var sqlTransaction = connection.BeginTransaction(); |
|||
var sqlCommand = new MySqlCommand(apigatewayInitScript, connection, sqlTransaction); |
|||
await sqlCommand.ExecuteNonQueryAsync(); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -1,740 +1,18 @@ |
|||
<template> |
|||
<div> |
|||
<el-form |
|||
ref="formGlobalSetting" |
|||
v-model="globalSetting" |
|||
label-width="180px" |
|||
style="width: 96%" |
|||
> |
|||
<el-tabs> |
|||
<el-tab-pane :label="$t('settings.systemSetting')"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Localization.DefaultLanguage')" |
|||
v-popover:DefaultLanguage |
|||
prop="globalSetting['Abp.Localization.DefaultLanguage'].value" |
|||
> |
|||
<el-popover |
|||
ref="DefaultLanguage" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Localization.DefaultLanguage'].displayName" |
|||
:content="globalSetting['Abp.Localization.DefaultLanguage'].description" |
|||
<SettingEditForm |
|||
provider-name="G" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:DefaultLanguage |
|||
>{{ globalSetting['Abp.Localization.DefaultLanguage'].displayName }}</span> |
|||
<el-select |
|||
v-model="globalSetting['Abp.Localization.DefaultLanguage'].value" |
|||
style="width: 100%;" |
|||
@change="(value) => handleSettingValueChanged('Abp.Localization.DefaultLanguage', value)" |
|||
> |
|||
<el-option |
|||
v-for="language in definedLanguages" |
|||
:key="language" |
|||
:label="language" |
|||
:value="language" |
|||
:disabled="language===globalSetting['Abp.Localization.DefaultLanguage'].value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Timing.TimeZone')" |
|||
prop="Abp.Timing.TimeZone'].value" |
|||
> |
|||
<el-popover |
|||
ref="TimeZone" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Timing.TimeZone'].displayName" |
|||
:content="globalSetting['Abp.Timing.TimeZone'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:TimeZone |
|||
>{{ globalSetting['Abp.Timing.TimeZone'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Timing.TimeZone'].value" |
|||
:placeholder="globalSetting['Abp.Timing.TimeZone'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Timing.TimeZone', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-tab-pane> |
|||
<el-tab-pane |
|||
:label="$t('settings.passwordSecurity')" |
|||
> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequiredLength')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequiredLength" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.Password.RequiredLength'].displayName" |
|||
:content="globalSetting['Abp.Identity.Password.RequiredLength'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequiredLength |
|||
>{{ globalSetting['Abp.Identity.Password.RequiredLength'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Identity.Password.RequiredLength'].value" |
|||
:placeholder="globalSetting['Abp.Identity.Password.RequiredLength'].description" |
|||
type="number" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequiredLength', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequiredUniqueChars')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequiredUniqueChars" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.Password.RequiredUniqueChars'].displayName" |
|||
:content="globalSetting['Abp.Identity.Password.RequiredUniqueChars'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequiredUniqueChars |
|||
>{{ globalSetting['Abp.Identity.Password.RequiredUniqueChars'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Identity.Password.RequiredUniqueChars'].value" |
|||
type="number" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequiredUniqueChars', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-row> |
|||
<el-col :span="8"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequireNonAlphanumeric')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequireNonAlphanumeric" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.Password.RequireNonAlphanumeric'].displayName" |
|||
:content="globalSetting['Abp.Identity.Password.RequireNonAlphanumeric'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequireNonAlphanumeric |
|||
>{{ globalSetting['Abp.Identity.Password.RequireNonAlphanumeric'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Identity.Password.RequireNonAlphanumeric'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequireNonAlphanumeric', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="8"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequireLowercase')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequireLowercase" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.Password.RequireLowercase'].displayName" |
|||
:content="globalSetting['Abp.Identity.Password.RequireLowercase'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequireLowercase |
|||
>{{ globalSetting['Abp.Identity.Password.RequireLowercase'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Identity.Password.RequireLowercase'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequireLowercase', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
<el-row> |
|||
<el-col :span="8"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequireUppercase')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequireUppercase" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.Password.RequireUppercase'].displayName" |
|||
:content="globalSetting['Abp.Identity.Password.RequireUppercase'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequireUppercase |
|||
>{{ globalSetting['Abp.Identity.Password.RequireUppercase'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Identity.Password.RequireUppercase'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequireUppercase', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="8"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequireDigit')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequireDigit" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.Password.RequireDigit'].displayName" |
|||
:content="globalSetting['Abp.Identity.Password.RequireDigit'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequireDigit |
|||
>{{ globalSetting['Abp.Identity.Password.RequireDigit'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Identity.Password.RequireDigit'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequireDigit', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Lockout.AllowedForNewUsers')" |
|||
> |
|||
<el-popover |
|||
ref="LockoutAllowedForNewUsers" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.Lockout.AllowedForNewUsers'].displayName" |
|||
:content="globalSetting['Abp.Identity.Lockout.AllowedForNewUsers'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:LockoutAllowedForNewUsers |
|||
>{{ globalSetting['Abp.Identity.Lockout.AllowedForNewUsers'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Identity.Lockout.AllowedForNewUsers'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Lockout.AllowedForNewUsers', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Lockout.MaxFailedAccessAttempts')" |
|||
> |
|||
<el-popover |
|||
ref="LockoutMaxFailedAccessAttempts" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.Lockout.MaxFailedAccessAttempts'].displayName" |
|||
:content="globalSetting['Abp.Identity.Lockout.MaxFailedAccessAttempts'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:LockoutMaxFailedAccessAttempts |
|||
>{{ globalSetting['Abp.Identity.Lockout.MaxFailedAccessAttempts'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Identity.Lockout.MaxFailedAccessAttempts'].value" |
|||
:placeholder="globalSetting['Abp.Identity.Lockout.MaxFailedAccessAttempts'].description" |
|||
type="number" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Lockout.MaxFailedAccessAttempts', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Lockout.LockoutDuration')" |
|||
> |
|||
<el-popover |
|||
ref="LockoutLockoutDuration" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.Lockout.LockoutDuration'].displayName" |
|||
:content="globalSetting['Abp.Identity.Lockout.LockoutDuration'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:LockoutLockoutDuration |
|||
>{{ globalSetting['Abp.Identity.Lockout.LockoutDuration'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Identity.Lockout.LockoutDuration'].value" |
|||
:placeholder="globalSetting['Abp.Identity.Lockout.LockoutDuration'].description" |
|||
type="number" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Lockout.LockoutDuration', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-row> |
|||
</el-tab-pane> |
|||
<el-tab-pane |
|||
:label="$t('settings.userAccount')" |
|||
> |
|||
<el-row> |
|||
<el-col :span="8"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.SignIn.RequireConfirmedEmail')" |
|||
> |
|||
<el-popover |
|||
ref="SignInRequireConfirmedEmail" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.SignIn.RequireConfirmedEmail'].displayName" |
|||
:content="globalSetting['Abp.Identity.SignIn.RequireConfirmedEmail'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SignInRequireConfirmedEmail |
|||
>{{ globalSetting['Abp.Identity.SignIn.RequireConfirmedEmail'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Identity.SignIn.RequireConfirmedEmail'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.SignIn.RequireConfirmedEmail', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="8"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.SignIn.EnablePhoneNumberConfirmation')" |
|||
> |
|||
<el-popover |
|||
ref="SignInEnablePhoneNumberConfirmation" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.SignIn.EnablePhoneNumberConfirmation'].displayName" |
|||
:content="globalSetting['Abp.Identity.SignIn.EnablePhoneNumberConfirmation'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SignInEnablePhoneNumberConfirmation |
|||
>{{ globalSetting['Abp.Identity.SignIn.EnablePhoneNumberConfirmation'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Identity.SignIn.EnablePhoneNumberConfirmation'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.SignIn.EnablePhoneNumberConfirmation', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
<el-row> |
|||
<el-col :span="8"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.SignIn.RequireConfirmedPhoneNumber')" |
|||
> |
|||
<el-popover |
|||
ref="SignInRequireConfirmedPhoneNumber" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.SignIn.RequireConfirmedPhoneNumber'].displayName" |
|||
:content="globalSetting['Abp.Identity.SignIn.RequireConfirmedPhoneNumber'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SignInRequireConfirmedPhoneNumber |
|||
>{{ globalSetting['Abp.Identity.SignIn.RequireConfirmedPhoneNumber'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Identity.SignIn.RequireConfirmedPhoneNumber'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.SignIn.RequireConfirmedPhoneNumber', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="8"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.User.IsUserNameUpdateEnabled')" |
|||
> |
|||
<el-popover |
|||
ref="UserIsUserNameUpdateEnabled" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.User.IsUserNameUpdateEnabled'].displayName" |
|||
:content="globalSetting['Abp.Identity.User.IsUserNameUpdateEnabled'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:UserIsUserNameUpdateEnabled |
|||
>{{ globalSetting['Abp.Identity.User.IsUserNameUpdateEnabled'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Identity.User.IsUserNameUpdateEnabled'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.User.IsUserNameUpdateEnabled', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.User.IsEmailUpdateEnabled')" |
|||
> |
|||
<el-popover |
|||
ref="UserIsEmailUpdateEnabled" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.User.IsEmailUpdateEnabled'].displayName" |
|||
:content="globalSetting['Abp.Identity.User.IsEmailUpdateEnabled'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:UserIsEmailUpdateEnabled |
|||
>{{ globalSetting['Abp.Identity.User.IsEmailUpdateEnabled'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Identity.User.IsEmailUpdateEnabled'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.User.IsEmailUpdateEnabled', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.OrganizationUnit.MaxUserMembershipCount')" |
|||
> |
|||
<el-popover |
|||
ref="OrganizationUnitMaxUserMembershipCount" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Identity.OrganizationUnit.MaxUserMembershipCount'].displayName" |
|||
:content="globalSetting['Abp.Identity.OrganizationUnit.MaxUserMembershipCount'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:OrganizationUnitMaxUserMembershipCount |
|||
>{{ globalSetting['Abp.Identity.OrganizationUnit.MaxUserMembershipCount'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Identity.OrganizationUnit.MaxUserMembershipCount'].value" |
|||
:placeholder="globalSetting['Abp.Identity.OrganizationUnit.MaxUserMembershipCount'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.OrganizationUnit.MaxUserMembershipCount', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.SmsRegisterTemplateCode')" |
|||
> |
|||
<el-popover |
|||
ref="AccountSmsRegisterTemplateCode" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Account.SmsRegisterTemplateCode'].displayName" |
|||
:content="globalSetting['Abp.Account.SmsRegisterTemplateCode'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountSmsRegisterTemplateCode |
|||
>{{ globalSetting['Abp.Account.SmsRegisterTemplateCode'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Account.SmsRegisterTemplateCode'].value" |
|||
:placeholder="globalSetting['Abp.Account.SmsRegisterTemplateCode'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.SmsRegisterTemplateCode', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.SmsSigninTemplateCode')" |
|||
> |
|||
<el-popover |
|||
ref="AccountSmsSigninTemplateCode" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Account.SmsSigninTemplateCode'].displayName" |
|||
:content="globalSetting['Abp.Account.SmsSigninTemplateCode'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountSmsSigninTemplateCode |
|||
>{{ globalSetting['Abp.Account.SmsSigninTemplateCode'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Account.SmsSigninTemplateCode'].value" |
|||
:placeholder="globalSetting['Abp.Account.SmsSigninTemplateCode'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.SmsSigninTemplateCode', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.SmsResetPasswordTemplateCode')" |
|||
> |
|||
<el-popover |
|||
ref="AccountSmsResetPasswordTemplateCode" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Account.SmsResetPasswordTemplateCode'].displayName" |
|||
:content="globalSetting['Abp.Account.SmsResetPasswordTemplateCode'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountSmsResetPasswordTemplateCode |
|||
>{{ globalSetting['Abp.Account.SmsResetPasswordTemplateCode'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Account.SmsResetPasswordTemplateCode'].value" |
|||
:placeholder="globalSetting['Abp.Account.SmsResetPasswordTemplateCode'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.SmsResetPasswordTemplateCode', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.PhoneVerifyCodeExpiration')" |
|||
> |
|||
<el-popover |
|||
ref="AccountPhoneVerifyCodeExpiration" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Account.PhoneVerifyCodeExpiration'].displayName" |
|||
:content="globalSetting['Abp.Account.PhoneVerifyCodeExpiration'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountPhoneVerifyCodeExpiration |
|||
>{{ globalSetting['Abp.Account.PhoneVerifyCodeExpiration'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Account.PhoneVerifyCodeExpiration'].value" |
|||
:placeholder="globalSetting['Abp.Account.PhoneVerifyCodeExpiration'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.PhoneVerifyCodeExpiration', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-row> |
|||
<el-col :span="8"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.IsSelfRegistrationEnabled')" |
|||
> |
|||
<el-popover |
|||
ref="AccountIsSelfRegistrationEnabled" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Account.IsSelfRegistrationEnabled'].displayName" |
|||
:content="globalSetting['Abp.Account.IsSelfRegistrationEnabled'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountIsSelfRegistrationEnabled |
|||
>{{ globalSetting['Abp.Account.IsSelfRegistrationEnabled'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Account.IsSelfRegistrationEnabled'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.IsSelfRegistrationEnabled', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.EnableLocalLogin')" |
|||
> |
|||
<el-popover |
|||
ref="AccountEnableLocalLogin" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Account.EnableLocalLogin'].displayName" |
|||
:content="globalSetting['Abp.Account.EnableLocalLogin'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountEnableLocalLogin |
|||
>{{ globalSetting['Abp.Account.EnableLocalLogin'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Account.EnableLocalLogin'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.EnableLocalLogin', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-tab-pane> |
|||
<el-tab-pane |
|||
v-if="hasSettingExistsed('Abp.Mailing.Smtp.Host')" |
|||
:label="$t('settings.mailing')" |
|||
> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpHost" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Mailing.Smtp.Host'].displayName" |
|||
:content="globalSetting['Abp.Mailing.Smtp.Host'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpHost |
|||
>{{ globalSetting['Abp.Mailing.Smtp.Host'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Mailing.Smtp.Host'].value" |
|||
:placeholder="globalSetting['Abp.Mailing.Smtp.Host'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Host', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpPort" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Mailing.Smtp.Port'].displayName" |
|||
:content="globalSetting['Abp.Mailing.Smtp.Port'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpPort |
|||
>{{ globalSetting['Abp.Mailing.Smtp.Port'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Mailing.Smtp.Port'].value" |
|||
:placeholder="globalSetting['Abp.Mailing.Smtp.Port'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Port', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpUserName" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Mailing.Smtp.UserName'].displayName" |
|||
:content="globalSetting['Abp.Mailing.Smtp.UserName'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpUserName |
|||
>{{ globalSetting['Abp.Mailing.Smtp.UserName'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Mailing.Smtp.UserName'].value" |
|||
:placeholder="globalSetting['Abp.Mailing.Smtp.UserName'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.UserName', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpPassword" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Mailing.Smtp.Password'].displayName" |
|||
:content="globalSetting['Abp.Mailing.Smtp.Password'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpPassword |
|||
>{{ globalSetting['Abp.Mailing.Smtp.Password'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Mailing.Smtp.Password'].value" |
|||
:placeholder="globalSetting['Abp.Mailing.Smtp.Password'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Password', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpDomain" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Mailing.Smtp.Domain'].displayName" |
|||
:content="globalSetting['Abp.Mailing.Smtp.Domain'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpDomain |
|||
>{{ globalSetting['Abp.Mailing.Smtp.Domain'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Mailing.Smtp.Domain'].value" |
|||
:placeholder="globalSetting['Abp.Mailing.Smtp.Domain'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Domain', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpEnableSsl" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Mailing.Smtp.EnableSsl'].displayName" |
|||
:content="globalSetting['Abp.Mailing.Smtp.EnableSsl'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpEnableSsl |
|||
>{{ globalSetting['Abp.Mailing.Smtp.EnableSsl'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Mailing.Smtp.EnableSsl'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.EnableSsl', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpUseDefaultCredentials" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Mailing.Smtp.UseDefaultCredentials'].displayName" |
|||
:content="globalSetting['Abp.Mailing.Smtp.UseDefaultCredentials'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpUseDefaultCredentials |
|||
>{{ globalSetting['Abp.Mailing.Smtp.UseDefaultCredentials'].displayName }}</span> |
|||
<el-switch |
|||
v-model="globalSetting['Abp.Mailing.Smtp.UseDefaultCredentials'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.UseDefaultCredentials', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="MailingDefaultFromAddress" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Mailing.DefaultFromAddress'].displayName" |
|||
:content="globalSetting['Abp.Mailing.DefaultFromAddress'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:MailingDefaultFromAddress |
|||
>{{ globalSetting['Abp.Mailing.DefaultFromAddress'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Mailing.DefaultFromAddress'].value" |
|||
:placeholder="globalSetting['Abp.Mailing.DefaultFromAddress'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.DefaultFromAddress', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="MailingDefaultFromDisplayName" |
|||
trigger="hover" |
|||
:title="globalSetting['Abp.Mailing.DefaultFromDisplayName'].displayName" |
|||
:content="globalSetting['Abp.Mailing.DefaultFromDisplayName'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:MailingDefaultFromDisplayName |
|||
>{{ globalSetting['Abp.Mailing.DefaultFromDisplayName'].displayName }}</span> |
|||
<el-input |
|||
v-model="globalSetting['Abp.Mailing.DefaultFromDisplayName'].value" |
|||
:placeholder="globalSetting['Abp.Mailing.DefaultFromDisplayName'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.DefaultFromDisplayName', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-tab-pane> |
|||
</el-tabs> |
|||
|
|||
<el-form-item> |
|||
<el-button |
|||
type="primary" |
|||
style="width:200px;margin:inherit;" |
|||
@click="onSaveGlobalSetting" |
|||
> |
|||
{{ $t('global.confirm') }} |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts"> |
|||
import { Component, Vue } from 'vue-property-decorator' |
|||
import { AbpConfigurationModule } from '@/store/modules/abp' |
|||
import SettingService, { Setting, SettingUpdate, SettingsUpdate } from '@/api/settings' |
|||
|
|||
const booleanStrings = ['True', 'true', 'False', 'false'] |
|||
import SettingEditForm from './SettingEditForm.vue' |
|||
|
|||
@Component({ |
|||
name: 'GlobalSettingEditForm' |
|||
}) |
|||
export default class extends Vue { |
|||
private globalSettingLoaded = false |
|||
private globalSetting: {[key: string]: Setting} = {} |
|||
private globalSettingChangeKeys = new Array<string>() |
|||
|
|||
get definedLanguages() { |
|||
const languages = AbpConfigurationModule.configuration.localization.languages.map((lang: any) => { |
|||
return lang.cultureName |
|||
}) |
|||
return languages |
|||
} |
|||
|
|||
private hasSettingExistsed(key: string) { |
|||
if (this.globalSetting[key]) { |
|||
return true |
|||
} |
|||
return false |
|||
} |
|||
|
|||
mounted() { |
|||
this.handleGetGlobalSettings() |
|||
} |
|||
|
|||
private handleSettingValueChanged(key: string, value: any) { |
|||
if (!this.globalSettingChangeKeys.includes(key)) { |
|||
this.globalSettingChangeKeys.push(key) |
|||
} |
|||
this.$set(this.globalSetting[key], 'value', value) |
|||
this.$forceUpdate() |
|||
name: 'GlobalSettingEditForm', |
|||
components: { |
|||
SettingEditForm |
|||
} |
|||
|
|||
private handleGetGlobalSettings() { |
|||
SettingService.getSettings('G', '').then(settings => { |
|||
console.log(settings) |
|||
settings.items.forEach(setting => { |
|||
if (setting.value) { |
|||
const value = setting.value.toLowerCase() |
|||
if (booleanStrings.includes(value)) { |
|||
setting.value = value === 'true' |
|||
} |
|||
} else { |
|||
if (setting.defaultValue) { |
|||
const defaultValue = setting.defaultValue.toLowerCase() |
|||
if (booleanStrings.includes(defaultValue)) { |
|||
setting.value = defaultValue === 'true' |
|||
} |
|||
} |
|||
} |
|||
this.globalSetting[setting.name] = setting |
|||
}) |
|||
this.globalSettingLoaded = true |
|||
this.$forceUpdate() |
|||
}) |
|||
} |
|||
|
|||
private onSaveGlobalSetting() { |
|||
const updateSettings = new SettingsUpdate() |
|||
this.globalSettingChangeKeys.forEach(key => { |
|||
const updateSetting = new SettingUpdate() |
|||
updateSetting.name = key |
|||
updateSetting.value = this.globalSetting[key].value |
|||
updateSettings.settings.push(updateSetting) |
|||
}) |
|||
if (updateSettings.settings.length > 0) { |
|||
SettingService.setSettings('G', '', updateSettings).then(() => { |
|||
this.$message.success(this.$t('AbpSettingManagement.SuccessfullySaved').toString()) |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
}) |
|||
export default class extends Vue {} |
|||
</script> |
|||
|
|||
@ -0,0 +1,717 @@ |
|||
<template> |
|||
<div> |
|||
<el-form |
|||
ref="formsetting" |
|||
v-model="setting" |
|||
label-width="180px" |
|||
style="width: 96%" |
|||
> |
|||
<el-tabs> |
|||
<el-tab-pane |
|||
v-if="hasSettingExistsed('Abp.Localization.DefaultLanguage')" |
|||
:label="$t('settings.systemSetting')" |
|||
> |
|||
<el-form-item |
|||
v-popover:DefaultLanguage |
|||
prop="setting['Abp.Localization.DefaultLanguage'].value" |
|||
> |
|||
<el-popover |
|||
ref="DefaultLanguage" |
|||
trigger="hover" |
|||
:title="setting['Abp.Localization.DefaultLanguage'].displayName" |
|||
:content="setting['Abp.Localization.DefaultLanguage'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:DefaultLanguage |
|||
>{{ setting['Abp.Localization.DefaultLanguage'].displayName }}</span> |
|||
<el-select |
|||
v-model="setting['Abp.Localization.DefaultLanguage'].value" |
|||
style="width: 100%;" |
|||
@change="(value) => handleSettingValueChanged('Abp.Localization.DefaultLanguage', value)" |
|||
> |
|||
<el-option |
|||
v-for="language in definedLanguages" |
|||
:key="language" |
|||
:label="language" |
|||
:value="language" |
|||
:disabled="language===setting['Abp.Localization.DefaultLanguage'].value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Timing.TimeZone')" |
|||
prop="Abp.Timing.TimeZone'].value" |
|||
> |
|||
<el-popover |
|||
ref="TimeZone" |
|||
trigger="hover" |
|||
:title="setting['Abp.Timing.TimeZone'].displayName" |
|||
:content="setting['Abp.Timing.TimeZone'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:TimeZone |
|||
>{{ setting['Abp.Timing.TimeZone'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Timing.TimeZone'].value" |
|||
:placeholder="setting['Abp.Timing.TimeZone'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Timing.TimeZone', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-tab-pane> |
|||
<el-tab-pane |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequiredLength')" |
|||
:label="$t('settings.passwordSecurity')" |
|||
> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="PasswordRequiredLength" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.Password.RequiredLength'].displayName" |
|||
:content="setting['Abp.Identity.Password.RequiredLength'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequiredLength |
|||
>{{ setting['Abp.Identity.Password.RequiredLength'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Identity.Password.RequiredLength'].value" |
|||
:placeholder="setting['Abp.Identity.Password.RequiredLength'].description" |
|||
type="number" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequiredLength', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequiredUniqueChars')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequiredUniqueChars" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.Password.RequiredUniqueChars'].displayName" |
|||
:content="setting['Abp.Identity.Password.RequiredUniqueChars'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequiredUniqueChars |
|||
>{{ setting['Abp.Identity.Password.RequiredUniqueChars'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Identity.Password.RequiredUniqueChars'].value" |
|||
type="number" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequiredUniqueChars', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequireNonAlphanumeric')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequireNonAlphanumeric" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.Password.RequireNonAlphanumeric'].displayName" |
|||
:content="setting['Abp.Identity.Password.RequireNonAlphanumeric'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequireNonAlphanumeric |
|||
>{{ setting['Abp.Identity.Password.RequireNonAlphanumeric'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Identity.Password.RequireNonAlphanumeric'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequireNonAlphanumeric', value)" |
|||
/> |
|||
</el-form-item> |
|||
|
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequireLowercase')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequireLowercase" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.Password.RequireLowercase'].displayName" |
|||
:content="setting['Abp.Identity.Password.RequireLowercase'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequireLowercase |
|||
>{{ setting['Abp.Identity.Password.RequireLowercase'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Identity.Password.RequireLowercase'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequireLowercase', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequireUppercase')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequireUppercase" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.Password.RequireUppercase'].displayName" |
|||
:content="setting['Abp.Identity.Password.RequireUppercase'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequireUppercase |
|||
>{{ setting['Abp.Identity.Password.RequireUppercase'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Identity.Password.RequireUppercase'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequireUppercase', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Password.RequireDigit')" |
|||
> |
|||
<el-popover |
|||
ref="PasswordRequireDigit" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.Password.RequireDigit'].displayName" |
|||
:content="setting['Abp.Identity.Password.RequireDigit'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:PasswordRequireDigit |
|||
>{{ setting['Abp.Identity.Password.RequireDigit'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Identity.Password.RequireDigit'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Password.RequireDigit', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Lockout.AllowedForNewUsers')" |
|||
> |
|||
<el-popover |
|||
ref="LockoutAllowedForNewUsers" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.Lockout.AllowedForNewUsers'].displayName" |
|||
:content="setting['Abp.Identity.Lockout.AllowedForNewUsers'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:LockoutAllowedForNewUsers |
|||
>{{ setting['Abp.Identity.Lockout.AllowedForNewUsers'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Identity.Lockout.AllowedForNewUsers'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Lockout.AllowedForNewUsers', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Lockout.LockoutDuration')" |
|||
> |
|||
<el-popover |
|||
ref="LockoutLockoutDuration" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.Lockout.LockoutDuration'].displayName" |
|||
:content="setting['Abp.Identity.Lockout.LockoutDuration'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:LockoutLockoutDuration |
|||
>{{ setting['Abp.Identity.Lockout.LockoutDuration'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Identity.Lockout.LockoutDuration'].value" |
|||
:placeholder="setting['Abp.Identity.Lockout.LockoutDuration'].description" |
|||
type="number" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Lockout.LockoutDuration', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.Lockout.MaxFailedAccessAttempts')" |
|||
> |
|||
<el-popover |
|||
ref="LockoutMaxFailedAccessAttempts" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.Lockout.MaxFailedAccessAttempts'].displayName" |
|||
:content="setting['Abp.Identity.Lockout.MaxFailedAccessAttempts'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:LockoutMaxFailedAccessAttempts |
|||
>{{ setting['Abp.Identity.Lockout.MaxFailedAccessAttempts'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Identity.Lockout.MaxFailedAccessAttempts'].value" |
|||
:placeholder="setting['Abp.Identity.Lockout.MaxFailedAccessAttempts'].description" |
|||
type="number" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.Lockout.MaxFailedAccessAttempts', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-tab-pane> |
|||
<el-tab-pane |
|||
v-if="hasSettingExistsed('Abp.Identity.SignIn.RequireConfirmedEmail')" |
|||
:label="$t('settings.userAccount')" |
|||
> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SignInRequireConfirmedEmail" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.SignIn.RequireConfirmedEmail'].displayName" |
|||
:content="setting['Abp.Identity.SignIn.RequireConfirmedEmail'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SignInRequireConfirmedEmail |
|||
>{{ setting['Abp.Identity.SignIn.RequireConfirmedEmail'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Identity.SignIn.RequireConfirmedEmail'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.SignIn.RequireConfirmedEmail', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.SignIn.EnablePhoneNumberConfirmation')" |
|||
> |
|||
<el-popover |
|||
ref="SignInEnablePhoneNumberConfirmation" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.SignIn.EnablePhoneNumberConfirmation'].displayName" |
|||
:content="setting['Abp.Identity.SignIn.EnablePhoneNumberConfirmation'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SignInEnablePhoneNumberConfirmation |
|||
>{{ setting['Abp.Identity.SignIn.EnablePhoneNumberConfirmation'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Identity.SignIn.EnablePhoneNumberConfirmation'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.SignIn.EnablePhoneNumberConfirmation', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.SignIn.RequireConfirmedPhoneNumber')" |
|||
> |
|||
<el-popover |
|||
ref="SignInRequireConfirmedPhoneNumber" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.SignIn.RequireConfirmedPhoneNumber'].displayName" |
|||
:content="setting['Abp.Identity.SignIn.RequireConfirmedPhoneNumber'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SignInRequireConfirmedPhoneNumber |
|||
>{{ setting['Abp.Identity.SignIn.RequireConfirmedPhoneNumber'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Identity.SignIn.RequireConfirmedPhoneNumber'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.SignIn.RequireConfirmedPhoneNumber', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.User.IsUserNameUpdateEnabled')" |
|||
> |
|||
<el-popover |
|||
ref="UserIsUserNameUpdateEnabled" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.User.IsUserNameUpdateEnabled'].displayName" |
|||
:content="setting['Abp.Identity.User.IsUserNameUpdateEnabled'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:UserIsUserNameUpdateEnabled |
|||
>{{ setting['Abp.Identity.User.IsUserNameUpdateEnabled'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Identity.User.IsUserNameUpdateEnabled'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.User.IsUserNameUpdateEnabled', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.User.IsEmailUpdateEnabled')" |
|||
> |
|||
<el-popover |
|||
ref="UserIsEmailUpdateEnabled" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.User.IsEmailUpdateEnabled'].displayName" |
|||
:content="setting['Abp.Identity.User.IsEmailUpdateEnabled'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:UserIsEmailUpdateEnabled |
|||
>{{ setting['Abp.Identity.User.IsEmailUpdateEnabled'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Identity.User.IsEmailUpdateEnabled'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.User.IsEmailUpdateEnabled', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Identity.OrganizationUnit.MaxUserMembershipCount')" |
|||
> |
|||
<el-popover |
|||
ref="OrganizationUnitMaxUserMembershipCount" |
|||
trigger="hover" |
|||
:title="setting['Abp.Identity.OrganizationUnit.MaxUserMembershipCount'].displayName" |
|||
:content="setting['Abp.Identity.OrganizationUnit.MaxUserMembershipCount'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:OrganizationUnitMaxUserMembershipCount |
|||
>{{ setting['Abp.Identity.OrganizationUnit.MaxUserMembershipCount'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Identity.OrganizationUnit.MaxUserMembershipCount'].value" |
|||
:placeholder="setting['Abp.Identity.OrganizationUnit.MaxUserMembershipCount'].description" |
|||
type="number" |
|||
@input="(value) => handleSettingValueChanged('Abp.Identity.OrganizationUnit.MaxUserMembershipCount', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.SmsRegisterTemplateCode')" |
|||
> |
|||
<el-popover |
|||
ref="AccountSmsRegisterTemplateCode" |
|||
trigger="hover" |
|||
:title="setting['Abp.Account.SmsRegisterTemplateCode'].displayName" |
|||
:content="setting['Abp.Account.SmsRegisterTemplateCode'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountSmsRegisterTemplateCode |
|||
>{{ setting['Abp.Account.SmsRegisterTemplateCode'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Account.SmsRegisterTemplateCode'].value" |
|||
:placeholder="setting['Abp.Account.SmsRegisterTemplateCode'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.SmsRegisterTemplateCode', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.SmsSigninTemplateCode')" |
|||
> |
|||
<el-popover |
|||
ref="AccountSmsSigninTemplateCode" |
|||
trigger="hover" |
|||
:title="setting['Abp.Account.SmsSigninTemplateCode'].displayName" |
|||
:content="setting['Abp.Account.SmsSigninTemplateCode'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountSmsSigninTemplateCode |
|||
>{{ setting['Abp.Account.SmsSigninTemplateCode'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Account.SmsSigninTemplateCode'].value" |
|||
:placeholder="setting['Abp.Account.SmsSigninTemplateCode'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.SmsSigninTemplateCode', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.SmsResetPasswordTemplateCode')" |
|||
> |
|||
<el-popover |
|||
ref="AccountSmsResetPasswordTemplateCode" |
|||
trigger="hover" |
|||
:title="setting['Abp.Account.SmsResetPasswordTemplateCode'].displayName" |
|||
:content="setting['Abp.Account.SmsResetPasswordTemplateCode'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountSmsResetPasswordTemplateCode |
|||
>{{ setting['Abp.Account.SmsResetPasswordTemplateCode'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Account.SmsResetPasswordTemplateCode'].value" |
|||
:placeholder="setting['Abp.Account.SmsResetPasswordTemplateCode'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.SmsResetPasswordTemplateCode', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.PhoneVerifyCodeExpiration')" |
|||
> |
|||
<el-popover |
|||
ref="AccountPhoneVerifyCodeExpiration" |
|||
trigger="hover" |
|||
:title="setting['Abp.Account.PhoneVerifyCodeExpiration'].displayName" |
|||
:content="setting['Abp.Account.PhoneVerifyCodeExpiration'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountPhoneVerifyCodeExpiration |
|||
>{{ setting['Abp.Account.PhoneVerifyCodeExpiration'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Account.PhoneVerifyCodeExpiration'].value" |
|||
:placeholder="setting['Abp.Account.PhoneVerifyCodeExpiration'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.PhoneVerifyCodeExpiration', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.IsSelfRegistrationEnabled')" |
|||
> |
|||
<el-popover |
|||
ref="AccountIsSelfRegistrationEnabled" |
|||
trigger="hover" |
|||
:title="setting['Abp.Account.IsSelfRegistrationEnabled'].displayName" |
|||
:content="setting['Abp.Account.IsSelfRegistrationEnabled'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountIsSelfRegistrationEnabled |
|||
>{{ setting['Abp.Account.IsSelfRegistrationEnabled'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Account.IsSelfRegistrationEnabled'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.IsSelfRegistrationEnabled', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item |
|||
v-if="hasSettingExistsed('Abp.Account.EnableLocalLogin')" |
|||
> |
|||
<el-popover |
|||
ref="AccountEnableLocalLogin" |
|||
trigger="hover" |
|||
:title="setting['Abp.Account.EnableLocalLogin'].displayName" |
|||
:content="setting['Abp.Account.EnableLocalLogin'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:AccountEnableLocalLogin |
|||
>{{ setting['Abp.Account.EnableLocalLogin'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Account.EnableLocalLogin'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Account.EnableLocalLogin', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-tab-pane> |
|||
<el-tab-pane |
|||
v-if="hasSettingExistsed('Abp.Mailing.Smtp.Host')" |
|||
:label="$t('settings.mailing')" |
|||
> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpHost" |
|||
trigger="hover" |
|||
:title="setting['Abp.Mailing.Smtp.Host'].displayName" |
|||
:content="setting['Abp.Mailing.Smtp.Host'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpHost |
|||
>{{ setting['Abp.Mailing.Smtp.Host'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Mailing.Smtp.Host'].value" |
|||
:placeholder="setting['Abp.Mailing.Smtp.Host'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Host', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpPort" |
|||
trigger="hover" |
|||
:title="setting['Abp.Mailing.Smtp.Port'].displayName" |
|||
:content="setting['Abp.Mailing.Smtp.Port'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpPort |
|||
>{{ setting['Abp.Mailing.Smtp.Port'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Mailing.Smtp.Port'].value" |
|||
:placeholder="setting['Abp.Mailing.Smtp.Port'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Port', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpUserName" |
|||
trigger="hover" |
|||
:title="setting['Abp.Mailing.Smtp.UserName'].displayName" |
|||
:content="setting['Abp.Mailing.Smtp.UserName'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpUserName |
|||
>{{ setting['Abp.Mailing.Smtp.UserName'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Mailing.Smtp.UserName'].value" |
|||
:placeholder="setting['Abp.Mailing.Smtp.UserName'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.UserName', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpPassword" |
|||
trigger="hover" |
|||
:title="setting['Abp.Mailing.Smtp.Password'].displayName" |
|||
:content="setting['Abp.Mailing.Smtp.Password'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpPassword |
|||
>{{ setting['Abp.Mailing.Smtp.Password'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Mailing.Smtp.Password'].value" |
|||
:placeholder="setting['Abp.Mailing.Smtp.Password'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Password', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpDomain" |
|||
trigger="hover" |
|||
:title="setting['Abp.Mailing.Smtp.Domain'].displayName" |
|||
:content="setting['Abp.Mailing.Smtp.Domain'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpDomain |
|||
>{{ setting['Abp.Mailing.Smtp.Domain'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Mailing.Smtp.Domain'].value" |
|||
:placeholder="setting['Abp.Mailing.Smtp.Domain'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.Domain', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpEnableSsl" |
|||
trigger="hover" |
|||
:title="setting['Abp.Mailing.Smtp.EnableSsl'].displayName" |
|||
:content="setting['Abp.Mailing.Smtp.EnableSsl'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpEnableSsl |
|||
>{{ setting['Abp.Mailing.Smtp.EnableSsl'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Mailing.Smtp.EnableSsl'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.EnableSsl', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="SmtpUseDefaultCredentials" |
|||
trigger="hover" |
|||
:title="setting['Abp.Mailing.Smtp.UseDefaultCredentials'].displayName" |
|||
:content="setting['Abp.Mailing.Smtp.UseDefaultCredentials'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:SmtpUseDefaultCredentials |
|||
>{{ setting['Abp.Mailing.Smtp.UseDefaultCredentials'].displayName }}</span> |
|||
<el-switch |
|||
v-model="setting['Abp.Mailing.Smtp.UseDefaultCredentials'].value" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.Smtp.UseDefaultCredentials', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="MailingDefaultFromAddress" |
|||
trigger="hover" |
|||
:title="setting['Abp.Mailing.DefaultFromAddress'].displayName" |
|||
:content="setting['Abp.Mailing.DefaultFromAddress'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:MailingDefaultFromAddress |
|||
>{{ setting['Abp.Mailing.DefaultFromAddress'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Mailing.DefaultFromAddress'].value" |
|||
:placeholder="setting['Abp.Mailing.DefaultFromAddress'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.DefaultFromAddress', value)" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-popover |
|||
ref="MailingDefaultFromDisplayName" |
|||
trigger="hover" |
|||
:title="setting['Abp.Mailing.DefaultFromDisplayName'].displayName" |
|||
:content="setting['Abp.Mailing.DefaultFromDisplayName'].description" |
|||
/> |
|||
<span |
|||
slot="label" |
|||
v-popover:MailingDefaultFromDisplayName |
|||
>{{ setting['Abp.Mailing.DefaultFromDisplayName'].displayName }}</span> |
|||
<el-input |
|||
v-model="setting['Abp.Mailing.DefaultFromDisplayName'].value" |
|||
:placeholder="setting['Abp.Mailing.DefaultFromDisplayName'].description" |
|||
@input="(value) => handleSettingValueChanged('Abp.Mailing.DefaultFromDisplayName', value)" |
|||
/> |
|||
</el-form-item> |
|||
</el-tab-pane> |
|||
</el-tabs> |
|||
|
|||
<el-form-item |
|||
v-if="setting" |
|||
> |
|||
<el-button |
|||
type="primary" |
|||
style="width:200px;margin:inherit;" |
|||
@click="onSavesetting" |
|||
> |
|||
{{ $t('global.confirm') }} |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts"> |
|||
import { Component, Prop, Vue } from 'vue-property-decorator' |
|||
import { AbpConfigurationModule } from '@/store/modules/abp' |
|||
import SettingService, { Setting, SettingUpdate, SettingsUpdate } from '@/api/settings' |
|||
|
|||
const booleanStrings = ['True', 'true', 'False', 'false'] |
|||
|
|||
@Component({ |
|||
name: 'TenantSettingEditForm' |
|||
}) |
|||
export default class extends Vue { |
|||
@Prop({ default: '' }) |
|||
private providerName!: string |
|||
|
|||
@Prop({ default: '' }) |
|||
private providerKey!: string |
|||
|
|||
private setting: {[key: string]: Setting} = {} |
|||
private settingChangeKeys = new Array<string>() |
|||
|
|||
get definedLanguages() { |
|||
const languages = AbpConfigurationModule.configuration.localization.languages.map((lang: any) => { |
|||
return lang.cultureName |
|||
}) |
|||
return languages |
|||
} |
|||
|
|||
mounted() { |
|||
this.handleGetSettings() |
|||
} |
|||
|
|||
private handleGetSettings() { |
|||
SettingService.getSettings(this.providerName, this.providerKey).then(settings => { |
|||
settings.items.forEach(setting => { |
|||
if (setting.value) { |
|||
const value = setting.value.toLowerCase() |
|||
if (booleanStrings.includes(value)) { |
|||
setting.value = (value === 'true') |
|||
} |
|||
} else { |
|||
if (setting.defaultValue) { |
|||
const defaultValue = setting.defaultValue.toLowerCase() |
|||
if (booleanStrings.includes(defaultValue)) { |
|||
setting.value = (defaultValue === 'true') |
|||
} |
|||
} |
|||
} |
|||
this.setting[setting.name] = setting |
|||
}) |
|||
this.$forceUpdate() |
|||
}) |
|||
} |
|||
|
|||
private hasSettingExistsed(key: string) { |
|||
if (this.setting[key]) { |
|||
return true |
|||
} |
|||
return false |
|||
} |
|||
|
|||
private handleSettingValueChanged(key: string, value: any) { |
|||
if (!this.settingChangeKeys.includes(key)) { |
|||
this.settingChangeKeys.push(key) |
|||
} |
|||
this.$set(this.setting[key], 'value', value) |
|||
this.$forceUpdate() |
|||
} |
|||
|
|||
private onSavesetting() { |
|||
const updateSettings = new SettingsUpdate() |
|||
this.settingChangeKeys.forEach(key => { |
|||
const updateSetting = new SettingUpdate() |
|||
updateSetting.name = key |
|||
updateSetting.value = this.setting[key].value |
|||
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()) |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
@ -0,0 +1,22 @@ |
|||
<template> |
|||
<SettingEditForm |
|||
provider-name="T" |
|||
:provider-key="tenantId" |
|||
/> |
|||
</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 tenantId?: string |
|||
} |
|||
</script> |
|||
@ -0,0 +1,22 @@ |
|||
<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> |
|||
Loading…
Reference in new issue