@dignite-ng/expand.dynamic-form 3.0.0-rc.4 → 3.0.0-rc.6

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.
Files changed (166) hide show
  1. package/ng-package.json +7 -0
  2. package/package.json +2 -15
  3. package/src/lib/components/dynamic/dynamic.component.html +2 -0
  4. package/src/lib/components/dynamic/dynamic.component.scss +0 -0
  5. package/src/lib/components/dynamic/dynamic.component.spec.ts +21 -0
  6. package/src/lib/components/dynamic/dynamic.component.ts +121 -0
  7. package/src/lib/components/dynamic/index.ts +1 -0
  8. package/src/lib/components/form/date-edit/date-edit-config.component.html +40 -0
  9. package/src/lib/components/form/date-edit/date-edit-config.component.scss +0 -0
  10. package/src/lib/components/form/date-edit/date-edit-config.component.spec.ts +21 -0
  11. package/src/lib/components/form/date-edit/date-edit-config.component.ts +87 -0
  12. package/src/lib/components/form/date-edit/date-edit-config.ts +14 -0
  13. package/src/lib/components/form/date-edit/date-edit-control.component.html +26 -0
  14. package/src/lib/components/form/date-edit/date-edit-control.component.scss +0 -0
  15. package/src/lib/components/form/date-edit/date-edit-control.component.spec.ts +21 -0
  16. package/src/lib/components/form/date-edit/date-edit-control.component.ts +101 -0
  17. package/src/lib/components/form/date-edit/index.ts +2 -0
  18. package/src/lib/components/form/form-control-group.ts +64 -0
  19. package/src/lib/components/form/index.ts +6 -0
  20. package/src/lib/components/form/numeric-edit/index.ts +2 -0
  21. package/src/lib/components/form/numeric-edit/numberic-edit-config.component.html +31 -0
  22. package/src/lib/components/form/numeric-edit/numberic-edit-config.component.scss +0 -0
  23. package/src/lib/components/form/numeric-edit/numberic-edit-config.component.spec.ts +21 -0
  24. package/src/lib/components/form/numeric-edit/numberic-edit-config.component.ts +57 -0
  25. package/src/lib/components/form/numeric-edit/numberic-edit-config.ts +28 -0
  26. package/src/lib/components/form/numeric-edit/numberic-edit-control.component.html +13 -0
  27. package/src/lib/components/form/numeric-edit/numberic-edit-control.component.scss +0 -0
  28. package/src/lib/components/form/numeric-edit/numberic-edit-control.component.spec.ts +21 -0
  29. package/src/lib/components/form/numeric-edit/numberic-edit-control.component.ts +119 -0
  30. package/src/lib/components/form/select/index.ts +2 -0
  31. package/src/lib/components/form/select/select-config.component.html +59 -0
  32. package/src/lib/components/form/select/select-config.component.scss +0 -0
  33. package/src/lib/components/form/select/select-config.component.spec.ts +21 -0
  34. package/src/lib/components/form/select/select-config.component.ts +90 -0
  35. package/src/lib/components/form/select/select-config.ts +24 -0
  36. package/src/lib/components/form/select/select-control.component.html +32 -0
  37. package/src/lib/components/form/select/select-control.component.scss +32 -0
  38. package/src/lib/components/form/select/select-control.component.spec.ts +21 -0
  39. package/src/lib/components/form/select/select-control.component.ts +86 -0
  40. package/src/lib/components/form/switch/index.ts +2 -0
  41. package/src/lib/components/form/switch/switch-config.component.html +17 -0
  42. package/src/lib/components/form/switch/switch-config.component.scss +0 -0
  43. package/src/lib/components/form/switch/switch-config.component.spec.ts +21 -0
  44. package/src/lib/components/form/switch/switch-config.component.ts +58 -0
  45. package/src/lib/components/form/switch/switch-config.ts +17 -0
  46. package/src/lib/components/form/switch/switch-control.component.html +13 -0
  47. package/src/lib/components/form/switch/switch-control.component.scss +0 -0
  48. package/src/lib/components/form/switch/switch-control.component.spec.ts +21 -0
  49. package/src/lib/components/form/switch/switch-control.component.ts +81 -0
  50. package/src/lib/components/form/text-edit/index.ts +3 -0
  51. package/src/lib/components/form/text-edit/text-edit-config.component.html +32 -0
  52. package/src/lib/components/form/text-edit/text-edit-config.component.scss +0 -0
  53. package/src/lib/components/form/text-edit/text-edit-config.component.spec.ts +21 -0
  54. package/src/lib/components/form/text-edit/text-edit-config.component.ts +59 -0
  55. package/src/lib/components/form/text-edit/text-edit-config.ts +24 -0
  56. package/src/lib/components/form/text-edit/text-edit.component.html +17 -0
  57. package/src/lib/components/form/text-edit/text-edit.component.scss +0 -0
  58. package/src/lib/components/form/text-edit/text-edit.component.spec.ts +21 -0
  59. package/src/lib/components/form/text-edit/text-edit.component.ts +91 -0
  60. package/src/lib/components/index.ts +2 -0
  61. package/src/lib/dynamic-form.module.ts +74 -0
  62. package/src/lib/enums/date-edit-interfaces.ts +16 -0
  63. package/src/lib/enums/index.ts +2 -0
  64. package/src/lib/enums/text-edit-mode.ts +7 -0
  65. package/{lib/interfaces/form-config-interfaces.d.ts → src/lib/interfaces/form-config-interfaces.ts} +7 -2
  66. package/src/lib/interfaces/index.ts +1 -0
  67. package/src/lib/proxy/README.md +17 -0
  68. package/src/lib/proxy/dignite/file-explorer/directories/file-descriptor.service.ts +65 -0
  69. package/src/lib/proxy/dignite/file-explorer/directories/index.ts +2 -0
  70. package/src/lib/proxy/dignite/file-explorer/directories/models.ts +35 -0
  71. package/src/lib/proxy/dignite/file-explorer/files/file-descriptor.service.ts +86 -0
  72. package/src/lib/proxy/dignite/file-explorer/files/index.ts +2 -0
  73. package/src/lib/proxy/dignite/file-explorer/files/models.ts +57 -0
  74. package/src/lib/proxy/dignite/file-explorer/index.ts +3 -0
  75. package/src/lib/proxy/dignite/index.ts +2 -0
  76. package/src/lib/proxy/generate-proxy.json +11810 -0
  77. package/src/lib/proxy/index.ts +4 -0
  78. package/src/lib/proxy/microsoft/asp-net-core/index.ts +2 -0
  79. package/src/lib/proxy/microsoft/asp-net-core/mvc/index.ts +1 -0
  80. package/src/lib/proxy/microsoft/asp-net-core/mvc/models.ts +12 -0
  81. package/src/lib/proxy/microsoft/extensions/index.ts +2 -0
  82. package/src/lib/proxy/microsoft/extensions/primitives/index.ts +1 -0
  83. package/src/lib/proxy/microsoft/extensions/primitives/models.ts +9 -0
  84. package/src/lib/proxy/microsoft/index.ts +4 -0
  85. package/src/lib/proxy/microsoft/net/http/headers/index.ts +1 -0
  86. package/src/lib/proxy/microsoft/net/http/headers/models.ts +7 -0
  87. package/src/lib/proxy/microsoft/net/http/index.ts +2 -0
  88. package/src/lib/proxy/microsoft/net/index.ts +2 -0
  89. package/src/lib/proxy/volo/abp/content/index.ts +1 -0
  90. package/src/lib/proxy/volo/abp/content/models.ts +6 -0
  91. package/src/lib/proxy/volo/abp/index.ts +2 -0
  92. package/src/lib/proxy/volo/index.ts +2 -0
  93. package/src/lib/services/df-api.service.ts +75 -0
  94. package/src/lib/services/index.ts +1 -0
  95. package/{public-api.d.ts → src/public-api.ts} +4 -0
  96. package/tsconfig.lib.json +14 -0
  97. package/tsconfig.lib.prod.json +10 -0
  98. package/tsconfig.spec.json +14 -0
  99. package/esm2022/dignite-ng-expand.dynamic-form.mjs +0 -5
  100. package/esm2022/lib/components/dynamic/dynamic.component.mjs +0 -109
  101. package/esm2022/lib/components/dynamic/index.mjs +0 -2
  102. package/esm2022/lib/components/form/date-edit/date-edit-config.component.mjs +0 -90
  103. package/esm2022/lib/components/form/date-edit/date-edit-config.mjs +0 -12
  104. package/esm2022/lib/components/form/date-edit/date-edit-control.component.mjs +0 -99
  105. package/esm2022/lib/components/form/date-edit/index.mjs +0 -3
  106. package/esm2022/lib/components/form/form-control-group.mjs +0 -53
  107. package/esm2022/lib/components/form/index.mjs +0 -7
  108. package/esm2022/lib/components/form/numeric-edit/index.mjs +0 -3
  109. package/esm2022/lib/components/form/numeric-edit/numberic-edit-config.component.mjs +0 -60
  110. package/esm2022/lib/components/form/numeric-edit/numberic-edit-config.mjs +0 -24
  111. package/esm2022/lib/components/form/numeric-edit/numberic-edit-control.component.mjs +0 -106
  112. package/esm2022/lib/components/form/select/index.mjs +0 -3
  113. package/esm2022/lib/components/form/select/select-config.component.mjs +0 -93
  114. package/esm2022/lib/components/form/select/select-config.mjs +0 -19
  115. package/esm2022/lib/components/form/select/select-control.component.mjs +0 -86
  116. package/esm2022/lib/components/form/switch/index.mjs +0 -3
  117. package/esm2022/lib/components/form/switch/switch-config.component.mjs +0 -61
  118. package/esm2022/lib/components/form/switch/switch-config.mjs +0 -14
  119. package/esm2022/lib/components/form/switch/switch-control.component.mjs +0 -80
  120. package/esm2022/lib/components/form/text-edit/index.mjs +0 -4
  121. package/esm2022/lib/components/form/text-edit/text-edit-config.component.mjs +0 -63
  122. package/esm2022/lib/components/form/text-edit/text-edit-config.mjs +0 -18
  123. package/esm2022/lib/components/form/text-edit/text-edit.component.mjs +0 -89
  124. package/esm2022/lib/components/index.mjs +0 -3
  125. package/esm2022/lib/dynamic-form.module.mjs +0 -88
  126. package/esm2022/lib/enums/date-edit-interfaces.mjs +0 -16
  127. package/esm2022/lib/enums/text-edit-mode.mjs +0 -8
  128. package/esm2022/lib/interfaces/form-config-interfaces.mjs +0 -2
  129. package/esm2022/lib/interfaces/index.mjs +0 -2
  130. package/esm2022/lib/services/df-api.service.mjs +0 -82
  131. package/esm2022/lib/services/index.mjs +0 -2
  132. package/esm2022/public-api.mjs +0 -7
  133. package/fesm2022/dignite-ng-expand.dynamic-form.mjs +0 -1200
  134. package/fesm2022/dignite-ng-expand.dynamic-form.mjs.map +0 -1
  135. package/index.d.ts +0 -5
  136. package/lib/components/dynamic/dynamic.component.d.ts +0 -38
  137. package/lib/components/dynamic/index.d.ts +0 -1
  138. package/lib/components/form/date-edit/date-edit-config.component.d.ts +0 -29
  139. package/lib/components/form/date-edit/date-edit-config.d.ts +0 -9
  140. package/lib/components/form/date-edit/date-edit-control.component.d.ts +0 -33
  141. package/lib/components/form/date-edit/index.d.ts +0 -2
  142. package/lib/components/form/form-control-group.d.ts +0 -6
  143. package/lib/components/form/index.d.ts +0 -6
  144. package/lib/components/form/numeric-edit/index.d.ts +0 -2
  145. package/lib/components/form/numeric-edit/numberic-edit-config.component.d.ts +0 -23
  146. package/lib/components/form/numeric-edit/numberic-edit-config.d.ts +0 -11
  147. package/lib/components/form/numeric-edit/numberic-edit-control.component.d.ts +0 -34
  148. package/lib/components/form/select/index.d.ts +0 -2
  149. package/lib/components/form/select/select-config.component.d.ts +0 -31
  150. package/lib/components/form/select/select-config.d.ts +0 -7
  151. package/lib/components/form/select/select-control.component.d.ts +0 -29
  152. package/lib/components/form/switch/index.d.ts +0 -2
  153. package/lib/components/form/switch/switch-config.component.d.ts +0 -23
  154. package/lib/components/form/switch/switch-config.d.ts +0 -5
  155. package/lib/components/form/switch/switch-control.component.d.ts +0 -28
  156. package/lib/components/form/text-edit/index.d.ts +0 -3
  157. package/lib/components/form/text-edit/text-edit-config.component.d.ts +0 -25
  158. package/lib/components/form/text-edit/text-edit-config.d.ts +0 -7
  159. package/lib/components/form/text-edit/text-edit.component.d.ts +0 -30
  160. package/lib/components/index.d.ts +0 -2
  161. package/lib/dynamic-form.module.d.ts +0 -23
  162. package/lib/enums/date-edit-interfaces.d.ts +0 -5
  163. package/lib/enums/text-edit-mode.d.ts +0 -4
  164. package/lib/interfaces/index.d.ts +0 -1
  165. package/lib/services/df-api.service.d.ts +0 -18
  166. package/lib/services/index.d.ts +0 -1
@@ -0,0 +1,57 @@
1
+ import { ChangeDetectorRef, Component, ElementRef, inject, Input, ViewChild } from '@angular/core';
2
+ import { FormBuilder, FormGroup } from '@angular/forms';
3
+ import { NumbericEditConfig } from './numberic-edit-config';
4
+
5
+ @Component({
6
+ selector: 'df-numberic-edit-config',
7
+ templateUrl: './numberic-edit-config.component.html',
8
+ styleUrls: ['./numberic-edit-config.component.scss'],
9
+ })
10
+ export class NumbericEditConfigComponent {
11
+ constructor(private fb: FormBuilder) {}
12
+ /**表单控件类型 */
13
+ _type: any;
14
+ @Input()
15
+ public set type(v: any) {
16
+ this._type = v;
17
+ // this.dataLoaded()
18
+ }
19
+
20
+ /**选择的表单信息 */
21
+ _selected: any;
22
+ @Input()
23
+ public set selected(v: any) {
24
+ this._selected = v ? v : v == false ? v : '';
25
+ }
26
+ /**表单实体 */
27
+ _Entity: FormGroup | undefined;
28
+ @Input()
29
+ public set Entity(v: FormGroup) {
30
+ this._Entity = v;
31
+ this.dataLoaded();
32
+ }
33
+ get formConfiguration() {
34
+ return this._Entity.get('formConfiguration') as FormGroup;
35
+ }
36
+ @ViewChild('submitclick', { static: false }) submitclick?: ElementRef;
37
+ private cdr = inject(ChangeDetectorRef);
38
+ async dataLoaded() {
39
+ if (this._Entity && this._type) {
40
+ await this.AfterInit();
41
+ this.cdr.detectChanges(); // 手动触发变更检测
42
+ this.submitclick?.nativeElement?.click();
43
+ }
44
+ }
45
+
46
+ AfterInit() {
47
+ return new Promise((resolve, rejects) => {
48
+ this._Entity.setControl('formConfiguration', this.fb.group(new NumbericEditConfig()));
49
+ if (this._selected && this._selected.formControlName == this._type) {
50
+ this.formConfiguration.patchValue({
51
+ ...this._selected.formConfiguration,
52
+ });
53
+ }
54
+ resolve(true);
55
+ });
56
+ }
57
+ }
@@ -0,0 +1,28 @@
1
+ import { FormControl, Validators } from "@angular/forms";
2
+
3
+ export class NumbericEditConfig {
4
+ /**占位符 */
5
+ 'NumericEditField.Placeholder': any = ['', []];
6
+ /**最小值 */
7
+ 'NumericEditField.Min': any = ['', [Validators.required]];
8
+ //最大值
9
+ 'NumericEditField.Max': any = ['', [Validators.required]];
10
+ // 小数位数
11
+ 'NumericEditField.Decimals': any = [2, []];
12
+ //步长
13
+ 'NumericEditField.Step': any = ['', []];
14
+ //格式说明符
15
+ 'FormatSpecifier': any = ['', []];
16
+
17
+ constructor(data?: NumbericEditConfig) {
18
+ if (data) {
19
+ for (const key in data) {
20
+ if (data.hasOwnProperty(key)) {
21
+ this[key] = data[key];
22
+ }
23
+ }
24
+ }
25
+
26
+
27
+ }
28
+ }
@@ -0,0 +1,13 @@
1
+ <form [formGroup]="_entity">
2
+ <div [formGroupName]="_parentFiledName">
3
+ <div class="mb-3">
4
+ <label class="form-label" *ngIf="_fields.displayName">{{ _fields.displayName }}</label>
5
+ <input type="number" class="form-control" formControlName="{{_fields.field.name}}"
6
+ [placeholder]="_fields.field.formConfiguration['NumericEditField.Placeholder']||''"
7
+ [step]="_fields.field.formConfiguration['NumericEditField.Step']" (input)="inputchange($event)" />
8
+ <small class="form-text text-muted d-block" *ngIf="_fields.field.description">{{_fields.field.description}}</small>
9
+ </div>
10
+
11
+ </div>
12
+ <button type="submit" style="display: none;" #submitclick></button>
13
+ </form>
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { NumbericEditControlComponent } from './numberic-edit-control.component';
4
+
5
+ describe('NumbericEditControlComponent', () => {
6
+ let component: NumbericEditControlComponent;
7
+ let fixture: ComponentFixture<NumbericEditControlComponent>;
8
+
9
+ beforeEach(() => {
10
+ TestBed.configureTestingModule({
11
+ declarations: [NumbericEditControlComponent]
12
+ });
13
+ fixture = TestBed.createComponent(NumbericEditControlComponent);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -0,0 +1,119 @@
1
+ import { Component, ElementRef, Input, ViewChild, ChangeDetectionStrategy ,ChangeDetectorRef } from '@angular/core';
2
+ import { FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms';
3
+ import { AbstractControl, ValidationErrors } from '@angular/forms';
4
+
5
+ export function maxDecimalPlacesValidator(maxDecimalPlaces: number): ValidatorFn {
6
+ return (control: AbstractControl): ValidationErrors | null => {
7
+ const value = control.value;
8
+ if (typeof value === 'number' && isNaN(value) === false) {
9
+ const decimalPart = value.toString().split('.')[1];
10
+ if (decimalPart && decimalPart.length > maxDecimalPlaces) {
11
+ return { 'maxDecimalPlaces': { actual: decimalPart.length, max: maxDecimalPlaces } };
12
+ }
13
+ }
14
+ return null;
15
+ };
16
+ }
17
+ @Component({
18
+ selector: 'df-numberic-edit-control',
19
+ templateUrl: './numberic-edit-control.component.html',
20
+ styleUrls: ['./numberic-edit-control.component.scss'],
21
+ changeDetection: ChangeDetectionStrategy.OnPush
22
+ })
23
+ export class NumbericEditControlComponent {
24
+
25
+ constructor(
26
+ private fb: FormBuilder,
27
+ private cdr: ChangeDetectorRef
28
+ ) {
29
+
30
+ }
31
+
32
+
33
+ public get entity(): any {
34
+ return this._entity
35
+ }
36
+
37
+
38
+ /**字段配置列表 */
39
+ _fields: any = ''
40
+ @Input()
41
+ public set fields(v: any) {
42
+ this._fields = v;
43
+ }
44
+
45
+ /**父级字段名称,用于为表单设置控件赋值 */
46
+ _parentFiledName: any
47
+ @Input()
48
+ public set parentFiledName(v: any) {
49
+ this._parentFiledName = v;
50
+ }
51
+ /**父级字段名称,用于为表单设置控件赋值 */
52
+ _selected: any
53
+ @Input()
54
+ public set selected(v: any) {
55
+ this._selected = v ;
56
+ //
57
+ }
58
+
59
+ /**表单实体 */
60
+ _entity: FormGroup | undefined
61
+ @Input()
62
+ public set entity(v: any) {
63
+ this._entity = v;
64
+ this.dataLoaded()
65
+ }
66
+
67
+ @ViewChild('submitclick', { static: true }) submitclick: ElementRef;
68
+
69
+
70
+ get extraProperties() {
71
+ return this._entity?.get('extraProperties') as FormGroup
72
+ }
73
+ get fieldInput() { return this.extraProperties.get(this._fields.field.name); }
74
+ /**数据加载完成 */
75
+ async dataLoaded() {
76
+ if (this._fields && this._entity) {
77
+ await this.AfterInit()
78
+ this.cdr.detectChanges();
79
+ this.submitclick.nativeElement.click();
80
+ }
81
+ }
82
+
83
+ AfterInit() {
84
+ return new Promise((resolve, rejects) => {
85
+ let ValidatorsArray:any[] = []
86
+ let formConfiguration=this._fields.field.formConfiguration
87
+ if (this._fields.required) {
88
+ ValidatorsArray.push(Validators.required)
89
+ }
90
+ if (formConfiguration['NumericEditField.Min']) {
91
+ ValidatorsArray.push(Validators.min(formConfiguration['NumericEditField.Min']))
92
+ }
93
+ if (formConfiguration['NumericEditField.Max']) {
94
+ ValidatorsArray.push(Validators.max(formConfiguration['NumericEditField.Max']))
95
+ }
96
+ let newControl = this.fb.control(this._selected, ValidatorsArray)
97
+ this.extraProperties.setControl(this._fields.field.name, newControl)
98
+
99
+ resolve(true)
100
+ })
101
+ }
102
+ ngOnDestroy(): void {
103
+ //Called once, before the instance is destroyed.
104
+ //Add 'implements OnDestroy' to the class.
105
+ this.extraProperties.removeControl(this._fields.field.name)
106
+ }
107
+
108
+ /**数字框输入 */
109
+ inputchange(event){
110
+ let val=event.target.value;
111
+
112
+ const decimalPart = val.toString().split('.')[1]||'';
113
+ let formConfiguration=this._fields.field.formConfiguration;
114
+ let Decimals=formConfiguration['NumericEditField.Decimals'];
115
+ if(decimalPart.length>Decimals){
116
+ this.fieldInput?.patchValue(val.slice(0,val.length-(decimalPart.length-2)));
117
+ }
118
+ }
119
+ }
@@ -0,0 +1,2 @@
1
+ export * from './select-config.component'
2
+ export * from './select-control.component'
@@ -0,0 +1,59 @@
1
+ <form [formGroup]="_Entity">
2
+ <div formGroupName="formConfiguration">
3
+ <div class="mb-3">
4
+ <label class="form-label">{{'DigniteAbpForms::SelectListItem' | abpLocalization}}</label>
5
+ <table class="table">
6
+ <thead>
7
+ <tr>
8
+ <th scope="col">{{'DigniteAbpForms::SelectListItemText' | abpLocalization}}</th>
9
+ <th scope="col">{{'DigniteAbpForms::SelectListItemValue' | abpLocalization}}</th>
10
+ <th scope="col">{{'DigniteAbpForms::Selected' | abpLocalization}}</th>
11
+ <th scope="col" style="width: 1%;">
12
+ <button class="btn btn-light btn-sm" (click.stop)="addSelectOptions()">
13
+ <i class="fas fa-plus-circle"></i>
14
+ </button>
15
+ </th>
16
+ </tr>
17
+ </thead>
18
+ <tbody formArrayName="Select.Options">
19
+ <ng-container *ngFor="let item of SelectOptions.controls;let i=index">
20
+ <tr [formGroupName]="i">
21
+ <td><input type="text" class="form-control" formControlName="Text" (change)="textChange($event,i)"></td>
22
+ <td><input type="text" class="form-control" formControlName="Value"></td>
23
+ <td>
24
+ <div class="form-check form-check-inline">
25
+ <input class="form-check-input" type="checkbox" formControlName="Selected" id="selected">
26
+ </div>
27
+ </td>
28
+ <td scope="row" style="width: 1%;">
29
+ <button class="btn btn-light btn-sm" (click.stop)="deleteSelectOptions(i)">
30
+ <i class="fas fa-minus"></i>
31
+ </button>
32
+ </td>
33
+ </tr>
34
+ </ng-container>
35
+
36
+
37
+ </tbody>
38
+ </table>
39
+ </div>
40
+
41
+
42
+
43
+ <div class="mb-3">
44
+ <label class="form-label">{{'DigniteAbpForms::NullText' | abpLocalization}}</label>
45
+ <input type="text" class="form-control" formControlName="Select.NullText">
46
+ </div>
47
+ <div class="mb-3">
48
+ <div class="form-check form-check-inline">
49
+ <input class="form-check-input" type="checkbox" formControlName="Select.Multiple"
50
+ id="Multiple">
51
+ <label class="form-check-label" for="Multiple">
52
+ {{'DigniteAbpForms::Multiple' | abpLocalization}}
53
+ </label>
54
+ </div>
55
+ </div>
56
+ <button type="submit" (abpInit)="submitclick?.nativeElement?.click()" style="display: none;"
57
+ #submitclick></button>
58
+ </div>
59
+ </form>
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { SelectConfigComponent } from './select-config.component';
4
+
5
+ describe('SelectConfigComponent', () => {
6
+ let component: SelectConfigComponent;
7
+ let fixture: ComponentFixture<SelectConfigComponent>;
8
+
9
+ beforeEach(() => {
10
+ TestBed.configureTestingModule({
11
+ declarations: [SelectConfigComponent]
12
+ });
13
+ fixture = TestBed.createComponent(SelectConfigComponent);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -0,0 +1,90 @@
1
+ import { ChangeDetectorRef, Component, ElementRef, inject, Input, ViewChild } from '@angular/core';
2
+ import { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
3
+ import { SelectConfig } from './select-config';
4
+ import { DfApiService } from '../../../services';
5
+
6
+ @Component({
7
+ selector: 'df-select-config',
8
+
9
+ templateUrl: './select-config.component.html',
10
+ styleUrls: ['./select-config.component.scss'],
11
+ })
12
+ export class SelectConfigComponent {
13
+ constructor(private fb: FormBuilder, private _DfApiService: DfApiService) {}
14
+ /**表单控件类型 */
15
+ _type: any;
16
+ @Input()
17
+ public set type(v: any) {
18
+ this._type = v;
19
+ }
20
+
21
+ /**选择的表单信息 */
22
+ _selected: any;
23
+ @Input()
24
+ public set selected(v: any) {
25
+ this._selected = v;
26
+ }
27
+
28
+ /**表单实体 */
29
+ _Entity: FormGroup | undefined;
30
+ @Input()
31
+ public set Entity(v: FormGroup) {
32
+ this._Entity = v;
33
+ this.dataLoaded();
34
+ }
35
+ get formConfiguration() {
36
+ return this._Entity.get('formConfiguration') as FormGroup;
37
+ }
38
+ get SelectOptions() {
39
+ return this.formConfiguration.controls['Select.Options'] as FormArray;
40
+ }
41
+ @ViewChild('submitclick', { static: true }) submitclick: ElementRef;
42
+ private cdr = inject(ChangeDetectorRef);
43
+ async dataLoaded() {
44
+ if (this._Entity && this._type) {
45
+ await this.AfterInit();
46
+ this.cdr.detectChanges(); // 手动触发变更检测
47
+ this.submitclick?.nativeElement?.click();
48
+ }
49
+ }
50
+ /**增加选项 */
51
+ addSelectOptions() {
52
+ this.SelectOptions.push(
53
+ new FormGroup({
54
+ Text: new FormControl('', Validators.required),
55
+ Value: new FormControl('', Validators.required),
56
+ Selected: new FormControl(false),
57
+ })
58
+ );
59
+ }
60
+ /**删除某个选项 */
61
+ deleteSelectOptions(index) {
62
+ this.SelectOptions.removeAt(index);
63
+ }
64
+
65
+ AfterInit() {
66
+ return new Promise((resolve, rejects) => {
67
+ this._Entity.setControl('formConfiguration', this.fb.group(new SelectConfig()));
68
+ if (this._selected && this._selected.formControlName == this._type) {
69
+ this._selected.formConfiguration['Select.Options']?.forEach(el => {
70
+ this.addSelectOptions();
71
+ });
72
+ this.formConfiguration.patchValue({
73
+ ...this._selected.formConfiguration,
74
+ });
75
+ } else {
76
+ this.addSelectOptions();
77
+ }
78
+ resolve(true);
79
+ });
80
+ }
81
+
82
+ textChange(event, index) {
83
+ let SelectOptionsItem = this.SelectOptions.at(index);
84
+ let value = event.target.value;
85
+ if (SelectOptionsItem.get('Value').value) return;
86
+ SelectOptionsItem.patchValue({
87
+ Value: this._DfApiService.chineseToPinyin(value),
88
+ });
89
+ }
90
+ }
@@ -0,0 +1,24 @@
1
+ import { FormArray, FormControl, Validators } from "@angular/forms";
2
+
3
+ export class SelectConfig {
4
+
5
+
6
+ /**空值文本 */
7
+ 'Select.NullText': any = ['', []];
8
+ //多选
9
+ 'Select.Multiple': any = [false, []];
10
+ // 选项
11
+ 'Select.Options': any = new FormArray([])
12
+
13
+ constructor(data?: SelectConfig) {
14
+ if (data) {
15
+ for (const key in data) {
16
+ if (data.hasOwnProperty(key)) {
17
+ this[key] = data[key];
18
+ }
19
+ }
20
+ }
21
+
22
+
23
+ }
24
+ }
@@ -0,0 +1,32 @@
1
+ <form [formGroup]="_entity">
2
+ <div formGroupName="extraProperties" class="selectcontrol">
3
+ <div class="mb-3">
4
+ <label class="form-label" *ngIf="_fields.displayName">{{ _fields.displayName }}</label>
5
+ <ng-container *ngIf="formConfiguration['Select.Multiple']; else elseTemplate">
6
+ <!-- <select class="form-select" multiple formControlName="{{_fields.field.name}}">
7
+ <ng-container *ngFor="let item of _fields.field.formConfiguration['Select.Options'];let i =index">
8
+ <option [value]="item.Value">{{item.Text}}</option>
9
+ </ng-container>
10
+ </select> -->
11
+ <nz-select class="form-select form-select-multiple" [nzMaxTagCount]="1"
12
+ nzShowSearch nzMode="multiple"
13
+ formControlName="{{_fields.field.name}}">
14
+ <nz-option *ngFor="let item of _fields.field.formConfiguration['Select.Options']"
15
+ [nzLabel]="item.Text" [nzValue]="item.Value"></nz-option>
16
+ </nz-select>
17
+ </ng-container>
18
+ <ng-template #elseTemplate>
19
+ <select class="form-select" [multiple]="false" formControlName="{{_fields.field.name}}">
20
+ <option [value]="">{{formConfiguration['Select.NullText']}}</option>
21
+ <ng-container *ngFor="let item of _fields.field.formConfiguration['Select.Options'];let i =index">
22
+ <option [value]="item.Value">{{item.Text}}</option>
23
+ </ng-container>
24
+ </select>
25
+ </ng-template>
26
+ <small class="form-text text-muted d-block"
27
+ *ngIf="_fields.field.description">{{_fields.field.description}}</small>
28
+ </div>
29
+
30
+ </div>
31
+ <button type="submit" style="display: none;" #submitclick></button>
32
+ </form>
@@ -0,0 +1,32 @@
1
+ ::ng-deep .selectcontrol {
2
+
3
+
4
+ nz-select {
5
+ width: 100%;
6
+
7
+ .ant-select-selector {
8
+ background: transparent !important;
9
+ border: none !important;
10
+ padding: .275rem 1.25rem !important;
11
+ box-shadow: none !important;
12
+ height: auto !important
13
+ }
14
+
15
+ .anticon-search,
16
+ .anticon-down {
17
+ display: none
18
+ }
19
+ }
20
+ .ant-select-multiple .ant-select-selection-item{
21
+ max-width: 40% !important;
22
+ }
23
+ }
24
+
25
+ ::ng-deep .was-validated .form-select-multiple {
26
+ border-color: #4fbf67;
27
+ padding-right: calc(1.5em + 1.35rem);
28
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%234fbf67' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
29
+ background-repeat: no-repeat;
30
+ background-position: right calc(0.375em + 0.3375rem) center;
31
+ background-size: calc(0.75em + 0.675rem) calc(0.75em + 0.675rem);
32
+ }
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { SelectControlComponent } from './select-control.component';
4
+
5
+ describe('SelectControlComponent', () => {
6
+ let component: SelectControlComponent;
7
+ let fixture: ComponentFixture<SelectControlComponent>;
8
+
9
+ beforeEach(() => {
10
+ TestBed.configureTestingModule({
11
+ declarations: [SelectControlComponent]
12
+ });
13
+ fixture = TestBed.createComponent(SelectControlComponent);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });
@@ -0,0 +1,86 @@
1
+ import { ChangeDetectorRef, Component, ElementRef, inject, Input, ViewChild } from '@angular/core';
2
+ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
3
+
4
+ @Component({
5
+ selector: 'df-select-control',
6
+ templateUrl: './select-control.component.html',
7
+ styleUrls: ['./select-control.component.scss'],
8
+ })
9
+ export class SelectControlComponent {
10
+ constructor(private fb: FormBuilder) {}
11
+
12
+ /**字段配置列表 */
13
+ _fields: any = '';
14
+ @Input()
15
+ public set fields(v: any) {
16
+ this._fields = v;
17
+ }
18
+
19
+ /**父级字段名称,用于为表单设置控件赋值 */
20
+ _parentFiledName: any;
21
+ @Input()
22
+ public set parentFiledName(v: any) {
23
+ this._parentFiledName = v;
24
+ }
25
+ /**父级字段名称,用于为表单设置控件赋值 */
26
+ _selected: any;
27
+ @Input()
28
+ public set selected(v: any) {
29
+ this._selected = v;
30
+ }
31
+
32
+ /**表单实体 */
33
+ _entity: FormGroup | undefined;
34
+ @Input()
35
+ public set entity(v: any) {
36
+ this._entity = v;
37
+ this.dataLoaded();
38
+ }
39
+ @ViewChild('submitclick', { static: true }) submitclick: ElementRef;
40
+
41
+ get extraProperties() {
42
+ return this._entity?.get('extraProperties') as FormGroup;
43
+ }
44
+ private cdr = inject(ChangeDetectorRef);
45
+ /**数据加载完成 */
46
+ async dataLoaded() {
47
+ if (this._fields && this._entity) {
48
+ await this.AfterInit();
49
+ this.cdr.detectChanges(); // 手动触发变更检测
50
+ this.submitclick?.nativeElement?.click();
51
+ }
52
+ }
53
+
54
+ formConfiguration: any = '';
55
+ AfterInit() {
56
+ return new Promise((resolve, rejects) => {
57
+ let ValidatorsArray:any[] = [];
58
+ if (this._fields.required) {
59
+ ValidatorsArray.push(Validators.required);
60
+ }
61
+ this.formConfiguration = this._fields.field.formConfiguration;
62
+ if (!this._selected) {
63
+ const isMultiple = this.formConfiguration['Select.Multiple'];
64
+
65
+ let selectValue:any = isMultiple ? [] : '';
66
+ this.formConfiguration['Select.Options'].forEach(el => {
67
+ if (el.Selected) {
68
+ selectValue = isMultiple
69
+ ? [...selectValue, el.value || el.Value]
70
+ : [el.value || el.Value];
71
+ }
72
+ });
73
+
74
+ this._selected = selectValue;
75
+ }
76
+ let newControl = this.fb.control(this._selected, ValidatorsArray);
77
+ this.extraProperties.setControl(this._fields.field.name, newControl);
78
+ resolve(true);
79
+ });
80
+ }
81
+ ngOnDestroy(): void {
82
+ //Called once, before the instance is destroyed.
83
+ //Add 'implements OnDestroy' to the class.
84
+ this.extraProperties.removeControl(this._fields.field.name);
85
+ }
86
+ }
@@ -0,0 +1,2 @@
1
+ export * from './switch-config.component'
2
+ export * from './switch-control.component'
@@ -0,0 +1,17 @@
1
+ <form [formGroup]="_Entity">
2
+ <div formGroupName="formConfiguration">
3
+ <div class="mb-3">
4
+ <div>
5
+ <div class="form-check form-check-inline">
6
+ <input class="form-check-input" type="checkbox" formControlName="Switch.Default"
7
+ id="flexRadioDefault1">
8
+ <label class="form-check-label" for="flexRadioDefault1">
9
+ {{'DigniteAbpForms::DefaultValue' | abpLocalization}}
10
+ </label>
11
+ </div>
12
+
13
+ </div>
14
+ </div>
15
+ <button type="submit" (abpInit)="submitclick?.nativeElement?.click()" style="display: none;" #submitclick></button>
16
+ </div>
17
+ </form>
@@ -0,0 +1,21 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { SwitchConfigComponent } from './switch-config.component';
4
+
5
+ describe('SwitchConfigComponent', () => {
6
+ let component: SwitchConfigComponent;
7
+ let fixture: ComponentFixture<SwitchConfigComponent>;
8
+
9
+ beforeEach(() => {
10
+ TestBed.configureTestingModule({
11
+ declarations: [SwitchConfigComponent]
12
+ });
13
+ fixture = TestBed.createComponent(SwitchConfigComponent);
14
+ component = fixture.componentInstance;
15
+ fixture.detectChanges();
16
+ });
17
+
18
+ it('should create', () => {
19
+ expect(component).toBeTruthy();
20
+ });
21
+ });