@solar-angular/core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/config.d.ts +7 -0
- package/esm2022/config.mjs +3 -0
- package/esm2022/index.mjs +5 -0
- package/esm2022/pipes/cnumber.pipe.mjs +31 -0
- package/esm2022/pipes/find-by-id.pipe.mjs +17 -0
- package/esm2022/pipes/index.mjs +3 -0
- package/esm2022/provider.mjs +10 -0
- package/esm2022/solar-angular-core.mjs +5 -0
- package/esm2022/utils/index.mjs +2 -0
- package/esm2022/utils/tree.utils.mjs +73 -0
- package/fesm2022/solar-angular-core.mjs +137 -0
- package/fesm2022/solar-angular-core.mjs.map +1 -0
- package/index.d.ts +4 -0
- package/package.json +28 -0
- package/pipes/cnumber.pipe.d.ts +7 -0
- package/pipes/find-by-id.pipe.d.ts +9 -0
- package/pipes/index.d.ts +2 -0
- package/provider.d.ts +5 -0
- package/utils/index.d.ts +1 -0
- package/utils/tree.utils.d.ts +19 -0
package/README.md
ADDED
package/config.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const SOLAR_CONFIG = new InjectionToken('');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRL0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFjLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBTb2xhckNvbmZpZyB7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIGVhcnRoVXJsOiBzdHJpbmc7XG4gIG1lcmN1cnlVcmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFNPTEFSX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTb2xhckNvbmZpZz4oJycpO1xuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './config';
|
|
2
|
+
export * from './pipes';
|
|
3
|
+
export * from './provider';
|
|
4
|
+
export * from './utils';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CnumberPipe {
|
|
4
|
+
transform(v) {
|
|
5
|
+
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(v)) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
let unit = '千百拾亿千百拾万千百拾元角分';
|
|
9
|
+
let str = '';
|
|
10
|
+
v += '00';
|
|
11
|
+
const p = v.indexOf('.');
|
|
12
|
+
if (p >= 0) {
|
|
13
|
+
v = v.substring(0, p) + v.substr(p + 1, 2);
|
|
14
|
+
}
|
|
15
|
+
unit = unit.substr(unit.length - v.length);
|
|
16
|
+
for (let i = 0; i < v.length; i++) {
|
|
17
|
+
str += '零壹贰叁肆伍陆柒捌玖'.charAt(+v.charAt(i)) + unit.charAt(i);
|
|
18
|
+
}
|
|
19
|
+
return str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整');
|
|
20
|
+
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
22
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, isStandalone: true, name: "cnumber" }); }
|
|
23
|
+
}
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, decorators: [{
|
|
25
|
+
type: Pipe,
|
|
26
|
+
args: [{
|
|
27
|
+
name: 'cnumber',
|
|
28
|
+
standalone: true
|
|
29
|
+
}]
|
|
30
|
+
}] });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY251bWJlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGlwZXMvY251bWJlci5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU1wRCxNQUFNLE9BQU8sV0FBVztJQUV0QixTQUFTLENBQUMsQ0FBUztRQUNqQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFDNUIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNWLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDWCxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JLLENBQUM7K0dBbEJVLFdBQVc7NkdBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFKdkIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsU0FBUztvQkFDZixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2NudW1iZXInLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIENudW1iZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKHY6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCEvXigwfFsxLTldXFxkKikoXFwuXFxkKyk/JC8udGVzdCh2KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGxldCB1bml0ID0gJ+WNg+eZvuaLvuS6v+WNg+eZvuaLvuS4h+WNg+eZvuaLvuWFg+inkuWIhic7XG4gICAgbGV0IHN0ciA9ICcnO1xuICAgIHYgKz0gJzAwJztcbiAgICBjb25zdCBwID0gdi5pbmRleE9mKCcuJyk7XG4gICAgaWYgKHAgPj0gMCkge1xuICAgICAgdiA9IHYuc3Vic3RyaW5nKDAsIHApICsgdi5zdWJzdHIocCArIDEsIDIpO1xuICAgIH1cbiAgICB1bml0ID0gdW5pdC5zdWJzdHIodW5pdC5sZW5ndGggLSB2Lmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHIgKz0gJ+mbtuWjuei0sOWPgeiChuS8jemZhuafkuaNjOeOlicuY2hhckF0KCt2LmNoYXJBdChpKSkgKyB1bml0LmNoYXJBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC/pm7Yo5Y2DfOeZvnzmi7586KeSKS9nLCAn6Zu2JykucmVwbGFjZSgvKOmbtikrL2csICfpm7YnKS5yZXBsYWNlKC/pm7Yo5LiHfOS6v3zlhYMpL2csICckMScpLnJlcGxhY2UoLyjkur8p5LiHfOWjuSjmi74pL2csICckMSQyJykucmVwbGFjZSgvXuWFg+mbtj986Zu25YiGL2csICcnKS5yZXBsYWNlKC/lhYMkL2csICflhYPmlbQnKTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class FindByIdPipe {
|
|
4
|
+
transform(id, array) {
|
|
5
|
+
return array.find(item => item.id === id) ?? null;
|
|
6
|
+
}
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
8
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, isStandalone: true, name: "findById" }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, decorators: [{
|
|
11
|
+
type: Pipe,
|
|
12
|
+
args: [{
|
|
13
|
+
name: 'findById',
|
|
14
|
+
standalone: true
|
|
15
|
+
}]
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1ieS1pZC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGlwZXMvZmluZC1ieS1pZC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU1wRCxNQUFNLE9BQU8sWUFBWTtJQUV2QixTQUFTLENBQUMsRUFBVyxFQUFFLEtBQVU7UUFDL0IsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDcEQsQ0FBQzsrR0FKVSxZQUFZOzZHQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICBuYW1lOiAnZmluZEJ5SWQnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEZpbmRCeUlkUGlwZTxUIGV4dGVuZHMgeyBpZDogYW55IH0+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKGlkOiBUWydpZCddLCBhcnJheTogVFtdKTogdW5rbm93biB7XG4gICAgcmV0dXJuIGFycmF5LmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBpZCkgPz8gbnVsbDtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './cnumber.pipe';
|
|
2
|
+
export * from './find-by-id.pipe';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9waXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NudW1iZXIucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbmQtYnktaWQucGlwZSc7XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { SOLAR_CONFIG } from './config';
|
|
2
|
+
export function provideSolar(config) {
|
|
3
|
+
return [
|
|
4
|
+
{
|
|
5
|
+
provide: SOLAR_CONFIG,
|
|
6
|
+
useValue: config
|
|
7
|
+
}
|
|
8
|
+
];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFlLE1BQU0sVUFBVSxDQUFDO0FBRXJELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBbUI7SUFDOUMsT0FBTztRQUNMO1lBQ0UsT0FBTyxFQUFFLFlBQVk7WUFDckIsUUFBUSxFQUFFLE1BQU07U0FDakI7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNPTEFSX0NPTkZJRywgU29sYXJDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlU29sYXIoY29uZmlnOiBTb2xhckNvbmZpZykge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNPTEFSX0NPTkZJRyxcbiAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICB9XG4gIF07XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sYXItYW5ndWxhci1jb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvc29sYXItYW5ndWxhci1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './tree.utils';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHJlZS51dGlscyc7XG4iXX0=
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export function list2tree(list, pid) {
|
|
2
|
+
const map = new Map();
|
|
3
|
+
const tree = [];
|
|
4
|
+
list = list.map(o => Object.assign({}, o));
|
|
5
|
+
// 建立索引
|
|
6
|
+
for (const node of list) {
|
|
7
|
+
map.set(node.id, node);
|
|
8
|
+
}
|
|
9
|
+
for (const node of list) {
|
|
10
|
+
const parent = map.get(node[pid]);
|
|
11
|
+
if (parent) {
|
|
12
|
+
node.parent = parent;
|
|
13
|
+
parent.children ??= [];
|
|
14
|
+
parent.children.push(node);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
tree.push(node);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
for (const node of list) {
|
|
21
|
+
node.isLeaf = !node.children?.length;
|
|
22
|
+
}
|
|
23
|
+
return tree;
|
|
24
|
+
}
|
|
25
|
+
export function tree2list(tree) {
|
|
26
|
+
const list = [], stack = tree.slice(0);
|
|
27
|
+
while (stack.length) {
|
|
28
|
+
const node = stack.pop();
|
|
29
|
+
const children = node.children;
|
|
30
|
+
if (children?.length) {
|
|
31
|
+
stack.push(...children);
|
|
32
|
+
}
|
|
33
|
+
list.push(node);
|
|
34
|
+
}
|
|
35
|
+
return list;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 将一个二维数组转为一棵树,二维数组里的每一个子数组对应着树的每一层级
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* levels2tree([channels, categories], 'channel')
|
|
42
|
+
* ```
|
|
43
|
+
* @param levels
|
|
44
|
+
* @param pid
|
|
45
|
+
*/
|
|
46
|
+
export function levels2tree(levels, pid) {
|
|
47
|
+
const maps = levels.map(() => new Map());
|
|
48
|
+
levels = levels.map(list => list.map(o => Object.assign({}, o)));
|
|
49
|
+
// 建立索引
|
|
50
|
+
for (let index = 0; index < levels.length; index++) {
|
|
51
|
+
for (const node of levels[index]) {
|
|
52
|
+
maps[index].set(node.id, node);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// 倒序遍历,向前寻找 parent
|
|
56
|
+
for (let index = levels.length - 1; index > 0; index--) {
|
|
57
|
+
for (const node of levels[index]) {
|
|
58
|
+
const parent = maps[index - 1].get(node[pid]);
|
|
59
|
+
if (parent) {
|
|
60
|
+
node.parent = parent;
|
|
61
|
+
parent.children ??= [];
|
|
62
|
+
parent.children.push(node);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// 最后一层,一定是叶子节点
|
|
67
|
+
// TODO:如果枝条之间的层级数不一致,这里就不能这样写,应该遍历每一级的 list,通过判断有无 children 来设置 isLeaf
|
|
68
|
+
for (const node of levels.at(-1)) {
|
|
69
|
+
node.isLeaf = !node.children?.length;
|
|
70
|
+
}
|
|
71
|
+
return levels[0];
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3RyZWUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFnQixFQUFFLEdBQVc7SUFDckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFDaEQsTUFBTSxJQUFJLEdBQWUsRUFBRSxDQUFDO0lBRTVCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzQyxPQUFPO0lBQ1AsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsTUFBTSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQXFCLElBQVM7SUFDckQsTUFBTSxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZDLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUcsQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRS9CLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFlLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQW9CLEVBQUUsR0FBVztJQUMzRCxNQUFNLElBQUksR0FBb0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFMUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpFLE9BQU87SUFDUCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ25ELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLEtBQUssSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDckIsTUFBTSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7SUFDZix1RUFBdUU7SUFDdkUsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFRyZWVOb2RlIHtcbiAgaWQ6IG51bWJlciB8IHN0cmluZztcbiAgcGFyZW50PzogVHJlZU5vZGU7XG4gIGNoaWxkcmVuPzogVHJlZU5vZGVbXTtcbiAgaXNMZWFmPzogYm9vbGVhbjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdDJ0cmVlKGxpc3Q6IFRyZWVOb2RlW10sIHBpZDogc3RyaW5nKSB7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8VHJlZU5vZGVbJ2lkJ10sIFRyZWVOb2RlPigpO1xuICBjb25zdCB0cmVlOiBUcmVlTm9kZVtdID0gW107XG5cbiAgbGlzdCA9IGxpc3QubWFwKG8gPT4gT2JqZWN0LmFzc2lnbih7fSwgbykpO1xuXG4gIC8vIOW7uueri+e0ouW8lVxuICBmb3IgKGNvbnN0IG5vZGUgb2YgbGlzdCkge1xuICAgIG1hcC5zZXQobm9kZS5pZCwgbm9kZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgbGlzdCkge1xuICAgIGNvbnN0IHBhcmVudCA9IG1hcC5nZXQobm9kZVtwaWRdKTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBub2RlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIHBhcmVudC5jaGlsZHJlbiA/Pz0gW107XG4gICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJlZS5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBsaXN0KSB7XG4gICAgbm9kZS5pc0xlYWYgPSAhbm9kZS5jaGlsZHJlbj8ubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIHRyZWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmVlMmxpc3Q8VCBleHRlbmRzIFRyZWVOb2RlPih0cmVlOiBUW10pOiBUW10ge1xuICBjb25zdCBsaXN0ID0gW10sIHN0YWNrID0gdHJlZS5zbGljZSgwKTtcblxuICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcbiAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG5cbiAgICBpZiAoY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgc3RhY2sucHVzaCguLi5jaGlsZHJlbiBhcyBUW10pO1xuICAgIH1cblxuICAgIGxpc3QucHVzaChub2RlKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuXG4vKipcbiAqIOWwhuS4gOS4quS6jOe7tOaVsOe7hOi9rOS4uuS4gOajteagke+8jOS6jOe7tOaVsOe7hOmHjOeahOavj+S4gOS4quWtkOaVsOe7hOWvueW6lOedgOagkeeahOavj+S4gOWxgue6p1xuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBsZXZlbHMydHJlZShbY2hhbm5lbHMsIGNhdGVnb3JpZXNdLCAnY2hhbm5lbCcpXG4gKiBgYGBcbiAqIEBwYXJhbSBsZXZlbHNcbiAqIEBwYXJhbSBwaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxldmVsczJ0cmVlKGxldmVsczogVHJlZU5vZGVbXVtdLCBwaWQ6IHN0cmluZykge1xuICBjb25zdCBtYXBzOiBNYXA8VHJlZU5vZGVbJ2lkJ10sIFRyZWVOb2RlPltdID0gbGV2ZWxzLm1hcCgoKSA9PiBuZXcgTWFwKCkpO1xuXG4gIGxldmVscyA9IGxldmVscy5tYXAobGlzdCA9PiBsaXN0Lm1hcChvID0+IE9iamVjdC5hc3NpZ24oe30sIG8pKSk7XG5cbiAgLy8g5bu656uL57Si5byVXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZXZlbHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIGxldmVsc1tpbmRleF0pIHtcbiAgICAgIG1hcHNbaW5kZXhdLnNldChub2RlLmlkLCBub2RlKTtcbiAgICB9XG4gIH1cblxuICAvLyDlgJLluo/pgY3ljobvvIzlkJHliY3lr7vmib4gcGFyZW50XG4gIGZvciAobGV0IGluZGV4ID0gbGV2ZWxzLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBsZXZlbHNbaW5kZXhdKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBtYXBzW2luZGV4IC0gMV0uZ2V0KG5vZGVbcGlkXSk7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50O1xuICAgICAgICBwYXJlbnQuY2hpbGRyZW4gPz89IFtdO1xuICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyDmnIDlkI7kuIDlsYLvvIzkuIDlrprmmK/lj7blrZDoioLngrlcbiAgLy8gVE9ET++8muWmguaenOaeneadoeS5i+mXtOeahOWxgue6p+aVsOS4jeS4gOiHtO+8jOi/memHjOWwseS4jeiDvei/meagt+WGme+8jOW6lOivpemBjeWOhuavj+S4gOe6p+eahCBsaXN077yM6YCa6L+H5Yik5pat5pyJ5pegIGNoaWxkcmVuIOadpeiuvue9riBpc0xlYWZcbiAgZm9yIChjb25zdCBub2RlIG9mIGxldmVscy5hdCgtMSkhKSB7XG4gICAgbm9kZS5pc0xlYWYgPSAhbm9kZS5jaGlsZHJlbj8ubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIGxldmVsc1swXTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Pipe } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
const SOLAR_CONFIG = new InjectionToken('');
|
|
5
|
+
|
|
6
|
+
class CnumberPipe {
|
|
7
|
+
transform(v) {
|
|
8
|
+
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(v)) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
let unit = '千百拾亿千百拾万千百拾元角分';
|
|
12
|
+
let str = '';
|
|
13
|
+
v += '00';
|
|
14
|
+
const p = v.indexOf('.');
|
|
15
|
+
if (p >= 0) {
|
|
16
|
+
v = v.substring(0, p) + v.substr(p + 1, 2);
|
|
17
|
+
}
|
|
18
|
+
unit = unit.substr(unit.length - v.length);
|
|
19
|
+
for (let i = 0; i < v.length; i++) {
|
|
20
|
+
str += '零壹贰叁肆伍陆柒捌玖'.charAt(+v.charAt(i)) + unit.charAt(i);
|
|
21
|
+
}
|
|
22
|
+
return str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整');
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
25
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, isStandalone: true, name: "cnumber" }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, decorators: [{
|
|
28
|
+
type: Pipe,
|
|
29
|
+
args: [{
|
|
30
|
+
name: 'cnumber',
|
|
31
|
+
standalone: true
|
|
32
|
+
}]
|
|
33
|
+
}] });
|
|
34
|
+
|
|
35
|
+
class FindByIdPipe {
|
|
36
|
+
transform(id, array) {
|
|
37
|
+
return array.find(item => item.id === id) ?? null;
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
40
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, isStandalone: true, name: "findById" }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, decorators: [{
|
|
43
|
+
type: Pipe,
|
|
44
|
+
args: [{
|
|
45
|
+
name: 'findById',
|
|
46
|
+
standalone: true
|
|
47
|
+
}]
|
|
48
|
+
}] });
|
|
49
|
+
|
|
50
|
+
function provideSolar(config) {
|
|
51
|
+
return [
|
|
52
|
+
{
|
|
53
|
+
provide: SOLAR_CONFIG,
|
|
54
|
+
useValue: config
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function list2tree(list, pid) {
|
|
60
|
+
const map = new Map();
|
|
61
|
+
const tree = [];
|
|
62
|
+
list = list.map(o => Object.assign({}, o));
|
|
63
|
+
// 建立索引
|
|
64
|
+
for (const node of list) {
|
|
65
|
+
map.set(node.id, node);
|
|
66
|
+
}
|
|
67
|
+
for (const node of list) {
|
|
68
|
+
const parent = map.get(node[pid]);
|
|
69
|
+
if (parent) {
|
|
70
|
+
node.parent = parent;
|
|
71
|
+
parent.children ??= [];
|
|
72
|
+
parent.children.push(node);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
tree.push(node);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
for (const node of list) {
|
|
79
|
+
node.isLeaf = !node.children?.length;
|
|
80
|
+
}
|
|
81
|
+
return tree;
|
|
82
|
+
}
|
|
83
|
+
function tree2list(tree) {
|
|
84
|
+
const list = [], stack = tree.slice(0);
|
|
85
|
+
while (stack.length) {
|
|
86
|
+
const node = stack.pop();
|
|
87
|
+
const children = node.children;
|
|
88
|
+
if (children?.length) {
|
|
89
|
+
stack.push(...children);
|
|
90
|
+
}
|
|
91
|
+
list.push(node);
|
|
92
|
+
}
|
|
93
|
+
return list;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 将一个二维数组转为一棵树,二维数组里的每一个子数组对应着树的每一层级
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* levels2tree([channels, categories], 'channel')
|
|
100
|
+
* ```
|
|
101
|
+
* @param levels
|
|
102
|
+
* @param pid
|
|
103
|
+
*/
|
|
104
|
+
function levels2tree(levels, pid) {
|
|
105
|
+
const maps = levels.map(() => new Map());
|
|
106
|
+
levels = levels.map(list => list.map(o => Object.assign({}, o)));
|
|
107
|
+
// 建立索引
|
|
108
|
+
for (let index = 0; index < levels.length; index++) {
|
|
109
|
+
for (const node of levels[index]) {
|
|
110
|
+
maps[index].set(node.id, node);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// 倒序遍历,向前寻找 parent
|
|
114
|
+
for (let index = levels.length - 1; index > 0; index--) {
|
|
115
|
+
for (const node of levels[index]) {
|
|
116
|
+
const parent = maps[index - 1].get(node[pid]);
|
|
117
|
+
if (parent) {
|
|
118
|
+
node.parent = parent;
|
|
119
|
+
parent.children ??= [];
|
|
120
|
+
parent.children.push(node);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// 最后一层,一定是叶子节点
|
|
125
|
+
// TODO:如果枝条之间的层级数不一致,这里就不能这样写,应该遍历每一级的 list,通过判断有无 children 来设置 isLeaf
|
|
126
|
+
for (const node of levels.at(-1)) {
|
|
127
|
+
node.isLeaf = !node.children?.length;
|
|
128
|
+
}
|
|
129
|
+
return levels[0];
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Generated bundle index. Do not edit.
|
|
134
|
+
*/
|
|
135
|
+
|
|
136
|
+
export { CnumberPipe, FindByIdPipe, SOLAR_CONFIG, levels2tree, list2tree, provideSolar, tree2list };
|
|
137
|
+
//# sourceMappingURL=solar-angular-core.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solar-angular-core.mjs","sources":["../../../packages/core/src/config.ts","../../../packages/core/src/pipes/cnumber.pipe.ts","../../../packages/core/src/pipes/find-by-id.pipe.ts","../../../packages/core/src/provider.ts","../../../packages/core/src/utils/tree.utils.ts","../../../packages/core/src/solar-angular-core.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface SolarConfig {\n clientId: string;\n earthUrl: string;\n mercuryUrl: string;\n}\n\nexport const SOLAR_CONFIG = new InjectionToken<SolarConfig>('');\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'cnumber',\n standalone: true\n})\nexport class CnumberPipe implements PipeTransform {\n\n transform(v: string): any {\n if (!/^(0|[1-9]\\d*)(\\.\\d+)?$/.test(v)) {\n return null;\n }\n let unit = '千百拾亿千百拾万千百拾元角分';\n let str = '';\n v += '00';\n const p = v.indexOf('.');\n if (p >= 0) {\n v = v.substring(0, p) + v.substr(p + 1, 2);\n }\n unit = unit.substr(unit.length - v.length);\n for (let i = 0; i < v.length; i++) {\n str += '零壹贰叁肆伍陆柒捌玖'.charAt(+v.charAt(i)) + unit.charAt(i);\n }\n return str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整');\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'findById',\n standalone: true\n})\nexport class FindByIdPipe<T extends { id: any }> implements PipeTransform {\n\n transform(id: T['id'], array: T[]): unknown {\n return array.find(item => item.id === id) ?? null;\n }\n\n}\n","import { SOLAR_CONFIG, SolarConfig } from './config';\n\nexport function provideSolar(config: SolarConfig) {\n return [\n {\n provide: SOLAR_CONFIG,\n useValue: config\n }\n ];\n}\n","export interface TreeNode {\n id: number | string;\n parent?: TreeNode;\n children?: TreeNode[];\n isLeaf?: boolean;\n [key: string]: any;\n}\n\nexport function list2tree(list: TreeNode[], pid: string) {\n const map = new Map<TreeNode['id'], TreeNode>();\n const tree: TreeNode[] = [];\n\n list = list.map(o => Object.assign({}, o));\n\n // 建立索引\n for (const node of list) {\n map.set(node.id, node);\n }\n\n for (const node of list) {\n const parent = map.get(node[pid]);\n if (parent) {\n node.parent = parent;\n parent.children ??= [];\n parent.children.push(node);\n } else {\n tree.push(node);\n }\n }\n\n for (const node of list) {\n node.isLeaf = !node.children?.length;\n }\n\n return tree;\n}\n\nexport function tree2list<T extends TreeNode>(tree: T[]): T[] {\n const list = [], stack = tree.slice(0);\n\n while (stack.length) {\n const node = stack.pop()!;\n const children = node.children;\n\n if (children?.length) {\n stack.push(...children as T[]);\n }\n\n list.push(node);\n }\n\n return list;\n}\n\n/**\n * 将一个二维数组转为一棵树,二维数组里的每一个子数组对应着树的每一层级\n * @example\n * ```ts\n * levels2tree([channels, categories], 'channel')\n * ```\n * @param levels\n * @param pid\n */\nexport function levels2tree(levels: TreeNode[][], pid: string) {\n const maps: Map<TreeNode['id'], TreeNode>[] = levels.map(() => new Map());\n\n levels = levels.map(list => list.map(o => Object.assign({}, o)));\n\n // 建立索引\n for (let index = 0; index < levels.length; index++) {\n for (const node of levels[index]) {\n maps[index].set(node.id, node);\n }\n }\n\n // 倒序遍历,向前寻找 parent\n for (let index = levels.length - 1; index > 0; index--) {\n for (const node of levels[index]) {\n const parent = maps[index - 1].get(node[pid]);\n if (parent) {\n node.parent = parent;\n parent.children ??= [];\n parent.children.push(node);\n }\n }\n }\n\n // 最后一层,一定是叶子节点\n // TODO:如果枝条之间的层级数不一致,这里就不能这样写,应该遍历每一级的 list,通过判断有无 children 来设置 isLeaf\n for (const node of levels.at(-1)!) {\n node.isLeaf = !node.children?.length;\n }\n\n return levels[0];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@solar-angular/core",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"sideEffects": false,
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"peerDependencies": {
|
|
9
|
+
"@angular/common": "^18.0.0",
|
|
10
|
+
"@angular/core": "^18.0.0"
|
|
11
|
+
},
|
|
12
|
+
"module": "fesm2022/solar-angular-core.mjs",
|
|
13
|
+
"typings": "index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": {
|
|
16
|
+
"default": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./index.d.ts",
|
|
20
|
+
"esm2022": "./esm2022/solar-angular-core.mjs",
|
|
21
|
+
"esm": "./esm2022/solar-angular-core.mjs",
|
|
22
|
+
"default": "./fesm2022/solar-angular-core.mjs"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"tslib": "^2.3.0"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PipeTransform } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class CnumberPipe implements PipeTransform {
|
|
4
|
+
transform(v: string): any;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CnumberPipe, never>;
|
|
6
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<CnumberPipe, "cnumber", true>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PipeTransform } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class FindByIdPipe<T extends {
|
|
4
|
+
id: any;
|
|
5
|
+
}> implements PipeTransform {
|
|
6
|
+
transform(id: T['id'], array: T[]): unknown;
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FindByIdPipe<any>, never>;
|
|
8
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<FindByIdPipe<any>, "findById", true>;
|
|
9
|
+
}
|
package/pipes/index.d.ts
ADDED
package/provider.d.ts
ADDED
package/utils/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './tree.utils';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface TreeNode {
|
|
2
|
+
id: number | string;
|
|
3
|
+
parent?: TreeNode;
|
|
4
|
+
children?: TreeNode[];
|
|
5
|
+
isLeaf?: boolean;
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}
|
|
8
|
+
export declare function list2tree(list: TreeNode[], pid: string): TreeNode[];
|
|
9
|
+
export declare function tree2list<T extends TreeNode>(tree: T[]): T[];
|
|
10
|
+
/**
|
|
11
|
+
* 将一个二维数组转为一棵树,二维数组里的每一个子数组对应着树的每一层级
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* levels2tree([channels, categories], 'channel')
|
|
15
|
+
* ```
|
|
16
|
+
* @param levels
|
|
17
|
+
* @param pid
|
|
18
|
+
*/
|
|
19
|
+
export declare function levels2tree(levels: TreeNode[][], pid: string): TreeNode[];
|