Browse Source

Merge branch 'dev' of https://github.com/abpframework/abp into dev

pull/3797/head
Alper Ebicoglu 7 years ago
parent
commit
4a30772f99
  1. 4
      docs/zh-Hans/CLI.md
  2. 24
      docs/zh-Hans/UI/Angular/Confirmation-Service.md
  3. 22
      docs/zh-Hans/UI/Common/Utils/Linked-List.md
  4. 9
      npm/ng-packs/packages/account-config/src/lib/services/account-config.service.ts
  5. 2
      npm/ng-packs/packages/account/src/lib/enums/index.ts
  6. 6
      npm/ng-packs/packages/account/src/lib/enums/route-names.ts
  7. 2
      npm/ng-packs/packages/account/src/public-api.ts
  8. 17
      npm/ng-packs/packages/core/src/lib/plugins/config.plugin.ts
  9. 11
      npm/ng-packs/packages/identity-config/src/lib/services/identity-config.service.ts
  10. 2
      npm/ng-packs/packages/identity/src/lib/enums/index.ts
  11. 6
      npm/ng-packs/packages/identity/src/lib/enums/route-names.ts
  12. 2
      npm/ng-packs/packages/identity/src/public-api.ts
  13. 3
      npm/ng-packs/packages/setting-management-config/src/lib/services/setting-management-config.service.ts
  14. 2
      npm/ng-packs/packages/setting-management/src/lib/enums/index.ts
  15. 3
      npm/ng-packs/packages/setting-management/src/lib/enums/route-names.ts
  16. 2
      npm/ng-packs/packages/setting-management/src/public-api.ts
  17. 41
      npm/ng-packs/packages/tenant-management-config/src/lib/services/tenant-management-config.service.ts
  18. 2
      npm/ng-packs/packages/tenant-management/src/lib/enums/index.ts
  19. 5
      npm/ng-packs/packages/tenant-management/src/lib/enums/route-names.ts
  20. 2
      npm/ng-packs/packages/tenant-management/src/public-api.ts
  21. 8
      npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html
  22. 7
      npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts
  23. 2
      npm/ng-packs/packages/theme-basic/src/lib/enums/index.ts
  24. 4
      npm/ng-packs/packages/theme-basic/src/lib/enums/navigation-element-names.ts
  25. 2
      npm/ng-packs/packages/theme-basic/src/lib/services/layout-state.service.ts
  26. 3
      npm/ng-packs/packages/theme-basic/src/public-api.ts
  27. 10
      npm/ng-packs/scripts/build.ts

4
docs/zh-Hans/CLI.md

@ -166,6 +166,10 @@ CLI的一些功能需要登录到abp.io平台. 使用你的用户名登录
abp login <username>
```
```bash
abp login <username> -p <password>
```
请注意,新的登录将终止先前的会话并创建一个新的会话.
### logout

24
docs/zh-Hans/UI/Angular/Confirmation-Service.md

@ -86,10 +86,32 @@ this.confirmation.warn(
- `messageLocalizationParams`是用于消息本地化的插值参数.
- `titleLocalizationParams` 是标题本地化的插值参数.
With the options above, the confirmation popup looks like this:
使用以上选项确认弹层窗口如下所示:
![confirmation](./images/confirmation.png)
你可以传递HTML字符串作为标题,消息或按钮文本. 例如:
```js
const options: Partial<Confirmation.Options> = {
yesText: '<i class="fa fa-trash mr-1"></i>Yes, delete it',
};
this.confirmation.warn(
`
<strong>Role Demo</strong> will be <strong>deleted</strong>
<br>
Do you confirm that?
`,
'<span class="my-custom-title">Are you sure?</span>',
options,
);
```
由于这些值现在是HTML,因此应该手动处理本地化. 参阅[LocalizationService](./Localization#using-the-localization-service)了解如何实现.
> 注意,Angular会清除所有字符串,并且并非每个HTML字符串都可以使用. 仅显示被Angular视为"安全"的值.
### 如何删除一个确认弹层
打开的确认弹出窗口可以通过 `clear` 方法手动删除:

22
docs/zh-Hans/UI/Common/Utils/Linked-List.md

@ -1229,7 +1229,7 @@ find(predicate: ListIteratorFunction<T>): ListNode<T> | undefined
从链表中找到与给定谓词匹配的第一个节点:
```js
list.addTailMany(['a', 'b', 'b', 'c']);
list.addManyTail(['a', 'b', 'b', 'c']);
// "a" <-> "b" <-> "b" <-> "c"
@ -1251,7 +1251,7 @@ findIndex(predicate: ListIteratorFunction<T>): number
从链表中找到与给定谓词匹配的第一个节点的位置:
```js
list.addTailMany(['a', 'b', 'b', 'c']);
list.addManyTail(['a', 'b', 'b', 'c']);
// "a" <-> "b" <-> "b" <-> "c"
@ -1279,7 +1279,7 @@ get(position: number): ListNode<T> | undefined
查找并返回链表中特定位置的节点:
```js
list.addTailMany(['a', 'b', 'c']);
list.addManyTail(['a', 'b', 'c']);
// "a" <-> "b" <-> "c"
@ -1303,7 +1303,7 @@ indexOf(value: T, compareFn?: ListComparisonFn<T>): number
在链表中找到匹配给定值的第一个节点位置:
```js
list.addTailMany(['a', 'b', 'b', 'c']);
list.addManyTail(['a', 'b', 'b', 'c']);
// "a" <-> "b" <-> "b" <-> "c"
@ -1325,7 +1325,7 @@ i3 === -1
你可以自定义比较器
```js
list.addTailMany([{ x: 1 }, { x: 0 }, { x: 2 }, { x: 0 }, { x: 3 }]);
list.addManyTail([{ x: 1 }, { x: 0 }, { x: 2 }, { x: 0 }, { x: 3 }]);
// {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":0} <-> {"x":3}
@ -1365,7 +1365,7 @@ forEach(iteratorFn: ListIteratorFn<T>): void
从头到尾在链表中的所有节点上运行回调函数:
```js
list.addTailMany(['a', 'b', 'c']);
list.addManyTail(['a', 'b', 'c']);
// "a" <-> "b" <-> "c"
@ -1381,7 +1381,7 @@ list.forEach((node, index) => console.log(node.value + index));
链表是可迭代的. 换句话说你可以使用诸如`for ... of`之类的方法.
```js
list.addTailMany(['a', 'b', 'c']);
list.addManyTail(['a', 'b', 'c']);
// "a" <-> "b" <-> "c"
@ -1405,7 +1405,7 @@ toArray(): T[]
转换链表值为数组:
```js
list.addTailMany(['a', 'b', 'c']);
list.addManyTail(['a', 'b', 'c']);
// "a" <-> "b" <-> "c"
@ -1427,7 +1427,7 @@ toNodeArray(): T[]
转换链表节点为数组:
```js
list.addTailMany(['a', 'b', 'c']);
list.addManyTail(['a', 'b', 'c']);
// "a" <-> "b" <-> "c"
@ -1449,7 +1449,7 @@ toString(mapperFn: ListMapperFn<T> = JSON.stringify): string
将链表转换为节点及其关系的字符串表示形式:
```js
list.addTailMany(['a', 2, 'c', { k: 4, v: 'd' }]);
list.addManyTail(['a', 2, 'c', { k: 4, v: 'd' }]);
// "a" <-> 2 <-> "c" <-> {"k":4,"v":"d"}
@ -1507,7 +1507,7 @@ export class ListNode<T = any> {
- `previous`引用列表中的上一个节点.
```js
list.addTailMany([ 0, 1, 2 ]);
list.addManyTail([ 0, 1, 2 ]);
console.log(
list.head.value, // 0

9
npm/ng-packs/packages/account-config/src/lib/services/account-config.service.ts

@ -1,5 +1,6 @@
import { addAbpRoutes, eLayoutType } from '@abp/ng.core';
import { Injectable } from '@angular/core';
import { eAccountRouteNames } from '@abp/ng.account';
@Injectable({
providedIn: 'root',
@ -7,14 +8,14 @@ import { Injectable } from '@angular/core';
export class AccountConfigService {
constructor() {
addAbpRoutes({
name: 'AbpAccount::Menu:Account',
name: eAccountRouteNames.Account,
path: 'account',
invisible: true,
layout: eLayoutType.application,
children: [
{ path: 'login', name: 'AbpAccount::Login', order: 1 },
{ path: 'register', name: 'AbpAccount::Register', order: 2 },
{ path: 'manage-profile', name: 'AbpAccount::ManageYourProfile', order: 3 },
{ path: 'login', name: eAccountRouteNames.Login, order: 1 },
{ path: 'register', name: eAccountRouteNames.Register, order: 2 },
{ path: 'manage-profile', name: eAccountRouteNames.ManageProfile, order: 3 },
],
});
}

2
npm/ng-packs/packages/account/src/lib/enums/index.ts

@ -0,0 +1,2 @@
export * from './components';
export * from './route-names';

6
npm/ng-packs/packages/account/src/lib/enums/route-names.ts

@ -0,0 +1,6 @@
export const enum eAccountRouteNames {
Account = 'AbpAccount::Menu:Account',
Login = 'AbpAccount::Login',
Register = 'AbpAccount::Register',
ManageProfile = 'AbpAccount::ManageYourProfile',
}

2
npm/ng-packs/packages/account/src/public-api.ts

@ -1,6 +1,6 @@
export * from './lib/account.module';
export * from './lib/components';
export * from './lib/enums/components';
export * from './lib/enums';
export * from './lib/tokens';
export * from './lib/models';
export * from './lib/services';

17
npm/ng-packs/packages/core/src/lib/plugins/config.plugin.ts

@ -10,7 +10,7 @@ import {
} from '@ngxs/store';
import clone from 'just-clone';
import snq from 'snq';
import { ABP } from '../models';
import { ABP } from '../models/common';
import { getAbpRoutes, organizeRoutes } from '../utils/route-utils';
export const NGXS_CONFIG_PLUGIN_OPTIONS = new InjectionToken('NGXS_CONFIG_PLUGIN_OPTIONS');
@ -30,8 +30,8 @@ export class ConfigPlugin implements NgxsPlugin {
if (isInitAction && !this.initialized) {
const transformedRoutes = transformRoutes(this.router.config);
let { routes } = transformedRoutes;
const { wrappers } = transformedRoutes;
let { routes, wrappers } = transformedRoutes;
wrappers = reduceWrappers(wrappers);
routes = organizeRoutes(routes, wrappers);
const flattedRoutes = flatRoutes(clone(routes));
@ -118,3 +118,14 @@ function flatRoutes(routes: ABP.FullRoute[]): ABP.FullRoute[] {
return flat(routes);
}
function reduceWrappers(wrappers: ABP.FullRoute[] = []) {
const existingWrappers = new Set();
return wrappers.filter(wrapper => {
if (existingWrappers.has(wrapper.name)) return false;
existingWrappers.add(wrapper.name);
return true;
});
}

11
npm/ng-packs/packages/identity-config/src/lib/services/identity-config.service.ts

@ -1,5 +1,6 @@
import { addAbpRoutes, eLayoutType } from '@abp/ng.core';
import { Injectable } from '@angular/core';
import { eIdentityRouteNames } from '@abp/ng.identity';
@Injectable({
providedIn: 'root',
@ -8,29 +9,29 @@ export class IdentityConfigService {
constructor() {
addAbpRoutes([
{
name: 'AbpUiNavigation::Menu:Administration',
name: eIdentityRouteNames.Administration,
path: '',
order: 1,
wrapper: true,
iconClass: 'fa fa-wrench',
},
{
name: 'AbpIdentity::Menu:IdentityManagement',
name: eIdentityRouteNames.IdentityManagement,
path: 'identity',
order: 1,
parentName: 'AbpUiNavigation::Menu:Administration',
parentName: eIdentityRouteNames.Administration,
layout: eLayoutType.application,
iconClass: 'fa fa-id-card-o',
children: [
{
path: 'roles',
name: 'AbpIdentity::Roles',
name: eIdentityRouteNames.Roles,
order: 1,
requiredPolicy: 'AbpIdentity.Roles',
},
{
path: 'users',
name: 'AbpIdentity::Users',
name: eIdentityRouteNames.Users,
order: 2,
requiredPolicy: 'AbpIdentity.Users',
},

2
npm/ng-packs/packages/identity/src/lib/enums/index.ts

@ -0,0 +1,2 @@
export * from './components';
export * from './route-names';

6
npm/ng-packs/packages/identity/src/lib/enums/route-names.ts

@ -0,0 +1,6 @@
export const enum eIdentityRouteNames {
Administration = 'AbpUiNavigation::Menu:Administration',
IdentityManagement = 'AbpIdentity::Menu:IdentityManagement',
Roles = 'AbpIdentity::Roles',
Users = 'AbpIdentity::Users',
}

2
npm/ng-packs/packages/identity/src/public-api.ts

@ -4,7 +4,7 @@
export * from './lib/identity.module';
export * from './lib/actions/identity.actions';
export * from './lib/enums/components';
export * from './lib/enums';
export * from './lib/components';
export * from './lib/models/identity';
export * from './lib/services';

3
npm/ng-packs/packages/setting-management-config/src/lib/services/setting-management-config.service.ts

@ -2,6 +2,7 @@ import { Injectable, Injector } from '@angular/core';
import { addAbpRoutes, eLayoutType, PatchRouteByName, ABP } from '@abp/ng.core';
import { getSettingTabs } from '@abp/ng.theme.shared';
import { Store } from '@ngxs/store';
import { eSettingManagementRouteNames } from '@abp/ng.setting-management';
@Injectable({
providedIn: 'root',
@ -13,7 +14,7 @@ export class SettingManagementConfigService {
constructor(private injector: Injector) {
const route = {
name: 'AbpSettingManagement::Settings',
name: eSettingManagementRouteNames.Settings,
path: 'setting-management',
parentName: 'AbpUiNavigation::Menu:Administration',
requiredPolicy: 'AbpAccount.SettingManagement',

2
npm/ng-packs/packages/setting-management/src/lib/enums/index.ts

@ -0,0 +1,2 @@
export * from './components';
export * from './route-names';

3
npm/ng-packs/packages/setting-management/src/lib/enums/route-names.ts

@ -0,0 +1,3 @@
export const enum eSettingManagementRouteNames {
Settings = 'AbpSettingManagement::Settings',
}

2
npm/ng-packs/packages/setting-management/src/public-api.ts

@ -1,3 +1,3 @@
export * from './lib/setting-management.module';
export * from './lib/components/setting-management.component';
export * from './lib/enums/components';
export * from './lib/enums';

41
npm/ng-packs/packages/tenant-management-config/src/lib/services/tenant-management-config.service.ts

@ -1,25 +1,34 @@
import { Injectable } from '@angular/core';
import { addAbpRoutes, eLayoutType } from '@abp/ng.core';
import { eTenantManagementRouteNames } from '@abp/ng.tenant-management';
@Injectable({
providedIn: 'root',
})
export class TenantManagementConfigService {
constructor() {
addAbpRoutes({
name: 'AbpTenantManagement::Menu:TenantManagement',
path: 'tenant-management',
parentName: 'AbpUiNavigation::Menu:Administration',
layout: eLayoutType.application,
iconClass: 'fa fa-users',
children: [
{
path: 'tenants',
name: 'AbpTenantManagement::Tenants',
order: 1,
requiredPolicy: 'AbpTenantManagement.Tenants',
},
],
});
addAbpRoutes([
{
name: eTenantManagementRouteNames.Administration,
path: '',
order: 1,
wrapper: true,
iconClass: 'fa fa-wrench',
},
{
name: eTenantManagementRouteNames.TenantManagement,
path: 'tenant-management',
parentName: eTenantManagementRouteNames.Administration,
layout: eLayoutType.application,
iconClass: 'fa fa-users',
children: [
{
path: 'tenants',
name: eTenantManagementRouteNames.Tenants,
order: 1,
requiredPolicy: 'AbpTenantManagement.Tenants',
},
],
},
]);
}
}

2
npm/ng-packs/packages/tenant-management/src/lib/enums/index.ts

@ -0,0 +1,2 @@
export * from './components';
export * from './route-names';

5
npm/ng-packs/packages/tenant-management/src/lib/enums/route-names.ts

@ -0,0 +1,5 @@
export const enum eTenantManagementRouteNames {
Administration = 'AbpUiNavigation::Menu:Administration',
TenantManagement = 'AbpTenantManagement::Menu:TenantManagement',
Tenants = 'AbpTenantManagement::Tenants',
}

2
npm/ng-packs/packages/tenant-management/src/public-api.ts

@ -1,7 +1,7 @@
export * from './lib/tenant-management.module';
export * from './lib/actions';
export * from './lib/components';
export * from './lib/enums/components';
export * from './lib/enums';
export * from './lib/models';
export * from './lib/services';
export * from './lib/states';

8
npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html

@ -5,7 +5,13 @@
>
<div class="container ">
<a class="navbar-brand" routerLink="/">
<img *ngIf="appInfo.logoUrl; else appName" [src]="appInfo.logoUrl" [alt]="appInfo.name" />
<img
*ngIf="appInfo.logoUrl; else appName"
[src]="appInfo.logoUrl"
[alt]="appInfo.name"
width="100%"
height="auto"
/>
</a>
<button
class="navbar-toggler"

7
npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts

@ -28,6 +28,7 @@ import snq from 'snq';
import { AddNavigationElement } from '../../actions';
import { Layout } from '../../models/layout';
import { LayoutState } from '../../states';
import { eNavigationElementNames } from '../../enums/navigation-element-names';
@Component({
selector: 'abp-layout-application',
@ -131,11 +132,11 @@ export class ApplicationLayoutComponent implements AfterViewInit, OnDestroy {
.selectSnapshot(LayoutState.getNavigationElements)
.map(({ name }) => name);
if (navigations.indexOf('LanguageRef') < 0) {
if (navigations.indexOf(eNavigationElementNames.Language) < 0) {
this.store.dispatch(
new AddNavigationElement([
{ element: this.languageRef, order: 4, name: 'LanguageRef' },
{ element: this.currentUserRef, order: 5, name: 'CurrentUserRef' },
{ element: this.languageRef, order: 4, name: eNavigationElementNames.Language },
{ element: this.currentUserRef, order: 5, name: eNavigationElementNames.User },
]),
);
}

2
npm/ng-packs/packages/theme-basic/src/lib/enums/index.ts

@ -0,0 +1,2 @@
export * from './components';
export * from './navigation-element-names';

4
npm/ng-packs/packages/theme-basic/src/lib/enums/navigation-element-names.ts

@ -0,0 +1,4 @@
export const enum eNavigationElementNames {
Language = 'LanguageRef',
User = 'CurrentUserRef',
}

2
npm/ng-packs/packages/theme-basic/src/lib/services/layout-state.service.ts

@ -4,7 +4,7 @@ import { LayoutState } from '../states/layout.state';
import { AddNavigationElement, RemoveNavigationElementByName } from '../actions';
import { Layout } from '../models/layout';
@Injectable()
@Injectable({ providedIn: 'root' })
export class LayoutStateService {
constructor(private store: Store) {}

3
npm/ng-packs/packages/theme-basic/src/public-api.ts

@ -5,6 +5,7 @@
export * from './lib/theme-basic.module';
export * from './lib/actions';
export * from './lib/components';
export * from './lib/enums/components';
export * from './lib/enums';
export * from './lib/models';
export * from './lib/services';
export * from './lib/states';

10
npm/ng-packs/scripts/build.ts

@ -32,8 +32,9 @@ import program from 'commander';
'copy',
'--angular',
'--no-watch',
'--packages',
'@abp/ng.feature-management,@abp/ng.permission-management,@abp/ng.account.config,@abp/ng.identity.config,@abp/ng.setting-management.config,@abp/ng.tenant-management.config',
'--all-packages',
'--excluded-packages',
'@abp/ng.core,@abp/ng.theme.shared,@abp/ng.feature-management,@abp/ng.permission-management,@abp/ng.account.config,@abp/ng.identity.config,@abp/ng.setting-management.config,@abp/ng.tenant-management.config',
],
{ stdout: 'inherit', cwd: '../' },
);
@ -45,9 +46,8 @@ import program from 'commander';
'copy',
'--angular',
'--no-watch',
'--all-packages',
'--excluded-packages',
'@abp/ng.core,@abp/ng.theme.shared,@abp/ng.feature-management,@abp/ng.permission-management,@abp/ng.account.config,@abp/ng.identity.config,@abp/ng.setting-management.config,@abp/ng.tenant-management.config',
'--packages',
'@abp/ng.feature-management,@abp/ng.permission-management,@abp/ng.account.config,@abp/ng.identity.config,@abp/ng.setting-management.config,@abp/ng.tenant-management.config',
],
{ stdout: 'inherit', cwd: '../' },
);

Loading…
Cancel
Save