tnx-shared 5.1.173 → 5.1.174
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +269 -138
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/component-base.d.ts +1 -1
- package/classes/base/component-base.d.ts.map +1 -1
- package/classes/base/data-form-base.d.ts.map +1 -1
- package/classes/base/data-list-base.d.ts.map +1 -1
- package/classes/form-schema.d.ts +12 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/check-box-list/check-box-list.component.d.ts.map +1 -1
- package/components/common-app-component/app.menu.component.d.ts.map +1 -1
- package/components/congviec-picker/models/enums.d.ts +5 -0
- package/components/congviec-picker/models/enums.d.ts.map +1 -0
- package/components/crud/crud-form/crud-form.component.d.ts +1 -2
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/crud/crud-list/crud-list.component.d.ts +1 -0
- package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
- package/components/tn-app-help/tn-app-help.component.d.ts +1 -0
- package/components/tn-app-help/tn-app-help.component.d.ts.map +1 -1
- package/components/tn-tabview/tn-tabview.component.d.ts +2 -1
- package/components/tn-tabview/tn-tabview.component.d.ts.map +1 -1
- package/components/vanban-picker/vanban-picker.component.d.ts +3 -0
- package/components/vanban-picker/vanban-picker.component.d.ts.map +1 -1
- package/components/workflow/services/workflow-history.service.d.ts +4 -0
- package/components/workflow/services/workflow-history.service.d.ts.map +1 -1
- package/components/workflow/services/workflow-settings.service.d.ts +4 -0
- package/components/workflow/services/workflow-settings.service.d.ts.map +1 -1
- package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts +5 -4
- package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts.map +1 -1
- package/congviec/congviec/congviec.component.d.ts +6 -0
- package/congviec/congviec/congviec.component.d.ts.map +1 -1
- package/congviec/dm-loai-congviec/dm-loai-congviec-form/dm-loai-congviec-form.component.d.ts.map +1 -1
- package/congviec/dm-loai-congviec/dm-loai-congviec.component.d.ts.map +1 -1
- package/enums/common.d.ts +2 -1
- package/enums/common.d.ts.map +1 -1
- package/esm2015/classes/base/component-base.js +4 -3
- package/esm2015/classes/base/data-form-base.js +5 -1
- package/esm2015/classes/base/data-list-base.js +3 -2
- package/esm2015/classes/form-schema.js +12 -1
- package/esm2015/components/check-box-list/check-box-list.component.js +19 -60
- package/esm2015/components/common-app-component/app.menu.component.js +9 -1
- package/esm2015/components/congviec-picker/models/enums.js +6 -0
- package/esm2015/components/crud/crud-form/crud-form.component.js +3 -7
- package/esm2015/components/crud/crud-list/crud-list.component.js +7 -1
- package/esm2015/components/file-explorer/file-manager/file-manager.component.js +2 -2
- package/esm2015/components/file-explorer/file-viewer/file-viewer.component.js +2 -2
- package/esm2015/components/tn-app-help/tn-app-help.component.js +6 -2
- package/esm2015/components/tn-tabview/tn-tabview.component.js +2 -2
- package/esm2015/components/vanban-picker/vanban-picker.component.js +29 -11
- package/esm2015/components/workflow/services/workflow-history.service.js +12 -1
- package/esm2015/components/workflow/services/workflow-settings.service.js +45 -11
- package/esm2015/components/workflow/workflow-history-new/workflow-history-new.component.js +52 -14
- package/esm2015/congviec/congviec/congviec.component.js +19 -3
- package/esm2015/congviec/dm-loai-congviec/dm-loai-congviec-form/dm-loai-congviec-form.component.js +7 -3
- package/esm2015/congviec/dm-loai-congviec/dm-loai-congviec.component.js +3 -2
- package/esm2015/enums/common.js +2 -1
- package/esm2015/models/grid-info.js +2 -1
- package/esm2015/public-api.js +2 -1
- package/esm2015/services/base.service.js +4 -3
- package/esm2015/services/common.service.js +3 -2
- package/fesm2015/tnx-shared.js +237 -114
- package/fesm2015/tnx-shared.js.map +1 -1
- package/models/grid-info.d.ts +1 -0
- package/models/grid-info.d.ts.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -1
- package/services/base.service.d.ts +1 -1
- package/services/base.service.d.ts.map +1 -1
- package/services/common.service.d.ts +1 -1
- package/services/common.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -624,6 +624,7 @@
|
|
|
624
624
|
}());
|
|
625
625
|
var Filter = /** @class */ (function () {
|
|
626
626
|
function Filter(init) {
|
|
627
|
+
this.valueIsField = false;
|
|
627
628
|
this.filters = [];
|
|
628
629
|
for (var key in init) {
|
|
629
630
|
this[key] = init[key];
|
|
@@ -2287,10 +2288,12 @@
|
|
|
2287
2288
|
filters: __spread(filters),
|
|
2288
2289
|
});
|
|
2289
2290
|
};
|
|
2290
|
-
CommonService.prototype.newFilter = function (field, operator, value) {
|
|
2291
|
+
CommonService.prototype.newFilter = function (field, operator, value, valueIsField) {
|
|
2292
|
+
if (valueIsField === void 0) { valueIsField = false; }
|
|
2291
2293
|
return new Filter({
|
|
2292
2294
|
field: field, operator: operator,
|
|
2293
2295
|
value: JSON.stringify(value),
|
|
2296
|
+
valueIsField: valueIsField,
|
|
2294
2297
|
});
|
|
2295
2298
|
};
|
|
2296
2299
|
CommonService.prototype.newFilterV4 = function (field, operator, value) {
|
|
@@ -2988,6 +2991,7 @@
|
|
|
2988
2991
|
PermissionBase[PermissionBase["READ"] = 1] = "READ";
|
|
2989
2992
|
PermissionBase[PermissionBase["EDIT"] = 2] = "EDIT";
|
|
2990
2993
|
PermissionBase[PermissionBase["DELETE"] = 4] = "DELETE";
|
|
2994
|
+
PermissionBase[PermissionBase["FULL"] = 7] = "FULL";
|
|
2991
2995
|
})(exports.PermissionBase || (exports.PermissionBase = {}));
|
|
2992
2996
|
|
|
2993
2997
|
var ExportItem = /** @class */ (function () {
|
|
@@ -3305,6 +3309,11 @@
|
|
|
3305
3309
|
ButtonTextActionCongViec["XEM_LICH_SU"] = "Xem l\u1ECBch s\u1EED";
|
|
3306
3310
|
})(exports.ButtonTextActionCongViec || (exports.ButtonTextActionCongViec = {}));
|
|
3307
3311
|
|
|
3312
|
+
(function (EnumLoaiVanBanBase) {
|
|
3313
|
+
EnumLoaiVanBanBase[EnumLoaiVanBanBase["VB_DEN"] = 1] = "VB_DEN";
|
|
3314
|
+
EnumLoaiVanBanBase[EnumLoaiVanBanBase["VB_DI"] = 2] = "VB_DI";
|
|
3315
|
+
})(exports.EnumLoaiVanBanBase || (exports.EnumLoaiVanBanBase = {}));
|
|
3316
|
+
|
|
3308
3317
|
var ModelSchema = /** @class */ (function () {
|
|
3309
3318
|
function ModelSchema(init) {
|
|
3310
3319
|
this.dataType = 'string';
|
|
@@ -4223,6 +4232,8 @@
|
|
|
4223
4232
|
_this.mdWidth = 12;
|
|
4224
4233
|
_this.useVbDen = true;
|
|
4225
4234
|
_this.useVbDi = true;
|
|
4235
|
+
_this.readonly = false;
|
|
4236
|
+
_this.loaiVanBan = exports.EnumLoaiVanBanBase.VB_DI;
|
|
4226
4237
|
for (var key in init) {
|
|
4227
4238
|
_this[key] = init[key];
|
|
4228
4239
|
}
|
|
@@ -4565,6 +4576,15 @@
|
|
|
4565
4576
|
});
|
|
4566
4577
|
return EventData;
|
|
4567
4578
|
}());
|
|
4579
|
+
var TabViewData = /** @class */ (function () {
|
|
4580
|
+
function TabViewData(init) {
|
|
4581
|
+
this.hidden = false;
|
|
4582
|
+
for (var key in init) {
|
|
4583
|
+
this[key] = init[key];
|
|
4584
|
+
}
|
|
4585
|
+
}
|
|
4586
|
+
return TabViewData;
|
|
4587
|
+
}());
|
|
4568
4588
|
(function (DataType) {
|
|
4569
4589
|
DataType["date"] = "date";
|
|
4570
4590
|
DataType["datetime"] = "datetime";
|
|
@@ -7139,10 +7159,12 @@
|
|
|
7139
7159
|
});
|
|
7140
7160
|
});
|
|
7141
7161
|
};
|
|
7142
|
-
BaseService.prototype.newFilter = function (field, operator, value) {
|
|
7162
|
+
BaseService.prototype.newFilter = function (field, operator, value, valueIsField) {
|
|
7163
|
+
if (valueIsField === void 0) { valueIsField = false; }
|
|
7143
7164
|
return new Filter({
|
|
7144
7165
|
field: field, operator: operator,
|
|
7145
|
-
value: JSON.stringify(value)
|
|
7166
|
+
value: JSON.stringify(value),
|
|
7167
|
+
valueIsField: valueIsField
|
|
7146
7168
|
});
|
|
7147
7169
|
};
|
|
7148
7170
|
BaseService.prototype.newFilterV4 = function (field, operator, value) {
|
|
@@ -8693,10 +8715,12 @@
|
|
|
8693
8715
|
filters: __spread(filters)
|
|
8694
8716
|
});
|
|
8695
8717
|
};
|
|
8696
|
-
ComponentBase.prototype.newFilter = function (field, operator, value) {
|
|
8718
|
+
ComponentBase.prototype.newFilter = function (field, operator, value, valueIsField) {
|
|
8719
|
+
if (valueIsField === void 0) { valueIsField = false; }
|
|
8697
8720
|
return new Filter({
|
|
8698
8721
|
field: field, operator: operator,
|
|
8699
|
-
value: JSON.stringify(value)
|
|
8722
|
+
value: JSON.stringify(value),
|
|
8723
|
+
valueIsField: valueIsField
|
|
8700
8724
|
});
|
|
8701
8725
|
};
|
|
8702
8726
|
ComponentBase.prototype.newFilterV4 = function (field, operator, value) {
|
|
@@ -11454,6 +11478,7 @@
|
|
|
11454
11478
|
__extends(WorkflowHistoryService, _super);
|
|
11455
11479
|
function WorkflowHistoryService(http, injector, _moduleConfigService) {
|
|
11456
11480
|
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.workflowEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/WorkflowHistory") || this;
|
|
11481
|
+
_this.serviceManagers = {};
|
|
11457
11482
|
_this.entityName = 'WorkflowHistory';
|
|
11458
11483
|
_this.serviceCode = 'workflow';
|
|
11459
11484
|
_this.apiDomain = _moduleConfigService.getConfig().environment.apiDomain;
|
|
@@ -11462,6 +11487,16 @@
|
|
|
11462
11487
|
_this.apiVersion = _moduleConfigService.getConfig().environment.apiVersion;
|
|
11463
11488
|
return _this;
|
|
11464
11489
|
}
|
|
11490
|
+
WorkflowHistoryService.prototype.registerService = function (settingKey, service) {
|
|
11491
|
+
this.serviceManagers[settingKey] = service;
|
|
11492
|
+
};
|
|
11493
|
+
WorkflowHistoryService.prototype.getEndpointByService = function (service) {
|
|
11494
|
+
return service.endPoint + "/" + this._moduleConfig.environment.apiVersion;
|
|
11495
|
+
};
|
|
11496
|
+
WorkflowHistoryService.prototype.changeEndpoint = function (baseService) {
|
|
11497
|
+
this.serviceUri = this.getEndpointByService(baseService) + "/WorkflowHistory";
|
|
11498
|
+
return this;
|
|
11499
|
+
};
|
|
11465
11500
|
WorkflowHistoryService.prototype.getLastByItemId = function (itemId) {
|
|
11466
11501
|
// return this.getDetailByFilter(
|
|
11467
11502
|
// [
|
|
@@ -15469,13 +15504,6 @@
|
|
|
15469
15504
|
});
|
|
15470
15505
|
});
|
|
15471
15506
|
};
|
|
15472
|
-
CrudFormComponent.prototype.handleDataSourceLoadComplete = function (control, parentPath, dataSource) {
|
|
15473
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
15474
|
-
return __generator(this, function (_d) {
|
|
15475
|
-
return [2 /*return*/];
|
|
15476
|
-
});
|
|
15477
|
-
});
|
|
15478
|
-
};
|
|
15479
15507
|
CrudFormComponent.prototype.handleDataSourceLoaded = function (control, parentPath, dataFromDropdown) {
|
|
15480
15508
|
return __awaiter(this, void 0, void 0, function () {
|
|
15481
15509
|
var parentNode, currentNode, eventData, _a_3;
|
|
@@ -16390,7 +16418,7 @@
|
|
|
16390
16418
|
CrudFormComponent.decorators = [
|
|
16391
16419
|
{ type: i0.Component, args: [{
|
|
16392
16420
|
selector: 'crud-form',
|
|
16393
|
-
template: "<div [class]=\"_styleClass\">\r\n <form #formElement autocomplete=\"off\" autocorrect=\"off\" spellcheck=\"false\"\r\n [class]=\"'p-grid form-group crud-form' + (formClass ? ' ' + formClass : '')\"\r\n (keydown.shift.tab)=\"preventBlur($event)\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\">\r\n <ng-container *ngFor=\"let control of setting.schema\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: control, data: _modelData, parentPath: '', path: control.field, showLabel: control.showLabel, mdWidth: control.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</div>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\r\n<ng-template #customControl let-data=\"data\" let-control=\"control\" let-showLabel=\"showLabel\" let-mdWidth=\"mdWidth\"\r\n let-rowIndex=\"index\" let-path=\"path\" let-parentPath=\"parentPath\" let-tablePath=\"tablePath\">\r\n <div *ngIf=\"!checkHidden(control, data, path)\" id=\"{{path}}-holder\"\r\n class=\"p-col-{{control.gWidth}} p-md-{{mdWidth}} {{control.class}} crud-form-control type-{{control.dataType}}\"\r\n [class.error]=\"data._errors[control.field].length > 0\"\r\n [class.not-show-in-box-holder]=\"control.showInBox === false\"\r\n [class.show-in-box-holder]=\"control.showInBox === true\" [ngStyle]=\"control.style\">\r\n <div class=\"label\" *ngIf=\"showLabel\">\r\n <label *ngIf=\"control.label\" [pTooltip]=\"control.fullLabel\" tooltipPosition=\"top\">{{control.label}}\r\n <span *ngIf=\"control.required\" class=\"star-required\">*</span></label>\r\n <span *ngIf=\"control.description\" class=\"control-description\">({{control.description}})</span>\r\n </div>\r\n <ng-container [ngSwitch]=\"control.controlType\">\r\n <ng-container *ngSwitchCase=\"'label'\">\r\n <ng-container [ngTemplateOutlet]=\"labelControl\"\r\n [ngTemplateOutletContext]=\"{control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'title'\">\r\n <label *ngIf=\"!control.ishtml\" [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | translate\"></label>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div class=\"p-inputgroup\" *ngIf=\"control.suffFix\">\r\n <input (focus)=\"onFocusTextControl($event)\" [placeholder]=\"control.placeholder\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText\r\n [type]=\"control.dataFormat\" [(ngModel)]=\"data[control.field]\" [max]=\"control.max\"\r\n [min]=\"control.min\" [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n <span class=\"p-inputgroup-addon\">({{control.suffFix}})</span>\r\n </div>\r\n <input *ngIf=\"!control.suffFix\" (focus)=\"onFocusTextControl($event)\" [placeholder]=\"control.placeholder\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText [type]=\"control.dataFormat\"\r\n [(ngModel)]=\"data[control.field]\" [max]=\"control.max\" [min]=\"control.min\"\r\n [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'template'\">\r\n <ng-container [ngTemplateOutlet]=\"control.template\"\r\n [ngTemplateOutletContext]=\"{$implicit: _rootNode, control: control, data: data, tablePath: tablePath, parentPath: parentPath, rowIndex: rowIndex, funcUpdateModel: updateModelFromExternal}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <tn-mask [prefix]=\"control.prefix\" [decimalPlaces]=\"control.decimalPlaces\" [suffix]=\"control.suffix\"\r\n [placeholder]=\"control.placeholder\" [disabled]=\"checkDisabled(data, control)\"\r\n [maskType]=\"control.maskType\" [min]=\"control.min\" [max]=\"control.max\"\r\n [(ngModel)]=\"data[control.field]\" (onFocus)=\"onFocusTextControl($event)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-mask>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'numberrange'\">\r\n <tn-number-picker-range [decimalPlaces]=\"control.decimalPlaces\"\r\n [disabled]=\"checkDisabled(data, control)\" [maskType]=\"control.maskType\"\r\n [(ngModel)]=\"data[control.field]\" [min]=\"control.min\" [max]=\"control.max\"\r\n (search)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (blur)=\"handleFieldValueChange(control, $event, 'blur', data, parentPath)\">\r\n </tn-number-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'money'\">\r\n <input currencyMask [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText type=\"tel\"\r\n [(ngModel)]=\"data[control.field]\"\r\n [options]=\"{prefix: '', thousands: '.', decimal: ',',precision:control.dataFormat === 'money'?0:0 }\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (focus)=\"onFocusTextControl($event)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'phoneOrfax'\">\r\n <input [placeholder]=\"control.dataFormat==='phone'?'(999) 999-9999':'999-999-9999'\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" type=\"tel\" pInputText\r\n [(ngModel)]=\"data[control.field]\" (focus)=\"onFocusTextControl($event)\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea pInputTextarea (focus)=\"onFocusTextControl($event)\" [rows]=\"control.rows ? control.rows : 5\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" [(ngModel)]=\"data[control.field]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"></textarea>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'editor'\">\r\n <tn-tinymce *ngIf=\"!checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n [required]=\"control.validators && control.validators.required\" [mode]=\"control.mode\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n [height]=\"control.height ? control.height : 250\" [languageCode]=\"control.languageCode\"\r\n [disabled]=\"control.disabled || (control.disableCheck && control.disableCheck(model))\">\r\n </tn-tinymce>\r\n <div *ngIf=\"checkDisabled(data, control)\" class=\"html-box\"\r\n [innerHTML]=\"data[control.field] ? (data[control.field] | safeHtml) : ''\">\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <datetime-picker [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </datetime-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete'\">\r\n <app-autocomplete-datasource [control]=\"control\" [(ngModel)]=\"data[control.field]\"\r\n [suggestions]=\"data._source[control.field] || control.dataSource\"\r\n (onValueChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </app-autocomplete-datasource>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetimerange'\">\r\n <tn-datetime-picker-range [(ngModel)]=\"data[control.field]\" [disabled]=\"control.disabled\"\r\n [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-datetime-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <dropdown [control]=\"control\" [dataSource]=\"getControlDataSource(control, data)\"\r\n [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleChangeDropdown(control, $event, 'change', data, parentPath)\"\r\n (onHideSmartEvent)=\"handleChangeDropdown(control, $event, 'hide', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileManager'\">\r\n <file-manager [control]=\"control\" [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [readonly]=\"control.disabled\" [layout]=\"control.layout\"\r\n [maxFileSize]=\"control.maxFileSize\" [inTaiLieu]=\"control.inTaiLieu\"\r\n [inTaiLieuChung]=\"control.inTaiLieuChung\" [copyToFolderId]=\"control.copyToFolderId\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n [(value)]=\"data[control.field]\" (onSelected)=\"control.onSelected($event)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </file-manager>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'fileUpload'\">\r\n <file-upload [(ngModel)]=\"data[control.field]\" [sharedFolderType]=\"control.sharedFolderType\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n [readonly]=\"control.readonly\" [accept]=\"control.accept\">\r\n </file-upload>\r\n </span>\r\n <span *ngSwitchCase=\"'serviceFileUpload'\">\r\n <service-file-upload [(ngModel)]=\"data[control.field]\" [parentContext]=\"context\"\r\n [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </service-file-upload>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'user-picker'\">\r\n <user-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\" [multiple]=\"control.multiple\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </user-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <p-inputSwitch [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </p-inputSwitch>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <div [class]=\"control.class\" role=\"checkbox-alone\">\r\n <p-checkbox [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n [label]=\"!control.hiddenLabel ? control.label : null\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" binary=\"true\">\r\n </p-checkbox>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <button type=\"button\" pButton [class]=\"control.btClass\" [icon]=\"control.icon\"\r\n [label]=\"control.label | translate\" [ngStyle]=\"control.btStyle\"\r\n (click)=\"handleButtonClick(control, $event, parentPath)\"></button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'container'\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\" [class.not-show-in-box]=\"!control.showInBox\"\r\n [class.show-in-box]=\"control.showInBox\" [ngStyle]=\"control.boxStyle\">\r\n <ng-container *ngFor=\"let subControl of control.controls\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: subControl, data: data[control.field], parentPath: path, rowIndex: rowIndex, path: path + '.' + subControl.field, showLabel: subControl.showLabel, mdWidth: subControl.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkboxlist'\">\r\n <check-box-list [control]=\"control\" [dataSource]=\"data._source[control.field] || control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </check-box-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'radiobuttonlist'\">\r\n <radio-button-list [control]=\"control\" [dataSource]=\"control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\">\r\n </radio-button-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorPicker'\">\r\n <tn-color-picker [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-color-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'spanControl'\">\r\n <span *ngIf=\"!control.ishtml\">{{data[control.field]}}</span>\r\n <span *ngIf=\"control.ishtml\" [innerHTML]=\"data[control.field]\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorControl'\">\r\n <span class=\"show-color-control\" [ngStyle]=\"{ backgroundColor: data[control.sourceField]}\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'address'\">\r\n <address-picker [control]=\"control\" [showSubLabel]=\"control.showSubLabel\"\r\n [disabled]=\"checkDisabled(data, control)\" [(data)]=\"data[control.field]\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </address-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete-picker'\">\r\n <autocomplete-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </autocomplete-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'entity-picker'\">\r\n <entity-picker [control]=\"control\" [children]=\"children\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </entity-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc'\">\r\n <cocautochuc-picker [control]=\"control\" [parentOrgId]=\"control.parentOrgId\"\r\n [disabled]=\"checkDisabled(data, control)\" [parentOrgCode]=\"control.parentOrgCode\"\r\n [filter]=\"control.filter\" [multiple]=\"control.multiple\" [required]=\"control.required\"\r\n [isUsingId]=\"control.isUsingId\" [disabledParentItem]=\"control.disabledParentItem\"\r\n [rootParentId]=\"control.rootParentId\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </cocautochuc-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc-picker'\">\r\n <cocautochuc-picker-list [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </cocautochuc-picker-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'vanban'\">\r\n <vanban-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </vanban-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'congviec'\">\r\n <div>\r\n <congviec-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </congviec-picker>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <div>\r\n <tn-mask [suffix]=\"'%'\" [placeholder]=\"control.placeholder\" [maskType]=\"'int'\" [min]=\"0\" [max]=\"100\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-mask>\r\n <p-slider [step]=\"1\" [min]=\"0\" [max]=\"100\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (onSlideEnd)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </p-slider>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <div [class]=\"control.class\">\r\n <tn-custom-scrollbar class=\"--has-border\" [showScrollHorizontal]=\"true\">\r\n <p-table [value]=\"data[control.field]\" [columns]=\"control.headerTemplate\" [responsive]=\"true\"\r\n class=\"new-table scr-table table-control\" [rowTrackBy]=\"trackByFuncId\"\r\n (onRowReorder)=\"handleRowOrdered(control, $event, 'rowReorder', data, parentPath)\">\r\n <ng-template *ngIf=\"getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"getComponentByType(_prefixCustomHeader + control.field), context: {$implicit: control.headerTemplate, crudForm: this, containerSticky: containerSticky}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-rowData let-columns>\r\n <tr>\r\n <th *ngIf=\"control.showNumber\" style=\"text-align: center; width: 2.5rem\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <th *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [pTooltip]=\"subControl.fullLabel || subControl.label\" tooltipPosition=\"top\"\r\n [style.width]=\"subControl.width\" style=\"text-align: center;\">\r\n {{subControl.label}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"control.enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"control.showFunction\"\r\n [style.width]=\"getTableFunctionColumnWidth(control)\"\r\n class=\"table-function column-function\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-ri=\"rowIndex\">\r\n <tr [pReorderableRow]=\"ri\">\r\n <td style=\"text-align: center; padding-left: 0; padding-right: 0;\"\r\n *ngIf=\"control.showNumber\" class=\"stt\">\r\n <span style=\"padding: 12px 5px; display: inline-block;\">{{ri+1}}</span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate; let i = index\">\r\n <td *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [class.control-inside]=\"true\" [class]=\"subControl.class\">\r\n <span class=\"p-column-title\">{{subControl.label}}</span>\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: getContextTd(subControl, rowData, ri, path)\">\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"control.enableReorderRow\" class=\"no-padding center v-center\">\r\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\"\r\n pReorderableRowHandle></i>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td style=\"text-align:center\" *ngIf=\"control.showFunction\" class=\"column-function\">\r\n <div class=\"p-toolbar-group-center button-group\">\r\n <button *ngIf=\"control.showSave\" [disabled]=\"rowData._disableSave\"\r\n type=\"button\" pButton class=\"p-button-text\" icon=\"pi pi-save\"\r\n [pTooltip]=\"'L\u01B0u' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"saveRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showEdit\" [disabled]=\"rowData._disableEdit\"\r\n type=\"button\" pButton class=\"p-button-text\" icon=\"pi pi-pencil\"\r\n [pTooltip]=\"'S\u1EEDa' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"editRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showDelete\" [disabled]=\"rowData._disableDelete\"\r\n type=\"button\" pButton class=\"p-button-text p-button-danger\"\r\n icon=\"pi pi-trash\" [pTooltip]=\"'X\u00F3a' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"deleteRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.rowButtons\" type=\"button\" pButton\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\"\r\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData, control)\"></button>\r\n <!-- <button *ngFor=\"let bt of control.rowButtons\" type=\"button\" pButton\r\n [class]=\"bt.class\" [icon]=\"bt.icon\" [pTooltip]=\"bt.label | translate\"\r\n tooltipPosition=\"top\" style=\"width: 2.143em;\"\r\n (click)=\"messageRow(ri, control, path)\"></button> -->\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"control.showFooter\" class=\"--table-schema-footer\">\r\n <button *ngIf=\"control.showAdd\" type=\"button\" pButton style=\"width:auto\" label=\"Th\u00EAm m\u1EDBi\"\r\n icon=\"pi pi-plus\" class=\"p-button-text\" (click)=\"addNewRow(control, path)\"></button>\r\n <span style=\"font-weight: normal;\">\r\n <p-checkbox label=\"M\u1EDF dialog\" [binary]=\"true\" [(ngModel)]=\"control.showEdit\">\r\n </p-checkbox>\r\n </span>\r\n <button *ngIf=\"control.enableAddMulti\" type=\"button\" pButton\r\n style=\"width:auto; margin-left:10px;\" label=\"Th\u00EAm nhi\u1EC1u\" icon=\"pi pi-clone\"\r\n class=\"p-button-text\" (click)=\"addMultiRow(control, 5, path)\"></button>\r\n <button *ngFor=\"let bt of control.footerButtons\" type=\"button\" pButton [class]=\"bt.class\"\r\n [icon]=\"bt.icon\" [label]=\"bt.label | translate\" style=\"width:auto; margin-left:10px;\"\r\n (click)=\"messageRow( -1, control, path)\"></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(control.field)\" [ngTemplateOutletContext]=\"{\r\n crudForm: this, data: data, index: rowIndex, parentPath: parentPath, control: control, changeFunc: handleFieldValueChange\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"validation; context: {control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #validation let-control=\"control\" let-data=\"data\">\r\n <ng-container *ngIf=\"data._errors[control.field].length > 0\">\r\n <div class=\"error-container\">\r\n <ng-container *ngFor=\"let error of data._errors[control.field]\">\r\n <div class=\"error-item\" *ngIf=\"error\">\r\n <ng-container [ngTemplateOutlet]=\"errorMessage\" [ngTemplateOutletContext]=\"{content: error}\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #errorMessage let-content=\"content\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-ban\"></i>\r\n <span> {{content}}</span>\r\n </div>\r\n</ng-template>\r\n<ng-template #labelControl let-control=\"control\">\r\n <ng-container>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"!control.ishtml\" [attr.label-index]=\"control.indexLabel\"\r\n [pTooltip]=\"control.title\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\" [escape]=\"false\"\r\n [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | safeHtml\"\r\n [attr.label-index]=\"control.indexLabel\"></label>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #containerSticky>\r\n <span class=\"fix-sticky top\"></span>\r\n <span class=\"fix-sticky right\"></span>\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>\r\n<ng-template #templateCongViecForm let-control=\"control\">\r\n <base-congviec-form [control]=\"control\" [parentSetting]=\"congViecSetting\" [tenCongViec]=\"control.data.tenCongViec\">\r\n </base-congviec-form>\r\n</ng-template>\r\n<tn-dialog *ngIf=\"tableFormShow\" #dialog [styleClass]=\"'address-form'\" [header]=\"tableFormTitle | translate\"\r\n [popupSize]=\"tableFormPopupSize\" (onHide)=\"tableFormShow = false\">\r\n <table-detail-form #formBase [parentSetting]=\"setting\" [schema]=\"tableFormSchema\" [data]=\"tableFormData\"\r\n (onSaved)=\"handleSavedTableRow($event)\" (onCancel)=\"tableFormShow = false\">\r\n </table-detail-form>\r\n</tn-dialog>",
|
|
16421
|
+
template: "<div [class]=\"_styleClass\">\r\n <form #formElement autocomplete=\"off\" autocorrect=\"off\" spellcheck=\"false\"\r\n [class]=\"'p-grid form-group crud-form' + (formClass ? ' ' + formClass : '')\"\r\n (keydown.shift.tab)=\"preventBlur($event)\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\">\r\n <ng-container *ngFor=\"let control of setting.schema\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: control, data: _modelData, parentPath: '', path: control.field, showLabel: control.showLabel, mdWidth: control.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</div>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\r\n<ng-template #customControl let-data=\"data\" let-control=\"control\" let-showLabel=\"showLabel\" let-mdWidth=\"mdWidth\"\r\n let-rowIndex=\"index\" let-path=\"path\" let-parentPath=\"parentPath\" let-tablePath=\"tablePath\">\r\n <div *ngIf=\"!checkHidden(control, data, path)\" id=\"{{path}}-holder\"\r\n class=\"p-col-{{control.gWidth}} p-md-{{mdWidth}} {{control.class}} crud-form-control type-{{control.dataType}}\"\r\n [class.error]=\"data._errors[control.field].length > 0\"\r\n [class.not-show-in-box-holder]=\"control.showInBox === false\"\r\n [class.show-in-box-holder]=\"control.showInBox === true\" [ngStyle]=\"control.style\">\r\n <div class=\"label\" *ngIf=\"showLabel\">\r\n <label *ngIf=\"control.label\" [pTooltip]=\"control.fullLabel\" tooltipPosition=\"top\">{{control.label}}\r\n <span *ngIf=\"control.required\" class=\"star-required\">*</span></label>\r\n <span *ngIf=\"control.description\" class=\"control-description\">({{control.description}})</span>\r\n </div>\r\n <ng-container [ngSwitch]=\"control.controlType\">\r\n <ng-container *ngSwitchCase=\"'label'\">\r\n <ng-container [ngTemplateOutlet]=\"labelControl\"\r\n [ngTemplateOutletContext]=\"{control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'title'\">\r\n <label *ngIf=\"!control.ishtml\" [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | translate\"></label>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div class=\"p-inputgroup\" *ngIf=\"control.suffFix\">\r\n <input (focus)=\"onFocusTextControl($event)\" [placeholder]=\"control.placeholder\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText\r\n [type]=\"control.dataFormat\" [(ngModel)]=\"data[control.field]\" [max]=\"control.max\"\r\n [min]=\"control.min\" [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n <span class=\"p-inputgroup-addon\">({{control.suffFix}})</span>\r\n </div>\r\n <input *ngIf=\"!control.suffFix\" (focus)=\"onFocusTextControl($event)\" [placeholder]=\"control.placeholder\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText [type]=\"control.dataFormat\"\r\n [(ngModel)]=\"data[control.field]\" [max]=\"control.max\" [min]=\"control.min\"\r\n [maxlength]=\"control.maxLength\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (key.enter)=\"handleFieldValueChange(control, $event, 'enter', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'template'\">\r\n <ng-container [ngTemplateOutlet]=\"control.template\"\r\n [ngTemplateOutletContext]=\"{$implicit: _rootNode, control: control, data: data, tablePath: tablePath, parentPath: parentPath, rowIndex: rowIndex, funcUpdateModel: updateModelFromExternal}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <tn-mask [prefix]=\"control.prefix\" [decimalPlaces]=\"control.decimalPlaces\" [suffix]=\"control.suffix\"\r\n [placeholder]=\"control.placeholder\" [disabled]=\"checkDisabled(data, control)\"\r\n [maskType]=\"control.maskType\" [min]=\"control.min\" [max]=\"control.max\"\r\n [(ngModel)]=\"data[control.field]\" (onFocus)=\"onFocusTextControl($event)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-mask>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'numberrange'\">\r\n <tn-number-picker-range [decimalPlaces]=\"control.decimalPlaces\"\r\n [disabled]=\"checkDisabled(data, control)\" [maskType]=\"control.maskType\"\r\n [(ngModel)]=\"data[control.field]\" [min]=\"control.min\" [max]=\"control.max\"\r\n (search)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (blur)=\"handleFieldValueChange(control, $event, 'blur', data, parentPath)\">\r\n </tn-number-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'money'\">\r\n <input currencyMask [attr.disabled]=\"checkDisabled(data, control) ? true : null\" pInputText type=\"tel\"\r\n [(ngModel)]=\"data[control.field]\"\r\n [options]=\"{prefix: '', thousands: '.', decimal: ',',precision:control.dataFormat === 'money'?0:0 }\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (focus)=\"onFocusTextControl($event)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'phoneOrfax'\">\r\n <input [placeholder]=\"control.dataFormat==='phone'?'(999) 999-9999':'999-999-9999'\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" type=\"tel\" pInputText\r\n [(ngModel)]=\"data[control.field]\" (focus)=\"onFocusTextControl($event)\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea pInputTextarea (focus)=\"onFocusTextControl($event)\" [rows]=\"control.rows ? control.rows : 5\"\r\n [attr.disabled]=\"checkDisabled(data, control) ? true : null\" [(ngModel)]=\"data[control.field]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"></textarea>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'editor'\">\r\n <tn-tinymce *ngIf=\"!checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n [required]=\"control.validators && control.validators.required\" [mode]=\"control.mode\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n [height]=\"control.height ? control.height : 250\" [languageCode]=\"control.languageCode\"\r\n [disabled]=\"control.disabled || (control.disableCheck && control.disableCheck(model))\">\r\n </tn-tinymce>\r\n <div *ngIf=\"checkDisabled(data, control)\" class=\"html-box\"\r\n [innerHTML]=\"data[control.field] ? (data[control.field] | safeHtml) : ''\">\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <datetime-picker [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </datetime-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete'\">\r\n <app-autocomplete-datasource [control]=\"control\" [(ngModel)]=\"data[control.field]\"\r\n [suggestions]=\"data._source[control.field] || control.dataSource\"\r\n (onValueChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </app-autocomplete-datasource>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetimerange'\">\r\n <tn-datetime-picker-range [(ngModel)]=\"data[control.field]\" [disabled]=\"control.disabled\"\r\n [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-datetime-picker-range>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <dropdown [control]=\"control\" [dataSource]=\"getControlDataSource(control, data)\"\r\n [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleChangeDropdown(control, $event, 'change', data, parentPath)\"\r\n (onHideSmartEvent)=\"handleChangeDropdown(control, $event, 'hide', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </dropdown>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileManager'\">\r\n <file-manager [control]=\"control\" [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"control.entityKey ? control.entityKey : data[control.entityKeyField]\"\r\n [readonly]=\"control.disabled\" [layout]=\"control.layout\" [maxFileSize]=\"control.maxFileSize\"\r\n [inTaiLieu]=\"control.inTaiLieu\" [inTaiLieuChung]=\"control.inTaiLieuChung\"\r\n [copyToFolderId]=\"control.copyToFolderId\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n [(value)]=\"data[control.field]\" (onSelected)=\"control.onSelected($event)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </file-manager>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'fileUpload'\">\r\n <file-upload [(ngModel)]=\"data[control.field]\" [sharedFolderType]=\"control.sharedFolderType\"\r\n [maxFileSize]=\"control.maxFileSize\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n [readonly]=\"control.readonly\" [accept]=\"control.accept\">\r\n </file-upload>\r\n </span>\r\n <span *ngSwitchCase=\"'serviceFileUpload'\">\r\n <service-file-upload [(ngModel)]=\"data[control.field]\" [parentContext]=\"context\"\r\n [serviceCode]=\"control.serviceCode\" [entity]=\"control.entity\"\r\n [entityKey]=\"data[control.entityKeyField]\" [control]=\"control\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </service-file-upload>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'user-picker'\">\r\n <user-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\" [multiple]=\"control.multiple\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </user-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <p-inputSwitch [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </p-inputSwitch>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <div [class]=\"control.class\" role=\"checkbox-alone\">\r\n <p-checkbox [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n [label]=\"!control.hiddenLabel ? control.label : null\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" binary=\"true\">\r\n </p-checkbox>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <button type=\"button\" pButton [class]=\"control.btClass\" [icon]=\"control.icon\"\r\n [label]=\"control.label | translate\" [ngStyle]=\"control.btStyle\"\r\n (click)=\"handleButtonClick(control, $event, parentPath)\"></button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'container'\">\r\n <div class=\"p-grid p-col-12\" style=\"margin: 0\" [class.not-show-in-box]=\"!control.showInBox\"\r\n [class.show-in-box]=\"control.showInBox\" [ngStyle]=\"control.boxStyle\">\r\n <ng-container *ngFor=\"let subControl of control.controls\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: {control: subControl, data: data[control.field], parentPath: path, rowIndex: rowIndex, path: path + '.' + subControl.field, showLabel: subControl.showLabel, mdWidth: subControl.mdWidth}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'checkboxlist'\">\r\n <check-box-list [control]=\"control\" [dataSource]=\"data._source[control.field] || control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </check-box-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'radiobuttonlist'\">\r\n <radio-button-list [control]=\"control\" [dataSource]=\"control.dataSource\"\r\n [disabled]=\"checkDisabled(data, control)\" [(value)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (adjustValue)=\"handleAdjustValueDropdownEvent(control, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\"\r\n (onDataSourceLoaded)=\"handleDataSourceLoaded(control, parentPath, $event)\">\r\n </radio-button-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorPicker'\">\r\n <tn-color-picker [(ngModel)]=\"data[control.field]\" [disabled]=\"checkDisabled(data, control)\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-color-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'spanControl'\">\r\n <span *ngIf=\"!control.ishtml\">{{data[control.field]}}</span>\r\n <span *ngIf=\"control.ishtml\" [innerHTML]=\"data[control.field]\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'colorControl'\">\r\n <span class=\"show-color-control\" [ngStyle]=\"{ backgroundColor: data[control.sourceField]}\"></span>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'address'\">\r\n <address-picker [control]=\"control\" [showSubLabel]=\"control.showSubLabel\"\r\n [disabled]=\"checkDisabled(data, control)\" [(data)]=\"data[control.field]\"\r\n (onSelect)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleControlReadyEvent(control, parentPath)\">\r\n </address-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'autocomplete-picker'\">\r\n <autocomplete-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </autocomplete-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'entity-picker'\">\r\n <entity-picker [control]=\"control\" [children]=\"children\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </entity-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc'\">\r\n <cocautochuc-picker [control]=\"control\" [parentOrgId]=\"control.parentOrgId\"\r\n [disabled]=\"checkDisabled(data, control)\" [parentOrgCode]=\"control.parentOrgCode\"\r\n [filter]=\"control.filter\" [multiple]=\"control.multiple\" [required]=\"control.required\"\r\n [isUsingId]=\"control.isUsingId\" [disabledParentItem]=\"control.disabledParentItem\"\r\n [rootParentId]=\"control.rootParentId\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </cocautochuc-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cocautochuc-picker'\">\r\n <cocautochuc-picker-list [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"\r\n (onReady)=\"handleReadyControlPicker(control, parentPath)\">\r\n </cocautochuc-picker-list>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'vanban'\">\r\n <vanban-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\" [readOnly]=\"control.readOnly\"\r\n [loaiVanBan]=\"control.loaiVanBan\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </vanban-picker>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'congviec'\">\r\n <div>\r\n <congviec-picker [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [required]=\"control.required\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </congviec-picker>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <div>\r\n <tn-mask [suffix]=\"'%'\" [placeholder]=\"control.placeholder\" [maskType]=\"'int'\" [min]=\"0\" [max]=\"100\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </tn-mask>\r\n <p-slider [step]=\"1\" [min]=\"0\" [max]=\"100\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (onSlideEnd)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\r\n </p-slider>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <div [class]=\"control.class\">\r\n <tn-custom-scrollbar class=\"--has-border\" [showScrollHorizontal]=\"true\">\r\n <p-table [value]=\"data[control.field]\" [columns]=\"control.headerTemplate\" [responsive]=\"true\"\r\n class=\"new-table scr-table table-control\" [rowTrackBy]=\"trackByFuncId\"\r\n (onRowReorder)=\"handleRowOrdered(control, $event, 'rowReorder', data, parentPath)\">\r\n <ng-template *ngIf=\"getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"getComponentByType(_prefixCustomHeader + control.field), context: {$implicit: control.headerTemplate, crudForm: this, containerSticky: containerSticky}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!getComponentByType(_prefixCustomHeader + control.field)\"\r\n pTemplate=\"header\" let-rowData let-columns>\r\n <tr>\r\n <th *ngIf=\"control.showNumber\" style=\"text-align: center; width: 2.5rem\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <th *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [pTooltip]=\"subControl.fullLabel || subControl.label\" tooltipPosition=\"top\"\r\n [style.width]=\"subControl.width\" style=\"text-align: center;\">\r\n {{subControl.label}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"control.enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"control.showFunction\"\r\n [style.width]=\"getTableFunctionColumnWidth(control)\"\r\n class=\"table-function column-function\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-ri=\"rowIndex\">\r\n <tr [pReorderableRow]=\"ri\">\r\n <td style=\"text-align: center; padding-left: 0; padding-right: 0;\"\r\n *ngIf=\"control.showNumber\" class=\"stt\">\r\n <span style=\"padding: 12px 5px; display: inline-block;\">{{ri+1}}</span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate; let i = index\">\r\n <td *ngIf=\"subControl && !subControl.hidden && subControl.visibleInList\"\r\n [class.control-inside]=\"true\" [class]=\"subControl.class\">\r\n <span class=\"p-column-title\">{{subControl.label}}</span>\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: getContextTd(subControl, rowData, ri, path)\">\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"control.enableReorderRow\" class=\"no-padding center v-center\">\r\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\"\r\n pReorderableRowHandle></i>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td style=\"text-align:center\" *ngIf=\"control.showFunction\" class=\"column-function\">\r\n <div class=\"p-toolbar-group-center button-group\">\r\n <button *ngIf=\"control.showSave\" [disabled]=\"rowData._disableSave\"\r\n type=\"button\" pButton class=\"p-button-text\" icon=\"pi pi-save\"\r\n [pTooltip]=\"'L\u01B0u' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"saveRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showEdit\" [disabled]=\"rowData._disableEdit\"\r\n type=\"button\" pButton class=\"p-button-text\" icon=\"pi pi-pencil\"\r\n [pTooltip]=\"'S\u1EEDa' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"editRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showDelete\" [disabled]=\"rowData._disableDelete\"\r\n type=\"button\" pButton class=\"p-button-text p-button-danger\"\r\n icon=\"pi pi-trash\" [pTooltip]=\"'X\u00F3a' | translate\" tooltipPosition=\"top\"\r\n style=\"width: 2.143em;\" (click)=\"deleteRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.rowButtons\" type=\"button\" pButton\r\n icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\"\r\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData, control)\"></button>\r\n <!-- <button *ngFor=\"let bt of control.rowButtons\" type=\"button\" pButton\r\n [class]=\"bt.class\" [icon]=\"bt.icon\" [pTooltip]=\"bt.label | translate\"\r\n tooltipPosition=\"top\" style=\"width: 2.143em;\"\r\n (click)=\"messageRow(ri, control, path)\"></button> -->\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"control.showFooter\" class=\"--table-schema-footer\">\r\n <button *ngIf=\"control.showAdd\" type=\"button\" pButton style=\"width:auto\" label=\"Th\u00EAm m\u1EDBi\"\r\n icon=\"pi pi-plus\" class=\"p-button-text\" (click)=\"addNewRow(control, path)\"></button>\r\n <span style=\"font-weight: normal;\">\r\n <p-checkbox label=\"M\u1EDF dialog\" [binary]=\"true\" [(ngModel)]=\"control.showEdit\">\r\n </p-checkbox>\r\n </span>\r\n <button *ngIf=\"control.enableAddMulti\" type=\"button\" pButton\r\n style=\"width:auto; margin-left:10px;\" label=\"Th\u00EAm nhi\u1EC1u\" icon=\"pi pi-clone\"\r\n class=\"p-button-text\" (click)=\"addMultiRow(control, 5, path)\"></button>\r\n <button *ngFor=\"let bt of control.footerButtons\" type=\"button\" pButton [class]=\"bt.class\"\r\n [icon]=\"bt.icon\" [label]=\"bt.label | translate\" style=\"width:auto; margin-left:10px;\"\r\n (click)=\"messageRow( -1, control, path)\"></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(control.field)\" [ngTemplateOutletContext]=\"{\r\n crudForm: this, data: data, index: rowIndex, parentPath: parentPath, control: control, changeFunc: handleFieldValueChange\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"validation; context: {control: control, data: data}\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #validation let-control=\"control\" let-data=\"data\">\r\n <ng-container *ngIf=\"data._errors[control.field].length > 0\">\r\n <div class=\"error-container\">\r\n <ng-container *ngFor=\"let error of data._errors[control.field]\">\r\n <div class=\"error-item\" *ngIf=\"error\">\r\n <ng-container [ngTemplateOutlet]=\"errorMessage\" [ngTemplateOutletContext]=\"{content: error}\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #errorMessage let-content=\"content\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-ban\"></i>\r\n <span> {{content}}</span>\r\n </div>\r\n</ng-template>\r\n<ng-template #labelControl let-control=\"control\">\r\n <ng-container>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"!control.ishtml\" [attr.label-index]=\"control.indexLabel\"\r\n [pTooltip]=\"control.title\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\" [escape]=\"false\"\r\n [for]=\"control.for\">{{control.text | translate}}</label>\r\n <label [class]=\"getLabelClass(control)\" *ngIf=\"control.ishtml\" [innerHTML]=\"control.text | safeHtml\"\r\n [attr.label-index]=\"control.indexLabel\"></label>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #containerSticky>\r\n <span class=\"fix-sticky top\"></span>\r\n <span class=\"fix-sticky right\"></span>\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>\r\n<ng-template #templateCongViecForm let-control=\"control\">\r\n <base-congviec-form [control]=\"control\" [parentSetting]=\"congViecSetting\" [tenCongViec]=\"control.data.tenCongViec\">\r\n </base-congviec-form>\r\n</ng-template>\r\n<tn-dialog *ngIf=\"tableFormShow\" #dialog [styleClass]=\"'address-form'\" [header]=\"tableFormTitle | translate\"\r\n [popupSize]=\"tableFormPopupSize\" (onHide)=\"tableFormShow = false\">\r\n <table-detail-form #formBase [parentSetting]=\"setting\" [schema]=\"tableFormSchema\" [data]=\"tableFormData\"\r\n (onSaved)=\"handleSavedTableRow($event)\" (onCancel)=\"tableFormShow = false\">\r\n </table-detail-form>\r\n</tn-dialog>",
|
|
16394
16422
|
providers: [ComponentContextService],
|
|
16395
16423
|
styles: [".label-only{font-weight:700;margin-bottom:1em}div.label{position:relative}div.label .star-required{color:red;padding-left:.2em;padding-top:.3em;position:absolute}div.type-container.not-show-in-box-holder{padding:0}.--table-schema-footer{align-items:center;background:#f8f9fa;border:1px solid #e9ecef;color:#495057;display:flex;font-weight:600;padding:.5em}.show-in-box{border:1px solid #ced4da;border-radius:5px}.not-show-in-box{padding:0}.view-mode div.label{padding-bottom:3px}.view-mode div.label label{font-size:.85em;font-weight:700}.view-mode>span:not(:empty){display:inline-block;padding:5px 0;width:100%}.view-mode.type-table div.label+div{padding:5px 0}td>.view-mode{display:inline-block;padding:.25rem .5rem}td>.view-mode .view-mode{padding:0}.crud-form-control div[role=checkbox-alone]{margin-top:24px}.crud-form-control div[role=checkbox-alone].mg-top-0{margin-top:0}.crud-form-control .label+div[role=checkbox-alone]{margin-top:11px}.crud-form-control.type-table div[role=checkbox-alone]{margin-top:6px;text-align:center}.crud-form-control.type-table div[role=checkbox-alone].mg-top-0{margin-top:0}.crud-form-control.type-table div[role=checkbox-alone].align-left{text-align:left}.crud-form-control.type-title{border-bottom:1px solid #cfcfcf;color:#025ba7;font-size:1.2rem;font-weight:700;padding:10px 0 10px 5px;text-transform:uppercase}.crud-form-control.type-title>.label{margin-bottom:0}.control-description{color:#6c757d;font-size:.8rem;margin-bottom:5px;margin-left:10px}::ng-deep .crud-form-control .tn-check-box-list{margin-top:5px}::ng-deep .crud-form-control>div.label{font-size:.9em;height:1.15em;margin-bottom:5px}::ng-deep .crud-form-control>div.label+*{width:100%}::ng-deep .crud-form-control>.error-container .error-item{-webkit-animation:shrink .1s;animation:shrink .1s;min-height:20px;overflow:visible;padding-top:5px}::ng-deep .crud-form-control>.error-container .error-item .error-content{-webkit-animation:fadeIn .1s;animation:fadeIn .1s;color:red;display:flex;font-size:.9em;position:relative}::ng-deep .crud-form-control>.error-container .error-item .error-content i{display:flex;font-size:.9em;padding-top:1px}::ng-deep .crud-form-control>.error-container .error-item .error-content span{display:flex;padding-left:5px}::ng-deep .crud-form-control.no-label>div.label{display:none}::ng-deep .crud-form-control.error .p-dropdown,::ng-deep .crud-form-control.error .p-inputtext,::ng-deep .crud-form-control.error .p-multiselect,::ng-deep .crud-form-control.error .tn-dropdown,::ng-deep .crud-form-control.error input,::ng-deep .crud-form-control.error select,::ng-deep .crud-form-control.error textarea{border-color:#ff5722!important}::ng-deep .crud-form-control.error .p-autocomplete-multiple-container:not(.p-disabled).p-focus,::ng-deep .crud-form-control.error .p-inputtext:enabled:focus,::ng-deep .crud-form-control.error .tn-dropdown:not(.p-disabled).p-focus{box-shadow:0 0 0 .2rem #ffc4b3}::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-dropdown,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-inputtext,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-multiselect,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .tn-dropdown,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) input,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) select,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) textarea{border-color:#ced4da!important}::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-autocomplete-multiple-container:not(.p-disabled).p-focus,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-dropdown.tn-dropdown.p-focus,::ng-deep .crud-form-control.error div.crud-form-control:not(.error) .p-inputtext:enabled:focus{box-shadow:0 0 0 .2rem #a6d5fa}@-webkit-keyframes fadeIn{0%{opacity:0;top:-25px}to{opacity:1;top:0}}@keyframes fadeIn{0%{opacity:0;top:-25px}to{opacity:1;top:0}}@-webkit-keyframes shrink{0%{height:0}to{height:20px}}@keyframes shrink{0%{height:0}to{height:20px}}@media screen and (min-width:40.063em){.label-right{padding-left:2em}}::ng-deep crud-form .crud-form-container{padding:.5rem .5rem 0}::ng-deep crud-form .p-datatable .p-datatable-tbody tr td.control-inside,::ng-deep crud-form .p-datatable .p-datatable-tbody tr td.control-inside .show-in-box:not(.crud-form-control),::ng-deep crud-form base-congviec-form crud-form>.crud-form-container{padding:0}:host ::ng-deep .tox-tinymce{border:none;border-top:1px solid #ccc;overflow:unset}:host ::ng-deep .tox-tinymce .tox-editor-container{overflow:unset}:host ::ng-deep .tox-tinymce .tox-toolbar{border:1px solid #ccc;border-bottom:none}:host ::ng-deep .tox-tinymce .tox-edit-area{border:1px solid #ccc}:host ::ng-deep .tox-tinymce .tox-edit-area iframe{box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}:host ::ng-deep .tox-tinymce .tox-menubar{border:1px solid #ccc}:host ::ng-deep .tox .tox-edit-area.tinymce-focus{border:1px solid #66afe9;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 3px 0 #66afe9;transition:box-shadow .3s,border-color .3s;transition-delay:0s,0s;transition-duration:.3s,.3s;transition-property:box-shadow,border-color;transition-timing-function:ease,ease}:host ::ng-deep .rq .tox .tox-edit-area{border-left-color:#ff4c46}.no-value{font-size:.8em}:host ::ng-deep .table-schema-paging{display:block;margin-bottom:40px}"]
|
|
16396
16424
|
},] }
|
|
@@ -17331,6 +17359,10 @@
|
|
|
17331
17359
|
});
|
|
17332
17360
|
}
|
|
17333
17361
|
data.__disableEdit = this.model.data.__disableEdit;
|
|
17362
|
+
// Set basePermission từ crudlist
|
|
17363
|
+
if (this.model.data.basePermission && this.model.data.basePermission === exports.PermissionBase.FULL) {
|
|
17364
|
+
data.basePermission = this.model.data.basePermission;
|
|
17365
|
+
}
|
|
17334
17366
|
this.model.data = data;
|
|
17335
17367
|
if (data.pid && data.pid != this.guidEmpty && data.basePermissionByPid !== undefined) {
|
|
17336
17368
|
this.checkPermission(data.basePermissionByPid);
|
|
@@ -20358,6 +20390,7 @@
|
|
|
20358
20390
|
}
|
|
20359
20391
|
buttonContexts.sort(multipleSort('soThuTu'));
|
|
20360
20392
|
workflowHistoryService = this._injector.get(WorkflowHistoryService);
|
|
20393
|
+
workflowHistoryService.changeEndpoint(this.setting.baseService);
|
|
20361
20394
|
userService = this._injector.get(UserService);
|
|
20362
20395
|
userId = userService.getId();
|
|
20363
20396
|
userIdStringUpper = '';
|
|
@@ -21995,6 +22028,11 @@
|
|
|
21995
22028
|
}
|
|
21996
22029
|
return !this.buttonPermissionMap.get(this.setting.baseService.serviceCode + "/" + this.setting.baseService.entityName + "/" + buttonPermissionCode);
|
|
21997
22030
|
};
|
|
22031
|
+
CrudListComponent.prototype.setDropdownDatasource = function (field, dataSource) {
|
|
22032
|
+
if (this.filterSchema.dropdown[field]) {
|
|
22033
|
+
this.filterSchema.dropdown[field].dataSource = dataSource;
|
|
22034
|
+
}
|
|
22035
|
+
};
|
|
21998
22036
|
return CrudListComponent;
|
|
21999
22037
|
}(ComponentBase));
|
|
22000
22038
|
CrudListComponent.decorators = [
|
|
@@ -22158,7 +22196,6 @@
|
|
|
22158
22196
|
this.serviceUri = this.getEndpointByService(service) + "/WorkflowSetting";
|
|
22159
22197
|
};
|
|
22160
22198
|
WorkflowSettingsService.prototype.renderDataSourceActionWorkflow = function (workflowSchema) {
|
|
22161
|
-
var _this = this;
|
|
22162
22199
|
var dataSourceAction = [];
|
|
22163
22200
|
var dicSameName = {};
|
|
22164
22201
|
workflowSchema.connections.sort(multipleSort('soThuTu')).forEach(function (action) {
|
|
@@ -22189,6 +22226,51 @@
|
|
|
22189
22226
|
dataSourceAction.push(itemAdd_1);
|
|
22190
22227
|
}
|
|
22191
22228
|
});
|
|
22229
|
+
this.makeUniqueName(dicSameName);
|
|
22230
|
+
return dataSourceAction;
|
|
22231
|
+
};
|
|
22232
|
+
WorkflowSettingsService.prototype.generateTenWithCode = function (item) {
|
|
22233
|
+
item.ten = item.name + " - " + item.rawCode;
|
|
22234
|
+
};
|
|
22235
|
+
WorkflowSettingsService.prototype.generateTenWithSource = function (item) {
|
|
22236
|
+
item.ten = item.name + " (" + item.sourceName + " - " + item.sourceCode + ")";
|
|
22237
|
+
};
|
|
22238
|
+
WorkflowSettingsService.prototype.generateTenFull = function (item) {
|
|
22239
|
+
item.ten = item.name + " - " + item.rawCode + " (" + item.sourceName + " - " + item.sourceCode + ")";
|
|
22240
|
+
};
|
|
22241
|
+
WorkflowSettingsService.prototype.minimizeDatasourceAction = function (actions, lstWorkflowHistory) {
|
|
22242
|
+
var dataSourceAction = [];
|
|
22243
|
+
var dicSameName = {};
|
|
22244
|
+
actions.forEach(function (action) {
|
|
22245
|
+
if (action.buildIn) {
|
|
22246
|
+
dataSourceAction.push(action);
|
|
22247
|
+
return;
|
|
22248
|
+
}
|
|
22249
|
+
action.ten = action.shortTen;
|
|
22250
|
+
if (lstWorkflowHistory) {
|
|
22251
|
+
if (!lstWorkflowHistory.some(function (q) { return q.sourceStatusCode == action.sourceCode && q.actionCode == action.rawCode; })) {
|
|
22252
|
+
return;
|
|
22253
|
+
}
|
|
22254
|
+
}
|
|
22255
|
+
var itemExist = dataSourceAction.find(function (q) { return q.nameLower == action.nameLower; });
|
|
22256
|
+
if (itemExist) {
|
|
22257
|
+
if (!dicSameName[action.nameLower]) {
|
|
22258
|
+
dicSameName[action.nameLower] = [];
|
|
22259
|
+
}
|
|
22260
|
+
if (dicSameName[action.nameLower].indexOf(itemExist) == -1) {
|
|
22261
|
+
dicSameName[action.nameLower].push(itemExist);
|
|
22262
|
+
}
|
|
22263
|
+
if (dicSameName[action.nameLower].indexOf(action) == -1) {
|
|
22264
|
+
dicSameName[action.nameLower].push(action);
|
|
22265
|
+
}
|
|
22266
|
+
}
|
|
22267
|
+
dataSourceAction.push(action);
|
|
22268
|
+
});
|
|
22269
|
+
this.makeUniqueName(dicSameName);
|
|
22270
|
+
return dataSourceAction;
|
|
22271
|
+
};
|
|
22272
|
+
WorkflowSettingsService.prototype.makeUniqueName = function (dicSameName) {
|
|
22273
|
+
var _this = this;
|
|
22192
22274
|
Object.values(dicSameName).forEach(function (lstItem) {
|
|
22193
22275
|
var arrTen = [];
|
|
22194
22276
|
var error = false;
|
|
@@ -22220,16 +22302,6 @@
|
|
|
22220
22302
|
_this.generateTenFull(lstItem[i]);
|
|
22221
22303
|
}
|
|
22222
22304
|
});
|
|
22223
|
-
return dataSourceAction;
|
|
22224
|
-
};
|
|
22225
|
-
WorkflowSettingsService.prototype.generateTenWithCode = function (item) {
|
|
22226
|
-
item.ten = item.name + " - " + item.rawCode;
|
|
22227
|
-
};
|
|
22228
|
-
WorkflowSettingsService.prototype.generateTenWithSource = function (item) {
|
|
22229
|
-
item.ten = item.name + " (" + item.sourceName + " - " + item.sourceCode + ")";
|
|
22230
|
-
};
|
|
22231
|
-
WorkflowSettingsService.prototype.generateTenFull = function (item) {
|
|
22232
|
-
item.ten = item.name + " - " + item.rawCode + " (" + item.sourceName + " - " + item.sourceCode + ")";
|
|
22233
22305
|
};
|
|
22234
22306
|
return WorkflowSettingsService;
|
|
22235
22307
|
}(BaseService));
|
|
@@ -22859,7 +22931,8 @@
|
|
|
22859
22931
|
return {
|
|
22860
22932
|
pid: rowData.pid,
|
|
22861
22933
|
basePermissionByPid: rowData.basePermissionByPid,
|
|
22862
|
-
id: rowData[this.setting.entityKey]
|
|
22934
|
+
id: rowData[this.setting.entityKey],
|
|
22935
|
+
basePermission: rowData.basePermission
|
|
22863
22936
|
};
|
|
22864
22937
|
};
|
|
22865
22938
|
DataListBase.prototype.getPromiseDeleteItem = function (rowData) {
|
|
@@ -27505,12 +27578,9 @@
|
|
|
27505
27578
|
CheckBoxListComponent.prototype.ngOnInit = function () {
|
|
27506
27579
|
this.fieldValue = this.control.valueField;
|
|
27507
27580
|
if (this.control.dataSource == null || this.control.dataSource.length == 0) {
|
|
27508
|
-
|
|
27509
|
-
|
|
27510
|
-
|
|
27511
|
-
// else if(this.control.baseService) {
|
|
27512
|
-
//
|
|
27513
|
-
// }
|
|
27581
|
+
if (this.control.serviceUri) {
|
|
27582
|
+
this.bindDataSource();
|
|
27583
|
+
}
|
|
27514
27584
|
}
|
|
27515
27585
|
else {
|
|
27516
27586
|
this.dataSourceInternal = this.control.dataSource;
|
|
@@ -27528,56 +27598,20 @@
|
|
|
27528
27598
|
this.classCheckBox += " p-col-" + this.control.pColClass;
|
|
27529
27599
|
}
|
|
27530
27600
|
};
|
|
27531
|
-
CheckBoxListComponent.prototype.bindDataSource = function (
|
|
27601
|
+
CheckBoxListComponent.prototype.bindDataSource = function () {
|
|
27532
27602
|
var _this = this;
|
|
27533
|
-
|
|
27534
|
-
|
|
27535
|
-
|
|
27536
|
-
|
|
27537
|
-
|
|
27538
|
-
|
|
27539
|
-
|
|
27540
|
-
|
|
27541
|
-
|
|
27542
|
-
_this.gotData = true;
|
|
27543
|
-
if (_this.wroteValue)
|
|
27544
|
-
_this.fixValue();
|
|
27545
|
-
_this.onReady.emit(_this.control.field);
|
|
27546
|
-
}).catch(function (err) {
|
|
27547
|
-
_this.onReady.emit(_this.control.field);
|
|
27548
|
-
console.log(err);
|
|
27549
|
-
});
|
|
27550
|
-
}
|
|
27551
|
-
else if (baseService instanceof MasterDataService) {
|
|
27552
|
-
baseService.getDropdown(this.control.groupCode).then(function (res) {
|
|
27553
|
-
// const displayField = this.control.displayField ?? 'id';
|
|
27554
|
-
// const valueField = this.control.valueField ?? 'code';
|
|
27555
|
-
_this.dataSourceInternal = res.map(function (item) {
|
|
27556
|
-
return { id: item.value, ten: item.label };
|
|
27557
|
-
});
|
|
27558
|
-
if (_this.wroteValue)
|
|
27559
|
-
_this.fixValue();
|
|
27560
|
-
_this.onReady.emit(_this.control.field);
|
|
27561
|
-
}).catch(function (err) {
|
|
27562
|
-
console.log(err);
|
|
27563
|
-
_this.onReady.emit(_this.control.field);
|
|
27564
|
-
});
|
|
27603
|
+
this._dropDownService.getDataSource(this.control.serviceUri).then(function (rs) {
|
|
27604
|
+
var arr = [];
|
|
27605
|
+
// for (let i = 0; i < rs.data.length; i++) {
|
|
27606
|
+
// arr.push({ label: rs.data[i][this.control.displayField], title: rs.data[i][this.control.displayField], value: rs.data[i][this.control.valueField] });
|
|
27607
|
+
// }
|
|
27608
|
+
_this.dataSourceInternal = rs.data;
|
|
27609
|
+
_this.gotData = true;
|
|
27610
|
+
if (_this.wroteValue) {
|
|
27611
|
+
_this.fixValue();
|
|
27565
27612
|
}
|
|
27566
|
-
}
|
|
27567
|
-
|
|
27568
|
-
this._dropDownService.getDataSource(serviceUri).then(function (rs) {
|
|
27569
|
-
var arr = [];
|
|
27570
|
-
// for (let i = 0; i < rs.data.length; i++) {
|
|
27571
|
-
// arr.push({ label: rs.data[i][this.control.displayField], title: rs.data[i][this.control.displayField], value: rs.data[i][this.control.valueField] });
|
|
27572
|
-
// }
|
|
27573
|
-
_this.dataSourceInternal = rs.data;
|
|
27574
|
-
_this.gotData = true;
|
|
27575
|
-
if (_this.wroteValue) {
|
|
27576
|
-
_this.fixValue();
|
|
27577
|
-
}
|
|
27578
|
-
}, function (error) {
|
|
27579
|
-
});
|
|
27580
|
-
}
|
|
27613
|
+
}, function (error) {
|
|
27614
|
+
});
|
|
27581
27615
|
};
|
|
27582
27616
|
CheckBoxListComponent.prototype.change = function (event) {
|
|
27583
27617
|
var totalValue = __spread(this.selectedValue);
|
|
@@ -27645,8 +27679,8 @@
|
|
|
27645
27679
|
{
|
|
27646
27680
|
provide: forms.NG_VALUE_ACCESSOR,
|
|
27647
27681
|
useExisting: i0.forwardRef(function () { return CheckBoxListComponent; }),
|
|
27648
|
-
multi: true
|
|
27649
|
-
}
|
|
27682
|
+
multi: true
|
|
27683
|
+
}
|
|
27650
27684
|
],
|
|
27651
27685
|
styles: [".tn-check-box-list.p-grid{margin-bottom:-.5em}.p-col-horizontal{padding:.5em;position:relative}.tn-check-box-list{position:relative}.tn-check-box-list.flex-end{justify-content:flex-end}.tn-check-box-list.flex-center{justify-content:center}"]
|
|
27652
27686
|
},] }
|
|
@@ -28774,6 +28808,10 @@
|
|
|
28774
28808
|
return _this;
|
|
28775
28809
|
}
|
|
28776
28810
|
AppSubMenuComponent.prototype.itemClick = function (event, item) {
|
|
28811
|
+
if (item.url) {
|
|
28812
|
+
// go to external url, default target="_blank"
|
|
28813
|
+
window.open(item.url);
|
|
28814
|
+
}
|
|
28777
28815
|
if (this.root) {
|
|
28778
28816
|
this._commonService.menuHoverActive = !this._commonService.menuHoverActive;
|
|
28779
28817
|
}
|
|
@@ -28920,6 +28958,10 @@
|
|
|
28920
28958
|
AppMenuComponent.prototype.ngOnInit = function () {
|
|
28921
28959
|
};
|
|
28922
28960
|
AppMenuComponent.prototype.activeItem = function (item) {
|
|
28961
|
+
if (item.url) {
|
|
28962
|
+
item.activated = false;
|
|
28963
|
+
return false;
|
|
28964
|
+
}
|
|
28923
28965
|
if (item.items && item.items.length > 0) {
|
|
28924
28966
|
item.activated = undefined;
|
|
28925
28967
|
for (var i in item.items) {
|
|
@@ -36788,7 +36830,7 @@
|
|
|
36788
36830
|
{ type: i0.Component, args: [{
|
|
36789
36831
|
// tslint:disable-next-line: component-selector
|
|
36790
36832
|
selector: 'file-manager',
|
|
36791
|
-
template: "<div *ngIf=\"layout == _layout.LIST\" class=\"full-layout\">\r\n <div class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" pButton pRipple type=\"button\" pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\"\r\n tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\" label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\"\r\n (click)=\"createFolder()\">\r\n </button>\r\n\r\n <button pButton icon=\"pi pi-cloud-upload\" pTooltip=\"T\u1EA3i t\u1EC7p tin t\u1EEB m\u00E1y t\u00EDnh c\u1EE7a b\u1EA1n\"\r\n tooltipPosition=\"top\" type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i l\u00EAn\"\r\n (click)=\"selectFile()\"></button>\r\n\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n\r\n <!--<button *ngIf=\"model.selectedItems && model.selectedItems.length > 1\" class=\"p-button-text\" pButton\r\n type=\"button\"\r\n pTooltip=\"N\u00E9n & sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"fas fa-file-archive\"\r\n iconPos=\"left\" label=\"N\u00E9n & sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\"\r\n (click)=\"generateZipLinkAndCopy()\">\r\n </button>-->\r\n\r\n <button *ngIf=\"!inTaiLieu && !inTaiLieuChung\" pButton icon=\"pi pi-book\"\r\n pTooltip=\"Sao ch\u00E9p t\u1EEB t\u00E0i li\u1EC7u d\u00F9ng chung ho\u1EB7c c\u00E1 nh\u00E2n\" tooltipPosition=\"top\" type=\"button\"\r\n class=\"p-button-text\" label=\"T\u00E0i li\u1EC7u\" (click)=\"showTaiLieuDungChung = true;\">\r\n </button>\r\n\r\n <button *ngIf=\"canSelect()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" icon=\"fas fa-arrows-alt\"\r\n iconPos=\"left\" label=\"Di chuy\u1EC3n\" (click)=\"moveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn t\u1EDBi \u0111\u00E2y\" tooltipPosition=\"top\" icon=\"far fa-hand-paper\"\r\n iconPos=\"left\" label=\"\u0110\u1EB7t t\u1EA1i \u0111\u00E2y\" (click)=\"setMoveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" icon=\"pi pi-undo\" pButton class=\"p-button-text p-button-secondary\"\r\n type=\"button\" pTooltip=\"B\u1ECF di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" label=\"B\u1ECF qua\"\r\n (click)=\"cancelMove()\">\r\n </button>\r\n\r\n <button *ngIf=\"hasSelect()\" pButton type=\"button\"\r\n pTooltip=\"{{ 'X\u00F3a th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn' | translate }}\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n iconPos=\"left\" class=\"p-button-text p-button-danger\" label=\"X\u00F3a\"\r\n (click)=\"deleteMutiple(model.selectedItems)\"></button>\r\n\r\n <button *ngIf=\"hasSelect()\" class=\"p-button-text p-button-secondary\" pButton type=\"button\"\r\n pTooltip=\"N\u00E9n & t\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"fas fa-file-archive\" iconPos=\"left\"\r\n label=\"T\u1EA3i v\u1EC1\" (click)=\"downloadMultiple()\">\r\n </button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\r\n </div>\r\n\r\n <div class=\"fm-grid\">\r\n <crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"_dataSource\"\r\n [disableKeypressControl]=\"true\" [showScrollBar]=\"false\" class=\"--auto-height-content --no-wrapper-padding\"\r\n [widthFunctionColumn]=\"'8.2rem'\" (onReload)=\"_triggerProcessData($event)\"\r\n (onRowSelect)=\"onRowSelect($event)\">\r\n\r\n <ng-template #explorerItem let-rowData='rowData' let-col='col'>\r\n <span (click)=\"openObject(rowData)\" class=\"pull-left file-ex-icon\"\r\n [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n\r\n <span (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n {{rowData.name}}\r\n </span>\r\n <span *ngIf=\"rowData.signatures\" class=\"pull-right signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #fileSize let-rowData='rowData'>\r\n <div *ngIf=\"rowData.isFile\">{{rowData.fileSize | fileSize}}</div>\r\n </ng-template>\r\n\r\n <ng-template #function let-rowData=\"rowData\" let-crudList=\"crudList\">\r\n <div class=\"function-list\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" pButton type=\"button\"\r\n tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\" (click)=\"onButtonClick(rowData)\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\" pButton\r\n type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n (click)=\"deleteFile(rowData)\"></button>\r\n\r\n\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </ng-container>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"pi pi-cloud-download\"\r\n (click)=\"download(rowData)\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button>\r\n </div>\r\n </ng-template>\r\n </crud-list>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"layout == _layout.SIMPLE\" class=\"not-full-layout\" [class.readonly]=\"readonly\">\r\n <div *ngIf=\"!readonly || data.breadcrumbs.length > 0\" class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" (click)=\"createFolder()\" pButton pRipple type=\"button\"\r\n pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\" tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\"\r\n label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\">\r\n </button>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-cloud-upload\" (click)=\"selectFile()\" label=\"T\u1EA3i l\u00EAn\"></button>\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n <button *ngIf=\"!inTaiLieu\" pButton icon=\"pi pi-book\" pTooltip=\"T\u00E0i li\u1EC7u d\u00F9ng chung\"\r\n tooltipPosition=\"top\" type=\"button\" class=\"p-button-text\" label=\"T\u00E0i li\u1EC7u\"\r\n (click)=\"showTaiLieuDungChung = true;\">\r\n </button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\r\n </div>\r\n\r\n <div class=\"nfl-grid\">\r\n <div *ngFor=\"let rowData of _dataSource; index as i\" class=\"nfl-item\">\r\n <div class=\"nfl-no\">\r\n {{i + 1}}.\r\n </div>\r\n\r\n <div class=\"nfl-name\">\r\n <span class=\"pull-left file-ex-icon\" [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>\r\n <span>{{rowData.name}}</span>\r\n </span>\r\n </a>\r\n </div>\r\n <div *ngIf=\"rowData.signatures\" class=\"nfl-signature signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div>\r\n <div *ngIf=\"rowData.isFile\" class=\"nfl-version\">\r\n v{{rowData.currentFileVersion}}\r\n </div>\r\n\r\n <div class=\"nfl-function\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" (click)=\"onButtonClick(rowData)\"\r\n pButton type=\"button\" tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\"\r\n (click)=\"deleteFile(rowData)\" pButton type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\"\r\n icon=\"pi pi-trash\"></button>\r\n </ng-container>\r\n\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n (click)=\"download(rowData)\" pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\"\r\n icon=\"pi pi-cloud-download\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!_dataSource || !_dataSource.length\" class=\"nfl-no-item\">\r\n Ch\u01B0a c\u00F3 t\u00E0i li\u1EC7u \u0111\u01B0\u1EE3c t\u1EA3i l\u00EAn\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"layout == _layout.SIMPLE_FOR_LIST\" class=\"not-full-layout\" [class.readonly]=\"readonly\">\r\n <div *ngIf=\"!readonly || data.breadcrumbs.length > 0\" class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" (click)=\"createFolder()\" pButton pRipple type=\"button\"\r\n pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\" tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\"\r\n label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\">\r\n </button>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-cloud-upload\" (click)=\"selectFile()\" label=\"T\u1EA3i l\u00EAn\"></button>\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n <button *ngIf=\"!inTaiLieu\" pButton icon=\"pi pi-book\" pTooltip=\"T\u00E0i li\u1EC7u d\u00F9ng chung\"\r\n tooltipPosition=\"top\" type=\"button\" class=\"p-button-text\" label=\"T\u00E0i li\u1EC7u\"\r\n (click)=\"showTaiLieuDungChung = true;\">\r\n </button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"nfl-grid\">\r\n <div *ngFor=\"let rowData of _dataSource; index as i\" class=\"nfl-item\">\r\n <div class=\"nfl-no\">\r\n {{i + 1}}.\r\n </div>\r\n\r\n <div class=\"nfl-name\">\r\n <span class=\"pull-left file-ex-icon\" [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n\r\n <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>\r\n <span>{{rowData.name}}</span>\r\n <!-- <div *ngIf=\"rowData.signatures\" class=\"signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div> -->\r\n </span>\r\n <!-- <span class=\"file-ex-extension\">{{rowData.extension}}</span> -->\r\n </a>\r\n </div>\r\n\r\n <div class=\"nfl-function\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" (click)=\"onButtonClick(rowData)\"\r\n pButton type=\"button\" tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\"\r\n (click)=\"deleteFile(rowData)\" pButton type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\"\r\n icon=\"pi pi-trash\"></button>\r\n </ng-container>\r\n <!--\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n (click)=\"download(rowData)\" pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\"\r\n icon=\"pi pi-cloud-download\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button> -->\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!_dataSource || !_dataSource.length\" class=\"nfl-no-item\">\r\n Ch\u01B0a c\u00F3 t\u00E0i li\u1EC7u \u0111\u01B0\u1EE3c t\u1EA3i l\u00EAn\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #breadCrumb>\r\n <div *ngIf=\"data.breadcrumbs.length > 0\" class=\"fm-toolbar-path\">\r\n <p-breadcrumb class=\"customBreadCrumb\" [model]=\"data.breadcrumbs\"></p-breadcrumb>\r\n </div>\r\n</ng-template>\r\n\r\n<p-fileUpload #fileControl [ngStyle]=\"{'display': 'none'}\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file\"\r\n [url]=\"apiUploadUrl\" [maxFileSize]=\"maxFileSize\" auto=\"true\"\r\n [invalidFileSizeMessageSummary]=\"invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"invalidFileLimitMessageDetail\" (onProgress)=\"onUploadProgress($event)\"\r\n (onBeforeUpload)=\"onBeforeUpload($event)\" (onSelect)=\"handleSelectFile($event)\" (onUpload)=\"onUploaded($event)\"\r\n [accept]=\"control ? control.accept: null\">\r\n</p-fileUpload>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"data.itemsMenuFile\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>\r\n\r\n<!-- T\u1EA1o m\u1EDBi/ \u0111\u1ED5i t\u00EAn th\u01B0 m\u1EE5c -->\r\n<tn-dialog *ngIf=\"forms.createFolder.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.createFolder.header | translate\" [popupSize]=\"forms[formIds.createFolder].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.createFolder)\">\r\n <folder-form #formBase [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"forms[formIds.createFolder].formData\" (onSaved)=\"onSavedForm(formIds.createFolder)\"\r\n (onCancel)=\"onCancelForm(formIds.createFolder)\">\r\n </folder-form>\r\n</tn-dialog>\r\n\r\n<!-- \u0110\u1ED5i t\u00EAn file -->\r\n<tn-dialog *ngIf=\"forms.renameFile.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.renameFile.header | translate\" [popupSize]=\"forms[formIds.renameFile].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.renameFile)\">\r\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"forms[formIds.renameFile].formData\"\r\n (onSaved)=\"onSavedForm(formIds.renameFile)\" (onCancel)=\"onCancelForm(formIds.renameFile)\">\r\n </file-form>\r\n</tn-dialog>\r\n\r\n<!-- Xem file tr\u1EF1c tuy\u1EBFn -->\r\n<file-viewer *ngIf=\"forms.fileViewer.show\" [parentModel]=\"model\" [parentContext]=\"context\" [readonly]=\"readonly\"\r\n [model]=\"forms.fileViewer.formData\" (onClose)=\"closeFileViewer()\">\r\n</file-viewer>\r\n\r\n<!-- Xem phi\u00EAn b\u1EA3n -->\r\n<tn-dialog *ngIf=\"forms.fileVersionList.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.fileVersionList.header | translate\" [popupSize]=\"forms[formIds.fileVersionList].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.fileVersionList)\">\r\n <file-version-list *ngIf=\"forms.fileVersionList.show\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [fileId]=\"forms[formIds.fileVersionList].fileId\" [readonly]=\"readonly\">\r\n </file-version-list>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB t\u1EC7p tin kh\u00E1c...\"\r\n (keyup.enter)=\"addAttachLink()\" pInputText [(ngModel)]=\"typedLink\" class=\"p-col-12\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" (click)=\"addAttachLink()\" [disabled]=\"typedLink != ''? null : true\" pButton\r\n class=\"p-button-primary p-col-12\" label=\"Ok\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n\r\n<tn-dialog #dialog3 *ngIf=\"showTaiLieuDungChung\" [header]=\"'T\u00E0i li\u1EC7u' |translate\"\r\n [popupSize]=\"{ width:1024, height: 800 }\" (onHide)=\"showTaiLieuDungChung = false\">\r\n <file-tai-lieu #formBase [originalFolderId]=\"data.currentFolderId\"\r\n (onSaved)=\"showTaiLieuDungChung = false; this._triggerProcessData()\" (onCancel)=\"showTaiLieuDungChung = false\">\r\n </file-tai-lieu>\r\n</tn-dialog>\r\n\r\n<!--\r\n\r\n<share-file *ngIf=\"forms.shareFile.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFile.formData\">\r\n</share-file>\r\n\r\n<share-folder *ngIf=\"forms.shareFolder.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFolder.formData\">\r\n</share-folder>\r\n -->\r\n\r\n<!-- Xem ch\u1EEF k\u00FD s\u1ED1 -->\r\n<tn-dialog *ngIf=\"forms.signatureDetail.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.signatureDetail.header | translate\" [popupSize]=\"forms[formIds.signatureDetail].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.signatureDetail)\">\r\n <signature-detail [parentModel]=\"model\" [parentContext]=\"context\">\r\n </signature-detail>\r\n</tn-dialog>\r\n<!--K\u00FD s\u1ED1 sim-->\r\n<tn-dialog *ngIf=\"forms.kySoSim.show\" #dialog [styleClass]=\"'address-form'\" [header]=\"forms.kySoSim.header | translate\"\r\n [popupSize]=\"forms.kySoSim.popupSize\" [showFooter]=\"true\" (onHide)=\"onCancelForm(formIds.kySoSim)\">\r\n <app-file-ky-so-sim #fileKySoSim [parentModel]=\"model\" [parentContext]=\"context\">\r\n </app-file-ky-so-sim>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"fas fa-images\" [disabled]=\"model.submitting\" class=\"p-button-text\"\r\n [label]=\"'Ch\u1ECDn ch\u1EEF k\u00FD' | translate\" (click)=\"chonChuKy()\"></button>\r\n <button type=\"button\" pButton icon=\"fas fa-signature\" class=\"p-button-text ui-button-success\"\r\n [disabled]=\"model.submitting\" [label]=\"'Th\u1EF1c hi\u1EC7n k\u00FD' | translate\" (click)=\"kySo()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"forms.kySoSim.show=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
|
|
36833
|
+
template: "<div *ngIf=\"layout == _layout.LIST\" class=\"full-layout\">\r\n <div class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" pButton pRipple type=\"button\" pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\"\r\n tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\" label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\"\r\n (click)=\"createFolder()\">\r\n </button>\r\n\r\n <button pButton icon=\"pi pi-cloud-upload\" pTooltip=\"T\u1EA3i t\u1EC7p tin t\u1EEB m\u00E1y t\u00EDnh c\u1EE7a b\u1EA1n\"\r\n tooltipPosition=\"top\" type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i l\u00EAn\"\r\n (click)=\"selectFile()\"></button>\r\n\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n\r\n <!--<button *ngIf=\"model.selectedItems && model.selectedItems.length > 1\" class=\"p-button-text\" pButton\r\n type=\"button\"\r\n pTooltip=\"N\u00E9n & sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"fas fa-file-archive\"\r\n iconPos=\"left\" label=\"N\u00E9n & sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\"\r\n (click)=\"generateZipLinkAndCopy()\">\r\n </button>-->\r\n\r\n <button *ngIf=\"!inTaiLieu && !inTaiLieuChung\" pButton icon=\"pi pi-book\"\r\n pTooltip=\"Sao ch\u00E9p t\u1EEB t\u00E0i li\u1EC7u d\u00F9ng chung ho\u1EB7c c\u00E1 nh\u00E2n\" tooltipPosition=\"top\" type=\"button\"\r\n class=\"p-button-text\" label=\"T\u00E0i li\u1EC7u\" (click)=\"showTaiLieuDungChung = true;\">\r\n </button>\r\n\r\n <button *ngIf=\"canSelect()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" icon=\"fas fa-arrows-alt\"\r\n iconPos=\"left\" label=\"Di chuy\u1EC3n\" (click)=\"moveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" class=\"p-button-text p-button-success\" pButton type=\"button\"\r\n pTooltip=\"Di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn t\u1EDBi \u0111\u00E2y\" tooltipPosition=\"top\" icon=\"far fa-hand-paper\"\r\n iconPos=\"left\" label=\"\u0110\u1EB7t t\u1EA1i \u0111\u00E2y\" (click)=\"setMoveExplorerItems()\">\r\n </button>\r\n\r\n <button *ngIf=\"canSetMove()\" icon=\"pi pi-undo\" pButton class=\"p-button-text p-button-secondary\"\r\n type=\"button\" pTooltip=\"B\u1ECF di chuy\u1EC3n th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\" label=\"B\u1ECF qua\"\r\n (click)=\"cancelMove()\">\r\n </button>\r\n\r\n <button *ngIf=\"hasSelect()\" pButton type=\"button\"\r\n pTooltip=\"{{ 'X\u00F3a th\u01B0 m\u1EE5c/t\u1EC7p tin \u0111\u00E3 ch\u1ECDn' | translate }}\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n iconPos=\"left\" class=\"p-button-text p-button-danger\" label=\"X\u00F3a\"\r\n (click)=\"deleteMutiple(model.selectedItems)\"></button>\r\n\r\n <button *ngIf=\"hasSelect()\" class=\"p-button-text p-button-secondary\" pButton type=\"button\"\r\n pTooltip=\"N\u00E9n & t\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"fas fa-file-archive\" iconPos=\"left\"\r\n label=\"T\u1EA3i v\u1EC1\" (click)=\"downloadMultiple()\">\r\n </button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\r\n </div>\r\n\r\n <div class=\"fm-grid\">\r\n <crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"_dataSource\"\r\n [disableKeypressControl]=\"true\" [showScrollBar]=\"false\" class=\"--auto-height-content --no-wrapper-padding\"\r\n [widthFunctionColumn]=\"'8.2rem'\" (onReload)=\"_triggerProcessData($event)\"\r\n (onRowSelect)=\"onRowSelect($event)\">\r\n\r\n <ng-template #explorerItem let-rowData='rowData' let-col='col'>\r\n <span (click)=\"openObject(rowData)\" class=\"pull-left file-ex-icon\"\r\n [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n\r\n <span (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n {{rowData.name}}\r\n </span>\r\n <span *ngIf=\"rowData.signatures\" class=\"pull-right signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #fileSize let-rowData='rowData'>\r\n <div *ngIf=\"rowData.isFile\">{{rowData.fileSize | fileSize}}</div>\r\n </ng-template>\r\n\r\n <ng-template #function let-rowData=\"rowData\" let-crudList=\"crudList\">\r\n <div class=\"function-list\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" pButton type=\"button\"\r\n tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\" (click)=\"onButtonClick(rowData)\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\" pButton\r\n type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\" icon=\"pi pi-trash\"\r\n (click)=\"deleteFile(rowData)\"></button>\r\n\r\n\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </ng-container>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\" icon=\"pi pi-cloud-download\"\r\n (click)=\"download(rowData)\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button>\r\n </div>\r\n </ng-template>\r\n </crud-list>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"layout == _layout.SIMPLE\" class=\"not-full-layout\" [class.readonly]=\"readonly\">\r\n <div *ngIf=\"!readonly || data.breadcrumbs.length > 0\" class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" (click)=\"createFolder()\" pButton pRipple type=\"button\"\r\n pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\" tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\"\r\n label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\">\r\n </button>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-cloud-upload\" (click)=\"selectFile()\" label=\"T\u1EA3i l\u00EAn\"></button>\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n <button *ngIf=\"!inTaiLieu\" pButton icon=\"pi pi-book\" pTooltip=\"T\u00E0i li\u1EC7u d\u00F9ng chung\"\r\n tooltipPosition=\"top\" type=\"button\" class=\"p-button-text\" label=\"T\u00E0i li\u1EC7u\"\r\n (click)=\"showTaiLieuDungChung = true;\">\r\n </button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\r\n </div>\r\n\r\n <div class=\"nfl-grid\">\r\n <div *ngFor=\"let rowData of _dataSource; index as i\" class=\"nfl-item\">\r\n <div class=\"nfl-no\">\r\n {{i + 1}}.\r\n </div>\r\n\r\n <div class=\"nfl-name\">\r\n <span class=\"pull-left file-ex-icon\" [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>\r\n <span>{{rowData.name}}</span>\r\n </span>\r\n </a>\r\n </div>\r\n <div *ngIf=\"rowData.signatures\" class=\"nfl-signature signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div>\r\n <div *ngIf=\"rowData.isFile\" class=\"nfl-version\">\r\n v{{rowData.currentFileVersion}}\r\n </div>\r\n\r\n <div class=\"nfl-function\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" (click)=\"onButtonClick(rowData)\"\r\n pButton type=\"button\" tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\"\r\n (click)=\"deleteFile(rowData)\" pButton type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\"\r\n icon=\"pi pi-trash\"></button>\r\n </ng-container>\r\n\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n (click)=\"download(rowData)\" pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\"\r\n icon=\"pi pi-cloud-download\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!_dataSource || !_dataSource.length\" class=\"nfl-no-item\">\r\n Ch\u01B0a c\u00F3 t\u00E0i li\u1EC7u \u0111\u01B0\u1EE3c t\u1EA3i l\u00EAn\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"layout == _layout.SIMPLE_FOR_LIST\" class=\"not-full-layout\" [class.readonly]=\"readonly\">\r\n <div *ngIf=\"!readonly || data.breadcrumbs.length > 0\" class=\"fm-toolbar\">\r\n <div class=\"fm-toolbar-buttons\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button *ngIf=\"!hiddenCreateFolder\" (click)=\"createFolder()\" pButton pRipple type=\"button\"\r\n pTooltip=\"T\u1EA1o th\u01B0 m\u1EE5c m\u1EDBi\" tooltipPosition=\"top\" icon=\"pi pi-folder\" class=\"p-button-text\"\r\n label=\"T\u1EA1o th\u01B0 m\u1EE5c\" iconPos=\"left\">\r\n </button>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-cloud-upload\" (click)=\"selectFile()\" label=\"T\u1EA3i l\u00EAn\"></button>\r\n <button pButton icon=\"pi pi-link\" pTooltip=\"T\u1EA3i t\u1EEB li\u00EAn k\u1EBFt trong h\u1EC7 th\u1ED1ng\" tooltipPosition=\"top\"\r\n type=\"button\" class=\"p-button-text p-button-primary\" label=\"T\u1EA3i li\u00EAn k\u1EBFt\"\r\n (click)=\"showAttachLinkBox = true\"></button>\r\n <button *ngIf=\"!inTaiLieu\" pButton icon=\"pi pi-book\" pTooltip=\"T\u00E0i li\u1EC7u d\u00F9ng chung\"\r\n tooltipPosition=\"top\" type=\"button\" class=\"p-button-text\" label=\"T\u00E0i li\u1EC7u\"\r\n (click)=\"showTaiLieuDungChung = true;\">\r\n </button>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"breadCrumb\"></ng-container>\r\n </div>\r\n\r\n <div class=\"nfl-grid\">\r\n <div *ngFor=\"let rowData of _dataSource; index as i\" class=\"nfl-item\">\r\n <div class=\"nfl-no\">\r\n {{i + 1}}.\r\n </div>\r\n\r\n <div class=\"nfl-name\">\r\n <span class=\"pull-left file-ex-icon\" [innerHTML]=\"rowData.name | fileIcon : !rowData.isFile\">\r\n </span>\r\n\r\n <a (click)=\"openObject(rowData)\" class=\"{{rowData.class}} file-ex-name\">\r\n <span>\r\n <span>{{rowData.name}}</span>\r\n <!-- <div *ngIf=\"rowData.signatures\" class=\"signature\" pTooltip=\"Xem chi ti\u1EBFt k\u00FD s\u1ED1\"\r\n tooltipPosition=\"top\" (click)=\"viewListSign($event, rowData.signatures)\">\r\n <i class=\"fas fa-signature\"></i>\r\n </div> -->\r\n </span>\r\n <!-- <span class=\"file-ex-extension\">{{rowData.extension}}</span> -->\r\n </a>\r\n </div>\r\n\r\n <div class=\"nfl-function\">\r\n <ng-container *ngIf=\"!readonly\">\r\n <button class=\"p-button-rounded p-button-text link-or-action\" (click)=\"onButtonClick(rowData)\"\r\n pButton type=\"button\" tooltipPosition=\"top\" pTooltip=\"{{getButtonTooltip(rowData)}}\"\r\n icon=\"{{getButtonIcon(rowData)}}\"></button>\r\n\r\n <button class=\"p-button-danger p-button-rounded p-button-text link-or-action\"\r\n (click)=\"deleteFile(rowData)\" pButton type=\"button\" pTooltip=\"X\u00F3a\" tooltipPosition=\"top\"\r\n icon=\"pi pi-trash\"></button>\r\n </ng-container>\r\n <!--\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n (click)=\"download(rowData)\" pButton type=\"button\" pTooltip=\"T\u1EA3i v\u1EC1\" tooltipPosition=\"top\"\r\n icon=\"pi pi-cloud-download\"></button>\r\n <button *ngIf=\"readonly\" class=\"p-button-secondary p-button-rounded p-button-text link-or-action\"\r\n pButton type=\"button\" pTooltip=\"Sao ch\u00E9p \u0111\u01B0\u1EDDng d\u1EABn\" tooltipPosition=\"top\" icon=\"pi pi-link\"\r\n (click)=\"copyDownloadLink(rowData)\"></button> -->\r\n <button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event, rowData)\"></button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!_dataSource || !_dataSource.length\" class=\"nfl-no-item\">\r\n Ch\u01B0a c\u00F3 t\u00E0i li\u1EC7u \u0111\u01B0\u1EE3c t\u1EA3i l\u00EAn\r\n </div>\r\n </div>\r\n</div>\r\n<ng-template #breadCrumb>\r\n <div *ngIf=\"data.breadcrumbs.length > 1\" class=\"fm-toolbar-path\">\r\n <p-breadcrumb class=\"customBreadCrumb\" [model]=\"data.breadcrumbs\"></p-breadcrumb>\r\n </div>\r\n</ng-template>\r\n\r\n<p-fileUpload #fileControl [ngStyle]=\"{'display': 'none'}\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file\"\r\n [url]=\"apiUploadUrl\" [maxFileSize]=\"maxFileSize\" auto=\"true\"\r\n [invalidFileSizeMessageSummary]=\"invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"invalidFileLimitMessageDetail\" (onProgress)=\"onUploadProgress($event)\"\r\n (onBeforeUpload)=\"onBeforeUpload($event)\" (onSelect)=\"handleSelectFile($event)\" (onUpload)=\"onUploaded($event)\"\r\n [accept]=\"control ? control.accept: null\">\r\n</p-fileUpload>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"data.itemsMenuFile\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>\r\n\r\n<!-- T\u1EA1o m\u1EDBi/ \u0111\u1ED5i t\u00EAn th\u01B0 m\u1EE5c -->\r\n<tn-dialog *ngIf=\"forms.createFolder.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.createFolder.header | translate\" [popupSize]=\"forms[formIds.createFolder].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.createFolder)\">\r\n <folder-form #formBase [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"forms[formIds.createFolder].formData\" (onSaved)=\"onSavedForm(formIds.createFolder)\"\r\n (onCancel)=\"onCancelForm(formIds.createFolder)\">\r\n </folder-form>\r\n</tn-dialog>\r\n\r\n<!-- \u0110\u1ED5i t\u00EAn file -->\r\n<tn-dialog *ngIf=\"forms.renameFile.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.renameFile.header | translate\" [popupSize]=\"forms[formIds.renameFile].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.renameFile)\">\r\n <file-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"forms[formIds.renameFile].formData\"\r\n (onSaved)=\"onSavedForm(formIds.renameFile)\" (onCancel)=\"onCancelForm(formIds.renameFile)\">\r\n </file-form>\r\n</tn-dialog>\r\n\r\n<!-- Xem file tr\u1EF1c tuy\u1EBFn -->\r\n<file-viewer *ngIf=\"forms.fileViewer.show\" [parentModel]=\"model\" [parentContext]=\"context\" [readonly]=\"readonly\"\r\n [model]=\"forms.fileViewer.formData\" (onClose)=\"closeFileViewer()\">\r\n</file-viewer>\r\n\r\n<!-- Xem phi\u00EAn b\u1EA3n -->\r\n<tn-dialog *ngIf=\"forms.fileVersionList.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.fileVersionList.header | translate\" [popupSize]=\"forms[formIds.fileVersionList].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.fileVersionList)\">\r\n <file-version-list *ngIf=\"forms.fileVersionList.show\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [fileId]=\"forms[formIds.fileVersionList].fileId\" [readonly]=\"readonly\">\r\n </file-version-list>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB t\u1EC7p tin kh\u00E1c...\"\r\n (keyup.enter)=\"addAttachLink()\" pInputText [(ngModel)]=\"typedLink\" class=\"p-col-12\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" (click)=\"addAttachLink()\" [disabled]=\"typedLink != ''? null : true\" pButton\r\n class=\"p-button-primary p-col-12\" label=\"Ok\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n\r\n<tn-dialog #dialog3 *ngIf=\"showTaiLieuDungChung\" [header]=\"'T\u00E0i li\u1EC7u' |translate\"\r\n [popupSize]=\"{ width:1024, height: 800 }\" (onHide)=\"showTaiLieuDungChung = false\">\r\n <file-tai-lieu #formBase [originalFolderId]=\"data.currentFolderId\"\r\n (onSaved)=\"showTaiLieuDungChung = false; this._triggerProcessData()\" (onCancel)=\"showTaiLieuDungChung = false\">\r\n </file-tai-lieu>\r\n</tn-dialog>\r\n\r\n<!--\r\n\r\n<share-file *ngIf=\"forms.shareFile.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFile.formData\">\r\n</share-file>\r\n\r\n<share-folder *ngIf=\"forms.shareFolder.show\" [parentDataModel]=\"model\" [parentDataContext]=\"context\"\r\n [model]=\"forms.shareFolder.formData\">\r\n</share-folder>\r\n -->\r\n\r\n<!-- Xem ch\u1EEF k\u00FD s\u1ED1 -->\r\n<tn-dialog *ngIf=\"forms.signatureDetail.show\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"forms.signatureDetail.header | translate\" [popupSize]=\"forms[formIds.signatureDetail].popupSize\"\r\n (onHide)=\"onCancelForm(formIds.signatureDetail)\">\r\n <signature-detail [parentModel]=\"model\" [parentContext]=\"context\">\r\n </signature-detail>\r\n</tn-dialog>\r\n<!--K\u00FD s\u1ED1 sim-->\r\n<tn-dialog *ngIf=\"forms.kySoSim.show\" #dialog [styleClass]=\"'address-form'\" [header]=\"forms.kySoSim.header | translate\"\r\n [popupSize]=\"forms.kySoSim.popupSize\" [showFooter]=\"true\" (onHide)=\"onCancelForm(formIds.kySoSim)\">\r\n <app-file-ky-so-sim #fileKySoSim [parentModel]=\"model\" [parentContext]=\"context\">\r\n </app-file-ky-so-sim>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"fas fa-images\" [disabled]=\"model.submitting\" class=\"p-button-text\"\r\n [label]=\"'Ch\u1ECDn ch\u1EEF k\u00FD' | translate\" (click)=\"chonChuKy()\"></button>\r\n <button type=\"button\" pButton icon=\"fas fa-signature\" class=\"p-button-text ui-button-success\"\r\n [disabled]=\"model.submitting\" [label]=\"'Th\u1EF1c hi\u1EC7n k\u00FD' | translate\" (click)=\"kySo()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"forms.kySoSim.show=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
|
|
36792
36834
|
providers: [
|
|
36793
36835
|
{
|
|
36794
36836
|
provide: forms.NG_VALUE_ACCESSOR,
|
|
@@ -37698,7 +37740,7 @@
|
|
|
37698
37740
|
var model = this.getGenerateDownloadLinkModel();
|
|
37699
37741
|
this._downloadLinkService.generateDownloadLink(model)
|
|
37700
37742
|
.then(function (rs) {
|
|
37701
|
-
_this.model.fileUrl = _this._downloadLinkService.
|
|
37743
|
+
_this.model.fileUrl = _this._downloadLinkService.getAnonymousDownloadUrl(rs.data);
|
|
37702
37744
|
});
|
|
37703
37745
|
};
|
|
37704
37746
|
FileViewerComponent.prototype.processOtherFileExtension = function () {
|
|
@@ -43546,6 +43588,7 @@
|
|
|
43546
43588
|
_this._moduleConfigService = _moduleConfigService;
|
|
43547
43589
|
_this.display = false;
|
|
43548
43590
|
_this.showHelperCurrentPageState = true;
|
|
43591
|
+
_this.helps = [];
|
|
43549
43592
|
_this.environment = _moduleConfigService.getConfig().environment;
|
|
43550
43593
|
if (_this.environment.helpConfig) {
|
|
43551
43594
|
_this.phoneNumber = _this.environment.helpConfig.expertPhoneNummber;
|
|
@@ -43562,6 +43605,9 @@
|
|
|
43562
43605
|
else {
|
|
43563
43606
|
_this.hrefMail = "javascript:void(0)";
|
|
43564
43607
|
}
|
|
43608
|
+
if (_this.environment.helpConfig.documents) {
|
|
43609
|
+
_this.helps = _this.environment.helpConfig.documents;
|
|
43610
|
+
}
|
|
43565
43611
|
}
|
|
43566
43612
|
return _this;
|
|
43567
43613
|
}
|
|
@@ -43582,7 +43628,7 @@
|
|
|
43582
43628
|
TnAppHelpComponent.decorators = [
|
|
43583
43629
|
{ type: i0.Component, args: [{
|
|
43584
43630
|
selector: 'li[tn-app-help]',
|
|
43585
|
-
template: "<a href=\"javascript:;\" tabindex=\"9\" (click)=\"showHelper()\" style=\"height: 30px;\" pTooltip=\"Tr\u1EE3 gi\u00FAp\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"topbar-icon-left\">\r\n <!-- <svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\r\n class=\"topbar-icon animated swing svgmodule\">\r\n <path fill=\"currentColor\"\r\n d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z\"\r\n class=\"\"></path>\r\n </svg> -->\r\n <i class=\"topbar-icon animated swing pi pi-question-circle\"></i>\r\n </span>\r\n <span class=\"topbar-item-name\">{{ \"Tr\u1EE3 gi\u00FAp\" | translate }}</span>\r\n</a>\r\n\r\n<p-sidebar [styleClass]=\"'HelperSlideBar tn-l-sidebar-wrapper'\" [(visible)]=\"display\" position=\"right\"\r\n [appendTo]=\"'body'\" [style]=\"{ width: '30em', border: 0, 'max-width': '100vw' }\">\r\n <div style=\"background-color: #fff; box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.35);\">\r\n <h1 style=\"font-size: 16px; color: #212529;\">Trung t\u00E2m tr\u1EE3 gi\u00FAp</h1>\r\n </div>\r\n\r\n <div class=\"tn-l-help-wrapper\">\r\n <tn-custom-scrollbar #scrollbar [style]=\"{'max-height':'calc(100vh - 50px)'}\">\r\n <div class=\"HelpCenter\">\r\n <div class=\"p-grid\" style=\"margin-top:10px; margin-bottom: 25px;\">\r\n <div class=\"p-col-8\">\r\n <p style=\"font-weight:bold;font-size: 16px;margin-bottom: 8px; margin-top:20px\">\r\n {{environment.helpConfig?.expertName}}\r\n </p>\r\n <p style=\"margin: 0px;\">\r\n <a [href]=\"hrefTelephone\"><i class=\"fas fa-phone\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{phoneNumber}}</a>\r\n </p>\r\n <p style=\"margin-top: 8px;\">\r\n <a [href]=\"hrefMail\"><i class=\"fas fa-envelope\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{mail}}</a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4\">\r\n <img src=\"
|
|
43631
|
+
template: "<a href=\"javascript:;\" tabindex=\"9\" (click)=\"showHelper()\" style=\"height: 30px;\" pTooltip=\"Tr\u1EE3 gi\u00FAp\"\r\n tooltipPosition=\"bottom\">\r\n <span class=\"topbar-icon-left\">\r\n <!-- <svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\r\n class=\"topbar-icon animated swing svgmodule\">\r\n <path fill=\"currentColor\"\r\n d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z\"\r\n class=\"\"></path>\r\n </svg> -->\r\n <i class=\"topbar-icon animated swing pi pi-question-circle\"></i>\r\n </span>\r\n <span class=\"topbar-item-name\">{{ \"Tr\u1EE3 gi\u00FAp\" | translate }}</span>\r\n</a>\r\n\r\n<p-sidebar [styleClass]=\"'HelperSlideBar tn-l-sidebar-wrapper'\" [(visible)]=\"display\" position=\"right\"\r\n [appendTo]=\"'body'\" [style]=\"{ width: '30em', border: 0, 'max-width': '100vw' }\">\r\n <div style=\"background-color: #fff; box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.35);\">\r\n <h1 style=\"font-size: 16px; color: #212529;\">Trung t\u00E2m tr\u1EE3 gi\u00FAp</h1>\r\n </div>\r\n\r\n <div class=\"tn-l-help-wrapper\">\r\n <tn-custom-scrollbar #scrollbar [style]=\"{'max-height':'calc(100vh - 50px)'}\">\r\n <div class=\"HelpCenter\">\r\n <div class=\"p-grid\" style=\"margin-top:10px; margin-bottom: 25px;\">\r\n <div class=\"p-col-8\">\r\n <p style=\"font-weight:bold;font-size: 16px;margin-bottom: 8px; margin-top:20px\">\r\n {{environment.helpConfig?.expertName}}\r\n </p>\r\n <p style=\"margin: 0px;\">\r\n <a [href]=\"hrefTelephone\"><i class=\"fas fa-phone\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{phoneNumber}}</a>\r\n </p>\r\n <p style=\"margin-top: 8px;\">\r\n <a [href]=\"hrefMail\"><i class=\"fas fa-envelope\"\r\n style=\"margin-right: 8px; width: 15px\"></i>{{mail}}</a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4\">\r\n <img [src]=\"environment.helpConfig?.logoCompany\"\r\n style=\"width: 100%; float: right; opacity: 0.7;\" />\r\n </div>\r\n </div>\r\n <div class=\"p-grid p-m-0 HelpCenter-download\" style=\"margin-top: 0px; margin-bottom: 40px;\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">T\u00E0i li\u1EC7u - H\u01B0\u1EDBng d\u1EABn s\u1EED d\u1EE5ng c\u00E1c ph\u00E2n h\u1EC7 </span>\r\n </div>\r\n <div class=\"tn-l-pmti p-grid\"\r\n style=\"border: 1px solid #ccc; width: 100%;margin:0;margin-bottom:20px;\">\r\n <div *ngFor=\"let item of helps\" class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" [href]=\"item.href\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <i class=\"{{item.icon}} app-switcher-item-icon\"\r\n style=\"color: rgb(44 126 210);font-size: 3.5em;padding-bottom: 10px;\"></i>\r\n <br />{{item.label}}\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"p-grid p-m-0 HelpCenter-video\" style=\"margin-top: 0px\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">Xem h\u01B0\u1EDBng d\u1EABn</span>\r\n </div>\r\n <div class=\"p-col-12 help-content\">\r\n <h2 *ngIf=\"showHelperCurrentPageState\" style=\"margin-top: 0px\">\r\n <a href=\"javascript:;\" (click)=\"showHelperCurrentPage(null)\"\r\n style=\"display:inline-block; position: relative; border-top: 1px solid #52abf5;\">\r\n <img src=\"/assets/images/bgvideo.png\" alt=\"screen shot\"\r\n style=\"width:100%; filter: brightness(0.88);\" />\r\n <i class=\"fab fa-youtube fa-2x\"></i>\r\n </a>\r\n </h2>\r\n </div>\r\n </div>\r\n\r\n <div class=\"p-grid p-m-0 HelpCenter-download\" style=\"margin-top: 0px; margin-bottom: 40px;\">\r\n <div class=\"p-col-12 help-title\">\r\n <span class=\"tit-name\">Ph\u1EA7n m\u1EC1m ti\u1EC7n \u00EDch</span>\r\n </div>\r\n <div class=\"tn-l-pmti\" style=\"border: 1px solid #ccc; width: 100%\">\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"{{environment.signalr.linkDownloadClientApp}}\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/icon-appTN64x64.png\" />\r\n <br />TN Client\r\n </a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"https://ultraviewer.net/vi/UltraViewer_setup_6.2_vi.exe\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/ultraviewer.ico\" />\r\n <br />Ultraviewer\r\n </a>\r\n </p>\r\n </div>\r\n <div class=\"p-col-4 help-content\">\r\n <p style=\"margin-top: 18px; text-align: center;\">\r\n <a target=\"_blank\" href=\"https://www.teamviewer.com/vi/tai-xuong-tu-dong-teamviewer/\"\r\n style=\"display: inline-block; text-align: center;\">\r\n <img src=\"/assets/images/icon-teamviewer.png\" />\r\n <br />Teamviewer\r\n </a>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </tn-custom-scrollbar>\r\n </div>\r\n</p-sidebar>",
|
|
43586
43632
|
providers: [ComponentContextService],
|
|
43587
43633
|
styles: [".HelpCenter{color:#555;padding:0 20px}::ng-deep .tn-l-sidebar-wrapper{padding:0}.tn-l-pmti{display:flex}.HelpCenter p:first-child img{margin-bottom:10px}::ng-deep .HelperSlideBar .p-sidebar-content>button{color:#212529;cursor:pointer;font-size:20px;margin-right:14px;margin-top:10px}::ng-deep .ui-sidebar{padding:0}::ng-deep .HelperSlideBar h1{height:50px;line-height:50px;margin:0;padding-left:20px;text-transform:uppercase}.HelpCenter-video{position:relative}.HelpCenter-video i{color:#454545;cursor:pointer;left:50%;opacity:.5;position:absolute;top:calc(50% - 10px);transform:translateX(-50%) translateY(-50%);transition:.5s}.HelpCenter-video video{opacity:1}.HelpCenter-video:hover video{cursor:pointer;opacity:.5}.HelpCenter-video:hover i{opacity:1}.HelpCenter-download img{height:45px;width:45px}.HelpCenter .help-title{background-color:rgba(49,146,225,.8784313725490196);color:#fff}.HelpCenter .help-title .tit-name{font-size:14px;font-weight:700}.HelpCenter .help-content{padding:0}.HelpCenter .HelpCenter-comment .help-content{padding:0;text-align:center}.HelpCenter-comment,.HelpCenter-download,.HelpCenter-video{margin-bottom:15px}.tn-l-help-wrapper{display:flex;max-height:calc(100vh - 60px);overflow:auto}"]
|
|
43588
43634
|
},] }
|
|
@@ -44977,7 +45023,7 @@
|
|
|
44977
45023
|
TnTabViewComponent.decorators = [
|
|
44978
45024
|
{ type: i0.Component, args: [{
|
|
44979
45025
|
selector: 'tn-tabview',
|
|
44980
|
-
template: "<div [style.height]=\"height\">\r\n <p-tabView #tab orientation=\"top\" [styleClass]=\"styleClass\" [activeIndex]=\"currentTabIndex\"\r\n (onChange)=\"handleTabChange($event)\">\r\n <ng-container *ngFor=\"let item of data; let i = index\">\r\n <p-tabPanel *ngIf=\"!item.hidden\" [leftIcon]=\"item.icon\" [header]=\"item.label\">\r\n <ng-container *ngIf=\"allowViewAll || currentTabIndex == i\">\r\n <ng-container *ngTemplateOutlet=\"template[item.code]; context: {$implicit: item}\">\r\n </ng-container>\r\n </ng-container>\r\n </p-tabPanel>\r\n </ng-container>\r\n </p-tabView>\r\n</div>",
|
|
45026
|
+
template: "<div [style.height]=\"height\">\r\n <p-tabView #tab orientation=\"top\" [styleClass]=\"styleClass\" [activeIndex]=\"currentTabIndex\"\r\n (onChange)=\"handleTabChange($event)\">\r\n <ng-container *ngFor=\"let item of data; let i = index\">\r\n <p-tabPanel *ngIf=\"!item.hidden\" [leftIcon]=\"item.icon\" [header]=\"item.label\"\r\n [headerStyleClass]=\"item.headerStyleClass\">\r\n <ng-container *ngIf=\"allowViewAll || currentTabIndex == i\">\r\n <ng-container *ngTemplateOutlet=\"template[item.code]; context: {$implicit: item}\">\r\n </ng-container>\r\n </ng-container>\r\n </p-tabPanel>\r\n </ng-container>\r\n </p-tabView>\r\n</div>",
|
|
44981
45027
|
styles: [".accordion-link{flex:1 1;text-align:right}.accordion-link ul{list-style:none;margin-bottom:0;margin-top:0;padding-left:0}.accordion-link ul li{background-color:#a4a5a4;border-radius:4px;color:#fff;display:inline-block;line-height:20px;margin-bottom:.5rem;margin-left:.5rem;padding:6px 12px;transition:all .3s ease-out}.accordion-link ul li:hover{background-color:#3db762;cursor:pointer}.accordion-link ul li.tab-active{background-color:#23a349}.tn-l-toolbar{display:flex;padding:.5rem .5rem 0}.hoso-container{height:auto;max-height:none}.tab-number{align-items:center;background:#a4a5a4;border-radius:2px;color:#fff;display:inline-flex;font-size:.9em;height:20px;justify-content:center;margin-right:.5rem;padding-top:2px;width:20px}.tab-number.active{background:#23a349}::ng-deep tn-accordion-tab{display:flex;flex-direction:column;height:100%}::ng-deep tn-accordion-tab .p-accordion-header{position:-webkit-sticky;position:sticky;top:1px;z-index:6}::ng-deep tn-accordion-tab .tn-l-p-accordion-wrapper{border-radius:4px;display:flex;flex:1;margin-left:.5rem;margin-right:.5rem;overflow:auto}::ng-deep tn-accordion-tab .tn-l-p-accordion-wrapper tn-custom-scrollbar{width:100%}::ng-deep tn-accordion-tab .ps__rail-x,::ng-deep tn-accordion-tab .ps__rail-y{z-index:7}::ng-deep tn-accordion-tab .tn-l-toolbar .toolbar{flex:0 0 auto;padding-top:0}@media (max-width:640px){.accordion-link,.toolbar{overflow-x:auto;white-space:nowrap}.tn-l-custom-wrapper{display:block}.accordion-link ul{margin-top:0}.tn-l-toolbar{display:block}}"]
|
|
44982
45028
|
},] }
|
|
44983
45029
|
];
|
|
@@ -46826,15 +46872,18 @@
|
|
|
46826
46872
|
this.setting.hiddenSettingPermission = true;
|
|
46827
46873
|
this.setting.hiddenSettingWorkflow = true;
|
|
46828
46874
|
this.setting.showEditLink = false;
|
|
46875
|
+
this.setting.hiddenSettingWorkflowNew = true;
|
|
46876
|
+
// RedOnly
|
|
46877
|
+
this.setting.hiddenToolbar = !this.readOnly;
|
|
46829
46878
|
this.setting.modelSchemas = [
|
|
46830
|
-
new ModelSchema({ field: '
|
|
46879
|
+
new ModelSchema({ field: 'soDenDi', dataType: 'int', name: 'Số đến/đi', fullName: 'Số đến/đi', description: 'Số đến/đi' }),
|
|
46831
46880
|
new ModelSchema({ field: 'soKyHieu', name: 'Số, ký hiệu', fullName: 'Số, ký hiệu', description: 'Số, ký hiệu' }),
|
|
46832
46881
|
new ModelSchema({ field: 'trichYeu', name: 'Trích yếu', fullName: '', description: '' }),
|
|
46833
46882
|
new ModelSchema({ field: 'ngayBanHanh', dataType: 'date', name: 'Ngày ban hành', fullName: '', description: '' })
|
|
46834
46883
|
];
|
|
46835
46884
|
this.setting.cols = [
|
|
46836
46885
|
new ColumnSchemaBase({
|
|
46837
|
-
field: '
|
|
46886
|
+
field: 'soDenDi',
|
|
46838
46887
|
width: '100px'
|
|
46839
46888
|
}),
|
|
46840
46889
|
new ColumnSchemaBase({
|
|
@@ -46864,7 +46913,7 @@
|
|
|
46864
46913
|
});
|
|
46865
46914
|
return;
|
|
46866
46915
|
}
|
|
46867
|
-
gridInfo.filters.push(_this.newFilter('
|
|
46916
|
+
gridInfo.filters.push(_this.newFilter('id', exports.Operator.in, _this.idVanBanDens));
|
|
46868
46917
|
_this._vanBanDenService.getByGridRequestWithBodyOld(gridInfo, 'Permission')
|
|
46869
46918
|
.then(function (response) { return __awaiter(_this, void 0, void 0, function () {
|
|
46870
46919
|
return __generator(this, function (_a) {
|
|
@@ -46909,8 +46958,9 @@
|
|
|
46909
46958
|
});
|
|
46910
46959
|
return;
|
|
46911
46960
|
}
|
|
46912
|
-
gridInfo.filters.push(_this.newFilter('
|
|
46913
|
-
_this.
|
|
46961
|
+
gridInfo.filters.push(_this.newFilter('id', exports.Operator.in, _this.idVanBanDis));
|
|
46962
|
+
_this.plusUrl = 'GetDataByPermission';
|
|
46963
|
+
_this._vanBanDiService.getByGridRequest(gridInfo, _this.plusUrl)
|
|
46914
46964
|
.then(function (response) { return __awaiter(_this, void 0, void 0, function () {
|
|
46915
46965
|
return __generator(this, function (_a) {
|
|
46916
46966
|
if (response.success) {
|
|
@@ -46954,6 +47004,21 @@
|
|
|
46954
47004
|
});
|
|
46955
47005
|
});
|
|
46956
47006
|
};
|
|
47007
|
+
VanBanPickerComponent.prototype.beforeRenderDataSource = function (datasource) {
|
|
47008
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
47009
|
+
return __generator(this, function (_a) {
|
|
47010
|
+
datasource.forEach(function (element) {
|
|
47011
|
+
if (element.type == EnumLoaiVanBanBase.VB_DEN) {
|
|
47012
|
+
element.soDenDi = element.soDen;
|
|
47013
|
+
}
|
|
47014
|
+
else {
|
|
47015
|
+
element.soDenDi = element.soDi;
|
|
47016
|
+
}
|
|
47017
|
+
});
|
|
47018
|
+
return [2 /*return*/];
|
|
47019
|
+
});
|
|
47020
|
+
});
|
|
47021
|
+
};
|
|
46957
47022
|
VanBanPickerComponent.prototype.navigateToVanBan = function (rowData) {
|
|
46958
47023
|
if (rowData.type == EnumLoaiVanBanBase.VB_DEN)
|
|
46959
47024
|
this.navigateToVanBanDen(rowData);
|
|
@@ -46961,10 +47026,10 @@
|
|
|
46961
47026
|
this.navigateToVanBanDi(rowData);
|
|
46962
47027
|
};
|
|
46963
47028
|
VanBanPickerComponent.prototype.navigateToVanBanDen = function (rowData) {
|
|
46964
|
-
window.open(this.environment.clientDomain.
|
|
47029
|
+
window.open(this.environment.clientDomain.vanban + "/tracuu-vanbanden#i=" + rowData.id, '_blank');
|
|
46965
47030
|
};
|
|
46966
47031
|
VanBanPickerComponent.prototype.navigateToVanBanDi = function (rowData) {
|
|
46967
|
-
window.open(this.environment.clientDomain.
|
|
47032
|
+
window.open(this.environment.clientDomain.vanban + "/tracuu-vanbandi#i=" + rowData.id, '_blank');
|
|
46968
47033
|
};
|
|
46969
47034
|
VanBanPickerComponent.prototype.showFormPickVanBan = function () {
|
|
46970
47035
|
this.beforeAdd();
|
|
@@ -46989,9 +47054,9 @@
|
|
|
46989
47054
|
var idVanBanDens = [], idVanBanDis = [];
|
|
46990
47055
|
rowDatas.forEach(function (item) {
|
|
46991
47056
|
if (item.type == EnumLoaiVanBanBase.VB_DEN)
|
|
46992
|
-
idVanBanDens.push(item.
|
|
47057
|
+
idVanBanDens.push(item.id);
|
|
46993
47058
|
else
|
|
46994
|
-
idVanBanDis.push(item.
|
|
47059
|
+
idVanBanDis.push(item.id);
|
|
46995
47060
|
});
|
|
46996
47061
|
if (idVanBanDens.length > 0)
|
|
46997
47062
|
_this.idVanBanDens = _this.idVanBanDens.filter(function (q) { return idVanBanDens.indexOf(q) == -1; });
|
|
@@ -47051,7 +47116,7 @@
|
|
|
47051
47116
|
VanBanPickerComponent.decorators = [
|
|
47052
47117
|
{ type: i0.Component, args: [{
|
|
47053
47118
|
selector: 'vanban-picker',
|
|
47054
|
-
template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\"\r\n [style]=\"{'min-height': '300px'}\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\"
|
|
47119
|
+
template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\"\r\n [style]=\"{'min-height': '300px'}\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\"\r\n (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\" (onDelete)=\"_delete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\">\r\n <ng-template #toolbar>\r\n <button type=\"button\" pButton icon=\"pi pi-clone\" class=\"p-button-text p-button-rounded p-button-success\"\r\n label=\"Ch\u1ECDn v\u0103n b\u1EA3n\" (click)=\"showFormPickVanBan()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-button-text p-button-rounded p-button-danger\"\r\n label=\"X\u00F3a v\u0103n b\u1EA3n\" (click)=\"xoaVanBanSelected()\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button type=\"button\" pButton icon=\"pi pi-eye\"\r\n class=\"p-button-text p-button-rounded p-button-success link-or-action\" pTooltip=\"Xem chi ti\u1EBFt v\u0103n b\u1EA3n\"\r\n tooltipPosition=\"top\" (click)=\"navigateToVanBan(rowData)\"></button>\r\n <button *ngIf=\"readOnly\" type=\"button\" pButton icon=\"pi pi-trash\"\r\n class=\"p-button-text p-button-rounded p-button-danger link-or-action\" pTooltip=\"X\u00F3a v\u0103n b\u1EA3n\"\r\n tooltipPosition=\"top\" (click)=\"xoaVanBan(rowData)\"></button>\r\n </ng-template>\r\n</crud-list>\r\n<tn-dialog *ngIf=\"showFormPicker\" #dialog [styleClass]=\"'tn-form-dialog'\" [header]=\"setting.popupHeader | translate\"\r\n [popupSize]=\"setting.popupSize\" [useDefaultScrollBar]=\"true\" (onHide)=\"_handleCancel($event)\">\r\n <app-vanban-picker-dialog [parentModel]=\"model\" [parentContext]=\"context\" [control]=\"control\"\r\n [idVanBanDens]=\"idVanBanDens\" [idVanBanDis]=\"idVanBanDis\" (onCancel)=\"_handleCancel($event)\"\r\n (onChanged)=\"handleChangeValue($event)\">\r\n </app-vanban-picker-dialog>\r\n</tn-dialog>",
|
|
47055
47120
|
providers: [
|
|
47056
47121
|
ComponentContextService,
|
|
47057
47122
|
{
|
|
@@ -47070,6 +47135,8 @@
|
|
|
47070
47135
|
{ type: ModuleConfigService }
|
|
47071
47136
|
]; };
|
|
47072
47137
|
VanBanPickerComponent.propDecorators = {
|
|
47138
|
+
loaiVanBan: [{ type: i0.Input }],
|
|
47139
|
+
readOnly: [{ type: i0.Input }],
|
|
47073
47140
|
control: [{ type: i0.Input }],
|
|
47074
47141
|
onChanged: [{ type: i0.Output }],
|
|
47075
47142
|
onReady: [{ type: i0.Output }]
|
|
@@ -48146,6 +48213,8 @@
|
|
|
48146
48213
|
StraightConnection: true,
|
|
48147
48214
|
CenterConnectionLabel: true
|
|
48148
48215
|
});
|
|
48216
|
+
_this.generated = false;
|
|
48217
|
+
_this.dataSourceAction = [];
|
|
48149
48218
|
_this.stateDistance = 350;
|
|
48150
48219
|
_this.topDistance = 80;
|
|
48151
48220
|
_this.fileDataService = _fileDataService;
|
|
@@ -48155,6 +48224,7 @@
|
|
|
48155
48224
|
var _this = this;
|
|
48156
48225
|
this.loadDetailFromQueryParam = false;
|
|
48157
48226
|
this.setting.baseService = this._workflowHistoryService;
|
|
48227
|
+
this._workflowHistoryService.changeEndpoint(this.businessSetting.baseService);
|
|
48158
48228
|
this.setting.multipleCheckWhenClickRow = false;
|
|
48159
48229
|
this.setting.settingKey = '__workflow';
|
|
48160
48230
|
this.currentWorkflow = this.workflowSetting.workflows.find(function (q) { return q.code == _this.item.__workflowCode; });
|
|
@@ -48198,7 +48268,6 @@
|
|
|
48198
48268
|
};
|
|
48199
48269
|
WorkflowHistoryNewComponent.prototype.init = function () {
|
|
48200
48270
|
this.machineCodeKetThucs = this.currentWorkflow.data.machines.filter(function (q) { return q.type == exports.EnumStateType.STOP; }).map(function (q) { return q.code; });
|
|
48201
|
-
var datasourceAction = this.createDatasourceAction();
|
|
48202
48271
|
this.setting.modelSchemas = [
|
|
48203
48272
|
new ModelSchema({ field: 'userIdCreated', name: 'Người gửi', fullName: 'Người gửi', description: '' }),
|
|
48204
48273
|
new ModelSchema({ field: 'actionCode', name: 'Thao tác', fullName: 'Thao tác', description: '' }),
|
|
@@ -48213,6 +48282,8 @@
|
|
|
48213
48282
|
new ModelSchema({ field: 'roleViewIds', name: 'Chức vụ theo dõi', fullName: 'Chức vụ theo dõi', description: '' }),
|
|
48214
48283
|
new ModelSchema({ field: 'note', name: 'Ý kiến', fullName: 'Ý kiến', description: '' })
|
|
48215
48284
|
];
|
|
48285
|
+
this.dataSourceAction = this.createDatasourceAction();
|
|
48286
|
+
this.setting.fieldSearchText = ['code', 'ten'];
|
|
48216
48287
|
this.setting.cols = [
|
|
48217
48288
|
new ColumnSchemaBase({
|
|
48218
48289
|
field: 'userIdCreated',
|
|
@@ -48222,11 +48293,13 @@
|
|
|
48222
48293
|
}),
|
|
48223
48294
|
new ColumnSchemaBase({
|
|
48224
48295
|
field: 'fullActionCode',
|
|
48296
|
+
fieldFilter: 'actionCode',
|
|
48225
48297
|
label: 'Hành động',
|
|
48226
48298
|
width: '9%',
|
|
48227
|
-
dataSource:
|
|
48299
|
+
dataSource: this.dataSourceAction,
|
|
48228
48300
|
displayFieldInGrid: 'shortTen',
|
|
48229
|
-
valueField: 'code'
|
|
48301
|
+
valueField: 'code',
|
|
48302
|
+
fullTextSearch: true
|
|
48230
48303
|
}),
|
|
48231
48304
|
new ColumnSchemaBase({
|
|
48232
48305
|
field: 'userIds',
|
|
@@ -48332,6 +48405,7 @@
|
|
|
48332
48405
|
})
|
|
48333
48406
|
];
|
|
48334
48407
|
this.model.ready = true;
|
|
48408
|
+
this.minimizeDatasourceAction();
|
|
48335
48409
|
_super.prototype.ngOnInit.call(this);
|
|
48336
48410
|
};
|
|
48337
48411
|
WorkflowHistoryNewComponent.prototype.findLastHistoryAndGetData = function () {
|
|
@@ -48443,40 +48517,32 @@
|
|
|
48443
48517
|
};
|
|
48444
48518
|
WorkflowHistoryNewComponent.prototype.appendStateAfterLastState = function (machinesData, machinesDataRaw, left) {
|
|
48445
48519
|
return __awaiter(this, void 0, void 0, function () {
|
|
48446
|
-
var lastMachine_1,
|
|
48520
|
+
var lastMachine_1, index_1;
|
|
48447
48521
|
var _this = this;
|
|
48448
48522
|
return __generator(this, function (_a) {
|
|
48449
|
-
|
|
48450
|
-
|
|
48451
|
-
|
|
48452
|
-
|
|
48453
|
-
|
|
48454
|
-
|
|
48455
|
-
|
|
48456
|
-
|
|
48457
|
-
|
|
48458
|
-
|
|
48459
|
-
|
|
48460
|
-
|
|
48461
|
-
|
|
48462
|
-
|
|
48463
|
-
var
|
|
48464
|
-
|
|
48465
|
-
|
|
48466
|
-
|
|
48467
|
-
|
|
48468
|
-
|
|
48469
|
-
|
|
48470
|
-
var newTargetMachine = _this.cloneMachine(targetMachine, {});
|
|
48471
|
-
newTargetMachine.location = [left, _this.topDistance + 150 * (index_1 - 1)];
|
|
48472
|
-
index_1++;
|
|
48473
|
-
machinesData.connections.push(_this.cloneConnection(conn, lastMachine_1, newTargetMachine));
|
|
48474
|
-
machinesData.machines.push(newTargetMachine);
|
|
48475
|
-
}
|
|
48476
|
-
});
|
|
48477
|
-
_a.label = 2;
|
|
48478
|
-
case 2: return [2 /*return*/];
|
|
48523
|
+
if (machinesData.machines.length > 0) {
|
|
48524
|
+
lastMachine_1 = machinesData.machines[machinesData.machines.length - 1];
|
|
48525
|
+
if (lastMachine_1.type == exports.EnumStateType.STOP)
|
|
48526
|
+
return [2 /*return*/];
|
|
48527
|
+
index_1 = 1;
|
|
48528
|
+
machinesDataRaw.connections.filter(function (q) { return q.source == lastMachine_1.rawId; })
|
|
48529
|
+
.forEach(function (conn) {
|
|
48530
|
+
var targetMachine = machinesDataRaw.machines.find(function (q) { return q.id == conn.target; });
|
|
48531
|
+
if (targetMachine.code == lastMachine_1.code) {
|
|
48532
|
+
var connection = _this.cloneConnection(conn, lastMachine_1, lastMachine_1);
|
|
48533
|
+
connection.connector = 'StateMachine';
|
|
48534
|
+
machinesData.connections.push(connection);
|
|
48535
|
+
}
|
|
48536
|
+
else {
|
|
48537
|
+
var newTargetMachine = _this.cloneMachine(targetMachine, {});
|
|
48538
|
+
newTargetMachine.location = [left, _this.topDistance + 150 * (index_1 - 1)];
|
|
48539
|
+
index_1++;
|
|
48540
|
+
machinesData.connections.push(_this.cloneConnection(conn, lastMachine_1, newTargetMachine));
|
|
48541
|
+
machinesData.machines.push(newTargetMachine);
|
|
48542
|
+
}
|
|
48543
|
+
});
|
|
48479
48544
|
}
|
|
48545
|
+
return [2 /*return*/];
|
|
48480
48546
|
});
|
|
48481
48547
|
});
|
|
48482
48548
|
};
|
|
@@ -48489,18 +48555,52 @@
|
|
|
48489
48555
|
WorkflowHistoryNewComponent.prototype.cloneConnection = function (connection, sourceState, targetState) {
|
|
48490
48556
|
return Object.assign(Object.assign({}, connection), { source: sourceState.id, target: targetState.id });
|
|
48491
48557
|
};
|
|
48558
|
+
WorkflowHistoryNewComponent.prototype.minimizeDatasourceAction = function () {
|
|
48559
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
48560
|
+
var lstWorkflowHistory, dataSource;
|
|
48561
|
+
return __generator(this, function (_a) {
|
|
48562
|
+
switch (_a.label) {
|
|
48563
|
+
case 0: return [4 /*yield*/, this._workflowHistoryService.getAll(this.getDefaultFilter(), 'sourceStatusCode,actionCode')];
|
|
48564
|
+
case 1:
|
|
48565
|
+
lstWorkflowHistory = (_a.sent()).data;
|
|
48566
|
+
dataSource = this._workflowSettingService.minimizeDatasourceAction(this.dataSourceAction, lstWorkflowHistory);
|
|
48567
|
+
this.crudList.setDropdownDatasource('fullActionCode', dataSource);
|
|
48568
|
+
return [2 /*return*/];
|
|
48569
|
+
}
|
|
48570
|
+
});
|
|
48571
|
+
});
|
|
48572
|
+
};
|
|
48492
48573
|
WorkflowHistoryNewComponent.prototype.createDatasourceAction = function () {
|
|
48493
48574
|
var result = [
|
|
48494
|
-
{ code: MaActionBatDauQuyTrinh, ten: 'Bắt đầu quy trình' }
|
|
48575
|
+
{ code: MaActionBatDauQuyTrinh, ten: 'Bắt đầu quy trình', buildIn: true }
|
|
48495
48576
|
];
|
|
48496
48577
|
result.push.apply(result, __spread(this._workflowSettingService.renderDataSourceActionWorkflow(this.currentWorkflow.data)));
|
|
48497
|
-
result.push({ code: ActionUpdateModel, ten: 'Chỉnh sửa' }, { code: ActionChoYKienBase, ten: 'Cho ý kiến' }, { code: ActionThuHoiBase, ten: 'Thu hồi thao tác' });
|
|
48578
|
+
result.push({ code: ActionUpdateModel, ten: 'Chỉnh sửa', buildIn: true }, { code: ActionChoYKienBase, ten: 'Cho ý kiến', buildIn: true }, { code: ActionThuHoiBase, ten: 'Thu hồi thao tác', buildIn: true });
|
|
48579
|
+
result.filter(function (q) { return q.buildIn; }).forEach(function (item) {
|
|
48580
|
+
item.rawCode = item.code;
|
|
48581
|
+
item.shortTen = item.ten;
|
|
48582
|
+
});
|
|
48498
48583
|
return result;
|
|
48499
48584
|
};
|
|
48585
|
+
WorkflowHistoryNewComponent.prototype.getDefaultFilter = function () {
|
|
48586
|
+
return [
|
|
48587
|
+
this.newFilter('tableName', exports.Operator.equal, this.tableName),
|
|
48588
|
+
this.newFilter('itemId', exports.Operator.equal, this.item.id),
|
|
48589
|
+
this.newFilter('workflowCode', exports.Operator.equal, this.item.__workflowCode)
|
|
48590
|
+
];
|
|
48591
|
+
};
|
|
48500
48592
|
WorkflowHistoryNewComponent.prototype.modifyGridInfo = function (gridInfo) {
|
|
48501
48593
|
return __awaiter(this, void 0, void 0, function () {
|
|
48502
|
-
|
|
48503
|
-
|
|
48594
|
+
var filterByActionCode, arrValue_1, arrActionCode;
|
|
48595
|
+
var _a;
|
|
48596
|
+
return __generator(this, function (_b) {
|
|
48597
|
+
filterByActionCode = gridInfo.filters.find(function (q) { return q.field == 'actionCode'; });
|
|
48598
|
+
if (filterByActionCode) {
|
|
48599
|
+
arrValue_1 = JSON.parse(filterByActionCode.value);
|
|
48600
|
+
arrActionCode = this.dataSourceAction.filter(function (q) { return arrValue_1.some(function (x) { return x == q.code; }); }).map(function (x) { return x.rawCode; });
|
|
48601
|
+
filterByActionCode.value = JSON.stringify(arrActionCode);
|
|
48602
|
+
}
|
|
48603
|
+
(_a = gridInfo.filters).unshift.apply(_a, __spread(this.getDefaultFilter()));
|
|
48504
48604
|
gridInfo.sorts.unshift(this.newSort('created', -1));
|
|
48505
48605
|
return [2 /*return*/];
|
|
48506
48606
|
});
|
|
@@ -48512,7 +48612,13 @@
|
|
|
48512
48612
|
return __generator(this, function (_a) {
|
|
48513
48613
|
// Duyệt từng history để chỉ hiển thị luồng hiện tại của quy trình. k hiển thị các bước thừa
|
|
48514
48614
|
dataSource.forEach(function (item) {
|
|
48515
|
-
item.fullActionCode = item.
|
|
48615
|
+
item.fullActionCode = item.actionCode;
|
|
48616
|
+
if (item.actionCode != MaActionBatDauQuyTrinh
|
|
48617
|
+
&& item.actionCode != ActionUpdateModel
|
|
48618
|
+
&& item.actionCode != ActionChoYKienBase
|
|
48619
|
+
&& item.actionCode != ActionThuHoiBase) {
|
|
48620
|
+
item.fullActionCode = item.sourceStatusCode + "___" + item.actionCode;
|
|
48621
|
+
}
|
|
48516
48622
|
_this.splitList(item, 'userIds');
|
|
48517
48623
|
_this.splitList(item, 'userViewIds');
|
|
48518
48624
|
_this.splitList(item, 'donViIds');
|
|
@@ -48551,7 +48657,10 @@
|
|
|
48551
48657
|
WorkflowHistoryNewComponent.prototype.afterGetData = function () {
|
|
48552
48658
|
return __awaiter(this, void 0, void 0, function () {
|
|
48553
48659
|
return __generator(this, function (_a) {
|
|
48554
|
-
this.
|
|
48660
|
+
if (!this.generated) {
|
|
48661
|
+
this.generated = true;
|
|
48662
|
+
this.regenerateMachineData();
|
|
48663
|
+
}
|
|
48555
48664
|
return [2 /*return*/];
|
|
48556
48665
|
});
|
|
48557
48666
|
});
|
|
@@ -50691,7 +50800,10 @@
|
|
|
50691
50800
|
isTree: true,
|
|
50692
50801
|
fieldTree: 'idParent',
|
|
50693
50802
|
valueParentRoot: null,
|
|
50694
|
-
sorts: [{ field: 'maPhanCap', dir: 1 }]
|
|
50803
|
+
sorts: [{ field: 'maPhanCap', dir: 1 }],
|
|
50804
|
+
defaultFilters: [
|
|
50805
|
+
this.newFilter('hienThiTrongCongViec', exports.Operator.equal, true)
|
|
50806
|
+
]
|
|
50695
50807
|
});
|
|
50696
50808
|
};
|
|
50697
50809
|
BaseCongViecComponent.prototype.ngOnDestroy = function () {
|
|
@@ -50946,12 +51058,25 @@
|
|
|
50946
51058
|
var _this = this;
|
|
50947
51059
|
this._congViecService.updateBulkIdCha(model).then(function (response) { return _this.handleResponse(response, '', function (f) { return _this.reload(); }); });
|
|
50948
51060
|
};
|
|
51061
|
+
BaseCongViecComponent.prototype.getMenuButtons = function (rowData) {
|
|
51062
|
+
if (this.stateCode === exports.EnumStateByMenuCongViec.DA_XU_LY) {
|
|
51063
|
+
this.rowDataCurrent = rowData;
|
|
51064
|
+
return [
|
|
51065
|
+
{ label: 'Dự thảo văn bản', icon: 'far fa-file-alt', command: this.duThaoVanBan.bind(this) }
|
|
51066
|
+
];
|
|
51067
|
+
}
|
|
51068
|
+
return [];
|
|
51069
|
+
};
|
|
51070
|
+
BaseCongViecComponent.prototype.duThaoVanBan = function () {
|
|
51071
|
+
var link = this._moduleConfigService.getConfig().environment.clientDomain.vanban + "/vanbandi/du-thao#task=" + this.rowDataCurrent.id;
|
|
51072
|
+
window.open(link, '_blank');
|
|
51073
|
+
};
|
|
50949
51074
|
return BaseCongViecComponent;
|
|
50950
51075
|
}(DataListBase));
|
|
50951
51076
|
BaseCongViecComponent.decorators = [
|
|
50952
51077
|
{ type: i0.Component, args: [{
|
|
50953
51078
|
selector: 'base-congviec',
|
|
50954
|
-
template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"hiddenAdd\"\r\n [hiddenEdit]=\"hiddenEdit\" [hiddenDelete]=\"hiddenDelete\" [hiddenCopyLink]=\"true\" [hiddenAdd]=\"isFromDashboard\"\r\n [showScrollHorizontal]=\"true\" (onCopyLink)=\"_copyLink($event)\"
|
|
51079
|
+
template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"hiddenAdd\"\r\n [hiddenEdit]=\"hiddenEdit\" [hiddenDelete]=\"hiddenDelete\" [hiddenCopyLink]=\"true\" [hiddenAdd]=\"isFromDashboard\"\r\n [showScrollHorizontal]=\"true\" [menuButtons]=\"getMenuButtons\" (onCopyLink)=\"_copyLink($event)\"\r\n (onCopyLinkMultiple)=\"_copyLinkMultiple()\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"addCongViec($event)\"\r\n (onEdit)=\"_edit($event)\" (onView)=\"_edit($event)\" (onDelete)=\"_delete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\"\r\n (onChangedStatusWorkflow)=\"handleChangedStatusWorkflow($event)\">\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"loaiDanhSach > 0 && !isPicker\" type=\"button\" pButton pRipple label=\"Ch\u1ECDn c\u00F4ng vi\u1EC7c\"\r\n icon=\"pi pi-plus\" class=\"p-button-text p-button-success\" (click)=\"onChonCongViec()\"></button>\r\n </ng-template>\r\n <ng-template #congViecInfo let-rowData=\"rowData\">\r\n <div class=\"container-task-info\">\r\n <div class=\"cell-task-info\">\r\n {{rowData.ten}}\r\n </div>\r\n <div class=\"percent-done\">\r\n <div class=\"detail transition-width\" [ngStyle]=\"{\r\n width: rowData.percentWidth\r\n }\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #idPriority let-rowData=\"rowData\">\r\n <div class=\"priority\">\r\n <span [ngStyle]=\"{\r\n color: rowData.priorityColor,\r\n background: rowData.priorityBackground\r\n }\">{{rowData.stridPriority}}</span>\r\n </div>\r\n </ng-template>\r\n <ng-template *ngIf=\"loaiDanhSach > 0\" #function let-rowData=\"rowData\" let-crudList=\"crudList\">\r\n <button type=\"button\" pButton pRipple pTooltip=\"{{'FORM.DELETE' | translate}}\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\" icon=\"pi pi-trash\"\r\n (click)=\"deleteCongViecTheoLoaiDanhSach(rowData)\"></button>\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"loaiCongViecModel.showEditForm\" [styleClass]=\"'tn-form-dialog'\"\r\n [header]=\"loaiCongViecModel.header | translate\" [popupSize]=\"loaiCongViecModel.popupSize\"\r\n (onHide)=\"loaiCongViecModel.showEditForm = false\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10 tn-dropdown p-fluid\">\r\n <dropdown [control]=\"searchSchema.loaiCongViec\" [(value)]=\"searchData.loaiCongViec\"></dropdown>\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n (click)=\"showFormAddTask($event)\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"showDetailForm = false\">\r\n <base-congviec-form #formBase [parentModel]=\"model\" [parentSetting]=\"setting\" [parentContext]=\"context\"\r\n [model]=\"formModel\" [crudList]=\"crudList\" (onSaved)=\"showDetailForm = false;crudList.reload()\"\r\n (onCancel)=\"_handleCancel($event)\" (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showPickerForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"'Ch\u1ECDn c\u00F4ng vi\u1EC7c' | translate\" [popupSize]=\"setting.popupSize\" [showFooter]=\"true\"\r\n [useDefaultScrollBar]=\"true\" (onHide)=\"showPickerForm = false\">\r\n <base-congviec #congViecPicker [isPicker]=\"true\" [formState]=\"formState\" [loaiDanhSach]=\"loaiDanhSach\"\r\n [idCongViec]=\"idCongViec\">\r\n </base-congviec>\r\n <ng-template #footer>\r\n <button type=\"button\" pButton icon=\"pi pi-save\" class=\"p-button-text\" [label]=\"'Ch\u1ECDn' | translate\"\r\n (click)=\"onSelectCongViec()\"></button>\r\n <button type=\"button\" pButton icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"showPickerForm=false\"></button>\r\n </ng-template>\r\n</tn-dialog>",
|
|
50955
51080
|
providers: [ComponentContextService],
|
|
50956
51081
|
styles: [".container-task-info .percent-done{background-color:#f0f0f0;border-radius:2px;height:5px;margin-top:5px;overflow:hidden;position:relative}.container-task-info .percent-done .detail{background:#3eb839;border-radius:2px;font-size:13px;height:5px;left:0;position:absolute;text-align:center;top:0}.priority{text-align:center}.priority>span{border-radius:3px;font-size:.8em;padding:3px 7px}"]
|
|
50957
51082
|
},] }
|
|
@@ -51136,7 +51261,11 @@
|
|
|
51136
51261
|
field: 'ten',
|
|
51137
51262
|
label: 'Tên loại',
|
|
51138
51263
|
required: true,
|
|
51139
|
-
|
|
51264
|
+
}),
|
|
51265
|
+
new SwitchControlSchema({
|
|
51266
|
+
field: 'hienThiTrongCongViec',
|
|
51267
|
+
label: 'Sử dụng ở phân hệ công việc',
|
|
51268
|
+
defaultValue: true
|
|
51140
51269
|
})
|
|
51141
51270
|
];
|
|
51142
51271
|
};
|
|
@@ -51221,6 +51350,7 @@
|
|
|
51221
51350
|
return __awaiter(this, void 0, void 0, function () {
|
|
51222
51351
|
return __generator(this, function (_a) {
|
|
51223
51352
|
gridInfo.sorts = [{ field: 'maPhanCap', dir: 1 }];
|
|
51353
|
+
gridInfo.filters.push(this.newFilter('soThuTu', exports.Operator.equal, 'soThuTu', true));
|
|
51224
51354
|
return [2 /*return*/];
|
|
51225
51355
|
});
|
|
51226
51356
|
});
|
|
@@ -56053,6 +56183,7 @@
|
|
|
56053
56183
|
exports.TBL_KTX_NGUOITHUE_HOSO = TBL_KTX_NGUOITHUE_HOSO;
|
|
56054
56184
|
exports.TBL_TS_PHIEUDEXUAT = TBL_TS_PHIEUDEXUAT;
|
|
56055
56185
|
exports.TBL_TS_TAISANCODINH_CONSTS = TBL_TS_TAISANCODINH_CONSTS;
|
|
56186
|
+
exports.TabViewData = TabViewData;
|
|
56056
56187
|
exports.TableSchema = TableSchema;
|
|
56057
56188
|
exports.TagSeparator = TagSeparator;
|
|
56058
56189
|
exports.TaiLieuComponent = TaiLieuComponent;
|