ngx-rs-ant 1.5.0 → 1.5.2

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 (27) hide show
  1. package/data-grid/data-grid.component.d.ts +26 -26
  2. package/data-grid/data-grid.factory.d.ts +1 -1
  3. package/data-grid/data-grid.module.d.ts +8 -8
  4. package/data-grid/data-grid.service.d.ts +2 -0
  5. package/data-grid/instance-link-template/instance-link-template.component.d.ts +21 -0
  6. package/data-grid/unit-info-template/unit-info-template.component.d.ts +2 -1
  7. package/data-grid/user-info-template/user-info-template.component.d.ts +2 -1
  8. package/esm2020/data-detail/data-detail.component.mjs +5 -1
  9. package/esm2020/data-grid/data-grid.component.mjs +78 -44
  10. package/esm2020/data-grid/data-grid.factory.mjs +13 -17
  11. package/esm2020/data-grid/data-grid.module.mjs +15 -18
  12. package/esm2020/data-grid/data-grid.service.mjs +26 -1
  13. package/esm2020/data-grid/file-cell-template/file-cell-template.component.mjs +3 -7
  14. package/esm2020/data-grid/instance-link-template/instance-link-template.component.mjs +64 -0
  15. package/esm2020/data-grid/unit-info-template/unit-info-template.component.mjs +12 -4
  16. package/esm2020/data-grid/user-info-template/user-info-template.component.mjs +12 -4
  17. package/esm2020/public-api.mjs +1 -3
  18. package/fesm2015/ngx-rs-ant.mjs +758 -661
  19. package/fesm2015/ngx-rs-ant.mjs.map +1 -1
  20. package/fesm2020/ngx-rs-ant.mjs +751 -656
  21. package/fesm2020/ngx-rs-ant.mjs.map +1 -1
  22. package/package.json +1 -1
  23. package/public-api.d.ts +0 -2
  24. package/data-grid/instance-link-template.directive.d.ts +0 -8
  25. package/data-grid/master-detail-template.directive.d.ts +0 -8
  26. package/esm2020/data-grid/instance-link-template.directive.mjs +0 -16
  27. package/esm2020/data-grid/master-detail-template.directive.mjs +0 -16
@@ -6,7 +6,7 @@ import { CommonModule, formatDate } from '@angular/common';
6
6
  import { Subject, ReplaySubject, Subscription, map, shareReplay, lastValueFrom, debounceTime, interval } from 'rxjs';
7
7
  import * as i2 from 'devextreme-angular/ui/number-box';
8
8
  import * as i2$1 from 'devextreme-angular/ui/draggable';
9
- import { DevExtremeModule, DxLoadPanelModule, DxDataGridComponent, DxValidationGroupComponent } from 'devextreme-angular';
9
+ import { DevExtremeModule, DxLoadPanelModule, DxValidationGroupComponent, DxDataGridComponent } from 'devextreme-angular';
10
10
  import BpmnModeler from 'camunda-bpmn-js/lib/camunda-platform/Modeler';
11
11
  import { is } from 'bpmn-js/lib/util/ModelUtil';
12
12
  import { TextAreaEntry, isTextAreaEntryEdited, SelectEntry, isSelectEntryEdited } from '@bpmn-io/properties-panel';
@@ -15,11 +15,11 @@ import * as i6$1 from 'devextreme-angular/ui/nested';
15
15
  import { DxoPositionModule } from 'devextreme-angular/ui/nested';
16
16
  import * as i4 from 'devextreme-angular/ui/button';
17
17
  import * as i1$1 from '@angular/common/http';
18
+ import notify from 'devextreme/ui/notify';
18
19
  import CustomStore from 'devextreme/data/custom_store';
19
20
  import * as i3 from 'devextreme-angular/core';
20
21
  import * as i5$1 from 'devextreme-angular/ui/data-grid';
21
22
  import * as i5 from 'devextreme-angular/ui/tooltip';
22
- import notify from 'devextreme/ui/notify';
23
23
  import * as i2$2 from '@angular/platform-browser';
24
24
  import * as i3$1 from 'devextreme-angular/ui/accordion';
25
25
  import * as i7 from 'devextreme-angular/ui/validation-group';
@@ -1837,6 +1837,22 @@ class DataGridService {
1837
1837
  }
1838
1838
  });
1839
1839
  }
1840
+ getOneByFilter(tenant, className, key, value, view) {
1841
+ let api = 'api/data/' + className;
1842
+ return this.http.get(api, {
1843
+ params: {
1844
+ tenant,
1845
+ view: view || '',
1846
+ filter: '["' + key + '","=","' + value + '"]',
1847
+ limit: 1
1848
+ }
1849
+ }).pipe(map(response => {
1850
+ if (response.data.count === 1) {
1851
+ return response.data.list[0];
1852
+ }
1853
+ return {};
1854
+ }));
1855
+ }
1840
1856
  getMany(tenant, className, params) {
1841
1857
  const api = 'api/data/' + className;
1842
1858
  return this.http.get(api + params, {
@@ -1940,6 +1956,15 @@ class DataGridService {
1940
1956
  responseType: "blob"
1941
1957
  });
1942
1958
  }
1959
+ getInstanceCaption(tenant, className, oid) {
1960
+ return this.http.get('api/data/' + className + '/' + oid + '/caption', {
1961
+ params: {
1962
+ tenant
1963
+ }
1964
+ }).pipe(map(response => {
1965
+ return response.data;
1966
+ }));
1967
+ }
1943
1968
  getUserInfo(uid) {
1944
1969
  if (!this.userInfoCache.hasOwnProperty(uid)) {
1945
1970
  this.userInfoCache[uid] = this.http.get('api/data/custom', {
@@ -1973,20 +1998,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
1973
1998
  type: Injectable
1974
1999
  }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
1975
2000
 
1976
- class MasterDetailTemplateDirective {
1977
- constructor(templateRef) {
1978
- this.templateRef = templateRef;
1979
- }
1980
- }
1981
- MasterDetailTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MasterDetailTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
1982
- MasterDetailTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: MasterDetailTemplateDirective, selector: "[rsMasterDetailTemplate]", ngImport: i0 });
1983
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MasterDetailTemplateDirective, decorators: [{
1984
- type: Directive,
1985
- args: [{
1986
- selector: '[rsMasterDetailTemplate]'
1987
- }]
1988
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
1989
-
1990
2001
  class RowButtonsTemplateDirective {
1991
2002
  constructor(templateRef) {
1992
2003
  this.templateRef = templateRef;
@@ -2001,19 +2012,171 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
2001
2012
  }]
2002
2013
  }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
2003
2014
 
2004
- class InstanceLinkTemplateDirective {
2005
- constructor(templateRef) {
2006
- this.templateRef = templateRef;
2015
+ function notify_error(message) {
2016
+ notify({
2017
+ displayTime: 12000,
2018
+ message,
2019
+ type: 'error',
2020
+ width: '300px'
2021
+ }, {
2022
+ direction: 'up-push',
2023
+ position: 'bottom right'
2024
+ });
2025
+ }
2026
+ function notify_warning(message) {
2027
+ notify({
2028
+ displayTime: 8000,
2029
+ message,
2030
+ type: 'warning',
2031
+ width: '300px'
2032
+ }, {
2033
+ direction: 'up-push',
2034
+ position: 'bottom right'
2035
+ });
2036
+ }
2037
+ function notify_success(message) {
2038
+ notify({
2039
+ displayTime: 4000,
2040
+ message,
2041
+ type: 'success',
2042
+ width: '300px'
2043
+ }, {
2044
+ direction: 'down-push',
2045
+ position: 'top right'
2046
+ });
2047
+ }
2048
+ function format_date(date, locale) {
2049
+ return formatDate(date, 'yyyy/MM/dd', locale, 'GMT+8');
2050
+ }
2051
+ function format_datetime(date, locale) {
2052
+ return formatDate(date, 'yyyy/MM/dd HH:mm:ss', locale, 'GMT+8');
2053
+ }
2054
+ function file_type_icon(name) {
2055
+ const type = name.substring(name.lastIndexOf('.') + 1).toLocaleLowerCase();
2056
+ switch (type) {
2057
+ case 'doc':
2058
+ case 'docx':
2059
+ return 'word';
2060
+ case 'xls':
2061
+ case 'xlsx':
2062
+ case 'csv':
2063
+ return 'excel';
2064
+ case 'ppt':
2065
+ case 'pptx':
2066
+ return 'ppt';
2067
+ case 'pdf':
2068
+ return 'pdf';
2069
+ case 'txt':
2070
+ case 'xml':
2071
+ case 'json':
2072
+ case 'js':
2073
+ return 'text';
2074
+ case 'png':
2075
+ case 'jpg':
2076
+ case 'jpeg':
2077
+ case 'gif':
2078
+ case 'bmp':
2079
+ return 'image';
2080
+ case 'zip':
2081
+ case 'rar':
2082
+ case '7z':
2083
+ case 'jar':
2084
+ return 'zip';
2085
+ default:
2086
+ return 'unknown';
2007
2087
  }
2008
2088
  }
2009
- InstanceLinkTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: InstanceLinkTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
2010
- InstanceLinkTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: InstanceLinkTemplateDirective, selector: "[rsInstanceLinkTemplate]", ngImport: i0 });
2011
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: InstanceLinkTemplateDirective, decorators: [{
2012
- type: Directive,
2013
- args: [{
2014
- selector: '[rsInstanceLinkTemplate]'
2015
- }]
2016
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
2089
+ function support_preview_ext() {
2090
+ return ['pdf', 'png', 'jpg', 'jpeg', 'gif', 'bmp', 'doc', 'docx', 'txt', 'xml', 'json', 'js', 'xls', 'xlsx', 'csv', 'ppt', 'pptx'];
2091
+ }
2092
+ function format_file_size(size) {
2093
+ const labels = ['b', 'Kb', 'Mb', 'Gb'];
2094
+ const count = labels.length - 1;
2095
+ let i = 0;
2096
+ while (i < count && size >= 1024) {
2097
+ size /= 1024;
2098
+ i++;
2099
+ }
2100
+ return Math.round(size * 100) / 100 + " " + labels[i];
2101
+ }
2102
+ function download_file(blob, filename, callback) {
2103
+ const url = window.webkitURL.createObjectURL(blob);
2104
+ const a = document.createElement('a');
2105
+ document.body.appendChild(a);
2106
+ a.setAttribute('style', 'display:none');
2107
+ a.setAttribute('href', url);
2108
+ a.setAttribute('download', decodeURIComponent(filename));
2109
+ a.click();
2110
+ setTimeout(() => {
2111
+ if (callback) {
2112
+ callback();
2113
+ }
2114
+ a.remove();
2115
+ });
2116
+ }
2117
+ async function validate(validator) {
2118
+ return new Promise(resolve => {
2119
+ const validateResult = validator.instance.validate();
2120
+ if (!validateResult.isValid) {
2121
+ resolve(false);
2122
+ }
2123
+ if (validateResult.status === 'pending') {
2124
+ validateResult.complete?.then((result) => {
2125
+ if (result.isValid) {
2126
+ resolve(true);
2127
+ }
2128
+ else {
2129
+ resolve(false);
2130
+ }
2131
+ });
2132
+ }
2133
+ else {
2134
+ resolve(true);
2135
+ }
2136
+ });
2137
+ }
2138
+ async function validate_group(validationGroup) {
2139
+ const top = validationGroup.element.nativeElement;
2140
+ let sourceNode;
2141
+ const targetClassName = 'dx-field';
2142
+ const findTargetNode = (node) => {
2143
+ sourceNode = node;
2144
+ while (true) {
2145
+ if (node.classList.contains(targetClassName)) {
2146
+ return node;
2147
+ }
2148
+ else {
2149
+ node = node.parentElement;
2150
+ if (node === top) {
2151
+ return sourceNode;
2152
+ }
2153
+ }
2154
+ }
2155
+ };
2156
+ return new Promise(resolve => {
2157
+ const validateResult = validationGroup.instance.validate();
2158
+ if (!validateResult.isValid) {
2159
+ const brokenElement = (validateResult.brokenRules?.[0]).validator.element();
2160
+ findTargetNode(brokenElement).scrollIntoView();
2161
+ resolve(false);
2162
+ }
2163
+ if (validateResult.status === 'pending') {
2164
+ validateResult.complete?.then((result) => {
2165
+ if (result.isValid) {
2166
+ resolve(true);
2167
+ }
2168
+ else {
2169
+ const brokenElement = (result.brokenRules?.[0]).validator.element();
2170
+ findTargetNode(brokenElement).scrollIntoView();
2171
+ resolve(false);
2172
+ }
2173
+ });
2174
+ }
2175
+ else {
2176
+ resolve(true);
2177
+ }
2178
+ });
2179
+ }
2017
2180
 
2018
2181
  class DataGridFactory {
2019
2182
  constructor(http) {
@@ -2064,7 +2227,6 @@ class DataGridFactory {
2064
2227
  dataField: field.name,
2065
2228
  caption: field.caption,
2066
2229
  dataType: 'string',
2067
- alignment: 'center',
2068
2230
  cssClass: 'cell-vertical-middle',
2069
2231
  allowHeaderFiltering: false,
2070
2232
  allowFiltering: false,
@@ -2090,12 +2252,6 @@ class DataGridFactory {
2090
2252
  visible: field.visible,
2091
2253
  fixed: field.fixed
2092
2254
  };
2093
- if (field.isPrimaryKey) {
2094
- column.instanceInfo = {
2095
- tenant,
2096
- className
2097
- };
2098
- }
2099
2255
  switch (field.dataType) {
2100
2256
  case 'BOOLEAN':
2101
2257
  column.allowHeaderFiltering = false;
@@ -2329,11 +2485,6 @@ class DataGridFactory {
2329
2485
  visible: field.visible,
2330
2486
  fixed: field.fixed
2331
2487
  };
2332
- column.instanceInfo = {
2333
- tenant,
2334
- className: field.targetClassName,
2335
- key: field.name
2336
- };
2337
2488
  switch (field.relationType) {
2338
2489
  case 'MANY_TO_ONE':
2339
2490
  case 'ONE_TO_ONE':
@@ -2351,16 +2502,24 @@ class DataGridFactory {
2351
2502
  });
2352
2503
  return result;
2353
2504
  }
2354
- makeDataGridDataSource(tenant, className, view, extraFilter, dataGridName) {
2505
+ makeDataGridDataSource(tenant, className, view, extraFilter, keyExpr, dataGridName) {
2506
+ if (!keyExpr) {
2507
+ keyExpr = 'oid';
2508
+ }
2355
2509
  return new CustomStore({
2356
- key: 'oid',
2510
+ key: keyExpr,
2357
2511
  byKey: (key) => {
2358
- return lastValueFrom(this.service.getOne(tenant, className, key).pipe(map(response => response.data)));
2512
+ if (keyExpr === 'oid') {
2513
+ return lastValueFrom(this.service.getOne(tenant, className, key).pipe(map(response => response.data)));
2514
+ }
2515
+ else {
2516
+ return lastValueFrom(this.service.getOneByFilter(tenant, className, keyExpr, key, view));
2517
+ }
2359
2518
  },
2360
2519
  load: (loadOptions) => {
2361
2520
  if (loadOptions.dataField) {
2362
2521
  // 未重写headerFilter的dataSource时,headerFilter会调用load方法加载筛选树,重写该方法查询该表所有数据
2363
- // 该方式存在风险,无法识别一定是通过headerFilter过滤才存在dataField参数
2522
+ // 该方式存在风险,无法识别DevExtreme一定是通过headerFilter过滤才存在dataField参数
2364
2523
  return lastValueFrom(this.service.getColumnDataSource(tenant, className, view, loadOptions.dataField));
2365
2524
  }
2366
2525
  let params = '?';
@@ -2419,172 +2578,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
2419
2578
  }]
2420
2579
  }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
2421
2580
 
2422
- function notify_error(message) {
2423
- notify({
2424
- displayTime: 12000,
2425
- message,
2426
- type: 'error',
2427
- width: '300px'
2428
- }, {
2429
- direction: 'up-push',
2430
- position: 'bottom right'
2431
- });
2432
- }
2433
- function notify_warning(message) {
2434
- notify({
2435
- displayTime: 8000,
2436
- message,
2437
- type: 'warning',
2438
- width: '300px'
2439
- }, {
2440
- direction: 'up-push',
2441
- position: 'bottom right'
2442
- });
2443
- }
2444
- function notify_success(message) {
2445
- notify({
2446
- displayTime: 4000,
2447
- message,
2448
- type: 'success',
2449
- width: '300px'
2450
- }, {
2451
- direction: 'down-push',
2452
- position: 'top right'
2453
- });
2454
- }
2455
- function format_date(date, locale) {
2456
- return formatDate(date, 'yyyy/MM/dd', locale, 'GMT+8');
2457
- }
2458
- function format_datetime(date, locale) {
2459
- return formatDate(date, 'yyyy/MM/dd HH:mm:ss', locale, 'GMT+8');
2460
- }
2461
- function file_type_icon(name) {
2462
- const type = name.substring(name.lastIndexOf('.') + 1).toLocaleLowerCase();
2463
- switch (type) {
2464
- case 'doc':
2465
- case 'docx':
2466
- return 'word';
2467
- case 'xls':
2468
- case 'xlsx':
2469
- case 'csv':
2470
- return 'excel';
2471
- case 'ppt':
2472
- case 'pptx':
2473
- return 'ppt';
2474
- case 'pdf':
2475
- return 'pdf';
2476
- case 'txt':
2477
- case 'xml':
2478
- case 'json':
2479
- case 'js':
2480
- return 'text';
2481
- case 'png':
2482
- case 'jpg':
2483
- case 'jpeg':
2484
- case 'gif':
2485
- case 'bmp':
2486
- return 'image';
2487
- case 'zip':
2488
- case 'rar':
2489
- case '7z':
2490
- case 'jar':
2491
- return 'zip';
2492
- default:
2493
- return 'unknown';
2494
- }
2495
- }
2496
- function support_preview_ext() {
2497
- return ['pdf', 'png', 'jpg', 'jpeg', 'gif', 'bmp', 'doc', 'docx', 'txt', 'xml', 'json', 'js', 'xls', 'xlsx', 'csv', 'ppt', 'pptx'];
2498
- }
2499
- function format_file_size(size) {
2500
- const labels = ['b', 'Kb', 'Mb', 'Gb'];
2501
- const count = labels.length - 1;
2502
- let i = 0;
2503
- while (i < count && size >= 1024) {
2504
- size /= 1024;
2505
- i++;
2506
- }
2507
- return Math.round(size * 100) / 100 + " " + labels[i];
2508
- }
2509
- function download_file(blob, filename, callback) {
2510
- const url = window.webkitURL.createObjectURL(blob);
2511
- const a = document.createElement('a');
2512
- document.body.appendChild(a);
2513
- a.setAttribute('style', 'display:none');
2514
- a.setAttribute('href', url);
2515
- a.setAttribute('download', decodeURIComponent(filename));
2516
- a.click();
2517
- setTimeout(() => {
2518
- if (callback) {
2519
- callback();
2520
- }
2521
- a.remove();
2522
- });
2523
- }
2524
- async function validate(validator) {
2525
- return new Promise(resolve => {
2526
- const validateResult = validator.instance.validate();
2527
- if (!validateResult.isValid) {
2528
- resolve(false);
2529
- }
2530
- if (validateResult.status === 'pending') {
2531
- validateResult.complete?.then((result) => {
2532
- if (result.isValid) {
2533
- resolve(true);
2534
- }
2535
- else {
2536
- resolve(false);
2537
- }
2538
- });
2539
- }
2540
- else {
2541
- resolve(true);
2542
- }
2543
- });
2544
- }
2545
- async function validate_group(validationGroup) {
2546
- const top = validationGroup.element.nativeElement;
2547
- let sourceNode;
2548
- const targetClassName = 'dx-field';
2549
- const findTargetNode = (node) => {
2550
- sourceNode = node;
2551
- while (true) {
2552
- if (node.classList.contains(targetClassName)) {
2553
- return node;
2554
- }
2555
- else {
2556
- node = node.parentElement;
2557
- if (node === top) {
2558
- return sourceNode;
2559
- }
2560
- }
2561
- }
2562
- };
2563
- return new Promise(resolve => {
2564
- const validateResult = validationGroup.instance.validate();
2565
- if (!validateResult.isValid) {
2566
- const brokenElement = (validateResult.brokenRules?.[0]).validator.element();
2567
- findTargetNode(brokenElement).scrollIntoView();
2568
- resolve(false);
2569
- }
2570
- if (validateResult.status === 'pending') {
2571
- validateResult.complete?.then((result) => {
2572
- if (result.isValid) {
2573
- resolve(true);
2574
- }
2575
- else {
2576
- const brokenElement = (result.brokenRules?.[0]).validator.element();
2577
- findTargetNode(brokenElement).scrollIntoView();
2578
- resolve(false);
2579
- }
2580
- });
2581
- }
2582
- else {
2583
- resolve(true);
2584
- }
2585
- });
2586
- }
2587
-
2588
2581
  class FileCellTemplateComponent {
2589
2582
  constructor(service, domSanitizer) {
2590
2583
  this.service = service;
@@ -2616,10 +2609,6 @@ class FileCellTemplateComponent {
2616
2609
  </table>
2617
2610
  `);
2618
2611
  this.icon = file_type_icon(this.filename);
2619
- // 重绘表格宽高
2620
- setTimeout(() => {
2621
- this.service.cellTemplateLoaded$.emit();
2622
- });
2623
2612
  }
2624
2613
  preview(tooltip) {
2625
2614
  if (!window.coast.tabManager) {
@@ -2659,486 +2648,626 @@ class FileCellTemplateComponent {
2659
2648
  }
2660
2649
  }
2661
2650
  FileCellTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FileCellTemplateComponent, deps: [{ token: DataGridService }, { token: i2$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
2662
- FileCellTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: FileCellTemplateComponent, selector: "rs-file-cell-template", inputs: { file: "file" }, ngImport: i0, template: "<dx-button #fileBtn type=\"default\" stylingMode=\"text\">\r\n <i class=\"coast-icon-file-{{icon}}\" style=\"padding-right: 4px;\"></i>\r\n {{ filename }}\r\n <dx-tooltip #tooltip\r\n [target]=\"fileBtn.instance.element()\"\r\n [position]=\"'top'\"\r\n [visible]=\"false\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <div [innerHTML]=\"content\"></div>\r\n <dx-button type=\"default\" stylingMode=\"text\" icon=\"coast-icon coast-icon-file\" text=\"\u9884\u89C8\"\r\n (onClick)=\"preview(tooltip)\" [disabled]=\"!supportPreview || loading\"></dx-button>\r\n <dx-button type=\"default\" stylingMode=\"text\" icon=\"coast-icon coast-icon-download\" text=\"\u4E0B\u8F7D\"\r\n (onClick)=\"download()\" [disabled]=\"loading\"></dx-button>\r\n </div>\r\n </dx-tooltip>\r\n</dx-button><br/>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }] });
2651
+ FileCellTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: FileCellTemplateComponent, selector: "rs-file-cell-template", inputs: { file: "file" }, ngImport: i0, template: "<dx-button #fileBtn type=\"default\" stylingMode=\"text\" (onClick)=\"$event.event?.stopPropagation()\">\r\n <i class=\"coast-icon-file-{{icon}}\" style=\"padding-right: 4px;\"></i>\r\n {{ filename }}\r\n <dx-tooltip #tooltip\r\n [target]=\"fileBtn.instance.element()\"\r\n [position]=\"'top'\"\r\n [visible]=\"false\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <div [innerHTML]=\"content\"></div>\r\n <dx-button type=\"default\" stylingMode=\"text\" icon=\"coast-icon coast-icon-file\" text=\"\u9884\u89C8\"\r\n (onClick)=\"preview(tooltip)\" [disabled]=\"!supportPreview || loading\"></dx-button>\r\n <dx-button type=\"default\" stylingMode=\"text\" icon=\"coast-icon coast-icon-download\" text=\"\u4E0B\u8F7D\"\r\n (onClick)=\"download()\" [disabled]=\"loading\"></dx-button>\r\n </div>\r\n </dx-tooltip>\r\n</dx-button><br/>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }] });
2663
2652
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FileCellTemplateComponent, decorators: [{
2664
2653
  type: Component,
2665
- args: [{ selector: 'rs-file-cell-template', template: "<dx-button #fileBtn type=\"default\" stylingMode=\"text\">\r\n <i class=\"coast-icon-file-{{icon}}\" style=\"padding-right: 4px;\"></i>\r\n {{ filename }}\r\n <dx-tooltip #tooltip\r\n [target]=\"fileBtn.instance.element()\"\r\n [position]=\"'top'\"\r\n [visible]=\"false\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <div [innerHTML]=\"content\"></div>\r\n <dx-button type=\"default\" stylingMode=\"text\" icon=\"coast-icon coast-icon-file\" text=\"\u9884\u89C8\"\r\n (onClick)=\"preview(tooltip)\" [disabled]=\"!supportPreview || loading\"></dx-button>\r\n <dx-button type=\"default\" stylingMode=\"text\" icon=\"coast-icon coast-icon-download\" text=\"\u4E0B\u8F7D\"\r\n (onClick)=\"download()\" [disabled]=\"loading\"></dx-button>\r\n </div>\r\n </dx-tooltip>\r\n</dx-button><br/>\r\n" }]
2654
+ args: [{ selector: 'rs-file-cell-template', template: "<dx-button #fileBtn type=\"default\" stylingMode=\"text\" (onClick)=\"$event.event?.stopPropagation()\">\r\n <i class=\"coast-icon-file-{{icon}}\" style=\"padding-right: 4px;\"></i>\r\n {{ filename }}\r\n <dx-tooltip #tooltip\r\n [target]=\"fileBtn.instance.element()\"\r\n [position]=\"'top'\"\r\n [visible]=\"false\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <div [innerHTML]=\"content\"></div>\r\n <dx-button type=\"default\" stylingMode=\"text\" icon=\"coast-icon coast-icon-file\" text=\"\u9884\u89C8\"\r\n (onClick)=\"preview(tooltip)\" [disabled]=\"!supportPreview || loading\"></dx-button>\r\n <dx-button type=\"default\" stylingMode=\"text\" icon=\"coast-icon coast-icon-download\" text=\"\u4E0B\u8F7D\"\r\n (onClick)=\"download()\" [disabled]=\"loading\"></dx-button>\r\n </div>\r\n </dx-tooltip>\r\n</dx-button><br/>\r\n" }]
2666
2655
  }], ctorParameters: function () { return [{ type: DataGridService }, { type: i2$2.DomSanitizer }]; }, propDecorators: { file: [{
2667
2656
  type: Input
2668
2657
  }] } });
2669
2658
 
2670
- class UserInfoTemplateComponent {
2671
- constructor(service, domSanitizer) {
2672
- this.service = service;
2673
- this.domSanitizer = domSanitizer;
2659
+ class DataDetailService {
2660
+ constructor(http) {
2661
+ this.http = http;
2674
2662
  }
2675
- ngOnInit() {
2676
- this.service.getUserInfo(this.uid).subscribe(response => {
2677
- this.displayName = response.displayName;
2678
- const userInfo = response.userInfo;
2679
- let content = '<table>';
2680
- for (const item of userInfo) {
2681
- content += `
2682
- <tr>
2683
- <td style="text-align: right;">${item.caption}:</td>
2684
- <td style="text-align: left;">${item.value}</td>
2685
- </tr>
2686
- `;
2663
+ getSectionList(tenant, className, oid) {
2664
+ return this.http.get('api/data/custom', {
2665
+ params: {
2666
+ tenant,
2667
+ className,
2668
+ oid,
2669
+ executor: 'com.cs.system.section.LoadSections'
2687
2670
  }
2688
- content += '</table>';
2689
- this.content = this.domSanitizer.bypassSecurityTrustHtml(content);
2690
- // 重绘表格宽高
2691
- setTimeout(() => {
2692
- this.service.cellTemplateLoaded$.emit();
2693
- });
2694
2671
  });
2695
2672
  }
2696
2673
  }
2697
- UserInfoTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: UserInfoTemplateComponent, deps: [{ token: DataGridService }, { token: i2$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
2698
- UserInfoTemplateComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: UserInfoTemplateComponent, selector: "rs-user-info-template", inputs: { uid: "uid" }, ngImport: i0, template: "<dx-button #textDiv type=\"default\" stylingMode=\"text\">\n {{displayName}}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'click'\">\n <div *dxTemplate=\"let data of 'content'\">\n <div [innerHTML]=\"content\"></div>\n </div>\n </dx-tooltip>\n</dx-button>\n<br/>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }] });
2699
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: UserInfoTemplateComponent, decorators: [{
2700
- type: Component,
2701
- args: [{ selector: 'rs-user-info-template', template: "<dx-button #textDiv type=\"default\" stylingMode=\"text\">\n {{displayName}}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'click'\">\n <div *dxTemplate=\"let data of 'content'\">\n <div [innerHTML]=\"content\"></div>\n </div>\n </dx-tooltip>\n</dx-button>\n<br/>\n" }]
2702
- }], ctorParameters: function () { return [{ type: DataGridService }, { type: i2$2.DomSanitizer }]; }, propDecorators: { uid: [{
2703
- type: Input
2704
- }] } });
2674
+ DataDetailService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
2675
+ DataDetailServiceprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailService });
2676
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailService, decorators: [{
2677
+ type: Injectable
2678
+ }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
2705
2679
 
2706
- class UnitInfoTemplateComponent {
2707
- constructor(service, domSanitizer) {
2708
- this.service = service;
2709
- this.domSanitizer = domSanitizer;
2680
+ class FormService {
2681
+ constructor(http) {
2682
+ this.http = http;
2710
2683
  }
2711
- ngOnInit() {
2712
- this.service.getUnitInfo(this.uid).subscribe(response => {
2713
- this.displayName = response.displayName;
2714
- const unitInfo = response.unitInfo;
2715
- let content = '<table>';
2716
- for (const item of unitInfo) {
2717
- content += `
2718
- <tr>
2719
- <td style="text-align: right;">${item.caption}:</td>
2720
- <td style="text-align: left;">${item.value}</td>
2721
- </tr>
2722
- `;
2684
+ getFormTemplateConfig(tenant, className, template) {
2685
+ return this.http.get('api/metadata/form/' + className, {
2686
+ params: {
2687
+ tenant,
2688
+ template: template || ''
2723
2689
  }
2724
- content += '</table>';
2725
- this.content = this.domSanitizer.bypassSecurityTrustHtml(content);
2726
- // 重绘表格宽高
2727
- setTimeout(() => {
2728
- this.service.cellTemplateLoaded$.emit();
2729
- });
2730
2690
  });
2731
2691
  }
2732
- }
2733
- UnitInfoTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: UnitInfoTemplateComponent, deps: [{ token: DataGridService }, { token: i2$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
2734
- UnitInfoTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: UnitInfoTemplateComponent, selector: "rs-unit-info-template", inputs: { uid: "uid" }, ngImport: i0, template: "<dx-button #textDiv type=\"default\" stylingMode=\"text\">\n {{displayName}}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'click'\">\n <div *dxTemplate=\"let data of 'content'\">\n <div [innerHTML]=\"content\"></div>\n </div>\n </dx-tooltip>\n</dx-button>\n<br/>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }] });
2735
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: UnitInfoTemplateComponent, decorators: [{
2736
- type: Component,
2737
- args: [{ selector: 'rs-unit-info-template', template: "<dx-button #textDiv type=\"default\" stylingMode=\"text\">\n {{displayName}}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'click'\">\n <div *dxTemplate=\"let data of 'content'\">\n <div [innerHTML]=\"content\"></div>\n </div>\n </dx-tooltip>\n</dx-button>\n<br/>\n" }]
2738
- }], ctorParameters: function () { return [{ type: DataGridService }, { type: i2$2.DomSanitizer }]; }, propDecorators: { uid: [{
2739
- type: Input
2740
- }] } });
2741
-
2742
- class DataGridComponent {
2743
- constructor(factory, service) {
2744
- this.factory = factory;
2745
- this.service = service;
2746
- this.tenant = 'T';
2747
- this.enableMasterDetail = false;
2748
- this.columns = [];
2749
- this.dataSource = {};
2750
- this.keyExpr = 'oid';
2751
- this.selectedRowKeys = [];
2752
- this.selectedRowKeysChange = new EventEmitter();
2753
- this.selectionMode = 'none';
2754
- this.onDxDataGridCellPrepared = new EventEmitter();
2755
- this.onDxDataGridContentReady = new EventEmitter();
2756
- this.onDxDataGridSelectionChanged = new EventEmitter();
2757
- }
2758
- ngOnInit() {
2759
- this.reload();
2760
- this.service.cellTemplateLoaded$.pipe(debounceTime(200)).subscribe(() => {
2761
- this.dxDataGrid.instance.resize();
2692
+ getOne(tenant, className, oid, template, isCopy) {
2693
+ let api = 'api/data/' + className + '/' + oid;
2694
+ return this.http.get(api, {
2695
+ params: {
2696
+ tenant,
2697
+ template: template || '',
2698
+ isCopy: !!isCopy
2699
+ }
2762
2700
  });
2763
2701
  }
2764
- reload() {
2765
- this.columns.length = 0;
2766
- this.factory.makeDataGridColumns(this.tenant, this.className, this.view).subscribe(columns => {
2767
- if (this.customColumnFn) {
2768
- this.customColumnFn(columns);
2702
+ getInitModelByTemplate(tenant, className, template) {
2703
+ let api = 'api/data/' + className + '/new';
2704
+ return this.http.get(api, {
2705
+ params: {
2706
+ tenant,
2707
+ className,
2708
+ template: template || ''
2769
2709
  }
2770
- this.columns = columns;
2771
2710
  });
2772
- this.dataSource = this.factory.makeDataGridDataSource(this.tenant, this.className, this.view, this.filter, this.dataGridName);
2773
2711
  }
2774
- convertMultipleValueCellText(cellInfo) {
2775
- if (!cellInfo.value) {
2776
- return;
2712
+ createOrUpdate(tenant, className, model) {
2713
+ let api = 'api/data/' + className;
2714
+ if (model.oid) {
2715
+ api += '/' + model.oid;
2777
2716
  }
2778
- if (Array.isArray(cellInfo.value)) {
2779
- if (cellInfo.column.lookup) {
2780
- return cellInfo.value.map((item) => cellInfo.column.lookup.calculateCellValue(item)).join('<br />');
2717
+ return this.http.post(api, model, {
2718
+ params: {
2719
+ tenant
2781
2720
  }
2782
- return cellInfo.value.join('<br />');
2783
- }
2784
- if (cellInfo.column.lookup) {
2785
- return cellInfo.column.lookup.calculateCellValue(cellInfo.value);
2786
- }
2787
- return cellInfo.value;
2721
+ });
2788
2722
  }
2789
- getOriginalValue(cellInfo, key) {
2790
- const config = cellInfo.column[key];
2791
- if (config) {
2792
- const value = cellInfo.data[config.field];
2793
- if (value) {
2794
- if (Array.isArray(value)) {
2795
- return value;
2796
- }
2797
- return [value];
2798
- }
2799
- return [];
2800
- }
2801
- return cellInfo.data[key];
2723
+ }
2724
+ FormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
2725
+ FormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormService });
2726
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormService, decorators: [{
2727
+ type: Injectable
2728
+ }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
2729
+
2730
+ class FormComponent {
2731
+ constructor(viewContainerRef, service, elementRef) {
2732
+ this.viewContainerRef = viewContainerRef;
2733
+ this.service = service;
2734
+ this.elementRef = elementRef;
2735
+ this.tenant = 'T';
2736
+ this.onlyFrontEnd = false; // 仅前端,不通过oid获取实例model
2737
+ this.readonly = false;
2738
+ this.submitCallback = new EventEmitter();
2739
+ this.loading = false;
2740
+ this.changeFilter = new ChangeFilter();
2802
2741
  }
2803
- refresh(callback) {
2804
- this.dxDataGrid.instance.refresh().then(() => {
2805
- if (callback) {
2806
- callback();
2807
- }
2742
+ ngOnInit() {
2743
+ this.load();
2744
+ this.changeFilter.anyNotFirst(['tenant', 'className', 'oid', 'copyOid', 'template'], () => {
2745
+ this.load();
2808
2746
  });
2809
2747
  }
2810
- getSelectedRowKeys() {
2811
- return this.dxDataGrid.instance.getSelectedRowKeys();
2748
+ ngOnChanges(changes) {
2749
+ this.changeFilter.doFilter(changes);
2812
2750
  }
2813
- onCellPrepared($event) {
2814
- this.onDxDataGridCellPrepared.emit($event);
2751
+ ngOnDestroy() {
2752
+ this.changeFilter.dispose();
2815
2753
  }
2816
- onContentReady($event) {
2817
- this.onDxDataGridContentReady.emit($event);
2754
+ load() {
2755
+ this.loading = true;
2756
+ this.params = Object.assign(this.params || {}, {
2757
+ __form: {
2758
+ tenant: this.tenant,
2759
+ className: this.className,
2760
+ oid: this.oid,
2761
+ copyOid: this.copyOid,
2762
+ template: this.template
2763
+ }
2764
+ });
2765
+ this.service.getFormTemplateConfig(this.tenant, this.className, this.template).subscribe(response => {
2766
+ this.config = response.data.template;
2767
+ if (this.onlyFrontEnd) {
2768
+ this.loading = false;
2769
+ }
2770
+ else if (this.copyOid || this.oid) {
2771
+ this.service.getOne(this.tenant, this.className, this.copyOid || this.oid, this.template, this.copyOid)
2772
+ .subscribe(response => {
2773
+ this.model = response.data;
2774
+ this.loading = false;
2775
+ });
2776
+ }
2777
+ else {
2778
+ this.service.getInitModelByTemplate(this.tenant, this.className, this.template).subscribe(response => {
2779
+ this.model = response.data;
2780
+ this.loading = false;
2781
+ });
2782
+ }
2783
+ });
2818
2784
  }
2819
- onSelectionChanged($event) {
2820
- this.onDxDataGridSelectionChanged.emit($event);
2785
+ submitForm() {
2786
+ this.validate().then(isValid => {
2787
+ if (isValid) {
2788
+ const mergeModel = { ...this.model };
2789
+ if (this.extraAttrMap) {
2790
+ for (const entry of this.extraAttrMap) {
2791
+ mergeModel[entry.name] = entry.value;
2792
+ }
2793
+ }
2794
+ this.service.createOrUpdate(this.tenant, this.className, {
2795
+ oid: this.oid,
2796
+ ...mergeModel
2797
+ }).subscribe(response => {
2798
+ this.submitCallback.emit(response);
2799
+ });
2800
+ }
2801
+ else {
2802
+ this.submitCallback.emit({ success: false });
2803
+ }
2804
+ });
2821
2805
  }
2822
- onEditorPreparing($event) {
2823
- if ($event.parentType === 'filterRow' && $event.editorName === 'dxTextBox') {
2824
- $event.editorOptions.valueChangeEvent = 'blur';
2825
- $event.editorOptions.onEnterKey = (e) => {
2826
- e.component.blur();
2827
- };
2806
+ scrollToAnchorPoint(anchorPointId) {
2807
+ const points = this.elementRef.nativeElement.getElementsByClassName('__anchor_point_' + anchorPointId);
2808
+ if (points.length > 0) {
2809
+ points[0].scrollIntoView();
2828
2810
  }
2829
2811
  }
2812
+ validate() {
2813
+ return validate_group(this.validator);
2814
+ }
2815
+ submit() {
2816
+ this.formSubmitter.instance.element().click();
2817
+ }
2830
2818
  }
2831
- DataGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridComponent, deps: [{ token: DataGridFactory }, { token: DataGridService }], target: i0.ɵɵFactoryTarget.Component });
2832
- DataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DataGridComponent, selector: "rs-data-grid", inputs: { tenant: "tenant", className: "className", view: "view", filter: "filter", enableMasterDetail: "enableMasterDetail", dataGridName: "dataGridName", keyExpr: "keyExpr", height: "height", selectedRowKeys: "selectedRowKeys", selectionMode: "selectionMode", customColumnFn: "customColumnFn" }, outputs: { selectedRowKeysChange: "selectedRowKeysChange", onDxDataGridCellPrepared: "onDxDataGridCellPrepared", onDxDataGridContentReady: "onDxDataGridContentReady", onDxDataGridSelectionChanged: "onDxDataGridSelectionChanged" }, providers: [DataGridService], queries: [{ propertyName: "masterDetailTemplate", first: true, predicate: MasterDetailTemplateDirective, descendants: true }, { propertyName: "rowButtonsTemplate", first: true, predicate: RowButtonsTemplateDirective, descendants: true }, { propertyName: "instanceLinkTemplate", first: true, predicate: InstanceLinkTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "dxDataGrid", first: true, predicate: DxDataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<dx-data-grid [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\r\n [syncLookupFilterValues]=\"false\"\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n [height]=\"height\"\r\n [keyExpr]=\"keyExpr\"\r\n [selectedRowKeys]=\"selectedRowKeys\"\r\n (selectedRowKeysChange)=\"selectedRowKeysChange.emit($event)\"\r\n (onCellPrepared)=\"onCellPrepared($event)\"\r\n (onEditorPreparing)=\"onEditorPreparing($event)\"\r\n (onContentReady)=\"onContentReady($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onRowExpanding)=\"$event.component.collapseAll(-1)\">\r\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\r\n <dxo-selection [mode]=\"selectionMode\" selectAllMode=\"page\" showCheckBoxesMode=\"always\"></dxo-selection>\r\n <dxo-header-filter [visible]=\"true\">\r\n <dxo-search [enabled]=\"true\"></dxo-search>\r\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\r\n </dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-remote-operations [filtering]=\"true\"\r\n [sorting]=\"true\"\r\n [paging]=\"true\">\r\n </dxo-remote-operations>\r\n <dxo-master-detail [enabled]=\"enableMasterDetail\" template=\"masterDetailTemplate\"></dxo-master-detail>\r\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\r\n <dxo-pager [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\r\n [showPageSizeSelector]=\"true\"\r\n [allowedPageSizes]=\"[15, 30, 50]\"\r\n ></dxo-pager>\r\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\r\n <div *dxTemplate=\"let cellInfo of 'masterDetailTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"masterDetailTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowButtonsTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"rowButtonsTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'instanceLinkTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"instanceLinkTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\r\n {{ cellInfo.rowIndex + 1 }}\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\r\n <div [innerHTML]=\"convertMultipleValueCellText(cellInfo)\"></div>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\r\n <div #textDiv style=\"text-overflow: ellipsis; overflow: hidden; cursor: pointer;\">{{ cellInfo.value }}</div>\r\n <dx-tooltip [target]=\"textDiv\"\r\n [position]=\"'top'\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <p style=\"max-width: 320px; text-align: left; white-space: normal;\" [innerText]=\"cellInfo.value\"></p>\r\n </div>\r\n </dx-tooltip>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'fileCellTemplate'\">\r\n <ng-container *ngFor=\"let file of cellInfo.value\">\r\n <rs-file-cell-template [file]=\"file\"></rs-file-cell-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'userCellTemplate'\">\r\n <ng-container *ngFor=\"let user of getOriginalValue(cellInfo, 'userInfo')\">\r\n <rs-user-info-template [uid]=\"user\"></rs-user-info-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'unitCellTemplate'\">\r\n <ng-container *ngFor=\"let unit of getOriginalValue(cellInfo, 'unitInfo')\">\r\n <rs-unit-info-template [uid]=\"unit\"></rs-unit-info-template>\r\n </ng-container>\r\n </div>\r\n</dx-data-grid>\r\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i5$1.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i6$1.DxoSearchComponent, selector: "dxo-search", inputs: ["editorOptions", "enabled", "timeout", "mode", "searchExpr"] }, { kind: "component", type: i6$1.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "recursive", "selectByClick", "deferred", "mode", "selectAllMode", "showCheckBoxesMode"] }, { kind: "component", type: i6$1.DxoTextsComponent, selector: "dxo-texts", inputs: ["fix", "leftPosition", "rightPosition", "unfix", "addRow", "cancelAllChanges", "cancelRowChanges", "confirmDeleteMessage", "confirmDeleteTitle", "deleteRow", "editRow", "saveAllChanges", "saveRowChanges", "undeleteRow", "validationCancelChanges", "exportAll", "exportSelectedRows", "exportTo", "clearFilter", "createFilter", "filterEnabledHint", "groupByThisColumn", "groupContinuedMessage", "groupContinuesMessage", "ungroup", "ungroupAll", "cancel", "emptyValue", "ok", "avg", "avgOtherColumn", "count", "max", "maxOtherColumn", "min", "minOtherColumn", "sum", "sumOtherColumn", "allFields", "columnFields", "dataFields", "filterFields", "rowFields", "columnFieldArea", "dataFieldArea", "filterFieldArea", "rowFieldArea", "collapseAll", "dataNotAvailable", "expandAll", "exportToExcel", "grandTotal", "noData", "removeAllSorting", "showFieldChooser", "sortColumnBySummary", "sortRowBySummary", "total", "addRowToNode"] }, { kind: "component", type: i6$1.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "allowSelectAll", "dataSource", "groupInterval", "height", "search", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i6$1.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i6$1.DxoMasterDetailComponent, selector: "dxo-master-detail", inputs: ["autoExpandAll", "enabled", "template"] }, { kind: "component", type: i6$1.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i6$1.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i6$1.DxoRemoteOperationsComponent, selector: "dxo-remote-operations", inputs: ["filtering", "grouping", "groupPaging", "paging", "sorting", "summary"] }, { kind: "component", type: i6$1.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i6$1.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "component", type: i5.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: FileCellTemplateComponent, selector: "rs-file-cell-template", inputs: ["file"] }, { kind: "component", type: UserInfoTemplateComponent, selector: "rs-user-info-template", inputs: ["uid"] }, { kind: "component", type: UnitInfoTemplateComponent, selector: "rs-unit-info-template", inputs: ["uid"] }] });
2833
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridComponent, decorators: [{
2819
+ FormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormComponent, deps: [{ token: i0.ViewContainerRef }, { token: FormService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2820
+ FormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: FormComponent, selector: "rs-form", inputs: { tenant: "tenant", className: "className", oid: "oid", copyOid: "copyOid", template: "template", extraAttrMap: "extraAttrMap", opener: "opener", params: "params", tabViewContainerRef: "tabViewContainerRef", onlyFrontEnd: "onlyFrontEnd", model: "model", readonly: "readonly" }, outputs: { submitCallback: "submitCallback" }, providers: [FormService], viewQueries: [{ propertyName: "validator", first: true, predicate: DxValidationGroupComponent, descendants: true }, { propertyName: "formSubmitter", first: true, predicate: ["formSubmitter"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\r\n [visible]=\"loading\">\r\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\r\n</dx-load-panel>\r\n<dx-validation-group *ngIf=\"!loading\">\r\n <rs-box-container [config]=\"config\"\r\n [model]=\"model\"\r\n [opener]=\"this\"\r\n [params]=\"params\"\r\n [tabViewContainerRef]=\"tabViewContainerRef\"\r\n [readonly]=\"readonly\"></rs-box-container>\r\n <dx-button #formSubmitter [visible]=\"false\" (onClick)=\"submitForm()\"></dx-button>\r\n</dx-validation-group>\r\n", styles: [":host{padding:12px 24px 20px}:host dx-validation-group{display:flex;flex-flow:row nowrap}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BoxContainerComponent, selector: "rs-box-container", inputs: ["config", "model", "opener", "params", "readonly", "tabViewContainerRef"] }, { kind: "component", type: i6$1.DxoPositionComponent, selector: "dxo-position", inputs: ["at", "boundary", "boundaryOffset", "collision", "my", "of", "offset"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i6.DxLoadPanelComponent, selector: "dx-load-panel", inputs: ["animation", "closeOnOutsideClick", "container", "copyRootClassesToWrapper", "deferRendering", "delay", "elementAttr", "focusStateEnabled", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "indicatorSrc", "maxHeight", "maxWidth", "message", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showIndicator", "showPane", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "delayChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "indicatorSrcChange", "maxHeightChange", "maxWidthChange", "messageChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showIndicatorChange", "showPaneChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i7.DxValidationGroupComponent, selector: "dx-validation-group", inputs: ["elementAttr", "height", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "elementAttrChange", "heightChange", "widthChange"] }] });
2821
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormComponent, decorators: [{
2834
2822
  type: Component,
2835
- args: [{ selector: 'rs-data-grid', providers: [DataGridService], template: "<dx-data-grid [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\r\n [syncLookupFilterValues]=\"false\"\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n [height]=\"height\"\r\n [keyExpr]=\"keyExpr\"\r\n [selectedRowKeys]=\"selectedRowKeys\"\r\n (selectedRowKeysChange)=\"selectedRowKeysChange.emit($event)\"\r\n (onCellPrepared)=\"onCellPrepared($event)\"\r\n (onEditorPreparing)=\"onEditorPreparing($event)\"\r\n (onContentReady)=\"onContentReady($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onRowExpanding)=\"$event.component.collapseAll(-1)\">\r\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\r\n <dxo-selection [mode]=\"selectionMode\" selectAllMode=\"page\" showCheckBoxesMode=\"always\"></dxo-selection>\r\n <dxo-header-filter [visible]=\"true\">\r\n <dxo-search [enabled]=\"true\"></dxo-search>\r\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\r\n </dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-remote-operations [filtering]=\"true\"\r\n [sorting]=\"true\"\r\n [paging]=\"true\">\r\n </dxo-remote-operations>\r\n <dxo-master-detail [enabled]=\"enableMasterDetail\" template=\"masterDetailTemplate\"></dxo-master-detail>\r\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\r\n <dxo-pager [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\r\n [showPageSizeSelector]=\"true\"\r\n [allowedPageSizes]=\"[15, 30, 50]\"\r\n ></dxo-pager>\r\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\r\n <div *dxTemplate=\"let cellInfo of 'masterDetailTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"masterDetailTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowButtonsTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"rowButtonsTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'instanceLinkTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"instanceLinkTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\r\n {{ cellInfo.rowIndex + 1 }}\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\r\n <div [innerHTML]=\"convertMultipleValueCellText(cellInfo)\"></div>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\r\n <div #textDiv style=\"text-overflow: ellipsis; overflow: hidden; cursor: pointer;\">{{ cellInfo.value }}</div>\r\n <dx-tooltip [target]=\"textDiv\"\r\n [position]=\"'top'\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <p style=\"max-width: 320px; text-align: left; white-space: normal;\" [innerText]=\"cellInfo.value\"></p>\r\n </div>\r\n </dx-tooltip>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'fileCellTemplate'\">\r\n <ng-container *ngFor=\"let file of cellInfo.value\">\r\n <rs-file-cell-template [file]=\"file\"></rs-file-cell-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'userCellTemplate'\">\r\n <ng-container *ngFor=\"let user of getOriginalValue(cellInfo, 'userInfo')\">\r\n <rs-user-info-template [uid]=\"user\"></rs-user-info-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'unitCellTemplate'\">\r\n <ng-container *ngFor=\"let unit of getOriginalValue(cellInfo, 'unitInfo')\">\r\n <rs-unit-info-template [uid]=\"unit\"></rs-unit-info-template>\r\n </ng-container>\r\n </div>\r\n</dx-data-grid>\r\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"] }]
2836
- }], ctorParameters: function () { return [{ type: DataGridFactory }, { type: DataGridService }]; }, propDecorators: { tenant: [{
2823
+ args: [{ selector: 'rs-form', providers: [FormService], template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\r\n [visible]=\"loading\">\r\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\r\n</dx-load-panel>\r\n<dx-validation-group *ngIf=\"!loading\">\r\n <rs-box-container [config]=\"config\"\r\n [model]=\"model\"\r\n [opener]=\"this\"\r\n [params]=\"params\"\r\n [tabViewContainerRef]=\"tabViewContainerRef\"\r\n [readonly]=\"readonly\"></rs-box-container>\r\n <dx-button #formSubmitter [visible]=\"false\" (onClick)=\"submitForm()\"></dx-button>\r\n</dx-validation-group>\r\n", styles: [":host{padding:12px 24px 20px}:host dx-validation-group{display:flex;flex-flow:row nowrap}\n"] }]
2824
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: FormService }, { type: i0.ElementRef }]; }, propDecorators: { tenant: [{
2837
2825
  type: Input
2838
2826
  }], className: [{
2839
2827
  type: Input
2840
- }], view: [{
2828
+ }], oid: [{
2841
2829
  type: Input
2842
- }], filter: [{
2830
+ }], copyOid: [{
2843
2831
  type: Input
2844
- }], enableMasterDetail: [{
2832
+ }], template: [{
2845
2833
  type: Input
2846
- }], dataGridName: [{
2834
+ }], extraAttrMap: [{
2847
2835
  type: Input
2848
- }], keyExpr: [{
2836
+ }], opener: [{
2849
2837
  type: Input
2850
- }], height: [{
2838
+ }], params: [{
2851
2839
  type: Input
2852
- }], selectedRowKeys: [{
2840
+ }], tabViewContainerRef: [{
2853
2841
  type: Input
2854
- }], selectedRowKeysChange: [{
2855
- type: Output
2856
- }], selectionMode: [{
2842
+ }], onlyFrontEnd: [{
2857
2843
  type: Input
2858
- }], customColumnFn: [{
2844
+ }], model: [{
2859
2845
  type: Input
2860
- }], onDxDataGridCellPrepared: [{
2861
- type: Output
2862
- }], onDxDataGridContentReady: [{
2863
- type: Output
2864
- }], onDxDataGridSelectionChanged: [{
2865
- type: Output
2866
- }], dxDataGrid: [{
2846
+ }], readonly: [{
2847
+ type: Input
2848
+ }], validator: [{
2867
2849
  type: ViewChild,
2868
- args: [DxDataGridComponent, { static: true }]
2869
- }], masterDetailTemplate: [{
2870
- type: ContentChild,
2871
- args: [MasterDetailTemplateDirective]
2872
- }], rowButtonsTemplate: [{
2873
- type: ContentChild,
2874
- args: [RowButtonsTemplateDirective]
2875
- }], instanceLinkTemplate: [{
2876
- type: ContentChild,
2877
- args: [InstanceLinkTemplateDirective]
2850
+ args: [DxValidationGroupComponent]
2851
+ }], formSubmitter: [{
2852
+ type: ViewChild,
2853
+ args: ['formSubmitter']
2854
+ }], submitCallback: [{
2855
+ type: Output
2878
2856
  }] } });
2879
2857
 
2880
- class DataGridModule {
2858
+ class DataDetailComponent {
2859
+ constructor(viewContainerRef, service) {
2860
+ this.viewContainerRef = viewContainerRef;
2861
+ this.service = service;
2862
+ this.sections = [];
2863
+ this.loading = false;
2864
+ }
2865
+ ngOnInit() {
2866
+ this.loading = true;
2867
+ this.service.getSectionList(this.tenant, this.className, this.oid).subscribe(response => {
2868
+ window.coast.tabManager.setTitle.next({
2869
+ id: 'detail:' + this.tenant + '_' + this.className + '_' + this.oid,
2870
+ title: response.data.title
2871
+ });
2872
+ this.sections = response.data.list;
2873
+ this.loading = false;
2874
+ });
2875
+ }
2881
2876
  }
2882
- DataGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2883
- DataGridModulemod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: DataGridModule, declarations: [DataGridComponent,
2884
- FileCellTemplateComponent,
2885
- InstanceLinkTemplateDirective,
2886
- MasterDetailTemplateDirective,
2887
- RowButtonsTemplateDirective,
2888
- UserInfoTemplateComponent,
2889
- UnitInfoTemplateComponent], imports: [CommonModule,
2890
- DevExtremeModule], exports: [DataGridComponent,
2891
- InstanceLinkTemplateDirective,
2892
- MasterDetailTemplateDirective,
2893
- RowButtonsTemplateDirective] });
2894
- DataGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridModule, imports: [CommonModule,
2895
- DevExtremeModule] });
2896
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridModule, decorators: [{
2897
- type: NgModule,
2898
- args: [{
2899
- declarations: [
2900
- DataGridComponent,
2901
- FileCellTemplateComponent,
2902
- InstanceLinkTemplateDirective,
2903
- MasterDetailTemplateDirective,
2904
- RowButtonsTemplateDirective,
2905
- UserInfoTemplateComponent,
2906
- UnitInfoTemplateComponent
2907
- ],
2908
- imports: [
2909
- CommonModule,
2910
- DevExtremeModule
2911
- ],
2912
- exports: [
2913
- DataGridComponent,
2914
- InstanceLinkTemplateDirective,
2915
- MasterDetailTemplateDirective,
2916
- RowButtonsTemplateDirective
2917
- ]
2918
- }]
2919
- }] });
2877
+ DataDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailComponent, deps: [{ token: i0.ViewContainerRef }, { token: DataDetailService }], target: i0.ɵɵFactoryTarget.Component });
2878
+ DataDetailComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DataDetailComponent, selector: "coast-data-detail", providers: [DataDetailService], ngImport: i0, template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\n [visible]=\"loading\">\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\n</dx-load-panel>\n<div *ngIf=\"!loading && sections.length === 0\" class=\"empty\">\n <span>\u60A8\u65E0\u6743\u67E5\u770B\u8BE5\u6570\u636E\u5B9E\u4F8B\u4EFB\u4F55\u4FE1\u606F</span>\n</div>\n<ng-container *ngIf=\"sections.length > 0\">\n <dx-accordion [collapsible]=\"true\" [multiple]=\"true\" [deferRendering]=\"false\" [dataSource]=\"sections\"\n [selectedItems]=\"sections\">\n <div *dxTemplate=\"let section of 'title'\" class=\"section-title\">\n <div class=\"section-title-name\">{{ section.name }}</div>\n </div>\n <div *dxTemplate=\"let section of 'item'\">\n <rs-form [tenant]=\"tenant\" [className]=\"className\" [oid]=\"oid\" [template]=\"section.formTemplate\" [params]=\"params\"\n [tabViewContainerRef]=\"tabViewContainerRef\" [readonly]=\"true\"></rs-form>\n </div>\n </dx-accordion>\n</ng-container>\n", styles: [":host{flex:1;padding:24px;display:flex;flex-flow:column nowrap}:host div.empty{flex:1;padding:16px;display:flex;flex-flow:row nowrap;justify-content:center;align-items:center}:host div.empty span{text-align:center;-webkit-user-select:none;user-select:none}:host .section-title{border-bottom:1px solid var(--coast-border-color, #dddddd)}:host .section-title .section-title-name{height:24px;font-size:14px;font-weight:700;padding:4px 8px;display:flex;flex-flow:column nowrap;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.DxAccordionComponent, selector: "dx-accordion", inputs: ["accessKey", "activeStateEnabled", "animationDuration", "collapsible", "dataSource", "deferRendering", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "itemHoldTimeout", "items", "itemTemplate", "itemTitleTemplate", "keyExpr", "multiple", "noDataText", "repaintChangesOnly", "rtlEnabled", "selectedIndex", "selectedItem", "selectedItemKeys", "selectedItems", "tabIndex", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onItemClick", "onItemContextMenu", "onItemHold", "onItemRendered", "onItemTitleClick", "onOptionChanged", "onSelectionChanged", "accessKeyChange", "activeStateEnabledChange", "animationDurationChange", "collapsibleChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "itemHoldTimeoutChange", "itemsChange", "itemTemplateChange", "itemTitleTemplateChange", "keyExprChange", "multipleChange", "noDataTextChange", "repaintChangesOnlyChange", "rtlEnabledChange", "selectedIndexChange", "selectedItemChange", "selectedItemKeysChange", "selectedItemsChange", "tabIndexChange", "visibleChange", "widthChange"] }, { kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i6$1.DxoPositionComponent, selector: "dxo-position", inputs: ["at", "boundary", "boundaryOffset", "collision", "my", "of", "offset"] }, { kind: "component", type: i6.DxLoadPanelComponent, selector: "dx-load-panel", inputs: ["animation", "closeOnOutsideClick", "container", "copyRootClassesToWrapper", "deferRendering", "delay", "elementAttr", "focusStateEnabled", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "indicatorSrc", "maxHeight", "maxWidth", "message", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showIndicator", "showPane", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "delayChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "indicatorSrcChange", "maxHeightChange", "maxWidthChange", "messageChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showIndicatorChange", "showPaneChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: FormComponent, selector: "rs-form", inputs: ["tenant", "className", "oid", "copyOid", "template", "extraAttrMap", "opener", "params", "tabViewContainerRef", "onlyFrontEnd", "model", "readonly"], outputs: ["submitCallback"] }] });
2879
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailComponent, decorators: [{
2880
+ type: Component,
2881
+ args: [{ selector: 'coast-data-detail', providers: [DataDetailService], template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\n [visible]=\"loading\">\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\n</dx-load-panel>\n<div *ngIf=\"!loading && sections.length === 0\" class=\"empty\">\n <span>\u60A8\u65E0\u6743\u67E5\u770B\u8BE5\u6570\u636E\u5B9E\u4F8B\u4EFB\u4F55\u4FE1\u606F</span>\n</div>\n<ng-container *ngIf=\"sections.length > 0\">\n <dx-accordion [collapsible]=\"true\" [multiple]=\"true\" [deferRendering]=\"false\" [dataSource]=\"sections\"\n [selectedItems]=\"sections\">\n <div *dxTemplate=\"let section of 'title'\" class=\"section-title\">\n <div class=\"section-title-name\">{{ section.name }}</div>\n </div>\n <div *dxTemplate=\"let section of 'item'\">\n <rs-form [tenant]=\"tenant\" [className]=\"className\" [oid]=\"oid\" [template]=\"section.formTemplate\" [params]=\"params\"\n [tabViewContainerRef]=\"tabViewContainerRef\" [readonly]=\"true\"></rs-form>\n </div>\n </dx-accordion>\n</ng-container>\n", styles: [":host{flex:1;padding:24px;display:flex;flex-flow:column nowrap}:host div.empty{flex:1;padding:16px;display:flex;flex-flow:row nowrap;justify-content:center;align-items:center}:host div.empty span{text-align:center;-webkit-user-select:none;user-select:none}:host .section-title{border-bottom:1px solid var(--coast-border-color, #dddddd)}:host .section-title .section-title-name{height:24px;font-size:14px;font-weight:700;padding:4px 8px;display:flex;flex-flow:column nowrap;justify-content:center}\n"] }]
2882
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: DataDetailService }]; } });
2920
2883
 
2921
- class DataDetailService {
2922
- constructor(http) {
2923
- this.http = http;
2884
+ class DrawerComponent {
2885
+ constructor(elementRef) {
2886
+ this.elementRef = elementRef;
2887
+ this.size = 'default';
2888
+ this._width = '480px';
2924
2889
  }
2925
- getSectionList(tenant, className, oid) {
2926
- return this.http.get('api/data/custom', {
2927
- params: {
2928
- tenant,
2929
- className,
2930
- oid,
2931
- executor: 'com.cs.system.section.LoadSections'
2890
+ ngOnInit() {
2891
+ if (this.size === 'large') {
2892
+ this._width = '960px';
2893
+ }
2894
+ }
2895
+ show() {
2896
+ // 若存在多层抽屉,仅保留最上层遮罩颜色,下层遮罩设置为透明
2897
+ const nodeName = this.elementRef.nativeElement.nodeName;
2898
+ const drawers = this._parentViewContainerRef.element.nativeElement.parentElement.querySelectorAll(nodeName);
2899
+ for (let i = 0; i < drawers.length; i++) {
2900
+ if (i === drawers.length - 1) {
2901
+ drawers[i].querySelector('.drawer-backdrop').style.backgroundColor = 'rgba(37, 43, 58, 0.05)';
2932
2902
  }
2933
- });
2903
+ else {
2904
+ drawers[i].querySelector('.drawer-backdrop').style.backgroundColor = 'rgba(37, 43, 58, 0)';
2905
+ }
2906
+ }
2907
+ }
2908
+ hide($event, backdrop) {
2909
+ // 在service中重写
2910
+ }
2911
+ ngOnDestroy() {
2912
+ // 若存在多层抽屉,下一层遮罩设置为不透明
2913
+ const nodeName = this.elementRef.nativeElement.nodeName;
2914
+ const nextDrawer = this._parentViewContainerRef.element.nativeElement.parentElement.querySelector(nodeName + ':nth-last-child(2)');
2915
+ if (nextDrawer) {
2916
+ nextDrawer.querySelector('.drawer-backdrop').style.backgroundColor = 'rgba(37, 43, 58, 0.05)';
2917
+ }
2934
2918
  }
2935
2919
  }
2936
- DataDetailService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
2937
- DataDetailServiceprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailService });
2938
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailService, decorators: [{
2939
- type: Injectable
2940
- }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
2920
+ DrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2921
+ DrawerComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DrawerComponent, selector: "rs-drawer", ngImport: i0, template: "<div #drawerBackdrop class=\"drawer-backdrop\" (click)=\"hide($event, drawerBackdrop)\">\n <div class=\"drawer\" [ngStyle]=\"{width: _width}\">\n <div *ngIf=\"headerTemplate\" class=\"drawer-header\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"\n [ngTemplateOutletContext]=\"{$implicit: headerTemplateContext}\"></ng-template>\n </div>\n <div class=\"drawer-content\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\"\n [ngTemplateOutletContext]=\"{$implicit: contentTemplateContext}\"></ng-template>\n </div>\n <div class=\"drawer-close\">\n <dx-button height=\"40px\" icon=\"coast-icon coast-icon-arrow-right-filling\" (onClick)=\"hide($event)\"></dx-button>\n </div>\n </div>\n</div>\n", styles: [":host .drawer-backdrop{position:absolute;inset:0;z-index:calc(var(--coast-z-index-drawer, 1040) - 1)}:host .drawer-backdrop .drawer{position:absolute;right:0;height:100%;z-index:var(--coast-z-index-drawer, 1040);background-color:var(--coast-base-bg-color, #fff);display:flex;flex-flow:column nowrap}:host .drawer-backdrop .drawer .drawer-header{flex:0 0 36px;padding:8px;border-bottom:1px solid var(--coast-border-color, #dddddd);display:flex;flex-flow:row nowrap;align-items:center;justify-content:flex-end}:host .drawer-backdrop .drawer .drawer-content{flex:1;overflow:auto;display:flex;flex-flow:column nowrap}:host .drawer-backdrop .drawer .drawer-close{position:absolute;height:100%;width:20px;top:0;left:-20px;display:flex;flex-flow:row nowrap;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }] });
2922
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerComponent, decorators: [{
2923
+ type: Component,
2924
+ args: [{ selector: 'rs-drawer', template: "<div #drawerBackdrop class=\"drawer-backdrop\" (click)=\"hide($event, drawerBackdrop)\">\n <div class=\"drawer\" [ngStyle]=\"{width: _width}\">\n <div *ngIf=\"headerTemplate\" class=\"drawer-header\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"\n [ngTemplateOutletContext]=\"{$implicit: headerTemplateContext}\"></ng-template>\n </div>\n <div class=\"drawer-content\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\"\n [ngTemplateOutletContext]=\"{$implicit: contentTemplateContext}\"></ng-template>\n </div>\n <div class=\"drawer-close\">\n <dx-button height=\"40px\" icon=\"coast-icon coast-icon-arrow-right-filling\" (onClick)=\"hide($event)\"></dx-button>\n </div>\n </div>\n</div>\n", styles: [":host .drawer-backdrop{position:absolute;inset:0;z-index:calc(var(--coast-z-index-drawer, 1040) - 1)}:host .drawer-backdrop .drawer{position:absolute;right:0;height:100%;z-index:var(--coast-z-index-drawer, 1040);background-color:var(--coast-base-bg-color, #fff);display:flex;flex-flow:column nowrap}:host .drawer-backdrop .drawer .drawer-header{flex:0 0 36px;padding:8px;border-bottom:1px solid var(--coast-border-color, #dddddd);display:flex;flex-flow:row nowrap;align-items:center;justify-content:flex-end}:host .drawer-backdrop .drawer .drawer-content{flex:1;overflow:auto;display:flex;flex-flow:column nowrap}:host .drawer-backdrop .drawer .drawer-close{position:absolute;height:100%;width:20px;top:0;left:-20px;display:flex;flex-flow:row nowrap;align-items:center}\n"] }]
2925
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
2941
2926
 
2942
- class FormService {
2943
- constructor(http) {
2944
- this.http = http;
2927
+ class DrawerService {
2928
+ constructor() {
2945
2929
  }
2946
- getFormTemplateConfig(tenant, className, template) {
2947
- return this.http.get('api/metadata/form/' + className, {
2948
- params: {
2949
- tenant,
2950
- template: template || ''
2930
+ open(viewContainerRef, size = 'default', contentTemplate, contentTemplateContext, headerTemplate, headerTemplateContext) {
2931
+ const drawerRef = viewContainerRef.createComponent(DrawerComponent);
2932
+ drawerRef.instance.hide = ($event, backdrop) => {
2933
+ if ($event.target === backdrop) {
2934
+ drawerRef.hostView.destroy();
2951
2935
  }
2952
- });
2936
+ };
2937
+ drawerRef.instance.size = size;
2938
+ drawerRef.instance.headerTemplate = headerTemplate;
2939
+ drawerRef.instance.headerTemplateContext = headerTemplateContext;
2940
+ drawerRef.instance.contentTemplate = contentTemplate;
2941
+ drawerRef.instance.contentTemplateContext = contentTemplateContext;
2942
+ drawerRef.instance._parentViewContainerRef = viewContainerRef;
2943
+ drawerRef.instance.show();
2944
+ return drawerRef.instance;
2953
2945
  }
2954
- getOne(tenant, className, oid, template, isCopy) {
2955
- let api = 'api/data/' + className + '/' + oid;
2956
- return this.http.get(api, {
2957
- params: {
2958
- tenant,
2959
- template: template || '',
2960
- isCopy: !!isCopy
2946
+ }
2947
+ DrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2948
+ DrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerService, providedIn: 'root' });
2949
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerService, decorators: [{
2950
+ type: Injectable,
2951
+ args: [{
2952
+ providedIn: 'root'
2953
+ }]
2954
+ }], ctorParameters: function () { return []; } });
2955
+
2956
+ class InstanceLinkTemplateComponent {
2957
+ constructor(service, drawerService) {
2958
+ this.service = service;
2959
+ this.drawerService = drawerService;
2960
+ }
2961
+ openNewTab($event) {
2962
+ $event.event?.stopPropagation();
2963
+ if (!window.coast.tabManager) {
2964
+ notify_warning('此操作仅能在coast-web项目中执行,type:detail,config:tenant=' + this.tenant + ',className=' + this.className + ',oid=' + this.oid);
2965
+ return;
2966
+ }
2967
+ window.coast.tabManager.add.next({
2968
+ type: 'detail',
2969
+ id: 'detail:' + this.tenant + '_' + this.className + '_' + this.oid,
2970
+ title: '',
2971
+ component: DataDetailComponent,
2972
+ config: {
2973
+ tenant: this.tenant,
2974
+ className: this.className,
2975
+ oid: this.oid
2961
2976
  }
2962
2977
  });
2963
2978
  }
2964
- getInitModelByTemplate(tenant, className, template) {
2965
- let api = 'api/data/' + className + '/new';
2966
- return this.http.get(api, {
2967
- params: {
2968
- tenant,
2969
- className,
2970
- template: template || ''
2979
+ openDrawer($event) {
2980
+ $event.event?.stopPropagation();
2981
+ this.drawerService.open(this.drawerViewContainerRef, 'default', this.drawerFormContentTemplate, {
2982
+ template: this.drawerFormTemplate || 'About'
2983
+ }, this.drawerFormHeaderTemplate);
2984
+ }
2985
+ }
2986
+ InstanceLinkTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: InstanceLinkTemplateComponent, deps: [{ token: DataGridService }, { token: DrawerService }], target: i0.ɵɵFactoryTarget.Component });
2987
+ InstanceLinkTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: InstanceLinkTemplateComponent, selector: "rs-instance-link-template", inputs: { tenant: "tenant", className: "className", oid: "oid", instanceLinkType: "instanceLinkType", drawerViewContainerRef: "drawerViewContainerRef", drawerFormTemplate: "drawerFormTemplate" }, viewQueries: [{ propertyName: "drawerFormHeaderTemplate", first: true, predicate: ["drawerFormHeaderTemplate"], descendants: true, static: true }, { propertyName: "drawerFormContentTemplate", first: true, predicate: ["drawerFormContentTemplate"], descendants: true, static: true }], ngImport: i0, template: "<dx-button *ngIf=\"instanceLinkType === 'tab'\"\n type=\"default\"\n stylingMode=\"text\"\n icon=\"coast-icon coast-icon-send\"\n hint=\"\u67E5\u770B\u8BE6\u60C5\"\n (onClick)=\"openNewTab($event)\"></dx-button>\n<dx-button *ngIf=\"instanceLinkType === 'drawer'\"\n type=\"default\"\n stylingMode=\"text\"\n icon=\"coast-icon coast-icon-send\"\n hint=\"\u67E5\u770B\u8BE6\u60C5\"\n (onClick)=\"openDrawer($event)\"></dx-button>\n<ng-template #drawerFormHeaderTemplate>\n <dx-button icon=\"coast-icon coast-icon-send\" text=\"\u5728\u65B0\u9009\u9879\u5361\u4E2D\u67E5\u770B\" (onClick)=\"openNewTab($event)\"></dx-button>\n</ng-template>\n<ng-template #drawerFormContentTemplate let-modalContext>\n <rs-form [tenant]=\"tenant\"\n [className]=\"className\"\n [oid]=\"oid\"\n [template]=\"modalContext.template\"\n [readonly]=\"true\"></rs-form>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: FormComponent, selector: "rs-form", inputs: ["tenant", "className", "oid", "copyOid", "template", "extraAttrMap", "opener", "params", "tabViewContainerRef", "onlyFrontEnd", "model", "readonly"], outputs: ["submitCallback"] }] });
2988
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: InstanceLinkTemplateComponent, decorators: [{
2989
+ type: Component,
2990
+ args: [{ selector: 'rs-instance-link-template', template: "<dx-button *ngIf=\"instanceLinkType === 'tab'\"\n type=\"default\"\n stylingMode=\"text\"\n icon=\"coast-icon coast-icon-send\"\n hint=\"\u67E5\u770B\u8BE6\u60C5\"\n (onClick)=\"openNewTab($event)\"></dx-button>\n<dx-button *ngIf=\"instanceLinkType === 'drawer'\"\n type=\"default\"\n stylingMode=\"text\"\n icon=\"coast-icon coast-icon-send\"\n hint=\"\u67E5\u770B\u8BE6\u60C5\"\n (onClick)=\"openDrawer($event)\"></dx-button>\n<ng-template #drawerFormHeaderTemplate>\n <dx-button icon=\"coast-icon coast-icon-send\" text=\"\u5728\u65B0\u9009\u9879\u5361\u4E2D\u67E5\u770B\" (onClick)=\"openNewTab($event)\"></dx-button>\n</ng-template>\n<ng-template #drawerFormContentTemplate let-modalContext>\n <rs-form [tenant]=\"tenant\"\n [className]=\"className\"\n [oid]=\"oid\"\n [template]=\"modalContext.template\"\n [readonly]=\"true\"></rs-form>\n</ng-template>\n" }]
2991
+ }], ctorParameters: function () { return [{ type: DataGridService }, { type: DrawerService }]; }, propDecorators: { tenant: [{
2992
+ type: Input
2993
+ }], className: [{
2994
+ type: Input
2995
+ }], oid: [{
2996
+ type: Input
2997
+ }], instanceLinkType: [{
2998
+ type: Input
2999
+ }], drawerViewContainerRef: [{
3000
+ type: Input
3001
+ }], drawerFormTemplate: [{
3002
+ type: Input
3003
+ }], drawerFormHeaderTemplate: [{
3004
+ type: ViewChild,
3005
+ args: ['drawerFormHeaderTemplate', { static: true }]
3006
+ }], drawerFormContentTemplate: [{
3007
+ type: ViewChild,
3008
+ args: ['drawerFormContentTemplate', { static: true }]
3009
+ }] } });
3010
+
3011
+ class UnitInfoTemplateComponent {
3012
+ constructor(service, domSanitizer) {
3013
+ this.service = service;
3014
+ this.domSanitizer = domSanitizer;
3015
+ }
3016
+ ngOnInit() {
3017
+ const needRemoteDisplayName = Array.isArray(this.cellInfo.value);
3018
+ if (!needRemoteDisplayName) {
3019
+ this.displayName = this.cellInfo.value;
3020
+ }
3021
+ this.service.getUnitInfo(this.uid).subscribe(response => {
3022
+ if (needRemoteDisplayName) {
3023
+ this.displayName = response.displayName;
2971
3024
  }
3025
+ const unitInfo = response.unitInfo;
3026
+ let content = '<table>';
3027
+ for (const item of unitInfo) {
3028
+ content += `
3029
+ <tr>
3030
+ <td style="text-align: right;">${item.caption}:</td>
3031
+ <td style="text-align: left;">${item.value}</td>
3032
+ </tr>
3033
+ `;
3034
+ }
3035
+ content += '</table>';
3036
+ this.content = this.domSanitizer.bypassSecurityTrustHtml(content);
3037
+ // 重绘表格宽高
3038
+ setTimeout(() => {
3039
+ this.service.cellTemplateLoaded$.emit();
3040
+ });
2972
3041
  });
2973
3042
  }
2974
- createOrUpdate(tenant, className, model) {
2975
- let api = 'api/data/' + className;
2976
- if (model.oid) {
2977
- api += '/' + model.oid;
3043
+ }
3044
+ UnitInfoTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: UnitInfoTemplateComponent, deps: [{ token: DataGridService }, { token: i2$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
3045
+ UnitInfoTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: UnitInfoTemplateComponent, selector: "rs-unit-info-template", inputs: { uid: "uid", cellInfo: "cellInfo" }, ngImport: i0, template: "<dx-button #textDiv type=\"default\" stylingMode=\"text\" (onClick)=\"$event.event?.stopPropagation()\">\n {{ displayName }}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'click'\">\n <div *dxTemplate=\"let data of 'content'\">\n <div [innerHTML]=\"content\"></div>\n </div>\n </dx-tooltip>\n</dx-button>\n<br/>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }] });
3046
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: UnitInfoTemplateComponent, decorators: [{
3047
+ type: Component,
3048
+ args: [{ selector: 'rs-unit-info-template', template: "<dx-button #textDiv type=\"default\" stylingMode=\"text\" (onClick)=\"$event.event?.stopPropagation()\">\n {{ displayName }}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'click'\">\n <div *dxTemplate=\"let data of 'content'\">\n <div [innerHTML]=\"content\"></div>\n </div>\n </dx-tooltip>\n</dx-button>\n<br/>\n" }]
3049
+ }], ctorParameters: function () { return [{ type: DataGridService }, { type: i2$2.DomSanitizer }]; }, propDecorators: { uid: [{
3050
+ type: Input
3051
+ }], cellInfo: [{
3052
+ type: Input
3053
+ }] } });
3054
+
3055
+ class UserInfoTemplateComponent {
3056
+ constructor(service, domSanitizer) {
3057
+ this.service = service;
3058
+ this.domSanitizer = domSanitizer;
3059
+ }
3060
+ ngOnInit() {
3061
+ const needRemoteDisplayName = Array.isArray(this.cellInfo.value);
3062
+ if (!needRemoteDisplayName) {
3063
+ this.displayName = this.cellInfo.value;
2978
3064
  }
2979
- return this.http.post(api, model, {
2980
- params: {
2981
- tenant
3065
+ this.service.getUserInfo(this.uid).subscribe(response => {
3066
+ if (needRemoteDisplayName) {
3067
+ this.displayName = response.displayName;
3068
+ }
3069
+ const userInfo = response.userInfo;
3070
+ let content = '<table>';
3071
+ for (const item of userInfo) {
3072
+ content += `
3073
+ <tr>
3074
+ <td style="text-align: right;">${item.caption}:</td>
3075
+ <td style="text-align: left;">${item.value}</td>
3076
+ </tr>
3077
+ `;
2982
3078
  }
3079
+ content += '</table>';
3080
+ this.content = this.domSanitizer.bypassSecurityTrustHtml(content);
3081
+ // 重绘表格宽高
3082
+ setTimeout(() => {
3083
+ this.service.cellTemplateLoaded$.emit();
3084
+ });
2983
3085
  });
2984
3086
  }
2985
3087
  }
2986
- FormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormService, deps: [{ token: i1$1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
2987
- FormServiceprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormService });
2988
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormService, decorators: [{
2989
- type: Injectable
2990
- }], ctorParameters: function () { return [{ type: i1$1.HttpClient }]; } });
3088
+ UserInfoTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: UserInfoTemplateComponent, deps: [{ token: DataGridService }, { token: i2$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
3089
+ UserInfoTemplateComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: UserInfoTemplateComponent, selector: "rs-user-info-template", inputs: { uid: "uid", cellInfo: "cellInfo" }, ngImport: i0, template: "<dx-button #textDiv type=\"default\" stylingMode=\"text\" (onClick)=\"$event.event?.stopPropagation()\">\n {{ displayName }}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'click'\">\n <div *dxTemplate=\"let data of 'content'\">\n <div [innerHTML]=\"content\"></div>\n </div>\n </dx-tooltip>\n</dx-button>\n<br/>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }] });
3090
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: UserInfoTemplateComponent, decorators: [{
3091
+ type: Component,
3092
+ args: [{ selector: 'rs-user-info-template', template: "<dx-button #textDiv type=\"default\" stylingMode=\"text\" (onClick)=\"$event.event?.stopPropagation()\">\n {{ displayName }}\n <dx-tooltip [target]=\"textDiv.instance.element()\"\n [position]=\"'top'\"\n [showEvent]=\"'click'\">\n <div *dxTemplate=\"let data of 'content'\">\n <div [innerHTML]=\"content\"></div>\n </div>\n </dx-tooltip>\n</dx-button>\n<br/>\n" }]
3093
+ }], ctorParameters: function () { return [{ type: DataGridService }, { type: i2$2.DomSanitizer }]; }, propDecorators: { uid: [{
3094
+ type: Input
3095
+ }], cellInfo: [{
3096
+ type: Input
3097
+ }] } });
2991
3098
 
2992
- class FormComponent {
2993
- constructor(viewContainerRef, service, elementRef) {
2994
- this.viewContainerRef = viewContainerRef;
3099
+ class DataGridComponent {
3100
+ constructor(factory, service, viewContainerRef) {
3101
+ this.factory = factory;
2995
3102
  this.service = service;
2996
- this.elementRef = elementRef;
3103
+ this.viewContainerRef = viewContainerRef;
2997
3104
  this.tenant = 'T';
2998
- this.onlyFrontEnd = false; // 仅前端,不通过oid获取实例model
2999
- this.readonly = false;
3000
- this.submitCallback = new EventEmitter();
3001
- this.loading = false;
3002
- this.changeFilter = new ChangeFilter();
3105
+ this.keyExpr = ''; // 用于实例属性选择器,加载组件值时以选中字段为主键获取选中行数据
3106
+ this.onlyFrontEnd = false; // 仅前端,不通过获取表格数据
3107
+ this.dataSource = {};
3108
+ this.selectionMode = 'none';
3109
+ this.selectedRowKeys = [];
3110
+ this.selectedRowKeysChange = new EventEmitter();
3111
+ this.showRowNum = true;
3112
+ this.instanceLinkType = 'tab';
3113
+ this.drawerInstanceLinkViewContainerRef = this.viewContainerRef;
3114
+ this.onCellPrepared = new EventEmitter();
3115
+ this.onContentReady = new EventEmitter();
3116
+ this.onEditorPreparing = new EventEmitter();
3117
+ this.onRowClick = new EventEmitter();
3118
+ this.onRowDblClick = new EventEmitter();
3119
+ this.onSelectionChanged = new EventEmitter();
3120
+ this.columns = [];
3003
3121
  }
3004
3122
  ngOnInit() {
3005
- this.load();
3006
- this.changeFilter.anyNotFirst(['tenant', 'className', 'oid', 'copyOid', 'template'], () => {
3007
- this.load();
3123
+ this.reload();
3124
+ this.service.cellTemplateLoaded$.pipe(debounceTime(200)).subscribe(() => {
3125
+ this.dxDataGrid.instance.resize();
3008
3126
  });
3009
3127
  }
3010
- ngOnChanges(changes) {
3011
- this.changeFilter.doFilter(changes);
3012
- }
3013
- ngOnDestroy() {
3014
- this.changeFilter.dispose();
3015
- }
3016
- load() {
3017
- this.loading = true;
3018
- this.params = Object.assign(this.params || {}, {
3019
- __form: {
3020
- tenant: this.tenant,
3021
- className: this.className,
3022
- oid: this.oid,
3023
- copyOid: this.copyOid,
3024
- template: this.template
3025
- }
3026
- });
3027
- this.service.getFormTemplateConfig(this.tenant, this.className, this.template).subscribe(response => {
3028
- this.config = response.data.template;
3029
- if (this.onlyFrontEnd) {
3030
- this.loading = false;
3128
+ reload() {
3129
+ this.columns.length = 0;
3130
+ this.factory.makeDataGridColumns(this.tenant, this.className, this.view).subscribe(columns => {
3131
+ if (this.customColumnFn) {
3132
+ this.customColumnFn(columns);
3031
3133
  }
3032
- else if (this.copyOid || this.oid) {
3033
- this.service.getOne(this.tenant, this.className, this.copyOid || this.oid, this.template, this.copyOid)
3034
- .subscribe(response => {
3035
- this.model = response.data;
3036
- this.loading = false;
3134
+ if (this.instanceLinkType === 'tab' || this.instanceLinkType === 'drawer') {
3135
+ columns.unshift({
3136
+ fixed: true,
3137
+ width: 48,
3138
+ cellTemplate: 'instanceLinkTemplate',
3139
+ alignment: 'center',
3140
+ cssClass: 'cell-vertical-middle'
3037
3141
  });
3038
3142
  }
3039
- else {
3040
- this.service.getInitModelByTemplate(this.tenant, this.className, this.template).subscribe(response => {
3041
- this.model = response.data;
3042
- this.loading = false;
3143
+ if (this.showRowNum) {
3144
+ columns.unshift({
3145
+ fixed: true,
3146
+ width: 48,
3147
+ cellTemplate: 'rowIndexTemplate',
3148
+ alignment: 'center',
3149
+ cssClass: 'cell-vertical-middle'
3043
3150
  });
3044
3151
  }
3152
+ this.columns = columns;
3045
3153
  });
3154
+ if (this.onlyFrontEnd) {
3155
+ if (this.dataSource && !Array.isArray(this.dataSource)) {
3156
+ notify_error('if onlyFrontEnd set true, you have to set dataSource as an Array');
3157
+ }
3158
+ }
3159
+ else {
3160
+ this.dataSource = this.factory.makeDataGridDataSource(this.tenant, this.className, this.view, this.filter, this.keyExpr, this.dataGridName);
3161
+ }
3046
3162
  }
3047
- submitForm() {
3048
- this.validate().then(isValid => {
3049
- if (isValid) {
3050
- const mergeModel = { ...this.model };
3051
- if (this.extraAttrMap) {
3052
- for (const entry of this.extraAttrMap) {
3053
- mergeModel[entry.name] = entry.value;
3054
- }
3163
+ convertMultipleValueCellText(cellInfo) {
3164
+ if (!cellInfo.value) {
3165
+ return;
3166
+ }
3167
+ if (Array.isArray(cellInfo.value)) {
3168
+ if (cellInfo.column.lookup) {
3169
+ return cellInfo.value.map((item) => cellInfo.column.lookup.calculateCellValue(item)).join('<br />');
3170
+ }
3171
+ return cellInfo.value.join('<br />');
3172
+ }
3173
+ if (cellInfo.column.lookup) {
3174
+ return cellInfo.column.lookup.calculateCellValue(cellInfo.value);
3175
+ }
3176
+ return cellInfo.value;
3177
+ }
3178
+ getOriginalValue(cellInfo, key) {
3179
+ const config = cellInfo.column[key];
3180
+ if (config) {
3181
+ const value = cellInfo.data[config.field];
3182
+ if (value) {
3183
+ if (Array.isArray(value)) {
3184
+ return value;
3055
3185
  }
3056
- this.service.createOrUpdate(this.tenant, this.className, {
3057
- oid: this.oid,
3058
- ...mergeModel
3059
- }).subscribe(response => {
3060
- this.submitCallback.emit(response);
3061
- });
3186
+ return [value];
3062
3187
  }
3063
- else {
3064
- this.submitCallback.emit({ success: false });
3188
+ return [];
3189
+ }
3190
+ return cellInfo.data[key];
3191
+ }
3192
+ getSelectedRowKeys() {
3193
+ return this.dxDataGrid.instance.getSelectedRowKeys();
3194
+ }
3195
+ refresh(callback) {
3196
+ this.dxDataGrid.instance.refresh().then(() => {
3197
+ if (callback) {
3198
+ callback();
3065
3199
  }
3066
3200
  });
3067
3201
  }
3068
- scrollToAnchorPoint(anchorPointId) {
3069
- const points = this.elementRef.nativeElement.getElementsByClassName('__anchor_point_' + anchorPointId);
3070
- if (points.length > 0) {
3071
- points[0].scrollIntoView();
3202
+ onDxDataGridEditorPreparing($event) {
3203
+ if ($event.parentType === 'filterRow' && $event.editorName === 'dxTextBox') {
3204
+ $event.editorOptions.valueChangeEvent = 'blur';
3205
+ $event.editorOptions.onEnterKey = (e) => {
3206
+ e.component.blur();
3207
+ };
3072
3208
  }
3073
- }
3074
- validate() {
3075
- return validate_group(this.validator);
3076
- }
3077
- submit() {
3078
- this.formSubmitter.instance.element().click();
3209
+ this.onEditorPreparing.emit($event);
3079
3210
  }
3080
3211
  }
3081
- FormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormComponent, deps: [{ token: i0.ViewContainerRef }, { token: FormService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
3082
- FormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: FormComponent, selector: "rs-form", inputs: { tenant: "tenant", className: "className", oid: "oid", copyOid: "copyOid", template: "template", extraAttrMap: "extraAttrMap", opener: "opener", params: "params", tabViewContainerRef: "tabViewContainerRef", onlyFrontEnd: "onlyFrontEnd", model: "model", readonly: "readonly" }, outputs: { submitCallback: "submitCallback" }, providers: [FormService], viewQueries: [{ propertyName: "validator", first: true, predicate: DxValidationGroupComponent, descendants: true }, { propertyName: "formSubmitter", first: true, predicate: ["formSubmitter"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\r\n [visible]=\"loading\">\r\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\r\n</dx-load-panel>\r\n<dx-validation-group *ngIf=\"!loading\">\r\n <rs-box-container [config]=\"config\"\r\n [model]=\"model\"\r\n [opener]=\"this\"\r\n [params]=\"params\"\r\n [tabViewContainerRef]=\"tabViewContainerRef\"\r\n [readonly]=\"readonly\"></rs-box-container>\r\n <dx-button #formSubmitter [visible]=\"false\" (onClick)=\"submitForm()\"></dx-button>\r\n</dx-validation-group>\r\n", styles: [":host{padding:12px 24px 20px}:host dx-validation-group{display:flex;flex-flow:row nowrap}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BoxContainerComponent, selector: "rs-box-container", inputs: ["config", "model", "opener", "params", "readonly", "tabViewContainerRef"] }, { kind: "component", type: i6$1.DxoPositionComponent, selector: "dxo-position", inputs: ["at", "boundary", "boundaryOffset", "collision", "my", "of", "offset"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i6.DxLoadPanelComponent, selector: "dx-load-panel", inputs: ["animation", "closeOnOutsideClick", "container", "copyRootClassesToWrapper", "deferRendering", "delay", "elementAttr", "focusStateEnabled", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "indicatorSrc", "maxHeight", "maxWidth", "message", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showIndicator", "showPane", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "delayChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "indicatorSrcChange", "maxHeightChange", "maxWidthChange", "messageChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showIndicatorChange", "showPaneChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i7.DxValidationGroupComponent, selector: "dx-validation-group", inputs: ["elementAttr", "height", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "elementAttrChange", "heightChange", "widthChange"] }] });
3083
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormComponent, decorators: [{
3212
+ DataGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridComponent, deps: [{ token: DataGridFactory }, { token: DataGridService }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
3213
+ DataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DataGridComponent, selector: "rs-data-grid", inputs: { tenant: "tenant", className: "className", view: "view", filter: "filter", customColumnFn: "customColumnFn", keyExpr: "keyExpr", dataGridName: "dataGridName", height: "height", onlyFrontEnd: "onlyFrontEnd", dataSource: "dataSource", selectionMode: "selectionMode", selectedRowKeys: "selectedRowKeys", showRowNum: "showRowNum", instanceLinkType: "instanceLinkType", drawerInstanceLinkViewContainerRef: "drawerInstanceLinkViewContainerRef", drawerInstanceLinkFormTemplate: "drawerInstanceLinkFormTemplate" }, outputs: { selectedRowKeysChange: "selectedRowKeysChange", onCellPrepared: "onCellPrepared", onContentReady: "onContentReady", onEditorPreparing: "onEditorPreparing", onRowClick: "onRowClick", onRowDblClick: "onRowDblClick", onSelectionChanged: "onSelectionChanged" }, providers: [DataGridService], queries: [{ propertyName: "rowButtonsTemplate", first: true, predicate: RowButtonsTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "dxDataGrid", first: true, predicate: DxDataGridComponent, descendants: true, static: true }], ngImport: i0, template: "<dx-data-grid [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\r\n [syncLookupFilterValues]=\"false\"\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n [height]=\"height\"\r\n [keyExpr]=\"keyExpr\"\r\n [selectedRowKeys]=\"selectedRowKeys\"\r\n (selectedRowKeysChange)=\"selectedRowKeysChange.emit($event)\"\r\n (onCellPrepared)=\"onCellPrepared.emit($event)\"\r\n (onContentReady)=\"onContentReady.emit($event)\"\r\n (onEditorPreparing)=\"onDxDataGridEditorPreparing($event)\"\r\n (onRowClick)=\"onRowClick.emit($event)\"\r\n (onRowDblClick)=\"onRowDblClick.emit($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged.emit($event)\">\r\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\r\n <dxo-selection [mode]=\"selectionMode\" selectAllMode=\"page\" showCheckBoxesMode=\"always\"></dxo-selection>\r\n <dxo-header-filter [visible]=\"!onlyFrontEnd\">\r\n <dxo-search [enabled]=\"true\"></dxo-search>\r\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\r\n </dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-remote-operations [filtering]=\"true\"\r\n [sorting]=\"true\"\r\n [paging]=\"true\">\r\n </dxo-remote-operations>\r\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\r\n <dxo-pager [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\r\n [showPageSizeSelector]=\"true\"\r\n [allowedPageSizes]=\"[15, 30, 50]\"\r\n ></dxo-pager>\r\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\r\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\r\n {{ cellInfo.rowIndex + 1 }}\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'instanceLinkTemplate'\">\r\n <rs-instance-link-template [tenant]=\"tenant\"\r\n [className]=\"className\"\r\n [oid]=\"cellInfo.data.oid\"\r\n [instanceLinkType]=\"instanceLinkType\"\r\n [drawerViewContainerRef]=\"drawerInstanceLinkViewContainerRef\"\r\n [drawerFormTemplate]=\"drawerInstanceLinkFormTemplate\">\r\n </rs-instance-link-template>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowButtonsTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"rowButtonsTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\r\n <div [innerHTML]=\"convertMultipleValueCellText(cellInfo)\"></div>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\r\n <div #textDiv style=\"text-overflow: ellipsis; overflow: hidden; cursor: pointer;\">{{ cellInfo.value }}</div>\r\n <dx-tooltip [target]=\"textDiv\"\r\n [position]=\"'top'\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <p style=\"max-width: 320px; text-align: left; white-space: normal;\" [innerText]=\"cellInfo.value\"></p>\r\n </div>\r\n </dx-tooltip>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'fileCellTemplate'\">\r\n <ng-container *ngFor=\"let file of cellInfo.value\">\r\n <rs-file-cell-template [file]=\"file\"></rs-file-cell-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'userCellTemplate'\">\r\n <ng-container *ngFor=\"let user of getOriginalValue(cellInfo, 'userInfo')\">\r\n <rs-user-info-template [uid]=\"user\" [cellInfo]=\"cellInfo\"></rs-user-info-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'unitCellTemplate'\">\r\n <ng-container *ngFor=\"let unit of getOriginalValue(cellInfo, 'unitInfo')\">\r\n <rs-unit-info-template [uid]=\"unit\" [cellInfo]=\"cellInfo\"></rs-unit-info-template>\r\n </ng-container>\r\n </div>\r\n</dx-data-grid>\r\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i5$1.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i6$1.DxoSearchComponent, selector: "dxo-search", inputs: ["editorOptions", "enabled", "timeout", "mode", "searchExpr"] }, { kind: "component", type: i6$1.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "recursive", "selectByClick", "deferred", "mode", "selectAllMode", "showCheckBoxesMode"] }, { kind: "component", type: i6$1.DxoTextsComponent, selector: "dxo-texts", inputs: ["fix", "leftPosition", "rightPosition", "unfix", "addRow", "cancelAllChanges", "cancelRowChanges", "confirmDeleteMessage", "confirmDeleteTitle", "deleteRow", "editRow", "saveAllChanges", "saveRowChanges", "undeleteRow", "validationCancelChanges", "exportAll", "exportSelectedRows", "exportTo", "clearFilter", "createFilter", "filterEnabledHint", "groupByThisColumn", "groupContinuedMessage", "groupContinuesMessage", "ungroup", "ungroupAll", "cancel", "emptyValue", "ok", "avg", "avgOtherColumn", "count", "max", "maxOtherColumn", "min", "minOtherColumn", "sum", "sumOtherColumn", "allFields", "columnFields", "dataFields", "filterFields", "rowFields", "columnFieldArea", "dataFieldArea", "filterFieldArea", "rowFieldArea", "collapseAll", "dataNotAvailable", "expandAll", "exportToExcel", "grandTotal", "noData", "removeAllSorting", "showFieldChooser", "sortColumnBySummary", "sortRowBySummary", "total", "addRowToNode"] }, { kind: "component", type: i6$1.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "allowSelectAll", "dataSource", "groupInterval", "height", "search", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i6$1.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i6$1.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i6$1.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i6$1.DxoRemoteOperationsComponent, selector: "dxo-remote-operations", inputs: ["filtering", "grouping", "groupPaging", "paging", "sorting", "summary"] }, { kind: "component", type: i6$1.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i6$1.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "component", type: i5.DxTooltipComponent, selector: "dx-tooltip", inputs: ["animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "elementAttr", "height", "hideEvent", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showEvent", "target", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "heightChange", "hideEventChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showEventChange", "targetChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: FileCellTemplateComponent, selector: "rs-file-cell-template", inputs: ["file"] }, { kind: "component", type: InstanceLinkTemplateComponent, selector: "rs-instance-link-template", inputs: ["tenant", "className", "oid", "instanceLinkType", "drawerViewContainerRef", "drawerFormTemplate"] }, { kind: "component", type: UnitInfoTemplateComponent, selector: "rs-unit-info-template", inputs: ["uid", "cellInfo"] }, { kind: "component", type: UserInfoTemplateComponent, selector: "rs-user-info-template", inputs: ["uid", "cellInfo"] }] });
3214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridComponent, decorators: [{
3084
3215
  type: Component,
3085
- args: [{ selector: 'rs-form', providers: [FormService], template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\r\n [visible]=\"loading\">\r\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\r\n</dx-load-panel>\r\n<dx-validation-group *ngIf=\"!loading\">\r\n <rs-box-container [config]=\"config\"\r\n [model]=\"model\"\r\n [opener]=\"this\"\r\n [params]=\"params\"\r\n [tabViewContainerRef]=\"tabViewContainerRef\"\r\n [readonly]=\"readonly\"></rs-box-container>\r\n <dx-button #formSubmitter [visible]=\"false\" (onClick)=\"submitForm()\"></dx-button>\r\n</dx-validation-group>\r\n", styles: [":host{padding:12px 24px 20px}:host dx-validation-group{display:flex;flex-flow:row nowrap}\n"] }]
3086
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: FormService }, { type: i0.ElementRef }]; }, propDecorators: { tenant: [{
3216
+ args: [{ selector: 'rs-data-grid', providers: [DataGridService], template: "<dx-data-grid [showBorders]=\"true\"\r\n [showRowLines]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n dateSerializationFormat=\"yyyy/MM/dd HH:mm:ss\"\r\n [syncLookupFilterValues]=\"false\"\r\n [dataSource]=\"dataSource\"\r\n [columns]=\"columns\"\r\n [height]=\"height\"\r\n [keyExpr]=\"keyExpr\"\r\n [selectedRowKeys]=\"selectedRowKeys\"\r\n (selectedRowKeysChange)=\"selectedRowKeysChange.emit($event)\"\r\n (onCellPrepared)=\"onCellPrepared.emit($event)\"\r\n (onContentReady)=\"onContentReady.emit($event)\"\r\n (onEditorPreparing)=\"onDxDataGridEditorPreparing($event)\"\r\n (onRowClick)=\"onRowClick.emit($event)\"\r\n (onRowDblClick)=\"onRowDblClick.emit($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged.emit($event)\">\r\n <dxo-sorting mode=\"multiple\"></dxo-sorting>\r\n <dxo-selection [mode]=\"selectionMode\" selectAllMode=\"page\" showCheckBoxesMode=\"always\"></dxo-selection>\r\n <dxo-header-filter [visible]=\"!onlyFrontEnd\">\r\n <dxo-search [enabled]=\"true\"></dxo-search>\r\n <dxo-texts [ok]=\"'\u786E\u5B9A'\"></dxo-texts>\r\n </dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-remote-operations [filtering]=\"true\"\r\n [sorting]=\"true\"\r\n [paging]=\"true\">\r\n </dxo-remote-operations>\r\n <dxo-paging [pageSize]=\"15\"></dxo-paging>\r\n <dxo-pager [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n infoText=\"\u7B2C{0}\u9875\uFF0C\u5171{1}\u9875\uFF08\u5171{2}\u4E2A\u9879\u76EE\uFF09\"\r\n [showPageSizeSelector]=\"true\"\r\n [allowedPageSizes]=\"[15, 30, 50]\"\r\n ></dxo-pager>\r\n <dxo-scrolling showScrollbar=\"always\"></dxo-scrolling>\r\n <div *dxTemplate=\"let cellInfo of 'rowIndexTemplate'\">\r\n {{ cellInfo.rowIndex + 1 }}\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'instanceLinkTemplate'\">\r\n <rs-instance-link-template [tenant]=\"tenant\"\r\n [className]=\"className\"\r\n [oid]=\"cellInfo.data.oid\"\r\n [instanceLinkType]=\"instanceLinkType\"\r\n [drawerViewContainerRef]=\"drawerInstanceLinkViewContainerRef\"\r\n [drawerFormTemplate]=\"drawerInstanceLinkFormTemplate\">\r\n </rs-instance-link-template>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'rowButtonsTemplate'\">\r\n <ng-container [ngTemplateOutlet]=\"rowButtonsTemplate.templateRef\"\r\n [ngTemplateOutletContext]=\"{$implicit: cellInfo, cellTemplateLoaded$: service.cellTemplateLoaded$}\"></ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'multipleValueCellTemplate'\">\r\n <div [innerHTML]=\"convertMultipleValueCellText(cellInfo)\"></div>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'textCellTemplate'\">\r\n <div #textDiv style=\"text-overflow: ellipsis; overflow: hidden; cursor: pointer;\">{{ cellInfo.value }}</div>\r\n <dx-tooltip [target]=\"textDiv\"\r\n [position]=\"'top'\"\r\n [showEvent]=\"'click'\">\r\n <div *dxTemplate=\"let data of 'content'\">\r\n <p style=\"max-width: 320px; text-align: left; white-space: normal;\" [innerText]=\"cellInfo.value\"></p>\r\n </div>\r\n </dx-tooltip>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'fileCellTemplate'\">\r\n <ng-container *ngFor=\"let file of cellInfo.value\">\r\n <rs-file-cell-template [file]=\"file\"></rs-file-cell-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'userCellTemplate'\">\r\n <ng-container *ngFor=\"let user of getOriginalValue(cellInfo, 'userInfo')\">\r\n <rs-user-info-template [uid]=\"user\" [cellInfo]=\"cellInfo\"></rs-user-info-template>\r\n </ng-container>\r\n </div>\r\n <div *dxTemplate=\"let cellInfo of 'unitCellTemplate'\">\r\n <ng-container *ngFor=\"let unit of getOriginalValue(cellInfo, 'unitInfo')\">\r\n <rs-unit-info-template [uid]=\"unit\" [cellInfo]=\"cellInfo\"></rs-unit-info-template>\r\n </ng-container>\r\n </div>\r\n</dx-data-grid>\r\n", styles: [":host{display:flex;flex-flow:column nowrap}:host dx-data-grid{flex:auto;height:0}\n"] }]
3217
+ }], ctorParameters: function () { return [{ type: DataGridFactory }, { type: DataGridService }, { type: i0.ViewContainerRef }]; }, propDecorators: { tenant: [{
3087
3218
  type: Input
3088
3219
  }], className: [{
3089
3220
  type: Input
3090
- }], oid: [{
3091
- type: Input
3092
- }], copyOid: [{
3221
+ }], view: [{
3093
3222
  type: Input
3094
- }], template: [{
3223
+ }], filter: [{
3095
3224
  type: Input
3096
- }], extraAttrMap: [{
3225
+ }], customColumnFn: [{
3097
3226
  type: Input
3098
- }], opener: [{
3227
+ }], keyExpr: [{
3099
3228
  type: Input
3100
- }], params: [{
3229
+ }], dataGridName: [{
3101
3230
  type: Input
3102
- }], tabViewContainerRef: [{
3231
+ }], height: [{
3103
3232
  type: Input
3104
3233
  }], onlyFrontEnd: [{
3105
3234
  type: Input
3106
- }], model: [{
3235
+ }], dataSource: [{
3107
3236
  type: Input
3108
- }], readonly: [{
3237
+ }], selectionMode: [{
3109
3238
  type: Input
3110
- }], validator: [{
3111
- type: ViewChild,
3112
- args: [DxValidationGroupComponent]
3113
- }], formSubmitter: [{
3114
- type: ViewChild,
3115
- args: ['formSubmitter']
3116
- }], submitCallback: [{
3239
+ }], selectedRowKeys: [{
3240
+ type: Input
3241
+ }], selectedRowKeysChange: [{
3242
+ type: Output
3243
+ }], showRowNum: [{
3244
+ type: Input
3245
+ }], instanceLinkType: [{
3246
+ type: Input
3247
+ }], drawerInstanceLinkViewContainerRef: [{
3248
+ type: Input
3249
+ }], drawerInstanceLinkFormTemplate: [{
3250
+ type: Input
3251
+ }], onCellPrepared: [{
3252
+ type: Output
3253
+ }], onContentReady: [{
3117
3254
  type: Output
3255
+ }], onEditorPreparing: [{
3256
+ type: Output
3257
+ }], onRowClick: [{
3258
+ type: Output
3259
+ }], onRowDblClick: [{
3260
+ type: Output
3261
+ }], onSelectionChanged: [{
3262
+ type: Output
3263
+ }], dxDataGrid: [{
3264
+ type: ViewChild,
3265
+ args: [DxDataGridComponent, { static: true }]
3266
+ }], rowButtonsTemplate: [{
3267
+ type: ContentChild,
3268
+ args: [RowButtonsTemplateDirective]
3118
3269
  }] } });
3119
3270
 
3120
- class DataDetailComponent {
3121
- constructor(viewContainerRef, service) {
3122
- this.viewContainerRef = viewContainerRef;
3123
- this.service = service;
3124
- this.sections = [];
3125
- this.loading = false;
3126
- }
3127
- ngOnInit() {
3128
- this.loading = true;
3129
- this.service.getSectionList(this.tenant, this.className, this.oid).subscribe(response => {
3130
- this.sections = response.data.list;
3131
- this.loading = false;
3132
- });
3133
- }
3134
- }
3135
- DataDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailComponent, deps: [{ token: i0.ViewContainerRef }, { token: DataDetailService }], target: i0.ɵɵFactoryTarget.Component });
3136
- DataDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DataDetailComponent, selector: "coast-data-detail", providers: [DataDetailService], ngImport: i0, template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\n [visible]=\"loading\">\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\n</dx-load-panel>\n<div *ngIf=\"!loading && sections.length === 0\" class=\"empty\">\n <span>\u60A8\u65E0\u6743\u67E5\u770B\u8BE5\u6570\u636E\u5B9E\u4F8B\u4EFB\u4F55\u4FE1\u606F</span>\n</div>\n<ng-container *ngIf=\"sections.length > 0\">\n <dx-accordion [collapsible]=\"true\" [multiple]=\"true\" [deferRendering]=\"false\" [dataSource]=\"sections\"\n [selectedItems]=\"sections\">\n <div *dxTemplate=\"let section of 'title'\" class=\"section-title\">\n <div class=\"section-title-name\">{{ section.name }}</div>\n </div>\n <div *dxTemplate=\"let section of 'item'\">\n <rs-form [tenant]=\"tenant\" [className]=\"className\" [oid]=\"oid\" [template]=\"section.formTemplate\" [params]=\"params\"\n [tabViewContainerRef]=\"tabViewContainerRef\" [readonly]=\"true\"></rs-form>\n </div>\n </dx-accordion>\n</ng-container>\n", styles: [":host{flex:1;padding:24px;display:flex;flex-flow:column nowrap}:host div.empty{flex:1;padding:16px;display:flex;flex-flow:row nowrap;justify-content:center;align-items:center}:host div.empty span{text-align:center;-webkit-user-select:none;user-select:none}:host .section-title{border-bottom:1px solid var(--coast-border-color, #dddddd)}:host .section-title .section-title-name{height:24px;font-size:14px;font-weight:700;padding:4px 8px;display:flex;flex-flow:column nowrap;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.DxAccordionComponent, selector: "dx-accordion", inputs: ["accessKey", "activeStateEnabled", "animationDuration", "collapsible", "dataSource", "deferRendering", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "itemHoldTimeout", "items", "itemTemplate", "itemTitleTemplate", "keyExpr", "multiple", "noDataText", "repaintChangesOnly", "rtlEnabled", "selectedIndex", "selectedItem", "selectedItemKeys", "selectedItems", "tabIndex", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onItemClick", "onItemContextMenu", "onItemHold", "onItemRendered", "onItemTitleClick", "onOptionChanged", "onSelectionChanged", "accessKeyChange", "activeStateEnabledChange", "animationDurationChange", "collapsibleChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "itemHoldTimeoutChange", "itemsChange", "itemTemplateChange", "itemTitleTemplateChange", "keyExprChange", "multipleChange", "noDataTextChange", "repaintChangesOnlyChange", "rtlEnabledChange", "selectedIndexChange", "selectedItemChange", "selectedItemKeysChange", "selectedItemsChange", "tabIndexChange", "visibleChange", "widthChange"] }, { kind: "directive", type: i3.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i6$1.DxoPositionComponent, selector: "dxo-position", inputs: ["at", "boundary", "boundaryOffset", "collision", "my", "of", "offset"] }, { kind: "component", type: i6.DxLoadPanelComponent, selector: "dx-load-panel", inputs: ["animation", "closeOnOutsideClick", "container", "copyRootClassesToWrapper", "deferRendering", "delay", "elementAttr", "focusStateEnabled", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "indicatorSrc", "maxHeight", "maxWidth", "message", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showIndicator", "showPane", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "delayChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "indicatorSrcChange", "maxHeightChange", "maxWidthChange", "messageChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showIndicatorChange", "showPaneChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: FormComponent, selector: "rs-form", inputs: ["tenant", "className", "oid", "copyOid", "template", "extraAttrMap", "opener", "params", "tabViewContainerRef", "onlyFrontEnd", "model", "readonly"], outputs: ["submitCallback"] }] });
3137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailComponent, decorators: [{
3138
- type: Component,
3139
- args: [{ selector: 'coast-data-detail', providers: [DataDetailService], template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\n [visible]=\"loading\">\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\n</dx-load-panel>\n<div *ngIf=\"!loading && sections.length === 0\" class=\"empty\">\n <span>\u60A8\u65E0\u6743\u67E5\u770B\u8BE5\u6570\u636E\u5B9E\u4F8B\u4EFB\u4F55\u4FE1\u606F</span>\n</div>\n<ng-container *ngIf=\"sections.length > 0\">\n <dx-accordion [collapsible]=\"true\" [multiple]=\"true\" [deferRendering]=\"false\" [dataSource]=\"sections\"\n [selectedItems]=\"sections\">\n <div *dxTemplate=\"let section of 'title'\" class=\"section-title\">\n <div class=\"section-title-name\">{{ section.name }}</div>\n </div>\n <div *dxTemplate=\"let section of 'item'\">\n <rs-form [tenant]=\"tenant\" [className]=\"className\" [oid]=\"oid\" [template]=\"section.formTemplate\" [params]=\"params\"\n [tabViewContainerRef]=\"tabViewContainerRef\" [readonly]=\"true\"></rs-form>\n </div>\n </dx-accordion>\n</ng-container>\n", styles: [":host{flex:1;padding:24px;display:flex;flex-flow:column nowrap}:host div.empty{flex:1;padding:16px;display:flex;flex-flow:row nowrap;justify-content:center;align-items:center}:host div.empty span{text-align:center;-webkit-user-select:none;user-select:none}:host .section-title{border-bottom:1px solid var(--coast-border-color, #dddddd)}:host .section-title .section-title-name{height:24px;font-size:14px;font-weight:700;padding:4px 8px;display:flex;flex-flow:column nowrap;justify-content:center}\n"] }]
3140
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: DataDetailService }]; } });
3141
-
3142
3271
  class FormModule {
3143
3272
  }
3144
3273
  FormModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -3165,6 +3294,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
3165
3294
  }]
3166
3295
  }] });
3167
3296
 
3297
+ class DataGridModule {
3298
+ }
3299
+ DataGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3300
+ DataGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.7", ngImport: i0, type: DataGridModule, declarations: [DataGridComponent,
3301
+ FileCellTemplateComponent,
3302
+ InstanceLinkTemplateComponent,
3303
+ UnitInfoTemplateComponent,
3304
+ UserInfoTemplateComponent,
3305
+ RowButtonsTemplateDirective], imports: [CommonModule,
3306
+ DevExtremeModule,
3307
+ FormModule], exports: [DataGridComponent,
3308
+ RowButtonsTemplateDirective] });
3309
+ DataGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridModule, imports: [CommonModule,
3310
+ DevExtremeModule,
3311
+ FormModule] });
3312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataGridModule, decorators: [{
3313
+ type: NgModule,
3314
+ args: [{
3315
+ declarations: [
3316
+ DataGridComponent,
3317
+ FileCellTemplateComponent,
3318
+ InstanceLinkTemplateComponent,
3319
+ UnitInfoTemplateComponent,
3320
+ UserInfoTemplateComponent,
3321
+ RowButtonsTemplateDirective
3322
+ ],
3323
+ imports: [
3324
+ CommonModule,
3325
+ DevExtremeModule,
3326
+ FormModule
3327
+ ],
3328
+ exports: [
3329
+ DataGridComponent,
3330
+ RowButtonsTemplateDirective
3331
+ ]
3332
+ }]
3333
+ }] });
3334
+
3168
3335
  class DataDetailModule {
3169
3336
  }
3170
3337
  DataDetailModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DataDetailModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -3191,49 +3358,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
3191
3358
  }]
3192
3359
  }] });
3193
3360
 
3194
- class DrawerComponent {
3195
- constructor(elementRef) {
3196
- this.elementRef = elementRef;
3197
- this.size = 'default';
3198
- this._width = '480px';
3199
- }
3200
- ngOnInit() {
3201
- if (this.size === 'large') {
3202
- this._width = '960px';
3203
- }
3204
- }
3205
- show() {
3206
- // 若存在多层抽屉,仅保留最上层遮罩颜色,下层遮罩设置为透明
3207
- const nodeName = this.elementRef.nativeElement.nodeName;
3208
- const drawers = this._parentViewContainerRef.element.nativeElement.parentElement.querySelectorAll(nodeName);
3209
- for (let i = 0; i < drawers.length; i++) {
3210
- if (i === drawers.length - 1) {
3211
- drawers[i].querySelector('.drawer-backdrop').style.backgroundColor = 'rgba(37, 43, 58, 0.05)';
3212
- }
3213
- else {
3214
- drawers[i].querySelector('.drawer-backdrop').style.backgroundColor = 'rgba(37, 43, 58, 0)';
3215
- }
3216
- }
3217
- }
3218
- hide($event, backdrop) {
3219
- // 在service中重写
3220
- }
3221
- ngOnDestroy() {
3222
- // 若存在多层抽屉,下一层遮罩设置为不透明
3223
- const nodeName = this.elementRef.nativeElement.nodeName;
3224
- const nextDrawer = this._parentViewContainerRef.element.nativeElement.parentElement.querySelector(nodeName + ':nth-last-child(2)');
3225
- if (nextDrawer) {
3226
- nextDrawer.querySelector('.drawer-backdrop').style.backgroundColor = 'rgba(37, 43, 58, 0.05)';
3227
- }
3228
- }
3229
- }
3230
- DrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
3231
- DrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DrawerComponent, selector: "rs-drawer", ngImport: i0, template: "<div #drawerBackdrop class=\"drawer-backdrop\" (click)=\"hide($event, drawerBackdrop)\">\n <div class=\"drawer\" [ngStyle]=\"{width: _width}\">\n <div *ngIf=\"headerTemplate\" class=\"drawer-header\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"\n [ngTemplateOutletContext]=\"{$implicit: headerTemplateContext}\"></ng-template>\n </div>\n <div class=\"drawer-content\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\"\n [ngTemplateOutletContext]=\"{$implicit: contentTemplateContext}\"></ng-template>\n </div>\n <div class=\"drawer-close\">\n <dx-button height=\"40px\" icon=\"coast-icon coast-icon-arrow-right-filling\" (onClick)=\"hide($event)\"></dx-button>\n </div>\n </div>\n</div>\n", styles: [":host .drawer-backdrop{position:absolute;inset:0;z-index:calc(var(--coast-z-index-drawer, 1040) - 1)}:host .drawer-backdrop .drawer{position:absolute;right:0;height:100%;z-index:var(--coast-z-index-drawer, 1040);background-color:var(--coast-base-bg-color, #fff);display:flex;flex-flow:column nowrap}:host .drawer-backdrop .drawer .drawer-header{flex:0 0 36px;padding:8px;border-bottom:1px solid var(--coast-border-color, #dddddd);display:flex;flex-flow:row nowrap;align-items:center;justify-content:flex-end}:host .drawer-backdrop .drawer .drawer-content{flex:1;overflow:auto;display:flex;flex-flow:column nowrap}:host .drawer-backdrop .drawer .drawer-close{position:absolute;height:100%;width:20px;top:0;left:-20px;display:flex;flex-flow:row nowrap;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }] });
3232
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerComponent, decorators: [{
3233
- type: Component,
3234
- args: [{ selector: 'rs-drawer', template: "<div #drawerBackdrop class=\"drawer-backdrop\" (click)=\"hide($event, drawerBackdrop)\">\n <div class=\"drawer\" [ngStyle]=\"{width: _width}\">\n <div *ngIf=\"headerTemplate\" class=\"drawer-header\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"\n [ngTemplateOutletContext]=\"{$implicit: headerTemplateContext}\"></ng-template>\n </div>\n <div class=\"drawer-content\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\"\n [ngTemplateOutletContext]=\"{$implicit: contentTemplateContext}\"></ng-template>\n </div>\n <div class=\"drawer-close\">\n <dx-button height=\"40px\" icon=\"coast-icon coast-icon-arrow-right-filling\" (onClick)=\"hide($event)\"></dx-button>\n </div>\n </div>\n</div>\n", styles: [":host .drawer-backdrop{position:absolute;inset:0;z-index:calc(var(--coast-z-index-drawer, 1040) - 1)}:host .drawer-backdrop .drawer{position:absolute;right:0;height:100%;z-index:var(--coast-z-index-drawer, 1040);background-color:var(--coast-base-bg-color, #fff);display:flex;flex-flow:column nowrap}:host .drawer-backdrop .drawer .drawer-header{flex:0 0 36px;padding:8px;border-bottom:1px solid var(--coast-border-color, #dddddd);display:flex;flex-flow:row nowrap;align-items:center;justify-content:flex-end}:host .drawer-backdrop .drawer .drawer-content{flex:1;overflow:auto;display:flex;flex-flow:column nowrap}:host .drawer-backdrop .drawer .drawer-close{position:absolute;height:100%;width:20px;top:0;left:-20px;display:flex;flex-flow:row nowrap;align-items:center}\n"] }]
3235
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
3236
-
3237
3361
  class DrawerModule {
3238
3362
  }
3239
3363
  DrawerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -3254,35 +3378,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
3254
3378
  }]
3255
3379
  }] });
3256
3380
 
3257
- class DrawerService {
3258
- constructor() {
3259
- }
3260
- open(viewContainerRef, size = 'default', contentTemplate, contentTemplateContext, headerTemplate, headerTemplateContext) {
3261
- const drawerRef = viewContainerRef.createComponent(DrawerComponent);
3262
- drawerRef.instance.hide = ($event, backdrop) => {
3263
- if ($event.target === backdrop) {
3264
- drawerRef.hostView.destroy();
3265
- }
3266
- };
3267
- drawerRef.instance.size = size;
3268
- drawerRef.instance.headerTemplate = headerTemplate;
3269
- drawerRef.instance.headerTemplateContext = headerTemplateContext;
3270
- drawerRef.instance.contentTemplate = contentTemplate;
3271
- drawerRef.instance.contentTemplateContext = contentTemplateContext;
3272
- drawerRef.instance._parentViewContainerRef = viewContainerRef;
3273
- drawerRef.instance.show();
3274
- return drawerRef.instance;
3275
- }
3276
- }
3277
- DrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3278
- DrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerService, providedIn: 'root' });
3279
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DrawerService, decorators: [{
3280
- type: Injectable,
3281
- args: [{
3282
- providedIn: 'root'
3283
- }]
3284
- }], ctorParameters: function () { return []; } });
3285
-
3286
3381
  class TooltipContentTemplateDirective {
3287
3382
  constructor(templateRef) {
3288
3383
  this.templateRef = templateRef;
@@ -3891,5 +3986,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
3891
3986
  * Generated bundle index. Do not edit.
3892
3987
  */
3893
3988
 
3894
- export { BoxContainerComponent, BoxContainerModule, CamundaBpmnEditorComponent, CamundaBpmnEditorModule, ChangeFilter, CodeEditorComponent, CodeEditorModule, DataDetailComponent, DataDetailModule, DataGridComponent, DataGridFactory, DataGridModule, DataGridService, DrawerComponent, DrawerModule, DrawerService, DynamicParamsComponent, DynamicParamsModule, FormComponent, FormModule, FormService, FullscreenDirective, IconSelectorComponent, IconSelectorModule, InstanceLinkTemplateDirective, ItemConfigComponent, ItemStyleComponent, MasterDetailTemplateDirective, ModalComponent, ModalModule, ModalService, PdfViewerComponent, PluginManager, RowButtonsTemplateDirective, TooltipContentTemplateDirective, WebsocketModule, WebsocketService, download_file, file_type_icon, format_date, format_datetime, format_file_size, notify_error, notify_success, notify_warning, support_preview_ext, validate, validate_group };
3989
+ export { BoxContainerComponent, BoxContainerModule, CamundaBpmnEditorComponent, CamundaBpmnEditorModule, ChangeFilter, CodeEditorComponent, CodeEditorModule, DataDetailComponent, DataDetailModule, DataGridComponent, DataGridFactory, DataGridModule, DataGridService, DrawerComponent, DrawerModule, DrawerService, DynamicParamsComponent, DynamicParamsModule, FormComponent, FormModule, FormService, FullscreenDirective, IconSelectorComponent, IconSelectorModule, ItemConfigComponent, ItemStyleComponent, ModalComponent, ModalModule, ModalService, PdfViewerComponent, PluginManager, RowButtonsTemplateDirective, TooltipContentTemplateDirective, WebsocketModule, WebsocketService, download_file, file_type_icon, format_date, format_datetime, format_file_size, notify_error, notify_success, notify_warning, support_preview_ext, validate, validate_group };
3895
3990
  //# sourceMappingURL=ngx-rs-ant.mjs.map