tnx-shared 5.1.342 → 5.1.345
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 +274 -67
- 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/list-base.d.ts.map +1 -1
- package/classes/form-schema.d.ts +4 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/address/address.component.d.ts +1 -0
- package/components/address/address.component.d.ts.map +1 -1
- package/components/autocomplete-datasource/autocomplete-datasource.component.d.ts +1 -0
- package/components/autocomplete-datasource/autocomplete-datasource.component.d.ts.map +1 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts +2 -0
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
- package/components/check-box-list/check-box-list.component.d.ts +1 -0
- package/components/check-box-list/check-box-list.component.d.ts.map +1 -1
- package/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.d.ts +1 -0
- package/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.d.ts.map +1 -1
- package/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.d.ts +1 -0
- package/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.d.ts.map +1 -1
- package/components/congviec-picker/congviec-picker.component.d.ts +1 -0
- package/components/congviec-picker/congviec-picker.component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +7 -0
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/datetime-picker/datetime-picker.component.d.ts +1 -0
- package/components/datetime-picker/datetime-picker.component.d.ts.map +1 -1
- package/components/datetime-picker-range/datetime-picker-range.component.d.ts +1 -0
- package/components/datetime-picker-range/datetime-picker-range.component.d.ts.map +1 -1
- package/components/dropdown/dropdown.component.d.ts +1 -0
- package/components/dropdown/dropdown.component.d.ts.map +1 -1
- package/components/entity-picker/entity-picker.component.d.ts +1 -0
- package/components/entity-picker/entity-picker.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts +1 -0
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/file-upload/file-upload.component.d.ts +1 -0
- package/components/file-upload/file-upload.component.d.ts.map +1 -1
- package/components/mask/mask.component.d.ts +1 -0
- package/components/mask/mask.component.d.ts.map +1 -1
- package/components/number-picker-range/number-picker-range.component.d.ts +1 -0
- package/components/number-picker-range/number-picker-range.component.d.ts.map +1 -1
- package/components/radio-button-list/radio-button-list.component.d.ts +1 -0
- package/components/radio-button-list/radio-button-list.component.d.ts.map +1 -1
- package/components/reference-textbox/reference-textbox.component.d.ts +2 -1
- package/components/reference-textbox/reference-textbox.component.d.ts.map +1 -1
- package/components/service-file-upload/service-file-upload.component.d.ts +1 -0
- package/components/service-file-upload/service-file-upload.component.d.ts.map +1 -1
- package/components/splash-component/splash-component-v1/splash-component-v1.component.d.ts.map +1 -1
- package/components/splash-component/splash-component-v2/splash-component-v2.component.d.ts.map +1 -1
- package/components/splash-component/splash-component.component.d.ts.map +1 -1
- package/components/statemachines/models/enums.d.ts +1 -0
- package/components/statemachines/models/enums.d.ts.map +1 -1
- package/components/tn-color-picker/tn-color-picker.component.d.ts +1 -0
- package/components/tn-color-picker/tn-color-picker.component.d.ts.map +1 -1
- package/components/tn-tabview/tn-tabview.component.d.ts +7 -1
- package/components/tn-tabview/tn-tabview.component.d.ts.map +1 -1
- package/components/tn-tinymce/tn-tinymce.component.d.ts +1 -0
- package/components/tn-tinymce/tn-tinymce.component.d.ts.map +1 -1
- package/components/user-picker/user-picker.component.d.ts +1 -0
- package/components/user-picker/user-picker.component.d.ts.map +1 -1
- package/components/vanban-picker/vanban-picker.component.d.ts +1 -0
- package/components/vanban-picker/vanban-picker.component.d.ts.map +1 -1
- package/esm2015/classes/base/list-base.js +13 -8
- package/esm2015/classes/form-schema.js +4 -1
- package/esm2015/components/address/address.component.js +4 -1
- package/esm2015/components/autocomplete-datasource/autocomplete-datasource.component.js +4 -1
- package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +13 -7
- package/esm2015/components/check-box-list/check-box-list.component.js +4 -1
- package/esm2015/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.js +4 -1
- package/esm2015/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.js +4 -1
- package/esm2015/components/congviec-picker/congviec-picker.component.js +4 -1
- package/esm2015/components/crud/crud-form/crud-form.component.js +67 -11
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/components/datetime-picker/datetime-picker.component.js +4 -1
- package/esm2015/components/datetime-picker-range/datetime-picker-range.component.js +5 -2
- package/esm2015/components/dropdown/dropdown.component.js +4 -1
- package/esm2015/components/entity-picker/entity-picker.component.js +4 -1
- package/esm2015/components/file-explorer/file-manager/file-manager.component.js +4 -1
- package/esm2015/components/file-upload/file-upload.component.js +4 -1
- package/esm2015/components/mask/mask.component.js +4 -1
- package/esm2015/components/number-picker-range/number-picker-range.component.js +5 -2
- package/esm2015/components/radio-button-list/radio-button-list.component.js +4 -1
- package/esm2015/components/reference-textbox/reference-textbox.component.js +6 -3
- package/esm2015/components/service-file-upload/service-file-upload.component.js +4 -1
- package/esm2015/components/splash-component/splash-component-v1/splash-component-v1.component.js +4 -1
- package/esm2015/components/splash-component/splash-component-v2/splash-component-v2.component.js +4 -1
- package/esm2015/components/splash-component/splash-component.component.js +4 -1
- package/esm2015/components/statemachines/models/constants.js +14 -14
- package/esm2015/components/statemachines/models/enums.js +2 -2
- package/esm2015/components/tn-color-picker/tn-color-picker.component.js +4 -2
- package/esm2015/components/tn-dialog/tn-dialog.component.js +2 -2
- package/esm2015/components/tn-tabview/tn-tabview.component.js +32 -5
- package/esm2015/components/tn-tinymce/tn-tinymce.component.js +4 -1
- package/esm2015/components/user-picker/user-picker.component.js +4 -1
- package/esm2015/components/vanban-picker/vanban-picker.component.js +4 -1
- package/esm2015/services/common.service.js +39 -32
- package/esm2015/services/menu.service.js +20 -1
- package/esm2015/services/permission.service.js +1 -1
- package/esm2015/services/user.service.js +1 -1
- package/fesm2015/tnx-shared.js +269 -75
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/common.service.d.ts.map +1 -1
- package/services/menu.service.d.ts +1 -0
- package/services/menu.service.d.ts.map +1 -1
- package/services/permission.service.d.ts.map +1 -1
- package/services/user.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -1691,6 +1691,7 @@
|
|
|
1691
1691
|
__extends(TableSchema, _super);
|
|
1692
1692
|
function TableSchema(init) {
|
|
1693
1693
|
var _this = _super.call(this) || this;
|
|
1694
|
+
_this.autoGenerateId = false;
|
|
1694
1695
|
_this.showNumber = true;
|
|
1695
1696
|
_this.showFunction = true;
|
|
1696
1697
|
_this.showFooter = true;
|
|
@@ -1961,6 +1962,8 @@
|
|
|
1961
1962
|
var TabViewData = /** @class */ (function () {
|
|
1962
1963
|
function TabViewData(init) {
|
|
1963
1964
|
this.hidden = false;
|
|
1965
|
+
this.alwayRender = false;
|
|
1966
|
+
this.useScrollbar = false; // Config để xác định có sử dụng custom-scrollbar không, nếu không thì dùng scrollbar mặc định của trình duyệt
|
|
1964
1967
|
for (var key in init) {
|
|
1965
1968
|
this[key] = init[key];
|
|
1966
1969
|
}
|
|
@@ -2902,8 +2905,8 @@
|
|
|
2902
2905
|
result[field] = data;
|
|
2903
2906
|
}
|
|
2904
2907
|
else {
|
|
2905
|
-
if (typeof result[field] === 'undefined'
|
|
2906
|
-
!_.isObject(result[field])) {
|
|
2908
|
+
if (typeof result[field] === 'undefined'
|
|
2909
|
+
|| !_.isObject(result[field])) {
|
|
2907
2910
|
result[field] = {};
|
|
2908
2911
|
}
|
|
2909
2912
|
result = result[field];
|
|
@@ -2971,8 +2974,8 @@
|
|
|
2971
2974
|
});
|
|
2972
2975
|
}
|
|
2973
2976
|
if (colVal) {
|
|
2974
|
-
rowString
|
|
2975
|
-
colVal
|
|
2977
|
+
rowString
|
|
2978
|
+
+= colVal
|
|
2976
2979
|
.toString()
|
|
2977
2980
|
.replace(',', '.')
|
|
2978
2981
|
.replace('\n', '')
|
|
@@ -3046,8 +3049,8 @@
|
|
|
3046
3049
|
});
|
|
3047
3050
|
}
|
|
3048
3051
|
if (colVal) {
|
|
3049
|
-
rowString
|
|
3050
|
-
colVal
|
|
3052
|
+
rowString
|
|
3053
|
+
+= colVal
|
|
3051
3054
|
.toString()
|
|
3052
3055
|
.replace(',', '.')
|
|
3053
3056
|
.replace('\n', '')
|
|
@@ -3123,8 +3126,8 @@
|
|
|
3123
3126
|
});
|
|
3124
3127
|
}
|
|
3125
3128
|
if (colVal) {
|
|
3126
|
-
rowString
|
|
3127
|
-
colVal
|
|
3129
|
+
rowString
|
|
3130
|
+
+= colVal
|
|
3128
3131
|
.toString()
|
|
3129
3132
|
.replace(',', '.')
|
|
3130
3133
|
.replace('\n', '')
|
|
@@ -3184,11 +3187,11 @@
|
|
|
3184
3187
|
};
|
|
3185
3188
|
CommonService.prototype.getLabel = function (item, textField, textField2, prefixTextField2) {
|
|
3186
3189
|
if (textField2) {
|
|
3187
|
-
return (item[textField]
|
|
3188
|
-
' - '
|
|
3189
|
-
prefixTextField2
|
|
3190
|
-
' '
|
|
3191
|
-
item[textField2]);
|
|
3190
|
+
return (item[textField]
|
|
3191
|
+
+ ' - '
|
|
3192
|
+
+ prefixTextField2
|
|
3193
|
+
+ ' '
|
|
3194
|
+
+ item[textField2]);
|
|
3192
3195
|
}
|
|
3193
3196
|
else {
|
|
3194
3197
|
return item[textField];
|
|
@@ -3536,8 +3539,9 @@
|
|
|
3536
3539
|
return ("DEFAULT_" + action).toUpperCase();
|
|
3537
3540
|
};
|
|
3538
3541
|
CommonService.prototype.cloneObject = function (obj) {
|
|
3539
|
-
if (obj !== undefined)
|
|
3542
|
+
if (obj !== undefined) {
|
|
3540
3543
|
return JSON.parse(JSON.stringify(obj));
|
|
3544
|
+
}
|
|
3541
3545
|
return undefined;
|
|
3542
3546
|
};
|
|
3543
3547
|
CommonService.prototype.setProperty = function (prop, val, model) {
|
|
@@ -3617,10 +3621,10 @@
|
|
|
3617
3621
|
words.forEach(function (word) {
|
|
3618
3622
|
if (word.trim() != '') {
|
|
3619
3623
|
if (word.length > 1) {
|
|
3620
|
-
result
|
|
3621
|
-
word.substring(0, 1).toUpperCase()
|
|
3622
|
-
word.substring(1)
|
|
3623
|
-
' ';
|
|
3624
|
+
result
|
|
3625
|
+
+= word.substring(0, 1).toUpperCase()
|
|
3626
|
+
+ word.substring(1)
|
|
3627
|
+
+ ' ';
|
|
3624
3628
|
}
|
|
3625
3629
|
else {
|
|
3626
3630
|
result += word.toUpperCase() + ' ';
|
|
@@ -3659,22 +3663,26 @@
|
|
|
3659
3663
|
return n !== Infinity && String(n) === str;
|
|
3660
3664
|
};
|
|
3661
3665
|
CommonService.prototype.hasAnyMask = function () {
|
|
3662
|
-
return (document.body.querySelector('div[class~="ui-dialog-mask"]')
|
|
3663
|
-
document.body.querySelector('div[class~="ui-sidebar-mask"]'));
|
|
3666
|
+
return (document.body.querySelector('div[class~="ui-dialog-mask"]')
|
|
3667
|
+
|| document.body.querySelector('div[class~="ui-sidebar-mask"]'));
|
|
3664
3668
|
};
|
|
3665
3669
|
CommonService.prototype.safeStringify = function (data) {
|
|
3666
3670
|
var item = stringify__default['default'].stableStringify(data, null, 2);
|
|
3667
3671
|
return item;
|
|
3668
3672
|
};
|
|
3669
3673
|
CommonService.prototype.compareString = function (value1, value2) {
|
|
3670
|
-
if (value1 == null && value2 != null)
|
|
3674
|
+
if (value1 == null && value2 != null) {
|
|
3671
3675
|
return -1;
|
|
3672
|
-
|
|
3676
|
+
}
|
|
3677
|
+
else if (value1 != null && value2 == null) {
|
|
3673
3678
|
return 1;
|
|
3674
|
-
|
|
3679
|
+
}
|
|
3680
|
+
else if (value1 == null && value2 == null) {
|
|
3675
3681
|
return 0;
|
|
3676
|
-
|
|
3682
|
+
}
|
|
3683
|
+
else if (typeof value1 === 'string' && typeof value2 === 'string') {
|
|
3677
3684
|
return value1.localeCompare(value2);
|
|
3685
|
+
}
|
|
3678
3686
|
else {
|
|
3679
3687
|
return 0;
|
|
3680
3688
|
}
|
|
@@ -3873,13 +3881,15 @@
|
|
|
3873
3881
|
};
|
|
3874
3882
|
CommonService.prototype.isSameArray = function (array1, array2) {
|
|
3875
3883
|
var e_4, _b;
|
|
3876
|
-
if (array1.length != array2.length)
|
|
3884
|
+
if (array1.length != array2.length) {
|
|
3877
3885
|
return false;
|
|
3886
|
+
}
|
|
3878
3887
|
try {
|
|
3879
3888
|
for (var array1_1 = __values(array1), array1_1_1 = array1_1.next(); !array1_1_1.done; array1_1_1 = array1_1.next()) {
|
|
3880
3889
|
var item = array1_1_1.value;
|
|
3881
|
-
if (!array2.some(function (q) { return q == item; }))
|
|
3890
|
+
if (!array2.some(function (q) { return q == item; })) {
|
|
3882
3891
|
return false;
|
|
3892
|
+
}
|
|
3883
3893
|
}
|
|
3884
3894
|
}
|
|
3885
3895
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
@@ -11746,7 +11756,7 @@
|
|
|
11746
11756
|
(function (EnumUserRule) {
|
|
11747
11757
|
// NGUOI_TAO = 1,
|
|
11748
11758
|
EnumUserRule[EnumUserRule["CAP_TREN"] = 2] = "CAP_TREN";
|
|
11749
|
-
|
|
11759
|
+
EnumUserRule[EnumUserRule["NGUOI_CUOI_CUNG"] = 3] = "NGUOI_CUOI_CUNG";
|
|
11750
11760
|
EnumUserRule[EnumUserRule["NGUOI_THAM_GIA_QUY_TRINH"] = 4] = "NGUOI_THAM_GIA_QUY_TRINH";
|
|
11751
11761
|
// Cấp trên mà xử lý bản ghi đối tượng trình lên
|
|
11752
11762
|
// CAP_TREN_DA_GUI = 5,
|
|
@@ -15851,8 +15861,10 @@
|
|
|
15851
15861
|
return [3 /*break*/, 4];
|
|
15852
15862
|
}
|
|
15853
15863
|
}
|
|
15854
|
-
else
|
|
15855
|
-
|
|
15864
|
+
else {
|
|
15865
|
+
if (childNode['_hidden'] || childNode.control['_hidden'])
|
|
15866
|
+
return [3 /*break*/, 4];
|
|
15867
|
+
}
|
|
15856
15868
|
return [4 /*yield*/, this.validate(childNode, true)];
|
|
15857
15869
|
case 2:
|
|
15858
15870
|
if (!(_g.sent())) {
|
|
@@ -16039,6 +16051,13 @@
|
|
|
16039
16051
|
});
|
|
16040
16052
|
});
|
|
16041
16053
|
};
|
|
16054
|
+
CrudFormComponent.prototype.handleLoadedControl = function (_component, control, parentPath) {
|
|
16055
|
+
var parentNode = this._rootNode.getNodeByPath(parentPath);
|
|
16056
|
+
var currentNode = parentNode.getChildNode(control.field);
|
|
16057
|
+
if (_component && currentNode) {
|
|
16058
|
+
currentNode._component = _component;
|
|
16059
|
+
}
|
|
16060
|
+
};
|
|
16042
16061
|
CrudFormComponent.prototype.handleControlReadyEvent = function (control, parentPath) {
|
|
16043
16062
|
return __awaiter(this, void 0, void 0, function () {
|
|
16044
16063
|
var parentNode;
|
|
@@ -16526,7 +16545,11 @@
|
|
|
16526
16545
|
index = tableNode.childNodes.length;
|
|
16527
16546
|
parentPath = tablePath + '[' + index + ']';
|
|
16528
16547
|
data = {};
|
|
16548
|
+
if (control.autoGenerateId) {
|
|
16549
|
+
data.id = this._commonService.guid();
|
|
16550
|
+
}
|
|
16529
16551
|
try {
|
|
16552
|
+
// Thêm id để ngăn render liên tục
|
|
16530
16553
|
for (_d = __values(control.rowTemplate), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
16531
16554
|
subControl = _e.value;
|
|
16532
16555
|
this.initControlDefaultValue(data, subControl, parentPath);
|
|
@@ -16851,7 +16874,7 @@
|
|
|
16851
16874
|
|| (parentModel._status[control.field].hidden === undefined
|
|
16852
16875
|
&& (control.hidden
|
|
16853
16876
|
|| (control.hiddenCheck && control.hiddenCheck(this._minimizedData, currentNode))));
|
|
16854
|
-
|
|
16877
|
+
currentNode['_hidden'] = !!result;
|
|
16855
16878
|
return result;
|
|
16856
16879
|
};
|
|
16857
16880
|
CrudFormComponent.prototype.getContextTd = function (control, data, index, tablePath) {
|
|
@@ -16930,7 +16953,7 @@
|
|
|
16930
16953
|
CrudFormComponent.decorators = [
|
|
16931
16954
|
{ type: i0.Component, args: [{
|
|
16932
16955
|
selector: 'crud-form',
|
|
16933
|
-
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 [placeholder]=\"control.placeholder\"\r\n [required]=\"control.validators && control.validators.required\"\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\" [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=\"'reference-text'\">\r\n <reference-textbox [control]=\"control\" [value]=\"data[control.field]\"></reference-textbox>\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\" [autoFormat]=\"control.autoFormat\" [min]=\"control.min\"\r\n [max]=\"control.max\" [(ngModel)]=\"data[control.field]\"\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 </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]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea pInputTextarea [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 [readOnlyValues]=\"data[control.field + '_readOnly']\" [(ngModel)]=\"data[control.field]\"\r\n [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 <!-- <tn-checkbox [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"></tn-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\" [readOnlyValues]=\"data[control.field + '_readOnly']\"\r\n [(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\" [readOnlyValues]=\"data[control.field + '_readOnly']\"\r\n [(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'\"\r\n [autoFormat]=\"control.autoFormat\" [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 class=\"new-table scr-table table-control\" [value]=\"data[control.field]\"\r\n [columns]=\"control.headerTemplate\" [responsive]=\"true\" [scrollable]=\"false\"\r\n [rowTrackBy]=\"trackByFuncId\"\r\n (onRowReorder)=\"handleRowOrdered(control, $event, 'rowReorder', data, parentPath)\">\r\n <ng-template pTemplate=\"colgroup\">\r\n <colgroup>\r\n <col *ngIf=\"control.showNumber\" style=\"width: 40px\" />\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <col [style.width]=\"subControl.width\" />\r\n </ng-container>\r\n <col *ngIf=\"control.enableReorderRow\" style=\"width: 30px\" />\r\n <col *ngIf=\"control.showFunction\" [style.width]=\"control.widthFunctionColumn\" />\r\n </colgroup>\r\n </ng-template>\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\">\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=\"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\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"control.showFunction\" class=\"table-function column-function\">\r\n <div class=\"cell-header-function\"><span>Ch\u1EE9c n\u0103ng</span></div>\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 *ngIf=\"control.showNumber\" class=\"stt\"\r\n style=\"text-align: center; vertical-align: inherit\">\r\n <span>\r\n {{ri + 1}}\r\n </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 [ngStyle]=\"{'text-align': getTextAlign(subControl.textAlign), 'vertical-align': 'inherit'}\">\r\n <span class=\"p-column-title\">{{subControl.label}}</span>\r\n <ng-template [ngIf]=\"getControlType(subControl) != 'column'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: getContextTd(subControl, rowData, ri, path)\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template [ngIf]=\"getControlType(subControl) == 'column'\">\r\n <span>{{_modelData[control.field][ri][subControl.field]}}</span>\r\n </ng-template>\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 *ngIf=\"control.showFunction\" style=\"text-align: center\"\r\n class=\"column-function text-center\">\r\n <div *ngIf=\"!control.rowButtonTemplate\"\r\n 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 p-button-rounded\"\r\n icon=\"pi pi-save\" [pTooltip]=\"'L\u01B0u' | translate\" tooltipPosition=\"top\"\r\n (click)=\"saveRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showEdit\" [disabled]=\"rowData._disableEdit\"\r\n type=\"button\" pButton class=\"p-button-text p-button-rounded\"\r\n icon=\"pi pi-pencil\" [pTooltip]=\"'S\u1EEDa' | translate\" tooltipPosition=\"top\"\r\n (click)=\"editRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showDelete\" [disabled]=\"rowData._disableDelete\"\r\n type=\"button\" pButton\r\n class=\"p-button-text p-button-danger p-button-rounded\"\r\n icon=\"pi pi-trash\" [pTooltip]=\"'X\u00F3a' | translate\" tooltipPosition=\"top\"\r\n (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 </div>\r\n <div *ngIf=\"control.rowButtonTemplate\"\r\n class=\"p-toolbar-group-center button-group\">\r\n <ng-container\r\n *ngTemplateOutlet=\"control.rowButtonTemplate; context: {rowData: _modelData[control.field][ri], rowIndex: ri, path: path, control: control}\">\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"control.summaryTemplate\" pTemplate=\"summary\" let-rowData>\r\n <ng-container *ngTemplateOutlet=\"control.summaryTemplate; context: {rowData: rowData}\">\r\n </ng-container>\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 *ngIf=\"control.showDialog\" 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>",
|
|
16956
|
+
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 [placeholder]=\"control.placeholder\"\r\n [required]=\"control.validators && control.validators.required\"\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\" [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=\"'reference-text'\">\r\n <reference-textbox [control]=\"control\" [value]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"></reference-textbox>\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\" [autoFormat]=\"control.autoFormat\" [min]=\"control.min\"\r\n [max]=\"control.max\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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\" [min]=\"control.min\"\r\n [max]=\"control.max\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 </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]\"\r\n (change)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\" />\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <textarea pInputTextarea [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 [height]=\"control.height ? control.height : 250\" [languageCode]=\"control.languageCode\"\r\n [disabled]=\"control.disabled || (control.disableCheck && control.disableCheck(model))\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\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\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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\"\r\n [suggestions]=\"data._source[control.field] || control.dataSource\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 [disabled]=\"control.disabled\" [control]=\"control\"\r\n [(ngModel)]=\"data[control.field]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (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 [readonly]=\"control.readonly\" [accept]=\"control.accept\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\r\n (onChanged)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\">\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 (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 [readOnlyValues]=\"data[control.field + '_readOnly']\" [(ngModel)]=\"data[control.field]\"\r\n [multiple]=\"control.multiple\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 <!-- <tn-checkbox [control]=\"control\" [disabled]=\"checkDisabled(data, control)\"\r\n [(ngModel)]=\"data[control.field]\"\r\n (onChange)=\"handleFieldValueChange(control, $event, 'change', data, parentPath)\"></tn-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 (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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\" [readOnlyValues]=\"data[control.field + '_readOnly']\"\r\n [(ngModel)]=\"data[control.field]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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\" [readOnlyValues]=\"data[control.field + '_readOnly']\"\r\n [(ngModel)]=\"data[control.field]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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\" [readOnly]=\"control.readOnly\" [loaiVanBan]=\"control.loaiVanBan\"\r\n [(ngModel)]=\"data[control.field]\" (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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'\"\r\n [autoFormat]=\"control.autoFormat\" [min]=\"0\" [max]=\"100\"\r\n [disabled]=\"checkDisabled(data, control)\" [(ngModel)]=\"data[control.field]\"\r\n (onInit)=\"handleLoadedControl($event, control, parentPath)\"\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 class=\"new-table scr-table table-control\" [value]=\"data[control.field]\"\r\n [columns]=\"control.headerTemplate\" [responsive]=\"true\" [scrollable]=\"false\"\r\n [rowTrackBy]=\"trackByFuncId\"\r\n (onRowReorder)=\"handleRowOrdered(control, $event, 'rowReorder', data, parentPath)\">\r\n <ng-template pTemplate=\"colgroup\">\r\n <colgroup>\r\n <col *ngIf=\"control.showNumber\" style=\"width: 40px\" />\r\n <ng-container *ngFor=\"let subControl of control.rowTemplate\">\r\n <col [style.width]=\"subControl.width\" />\r\n </ng-container>\r\n <col *ngIf=\"control.enableReorderRow\" style=\"width: 30px\" />\r\n <col *ngIf=\"control.showFunction\" [style.width]=\"control.widthFunctionColumn\" />\r\n </colgroup>\r\n </ng-template>\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\">\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=\"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\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"control.showFunction\" class=\"table-function column-function\">\r\n <div class=\"cell-header-function\"><span>Ch\u1EE9c n\u0103ng</span></div>\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 *ngIf=\"control.showNumber\" class=\"stt\"\r\n style=\"text-align: center; vertical-align: inherit\">\r\n <span>\r\n {{ri + 1}}\r\n </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 [ngStyle]=\"{'text-align': getTextAlign(subControl.textAlign), 'vertical-align': 'inherit'}\">\r\n <span class=\"p-column-title\">{{subControl.label}}</span>\r\n <ng-template [ngIf]=\"getControlType(subControl) != 'column'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"customControl; context: getContextTd(subControl, rowData, ri, path)\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template [ngIf]=\"getControlType(subControl) == 'column'\">\r\n <span>{{_modelData[control.field][ri][subControl.field]}}</span>\r\n </ng-template>\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 *ngIf=\"control.showFunction\" style=\"text-align: center\"\r\n class=\"column-function text-center\">\r\n <div *ngIf=\"!control.rowButtonTemplate\"\r\n 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 p-button-rounded\"\r\n icon=\"pi pi-save\" [pTooltip]=\"'L\u01B0u' | translate\" tooltipPosition=\"top\"\r\n (click)=\"saveRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showEdit\" [disabled]=\"rowData._disableEdit\"\r\n type=\"button\" pButton class=\"p-button-text p-button-rounded\"\r\n icon=\"pi pi-pencil\" [pTooltip]=\"'S\u1EEDa' | translate\" tooltipPosition=\"top\"\r\n (click)=\"editRow(ri, control, path)\"></button>\r\n <button *ngIf=\"control.showDelete\" [disabled]=\"rowData._disableDelete\"\r\n type=\"button\" pButton\r\n class=\"p-button-text p-button-danger p-button-rounded\"\r\n icon=\"pi pi-trash\" [pTooltip]=\"'X\u00F3a' | translate\" tooltipPosition=\"top\"\r\n (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 </div>\r\n <div *ngIf=\"control.rowButtonTemplate\"\r\n class=\"p-toolbar-group-center button-group\">\r\n <ng-container\r\n *ngTemplateOutlet=\"control.rowButtonTemplate; context: {rowData: _modelData[control.field][ri], rowIndex: ri, path: path, control: control}\">\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"control.summaryTemplate\" pTemplate=\"summary\" let-rowData>\r\n <ng-container *ngTemplateOutlet=\"control.summaryTemplate; context: {rowData: rowData}\">\r\n </ng-container>\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 *ngIf=\"control.showDialog\" 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>",
|
|
16934
16957
|
providers: [ComponentContextService],
|
|
16935
16958
|
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;margin-bottom:5px;padding: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}.cell-header-function{align-items:center;display:flex}.cell-header-function>span{flex:1 1;text-align:center}.cell-header-function button{height:24px;margin:0;padding:0;width:24px}::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}"]
|
|
16936
16959
|
},] }
|
|
@@ -17023,7 +17046,12 @@
|
|
|
17023
17046
|
}
|
|
17024
17047
|
else {
|
|
17025
17048
|
if (!this.schemaPath) {
|
|
17026
|
-
|
|
17049
|
+
Object.keys(schemas).forEach(function (key) {
|
|
17050
|
+
var item = schemas[key];
|
|
17051
|
+
if (item.uniqueField == item.field) {
|
|
17052
|
+
keysPlus.push(key);
|
|
17053
|
+
}
|
|
17054
|
+
});
|
|
17027
17055
|
}
|
|
17028
17056
|
}
|
|
17029
17057
|
this.keysPlus = keysPlus;
|
|
@@ -17055,6 +17083,22 @@
|
|
|
17055
17083
|
}
|
|
17056
17084
|
finally { if (e_32) throw e_32.error; }
|
|
17057
17085
|
}
|
|
17086
|
+
// Sau khi đã init xong node cho row thì fire event cho các control trong row
|
|
17087
|
+
// Thường dùng với mục đích cần disabled, hidden các control của row khi có nhu cầu
|
|
17088
|
+
try {
|
|
17089
|
+
this.childNodes.forEach(function (_) {
|
|
17090
|
+
if (_.control && _.control.onRowNodeFinishInit) {
|
|
17091
|
+
var eventData = new EventData({
|
|
17092
|
+
sourceNode: _,
|
|
17093
|
+
currentNode: _,
|
|
17094
|
+
eventType: 'rowFinishInit'
|
|
17095
|
+
});
|
|
17096
|
+
_.control.onRowNodeFinishInit(eventData);
|
|
17097
|
+
}
|
|
17098
|
+
});
|
|
17099
|
+
}
|
|
17100
|
+
catch (err) {
|
|
17101
|
+
}
|
|
17058
17102
|
}
|
|
17059
17103
|
else if (isArray(model)) {
|
|
17060
17104
|
var i = 0;
|
|
@@ -17144,6 +17188,16 @@
|
|
|
17144
17188
|
enumerable: false,
|
|
17145
17189
|
configurable: true
|
|
17146
17190
|
});
|
|
17191
|
+
Object.defineProperty(ControlTreeNode.prototype, "component", {
|
|
17192
|
+
get: function () {
|
|
17193
|
+
return this._component;
|
|
17194
|
+
},
|
|
17195
|
+
set: function (val) {
|
|
17196
|
+
this._component = val;
|
|
17197
|
+
},
|
|
17198
|
+
enumerable: false,
|
|
17199
|
+
configurable: true
|
|
17200
|
+
});
|
|
17147
17201
|
ControlTreeNode.prototype.setHidden = function (field, hidden) {
|
|
17148
17202
|
var _this = this;
|
|
17149
17203
|
if (hidden === void 0) { hidden = true; }
|
|
@@ -17157,13 +17211,31 @@
|
|
|
17157
17211
|
}
|
|
17158
17212
|
};
|
|
17159
17213
|
ControlTreeNode.prototype.setHiddenField = function (field, hidden) {
|
|
17214
|
+
this.setPrivateStatus(field, 'hidden', hidden);
|
|
17215
|
+
};
|
|
17216
|
+
ControlTreeNode.prototype.setDisabled = function (field, disabled) {
|
|
17217
|
+
var _this = this;
|
|
17218
|
+
if (disabled === void 0) { disabled = true; }
|
|
17219
|
+
if (Array.isArray(field)) {
|
|
17220
|
+
field.forEach(function (f) {
|
|
17221
|
+
_this.setDisabledField(f, disabled);
|
|
17222
|
+
});
|
|
17223
|
+
}
|
|
17224
|
+
else {
|
|
17225
|
+
this.setDisabledField(field, disabled);
|
|
17226
|
+
}
|
|
17227
|
+
};
|
|
17228
|
+
ControlTreeNode.prototype.setDisabledField = function (field, disabled) {
|
|
17229
|
+
this.setPrivateStatus(field, 'disabled', disabled);
|
|
17230
|
+
};
|
|
17231
|
+
ControlTreeNode.prototype.setPrivateStatus = function (field, prop, value) {
|
|
17160
17232
|
if (field.indexOf('.') > -1) {
|
|
17161
17233
|
var childNode = this.getNodeByPath(this.modelPath + "." + field);
|
|
17162
17234
|
var lastField = field.split('.').pop();
|
|
17163
|
-
childNode.parentNode.data._status[lastField]
|
|
17235
|
+
childNode.parentNode.data._status[lastField][prop] = value;
|
|
17164
17236
|
}
|
|
17165
17237
|
else {
|
|
17166
|
-
this.data._status[field]
|
|
17238
|
+
this.data._status[field][prop] = value;
|
|
17167
17239
|
}
|
|
17168
17240
|
};
|
|
17169
17241
|
ControlTreeNode.prototype.getNodeByPath = function (modelPath) {
|
|
@@ -20226,10 +20298,10 @@
|
|
|
20226
20298
|
CrudListComponent.prototype.extendColumns = function (cols, appendCol) {
|
|
20227
20299
|
var _this = this;
|
|
20228
20300
|
if (appendCol === void 0) { appendCol = true; }
|
|
20301
|
+
this.setting.advanceData.fieldNeedGetRef = [];
|
|
20229
20302
|
if (!cols) {
|
|
20230
20303
|
return;
|
|
20231
20304
|
}
|
|
20232
|
-
this.setting.advanceData.fieldNeedGetRef = [];
|
|
20233
20305
|
var temp = [];
|
|
20234
20306
|
var tmpCols = __spread(cols);
|
|
20235
20307
|
if (this.setting.columnSetting.details) {
|
|
@@ -24991,14 +25063,17 @@
|
|
|
24991
25063
|
dataSource: dataSource,
|
|
24992
25064
|
allowFilter: this.setting.allowFilterWorkflowColumn
|
|
24993
25065
|
});
|
|
24994
|
-
this.setting.advanceData.fieldNeedGetRef
|
|
25066
|
+
// Nếu chưa có this.setting.advanceData.fieldNeedGetRef thì bên crud-list sẽ add cột này sau
|
|
25067
|
+
if (this.setting.advanceData.fieldNeedGetRef) {
|
|
25068
|
+
this.setting.advanceData.fieldNeedGetRef.unshift(colParent);
|
|
25069
|
+
}
|
|
24995
25070
|
var children = Object.assign(Object.assign({}, colParent), { rawColumn: colParent, controlType: exports.ControlType.dropdown, dataType: colParent.dataTypeRefField, field: 'str' + colParent.field, allowFilter: colParent.allowFilter, sort: false, visible: !this.setting.hiddenWorkflowColumn });
|
|
24996
25071
|
colParent.visible = false;
|
|
24997
25072
|
this.setting.cols.push(colParent, children);
|
|
24998
|
-
this.crudList
|
|
24999
|
-
|
|
25000
|
-
|
|
25001
|
-
|
|
25073
|
+
if (this.crudList) {
|
|
25074
|
+
this.crudList.formatColumns([colParent, children]);
|
|
25075
|
+
this.crudList.buildFilterColumn([colParent]);
|
|
25076
|
+
}
|
|
25002
25077
|
var userCurrent = this._userService.getCurrentUser();
|
|
25003
25078
|
if (userCurrent.userName == 'admin') {
|
|
25004
25079
|
var colForAdmin = new ColumnSchemaBase({
|
|
@@ -25011,8 +25086,10 @@
|
|
|
25011
25086
|
sort: false
|
|
25012
25087
|
});
|
|
25013
25088
|
this.setting.cols.push(colForAdmin);
|
|
25014
|
-
this.crudList
|
|
25015
|
-
|
|
25089
|
+
if (this.crudList) {
|
|
25090
|
+
this.crudList.formatColumns([colForAdmin]);
|
|
25091
|
+
this.crudList.buildFilterColumn([colForAdmin]);
|
|
25092
|
+
}
|
|
25016
25093
|
}
|
|
25017
25094
|
};
|
|
25018
25095
|
ListBase.prototype.getDataSourceTrangThaiWorkflow = function () {
|
|
@@ -26031,6 +26108,7 @@
|
|
|
26031
26108
|
_this._showSubLabel = true;
|
|
26032
26109
|
_this.readyToReload = false;
|
|
26033
26110
|
_this._readyStatus = {};
|
|
26111
|
+
_this.onInit = new i0.EventEmitter();
|
|
26034
26112
|
_this.onSelect = new i0.EventEmitter();
|
|
26035
26113
|
_this.dataChange = new i0.EventEmitter();
|
|
26036
26114
|
_this.onReady = new i0.EventEmitter();
|
|
@@ -26147,6 +26225,7 @@
|
|
|
26147
26225
|
if (this.viewMode) {
|
|
26148
26226
|
this.getModelText();
|
|
26149
26227
|
}
|
|
26228
|
+
this.onInit.emit(this);
|
|
26150
26229
|
};
|
|
26151
26230
|
AddressComponent.prototype.setDisabledControl = function () {
|
|
26152
26231
|
var disabled = this._disabled ? true : null;
|
|
@@ -26252,6 +26331,7 @@
|
|
|
26252
26331
|
viewMode: [{ type: i0.Input }],
|
|
26253
26332
|
data: [{ type: i0.Input }],
|
|
26254
26333
|
showSubLabel: [{ type: i0.Input }],
|
|
26334
|
+
onInit: [{ type: i0.Output }],
|
|
26255
26335
|
onSelect: [{ type: i0.Output }],
|
|
26256
26336
|
dataChange: [{ type: i0.Output }],
|
|
26257
26337
|
onReady: [{ type: i0.Output }]
|
|
@@ -26319,6 +26399,7 @@
|
|
|
26319
26399
|
this._deviceDetectorService = _deviceDetectorService;
|
|
26320
26400
|
this.dataSource = [];
|
|
26321
26401
|
this.control = new AutoCompleteControlSchema();
|
|
26402
|
+
this.onInit = new i0.EventEmitter();
|
|
26322
26403
|
this.onValueChanged = new i0.EventEmitter();
|
|
26323
26404
|
this.lstDataSuggest = [];
|
|
26324
26405
|
this.hideTransitionOptions = '195ms ease-in';
|
|
@@ -26336,6 +26417,7 @@
|
|
|
26336
26417
|
if (!this._deviceDetectorService.isDesktop()) {
|
|
26337
26418
|
this.hideTransitionOptions = this.showTransitionOptions = '';
|
|
26338
26419
|
}
|
|
26420
|
+
this.onInit.emit(this);
|
|
26339
26421
|
};
|
|
26340
26422
|
AutocompleteDatasourceComponent.prototype.handleBlur = function (event) {
|
|
26341
26423
|
if (this.selectedValueBefore != this.selectedValue) {
|
|
@@ -26426,6 +26508,7 @@
|
|
|
26426
26508
|
AutocompleteDatasourceComponent.propDecorators = {
|
|
26427
26509
|
suggestions: [{ type: i0.Input }],
|
|
26428
26510
|
control: [{ type: i0.Input }],
|
|
26511
|
+
onInit: [{ type: i0.Output }],
|
|
26429
26512
|
onValueChanged: [{ type: i0.Output }]
|
|
26430
26513
|
};
|
|
26431
26514
|
|
|
@@ -26476,6 +26559,7 @@
|
|
|
26476
26559
|
height: 900,
|
|
26477
26560
|
maximize: true
|
|
26478
26561
|
});
|
|
26562
|
+
_this.onInit = new i0.EventEmitter();
|
|
26479
26563
|
_this.onSelect = new i0.EventEmitter();
|
|
26480
26564
|
_this.onUnSelect = new i0.EventEmitter();
|
|
26481
26565
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -26514,6 +26598,7 @@
|
|
|
26514
26598
|
this.buildFilterKeyword();
|
|
26515
26599
|
this.buildSettingEntityPicker();
|
|
26516
26600
|
this.updateFuncCheckReadOnlyItem();
|
|
26601
|
+
this.onInit.emit(this);
|
|
26517
26602
|
};
|
|
26518
26603
|
AutoCompletePickerComponent.prototype.updateFuncCheckReadOnlyItem = function () {
|
|
26519
26604
|
if (this.readOnlyValues && this.readOnlyValues.length) {
|
|
@@ -27016,14 +27101,17 @@
|
|
|
27016
27101
|
this.getDataSelectedValue(obj)
|
|
27017
27102
|
.then(function (res) {
|
|
27018
27103
|
_this.updateSelectedValue();
|
|
27019
|
-
|
|
27020
|
-
_this.isFiredReady = true;
|
|
27021
|
-
// Hàm ready này chỉ CẦN DÙNG trong trường hợp autocomplete-picker có value => Dùng để lấy dữ liệu các component con
|
|
27022
|
-
// Nếu có trường hợp nào khác thì cần phải xử lý khác
|
|
27023
|
-
_this.onReady.emit();
|
|
27024
|
-
}
|
|
27104
|
+
_this.checkFireReady();
|
|
27025
27105
|
});
|
|
27026
27106
|
};
|
|
27107
|
+
AutoCompletePickerComponent.prototype.checkFireReady = function () {
|
|
27108
|
+
if (!this.isFiredReady && this.hasValue) {
|
|
27109
|
+
this.isFiredReady = true;
|
|
27110
|
+
// Hàm ready này chỉ CẦN DÙNG trong trường hợp autocomplete-picker có value => Dùng để lấy dữ liệu các component con
|
|
27111
|
+
// Nếu có trường hợp nào khác thì cần phải xử lý khác
|
|
27112
|
+
this.onReady.emit();
|
|
27113
|
+
}
|
|
27114
|
+
};
|
|
27027
27115
|
AutoCompletePickerComponent.prototype.registerOnChange = function (fn) {
|
|
27028
27116
|
this.onChangeBase = fn;
|
|
27029
27117
|
};
|
|
@@ -27058,6 +27146,7 @@
|
|
|
27058
27146
|
disabled: [{ type: i0.Input }],
|
|
27059
27147
|
popupSize: [{ type: i0.Input }],
|
|
27060
27148
|
readOnlyValues: [{ type: i0.Input }],
|
|
27149
|
+
onInit: [{ type: i0.Output }],
|
|
27061
27150
|
onSelect: [{ type: i0.Output }],
|
|
27062
27151
|
onUnSelect: [{ type: i0.Output }],
|
|
27063
27152
|
onChanged: [{ type: i0.Output }],
|
|
@@ -29495,6 +29584,7 @@
|
|
|
29495
29584
|
this._dropDownService = _dropDownService;
|
|
29496
29585
|
this._deviceDetectorService = _deviceDetectorService;
|
|
29497
29586
|
this._styleClass = 'p-grid tn-check-box-list';
|
|
29587
|
+
this.onInit = new i0.EventEmitter();
|
|
29498
29588
|
this.onSelect = new i0.EventEmitter();
|
|
29499
29589
|
this.onReady = new i0.EventEmitter();
|
|
29500
29590
|
this.dataSourceInternal = [];
|
|
@@ -29553,6 +29643,7 @@
|
|
|
29553
29643
|
if (this.control.pColClass) {
|
|
29554
29644
|
this.classCheckBox += " p-col-" + this.control.pColClass;
|
|
29555
29645
|
}
|
|
29646
|
+
this.onInit.emit(this);
|
|
29556
29647
|
};
|
|
29557
29648
|
CheckBoxListComponent.prototype.bindDataSource = function (serviceUri, baseService) {
|
|
29558
29649
|
var _this = this;
|
|
@@ -29686,6 +29777,7 @@
|
|
|
29686
29777
|
control: [{ type: i0.Input }],
|
|
29687
29778
|
dataSource: [{ type: i0.Input }],
|
|
29688
29779
|
disabled: [{ type: i0.Input }],
|
|
29780
|
+
onInit: [{ type: i0.Output }],
|
|
29689
29781
|
onSelect: [{ type: i0.Output }],
|
|
29690
29782
|
onReady: [{ type: i0.Output }]
|
|
29691
29783
|
};
|
|
@@ -29776,6 +29868,7 @@
|
|
|
29776
29868
|
_this._coCauToChucService = _coCauToChucService;
|
|
29777
29869
|
_this._translateService = _translateService;
|
|
29778
29870
|
_this.disabled = false;
|
|
29871
|
+
_this.onInit = new i0.EventEmitter();
|
|
29779
29872
|
_this.onChanged = new i0.EventEmitter();
|
|
29780
29873
|
_this.onSelect = new i0.EventEmitter();
|
|
29781
29874
|
_this.onUnSelect = new i0.EventEmitter();
|
|
@@ -29807,6 +29900,7 @@
|
|
|
29807
29900
|
sort: false
|
|
29808
29901
|
})
|
|
29809
29902
|
], mdWidth: 12 }));
|
|
29903
|
+
this.onInit.emit(this);
|
|
29810
29904
|
};
|
|
29811
29905
|
CoCauToChucPickerListComponent.prototype.handleFocus = function (evt) {
|
|
29812
29906
|
this.onFocus.emit(evt);
|
|
@@ -29863,6 +29957,7 @@
|
|
|
29863
29957
|
control: [{ type: i0.Input }],
|
|
29864
29958
|
disabled: [{ type: i0.Input }],
|
|
29865
29959
|
readOnlyValues: [{ type: i0.Input }],
|
|
29960
|
+
onInit: [{ type: i0.Output }],
|
|
29866
29961
|
onChanged: [{ type: i0.Output }],
|
|
29867
29962
|
onSelect: [{ type: i0.Output }],
|
|
29868
29963
|
onUnSelect: [{ type: i0.Output }],
|
|
@@ -29887,6 +29982,7 @@
|
|
|
29887
29982
|
this.showClear = false;
|
|
29888
29983
|
this.disabledParentItem = true;
|
|
29889
29984
|
this.rootParentId = null;
|
|
29985
|
+
this.onInit = new i0.EventEmitter();
|
|
29890
29986
|
this.onChanged = new i0.EventEmitter();
|
|
29891
29987
|
this.guidEmpty = '00000000-0000-0000-0000-000000000000';
|
|
29892
29988
|
this.flashCacheParent = [];
|
|
@@ -29924,6 +30020,7 @@
|
|
|
29924
30020
|
if (this.control)
|
|
29925
30021
|
this.control._component = this;
|
|
29926
30022
|
this.bindingUser();
|
|
30023
|
+
this.onInit.emit(this);
|
|
29927
30024
|
};
|
|
29928
30025
|
CoCauToChucPickerComponent.prototype.bindingUser = function () {
|
|
29929
30026
|
var _this = this;
|
|
@@ -30072,6 +30169,7 @@
|
|
|
30072
30169
|
showClear: [{ type: i0.Input }],
|
|
30073
30170
|
disabledParentItem: [{ type: i0.Input }],
|
|
30074
30171
|
rootParentId: [{ type: i0.Input }],
|
|
30172
|
+
onInit: [{ type: i0.Output }],
|
|
30075
30173
|
onChanged: [{ type: i0.Output, args: ['onChanged',] }]
|
|
30076
30174
|
};
|
|
30077
30175
|
|
|
@@ -31275,6 +31373,7 @@
|
|
|
31275
31373
|
return [4 /*yield*/, rs.text()];
|
|
31276
31374
|
case 1:
|
|
31277
31375
|
menu = _b.apply(_a, [_c.sent()]);
|
|
31376
|
+
this.setDefaultIcon(menu, 0);
|
|
31278
31377
|
return [4 /*yield*/, this.setMenuItems(menu)];
|
|
31279
31378
|
case 2:
|
|
31280
31379
|
_c.sent();
|
|
@@ -31286,6 +31385,25 @@
|
|
|
31286
31385
|
});
|
|
31287
31386
|
});
|
|
31288
31387
|
};
|
|
31388
|
+
MenuService.prototype.setDefaultIcon = function (menus, level) {
|
|
31389
|
+
var _this = this;
|
|
31390
|
+
if (!menus)
|
|
31391
|
+
return;
|
|
31392
|
+
menus.forEach(function (itemMenu) {
|
|
31393
|
+
if (!itemMenu.icon) {
|
|
31394
|
+
if (level === 0) {
|
|
31395
|
+
itemMenu.icon = 'pi pi-th-large';
|
|
31396
|
+
}
|
|
31397
|
+
else if (level === 1) {
|
|
31398
|
+
itemMenu.icon = 'pi pi-star-o';
|
|
31399
|
+
}
|
|
31400
|
+
else {
|
|
31401
|
+
itemMenu.icon = 'pi pi-circle-on';
|
|
31402
|
+
}
|
|
31403
|
+
}
|
|
31404
|
+
_this.setDefaultIcon(itemMenu.items, level + 1);
|
|
31405
|
+
});
|
|
31406
|
+
};
|
|
31289
31407
|
return MenuService;
|
|
31290
31408
|
}());
|
|
31291
31409
|
MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(i0.ɵɵinject(ModuleConfigService), i0.ɵɵinject(PermissionService), i0.ɵɵinject(CommonService), i0.ɵɵinject(ApplicationContextService)); }, token: MenuService, providedIn: "root" });
|
|
@@ -34078,12 +34196,14 @@
|
|
|
34078
34196
|
function CongViecPickerComponent(_injector, _notifierService) {
|
|
34079
34197
|
var _this = _super.call(this, _injector) || this;
|
|
34080
34198
|
_this._notifierService = _notifierService;
|
|
34199
|
+
_this.onInit = new i0.EventEmitter();
|
|
34081
34200
|
_this.onChanged = new i0.EventEmitter();
|
|
34082
34201
|
_this.idCongViecs = [];
|
|
34083
34202
|
_this.formState = exports.FormState;
|
|
34084
34203
|
return _this;
|
|
34085
34204
|
}
|
|
34086
34205
|
CongViecPickerComponent.prototype.ngOnInit = function () {
|
|
34206
|
+
this.onInit.emit(this);
|
|
34087
34207
|
};
|
|
34088
34208
|
CongViecPickerComponent.prototype.handleIdsChange = function (ids) {
|
|
34089
34209
|
this.idCongViecs = ids;
|
|
@@ -34133,6 +34253,7 @@
|
|
|
34133
34253
|
]; };
|
|
34134
34254
|
CongViecPickerComponent.propDecorators = {
|
|
34135
34255
|
control: [{ type: i0.Input }],
|
|
34256
|
+
onInit: [{ type: i0.Output }],
|
|
34136
34257
|
onChanged: [{ type: i0.Output }]
|
|
34137
34258
|
};
|
|
34138
34259
|
|
|
@@ -34735,11 +34856,13 @@
|
|
|
34735
34856
|
var DatetimePickerRangeComponent = /** @class */ (function () {
|
|
34736
34857
|
function DatetimePickerRangeComponent() {
|
|
34737
34858
|
this.control = new DateTimeRangeControlSchema();
|
|
34859
|
+
this.onInit = new i0.EventEmitter();
|
|
34738
34860
|
this.onClose = new i0.EventEmitter();
|
|
34739
34861
|
this.onChanged = new i0.EventEmitter();
|
|
34740
34862
|
this._controlModelData = [undefined, undefined];
|
|
34741
34863
|
}
|
|
34742
34864
|
DatetimePickerRangeComponent.prototype.ngOnInit = function () {
|
|
34865
|
+
this.onInit.emit(this);
|
|
34743
34866
|
};
|
|
34744
34867
|
DatetimePickerRangeComponent.prototype.clear = function () {
|
|
34745
34868
|
var re = (this._controlModelData[0] != null) || (this._controlModelData[1] != null);
|
|
@@ -34792,6 +34915,7 @@
|
|
|
34792
34915
|
DatetimePickerRangeComponent.propDecorators = {
|
|
34793
34916
|
control: [{ type: i0.Input }],
|
|
34794
34917
|
disabled: [{ type: i0.Input }],
|
|
34918
|
+
onInit: [{ type: i0.Output }],
|
|
34795
34919
|
onClose: [{ type: i0.Output }],
|
|
34796
34920
|
onChanged: [{ type: i0.Output }]
|
|
34797
34921
|
};
|
|
@@ -34804,6 +34928,7 @@
|
|
|
34804
34928
|
this.hideTransitionOptions = '195ms ease-in';
|
|
34805
34929
|
this.showTransitionOptions = '225ms ease-out';
|
|
34806
34930
|
this.control = new DateTimeControlSchema();
|
|
34931
|
+
this.onInit = new i0.EventEmitter();
|
|
34807
34932
|
this.onSelect = new i0.EventEmitter();
|
|
34808
34933
|
this.onChanged = new i0.EventEmitter();
|
|
34809
34934
|
this.onFocus = new i0.EventEmitter();
|
|
@@ -34811,6 +34936,7 @@
|
|
|
34811
34936
|
this.onClose = new i0.EventEmitter();
|
|
34812
34937
|
}
|
|
34813
34938
|
DatetimePickerComponent.prototype.ngOnInit = function () {
|
|
34939
|
+
this.onInit.emit(this);
|
|
34814
34940
|
};
|
|
34815
34941
|
DatetimePickerComponent.prototype.writeValue = function (obj) {
|
|
34816
34942
|
if (obj) {
|
|
@@ -34983,6 +35109,7 @@
|
|
|
34983
35109
|
calendar: [{ type: i0.ViewChild, args: ['calendar', { static: true },] }],
|
|
34984
35110
|
control: [{ type: i0.Input }],
|
|
34985
35111
|
disabled: [{ type: i0.Input }],
|
|
35112
|
+
onInit: [{ type: i0.Output }],
|
|
34986
35113
|
onSelect: [{ type: i0.Output }],
|
|
34987
35114
|
onChanged: [{ type: i0.Output }],
|
|
34988
35115
|
onFocus: [{ type: i0.Output }],
|
|
@@ -35001,6 +35128,7 @@
|
|
|
35001
35128
|
_this.appendTo = 'body';
|
|
35002
35129
|
_this.defaultSelectedStyleClass = 'custom-select-item';
|
|
35003
35130
|
_this._itemSelectedStyleClass = _this.defaultSelectedStyleClass;
|
|
35131
|
+
_this.onInit = new i0.EventEmitter();
|
|
35004
35132
|
_this.onChanged = new i0.EventEmitter();
|
|
35005
35133
|
_this.onCollapse = new i0.EventEmitter();
|
|
35006
35134
|
_this.onExpand = new i0.EventEmitter();
|
|
@@ -35164,6 +35292,7 @@
|
|
|
35164
35292
|
if (this.control.onInit) {
|
|
35165
35293
|
this.control.onInit(this);
|
|
35166
35294
|
}
|
|
35295
|
+
this.onInit.emit(this);
|
|
35167
35296
|
};
|
|
35168
35297
|
DropdownComponent.prototype.setDefaultSetting = function () {
|
|
35169
35298
|
var _this = this;
|
|
@@ -35971,6 +36100,7 @@
|
|
|
35971
36100
|
dataSource: [{ type: i0.Input }],
|
|
35972
36101
|
value: [{ type: i0.Input }],
|
|
35973
36102
|
itemSelectedStyleClass: [{ type: i0.Input }],
|
|
36103
|
+
onInit: [{ type: i0.Output }],
|
|
35974
36104
|
onChanged: [{ type: i0.Output }],
|
|
35975
36105
|
onCollapse: [{ type: i0.Output }],
|
|
35976
36106
|
onExpand: [{ type: i0.Output }],
|
|
@@ -37403,6 +37533,7 @@
|
|
|
37403
37533
|
_this._translateService = _translateService;
|
|
37404
37534
|
_this.disabled = false;
|
|
37405
37535
|
_this.readOnly = false;
|
|
37536
|
+
_this.onInit = new i0.EventEmitter();
|
|
37406
37537
|
_this.onSelect = new i0.EventEmitter();
|
|
37407
37538
|
_this.onUnSelect = new i0.EventEmitter();
|
|
37408
37539
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -37460,6 +37591,7 @@
|
|
|
37460
37591
|
});
|
|
37461
37592
|
this.advanceData.fields = this.getFields();
|
|
37462
37593
|
_super.prototype.ngOnInit.call(this);
|
|
37594
|
+
this.onInit.emit(this);
|
|
37463
37595
|
};
|
|
37464
37596
|
EntityPickerComponent.prototype.selectEntity = function () {
|
|
37465
37597
|
this.showDetailForm = true;
|
|
@@ -37649,6 +37781,7 @@
|
|
|
37649
37781
|
disabled: [{ type: i0.Input }],
|
|
37650
37782
|
readOnly: [{ type: i0.Input }],
|
|
37651
37783
|
children: [{ type: i0.Input }],
|
|
37784
|
+
onInit: [{ type: i0.Output }],
|
|
37652
37785
|
onSelect: [{ type: i0.Output, args: ['onSelect',] }],
|
|
37653
37786
|
onUnSelect: [{ type: i0.Output, args: ['onUnSelect',] }],
|
|
37654
37787
|
onChanged: [{ type: i0.Output, args: ['onChanged',] }]
|
|
@@ -38351,6 +38484,7 @@
|
|
|
38351
38484
|
_this.inTaiLieuChung = false;
|
|
38352
38485
|
_this.copyToFolderId = _this._commonService.guidEmpty();
|
|
38353
38486
|
_this.multipleCheckWhenClickRow = true;
|
|
38487
|
+
_this.onInit = new i0.EventEmitter();
|
|
38354
38488
|
_this.onReady = new i0.EventEmitter();
|
|
38355
38489
|
_this.entityKeyChange = new i0.EventEmitter();
|
|
38356
38490
|
_this.closePopup = new i0.EventEmitter();
|
|
@@ -38455,6 +38589,7 @@
|
|
|
38455
38589
|
}
|
|
38456
38590
|
this.reloadData();
|
|
38457
38591
|
this.checkAndLoadRootFolderContent();
|
|
38592
|
+
this.onInit.emit(this);
|
|
38458
38593
|
};
|
|
38459
38594
|
FileManagerComponent.prototype.checkAndLoadRootFolderContent = function () {
|
|
38460
38595
|
if (!this.inited || this.fileDataService)
|
|
@@ -39696,6 +39831,7 @@
|
|
|
39696
39831
|
copyToFolderId: [{ type: i0.Input }],
|
|
39697
39832
|
value: [{ type: i0.Input }],
|
|
39698
39833
|
multipleCheckWhenClickRow: [{ type: i0.Input }],
|
|
39834
|
+
onInit: [{ type: i0.Output }],
|
|
39699
39835
|
onReady: [{ type: i0.Output }],
|
|
39700
39836
|
entityKeyChange: [{ type: i0.Output }],
|
|
39701
39837
|
closePopup: [{ type: i0.Output }],
|
|
@@ -41174,6 +41310,7 @@
|
|
|
41174
41310
|
_this.invalidFileLimitMessageSummary = 'Quá số lượng file cho phép, ';
|
|
41175
41311
|
_this.invalidFileLimitMessageDetail = 'tối đa {0} file.';
|
|
41176
41312
|
_this.sharedFolderType = exports.SharedFolderType.Tempt;
|
|
41313
|
+
_this.onInit = new i0.EventEmitter();
|
|
41177
41314
|
_this.onSelect = new i0.EventEmitter();
|
|
41178
41315
|
_this.onRemove = new i0.EventEmitter();
|
|
41179
41316
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -41200,6 +41337,7 @@
|
|
|
41200
41337
|
this.isDisabled = isDisabled;
|
|
41201
41338
|
};
|
|
41202
41339
|
FileUploadComponent.prototype.ngOnInit = function () {
|
|
41340
|
+
this.onInit.emit(this);
|
|
41203
41341
|
};
|
|
41204
41342
|
FileUploadComponent.prototype.getFile = function () {
|
|
41205
41343
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -41354,6 +41492,7 @@
|
|
|
41354
41492
|
invalidFileLimitMessageSummary: [{ type: i0.Input }],
|
|
41355
41493
|
invalidFileLimitMessageDetail: [{ type: i0.Input }],
|
|
41356
41494
|
sharedFolderType: [{ type: i0.Input }],
|
|
41495
|
+
onInit: [{ type: i0.Output }],
|
|
41357
41496
|
onSelect: [{ type: i0.Output }],
|
|
41358
41497
|
onRemove: [{ type: i0.Output }],
|
|
41359
41498
|
onChanged: [{ type: i0.Output }]
|
|
@@ -41476,6 +41615,7 @@
|
|
|
41476
41615
|
this.viewMode = false;
|
|
41477
41616
|
this.inputStyleClass = '';
|
|
41478
41617
|
this.autoFormat = true;
|
|
41618
|
+
this.onInit = new i0.EventEmitter();
|
|
41479
41619
|
this.onFocus = new i0.EventEmitter();
|
|
41480
41620
|
this.onBlur = new i0.EventEmitter();
|
|
41481
41621
|
this.onChanged = new i0.EventEmitter();
|
|
@@ -41494,6 +41634,7 @@
|
|
|
41494
41634
|
if (!this.autoFormat) {
|
|
41495
41635
|
this.thousandSeperator = '';
|
|
41496
41636
|
}
|
|
41637
|
+
this.onInit.emit(this);
|
|
41497
41638
|
};
|
|
41498
41639
|
MaskComponent.prototype.writeValue = function (obj) {
|
|
41499
41640
|
if (obj) {
|
|
@@ -41593,6 +41734,7 @@
|
|
|
41593
41734
|
viewMode: [{ type: i0.Input }],
|
|
41594
41735
|
inputStyleClass: [{ type: i0.Input }],
|
|
41595
41736
|
autoFormat: [{ type: i0.Input }],
|
|
41737
|
+
onInit: [{ type: i0.Output }],
|
|
41596
41738
|
onFocus: [{ type: i0.Output }],
|
|
41597
41739
|
onBlur: [{ type: i0.Output }],
|
|
41598
41740
|
onChanged: [{ type: i0.Output }]
|
|
@@ -41658,6 +41800,7 @@
|
|
|
41658
41800
|
this.suffix = '';
|
|
41659
41801
|
this.prefix = '';
|
|
41660
41802
|
this.decimalPlaces = 2;
|
|
41803
|
+
this.onInit = new i0.EventEmitter();
|
|
41661
41804
|
this.focus = new i0.EventEmitter();
|
|
41662
41805
|
this.enterSmart = new i0.EventEmitter();
|
|
41663
41806
|
this.enter = new i0.EventEmitter();
|
|
@@ -41665,6 +41808,7 @@
|
|
|
41665
41808
|
this.change = new i0.EventEmitter();
|
|
41666
41809
|
}
|
|
41667
41810
|
NumberPickerRangeComponent.prototype.ngOnInit = function () {
|
|
41811
|
+
this.onInit.emit(this);
|
|
41668
41812
|
};
|
|
41669
41813
|
NumberPickerRangeComponent.prototype.clear = function () {
|
|
41670
41814
|
var re = (this.model[0] != null && this.model[0] !== '') || (this.model[1] != null && this.model[1] !== '');
|
|
@@ -41777,6 +41921,7 @@
|
|
|
41777
41921
|
min: [{ type: i0.Input }],
|
|
41778
41922
|
max: [{ type: i0.Input }],
|
|
41779
41923
|
decimalPlaces: [{ type: i0.Input }],
|
|
41924
|
+
onInit: [{ type: i0.Output }],
|
|
41780
41925
|
focus: [{ type: i0.Output }],
|
|
41781
41926
|
enterSmart: [{ type: i0.Output }],
|
|
41782
41927
|
enter: [{ type: i0.Output }],
|
|
@@ -42209,6 +42354,7 @@
|
|
|
42209
42354
|
function RadioButtonListComponent(_crudService, _deviceDetectorService) {
|
|
42210
42355
|
this._crudService = _crudService;
|
|
42211
42356
|
this._deviceDetectorService = _deviceDetectorService;
|
|
42357
|
+
this.onInit = new i0.EventEmitter();
|
|
42212
42358
|
this.valueChange = new i0.EventEmitter();
|
|
42213
42359
|
this.onChanged = new i0.EventEmitter();
|
|
42214
42360
|
this.onDataSourceLoaded = new i0.EventEmitter();
|
|
@@ -42250,6 +42396,7 @@
|
|
|
42250
42396
|
if (!this._deviceDetectorService.isDesktop()) {
|
|
42251
42397
|
this.hideTransitionOptions = this.showTransitionOptions = '';
|
|
42252
42398
|
}
|
|
42399
|
+
this.onInit.emit(this);
|
|
42253
42400
|
};
|
|
42254
42401
|
RadioButtonListComponent.prototype.setDefaultSetting = function () {
|
|
42255
42402
|
var _this = this;
|
|
@@ -42501,6 +42648,7 @@
|
|
|
42501
42648
|
dataSource: [{ type: i0.Input }],
|
|
42502
42649
|
value: [{ type: i0.Input }],
|
|
42503
42650
|
disabled: [{ type: i0.Input }],
|
|
42651
|
+
onInit: [{ type: i0.Output }],
|
|
42504
42652
|
valueChange: [{ type: i0.Output }],
|
|
42505
42653
|
onChanged: [{ type: i0.Output }],
|
|
42506
42654
|
onDataSourceLoaded: [{ type: i0.Output }],
|
|
@@ -42525,6 +42673,7 @@
|
|
|
42525
42673
|
_this.serviceCode = '';
|
|
42526
42674
|
_this.entity = '';
|
|
42527
42675
|
_this.chooseLabel = 'Chọn';
|
|
42676
|
+
_this.onInit = new i0.EventEmitter();
|
|
42528
42677
|
_this.onSelect = new i0.EventEmitter();
|
|
42529
42678
|
_this.onRemove = new i0.EventEmitter();
|
|
42530
42679
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -42568,6 +42717,7 @@
|
|
|
42568
42717
|
ServiceFileUploadComponent.prototype.ngOnInit = function () {
|
|
42569
42718
|
this.setUp();
|
|
42570
42719
|
this.subscribe();
|
|
42720
|
+
this.onInit.emit(this);
|
|
42571
42721
|
};
|
|
42572
42722
|
ServiceFileUploadComponent.prototype.setUp = function () {
|
|
42573
42723
|
this.accept = this.control.accept;
|
|
@@ -42944,6 +43094,7 @@
|
|
|
42944
43094
|
entity: [{ type: i0.Input }],
|
|
42945
43095
|
entityKey: [{ type: i0.Input }],
|
|
42946
43096
|
chooseLabel: [{ type: i0.Input }],
|
|
43097
|
+
onInit: [{ type: i0.Output }],
|
|
42947
43098
|
onSelect: [{ type: i0.Output }],
|
|
42948
43099
|
onRemove: [{ type: i0.Output }],
|
|
42949
43100
|
onChanged: [{ type: i0.Output }]
|
|
@@ -43770,6 +43921,9 @@
|
|
|
43770
43921
|
}
|
|
43771
43922
|
}
|
|
43772
43923
|
});
|
|
43924
|
+
if (_this.appSwitcherItems.length === 1) {
|
|
43925
|
+
_this.switchApp(_this.appSwitcherItems[0]);
|
|
43926
|
+
}
|
|
43773
43927
|
}
|
|
43774
43928
|
});
|
|
43775
43929
|
};
|
|
@@ -43977,6 +44131,9 @@
|
|
|
43977
44131
|
}
|
|
43978
44132
|
}
|
|
43979
44133
|
});
|
|
44134
|
+
if (_this.appSwitcherItems.length === 1) {
|
|
44135
|
+
_this.switchApp(_this.appSwitcherItems[0]);
|
|
44136
|
+
}
|
|
43980
44137
|
}
|
|
43981
44138
|
});
|
|
43982
44139
|
};
|
|
@@ -44190,6 +44347,9 @@
|
|
|
44190
44347
|
}
|
|
44191
44348
|
}
|
|
44192
44349
|
});
|
|
44350
|
+
if (_this.appSwitcherItems.length === 1) {
|
|
44351
|
+
_this.switchApp(_this.appSwitcherItems[0]);
|
|
44352
|
+
}
|
|
44193
44353
|
}
|
|
44194
44354
|
});
|
|
44195
44355
|
};
|
|
@@ -44366,32 +44526,32 @@
|
|
|
44366
44526
|
{ id: ɵ4, ten: 'Đơn vị' },
|
|
44367
44527
|
{ id: ɵ5, ten: 'Nhóm người dùng' },
|
|
44368
44528
|
];
|
|
44369
|
-
var ɵ6 = exports.EnumUserRule.CAP_TREN, ɵ7 = exports.EnumUserRule.
|
|
44529
|
+
var ɵ6 = exports.EnumUserRule.CAP_TREN, ɵ7 = exports.EnumUserRule.NGUOI_CUOI_CUNG, ɵ8 = exports.EnumUserRule.NGUOI_THAM_GIA_QUY_TRINH, ɵ9 = exports.EnumUserRule.NGUOI_NHAN, ɵ10 = exports.EnumUserRule.NGUOI_THEO_DOI, ɵ11 = exports.EnumUserRule.NGUOI_THAO_TAC;
|
|
44370
44530
|
var DataSourceUserRule = [
|
|
44371
44531
|
// { id: EnumUserRule.NGUOI_TAO, ten: 'Người tạo' },
|
|
44372
44532
|
{ id: ɵ6, ten: 'Cấp trên' },
|
|
44373
44533
|
// { id: EnumUserRule.CAP_TREN, ten: 'Cấp dưới' },
|
|
44374
44534
|
// { id: EnumUserRule.CAP_TREN_DA_GUI, ten: 'Cấp trên đã trình' },
|
|
44375
|
-
|
|
44376
|
-
{ id: ɵ
|
|
44535
|
+
{ id: ɵ7, ten: 'Người cuối cùng' },
|
|
44536
|
+
{ id: ɵ8, ten: 'Người tham gia quy trình' },
|
|
44377
44537
|
// { id: EnumUserRule.NGUOI_DA_NHAN, ten: 'Người đã nhận', tooltip: 'Người đã từng nhận' },
|
|
44378
|
-
{ id: ɵ
|
|
44379
|
-
{ id: ɵ
|
|
44380
|
-
{ id: ɵ
|
|
44538
|
+
{ id: ɵ9, ten: 'Người nhận' },
|
|
44539
|
+
{ id: ɵ10, ten: 'Người theo dõi' },
|
|
44540
|
+
{ id: ɵ11, ten: 'Người thực hiện thao tác' }
|
|
44381
44541
|
];
|
|
44382
|
-
var ɵ
|
|
44542
|
+
var ɵ12 = exports.EnumUserRule.CAP_TREN, ɵ13 = exports.EnumUserRule.NGUOI_THAM_GIA_QUY_TRINH;
|
|
44383
44543
|
var DataSourceUserSender = [
|
|
44384
44544
|
// { id: EnumUserRule.NGUOI_TAO, ten: 'Người tạo' },
|
|
44385
|
-
{ id: ɵ
|
|
44545
|
+
{ id: ɵ12, ten: 'Cấp trên' },
|
|
44386
44546
|
// { id: EnumUserRule.CAP_TREN_DA_GUI, ten: 'Cấp trên đã trình' },
|
|
44387
44547
|
// { id: EnumUserRule.NGUOI_CUOI_CUNG, ten: 'Người cuối cùng' },
|
|
44388
|
-
{ id: ɵ
|
|
44548
|
+
{ id: ɵ13, ten: 'Người tham gia quy trình' }
|
|
44389
44549
|
];
|
|
44390
|
-
var ɵ
|
|
44550
|
+
var ɵ14 = exports.EnumWorkflowCheckboxOption.TAO_CONG_VIEC, ɵ15 = exports.EnumWorkflowCheckboxOption.AUTO_START_TASK;
|
|
44391
44551
|
var DataSourceWorkflowCheckboxOption = [
|
|
44392
|
-
{ id: ɵ
|
|
44552
|
+
{ id: ɵ14, ten: 'Tạo công việc' },
|
|
44393
44553
|
// { id: EnumWorkflowCheckboxOption.AUTO_NEXT_STEP, ten: 'Tự động chuyển bước đầu tiên' },
|
|
44394
|
-
{ id: ɵ
|
|
44554
|
+
{ id: ɵ15, ten: 'Bắt đầu nhanh công việc' }
|
|
44395
44555
|
];
|
|
44396
44556
|
|
|
44397
44557
|
function createJsPlumnInstance(containerId, options) {
|
|
@@ -47721,6 +47881,7 @@
|
|
|
47721
47881
|
var _this = _super.call(this, injector) || this;
|
|
47722
47882
|
_this.disabled = false;
|
|
47723
47883
|
_this.appendTo = 'body';
|
|
47884
|
+
_this.onInit = new i0.EventEmitter();
|
|
47724
47885
|
_this.change = new i0.EventEmitter();
|
|
47725
47886
|
return _this;
|
|
47726
47887
|
}
|
|
@@ -47743,7 +47904,7 @@
|
|
|
47743
47904
|
this.disabled = isDisabled;
|
|
47744
47905
|
};
|
|
47745
47906
|
TnColorPickerComponent.prototype.ngOnInit = function () {
|
|
47746
|
-
|
|
47907
|
+
this.onInit.emit(this);
|
|
47747
47908
|
};
|
|
47748
47909
|
TnColorPickerComponent.prototype.changePicker = function (evt) {
|
|
47749
47910
|
this.model.inputValue = this.model.value;
|
|
@@ -47778,6 +47939,7 @@
|
|
|
47778
47939
|
TnColorPickerComponent.propDecorators = {
|
|
47779
47940
|
disabled: [{ type: i0.Input }],
|
|
47780
47941
|
appendTo: [{ type: i0.Input }],
|
|
47942
|
+
onInit: [{ type: i0.Output }],
|
|
47781
47943
|
change: [{ type: i0.Output }]
|
|
47782
47944
|
};
|
|
47783
47945
|
|
|
@@ -48214,7 +48376,7 @@
|
|
|
48214
48376
|
TnDialogComponent.decorators = [
|
|
48215
48377
|
{ type: i0.Component, args: [{
|
|
48216
48378
|
selector: 'tn-dialog',
|
|
48217
|
-
template: "<p-dialog #dialog [closeOnEscape]=\"closeOnEscape\" [appendTo]=\"'body'\" [focusOnShow]=\"false\" [focusTrap]=\"false\"\r\n [header]=\"header | translate\" [(visible)]=\"visible\" [modal]=\"modal\" [responsive]=\"true\" [maximizable]=\"maximizable\"\r\n [autoZIndex]=\"true\" [styleClass]=\"styleClass\" [maskStyleClass]=\"maskClass\"\r\n [style]=\"{'width': popupSize.width + 'px', 'min-width': popupSize.width + 'px', 'height': popupSize.height + 'px', 'min-height': popupSize.height + 'px'}\"\r\n (onShow)=\"handleShowDialog($event)\" (onHide)=\"handleHideDialog($event)\">\r\n <tn-custom-scrollbar #scrollbar [useDefaultScrollBar]=\"useDefaultScrollBar\" [class]=\"scrollBarStyleClass\"\r\n [config]=\"scrollConfig\" [style]=\"scrollStyle\" class=\"tn-dialog-scrollbar\">\r\n <ng-content></ng-content>\r\n </tn-custom-scrollbar>\r\n <p-footer *ngIf=\"showFooter\">\r\n <p-footer *ngIf=\"formBase && formBase.buttonTemplate\">\r\n <ng-container *ngTemplateOutlet=\"formBase.buttonTemplate\">\r\n </ng-container>\r\n </p-footer>\r\n <p-footer *ngIf=\"footer\">\r\n
|
|
48379
|
+
template: "<p-dialog #dialog [closeOnEscape]=\"closeOnEscape\" [appendTo]=\"'body'\" [focusOnShow]=\"false\" [focusTrap]=\"false\"\r\n [header]=\"header | translate\" [(visible)]=\"visible\" [modal]=\"modal\" [responsive]=\"true\" [maximizable]=\"maximizable\"\r\n [autoZIndex]=\"true\" [styleClass]=\"styleClass\" [maskStyleClass]=\"maskClass\"\r\n [style]=\"{'width': popupSize.width + 'px', 'min-width': popupSize.width + 'px', 'height': popupSize.height + 'px', 'min-height': popupSize.height + 'px'}\"\r\n (onShow)=\"handleShowDialog($event)\" (onHide)=\"handleHideDialog($event)\">\r\n <tn-custom-scrollbar #scrollbar [useDefaultScrollBar]=\"useDefaultScrollBar\" [class]=\"scrollBarStyleClass\"\r\n [config]=\"scrollConfig\" [style]=\"scrollStyle\" class=\"tn-dialog-scrollbar\">\r\n <ng-content></ng-content>\r\n </tn-custom-scrollbar>\r\n <p-footer *ngIf=\"showFooter\">\r\n <p-footer *ngIf=\"formBase && formBase.buttonTemplate\">\r\n <ng-container *ngTemplateOutlet=\"formBase.buttonTemplate\">\r\n </ng-container>\r\n </p-footer>\r\n <ng-container *ngIf=\"!formBase || !formBase.buttonTemplate\">\r\n <p-footer *ngIf=\"footer\">\r\n <ng-container *ngTemplateOutlet=\"footer\"></ng-container>\r\n </p-footer>\r\n <p-footer *ngIf=\"!footer\">\r\n <button pButton preventTab type=\"button\" icon=\"pi pi-replay\" class=\"p-button-text p-button-secondary\"\r\n [label]=\"'FORM.CANCEL' | translate\" (click)=\"handleHideDialog($event)\"></button>\r\n </p-footer>\r\n </ng-container>\r\n </p-footer>\r\n</p-dialog>",
|
|
48218
48380
|
styles: [""]
|
|
48219
48381
|
},] }
|
|
48220
48382
|
];
|
|
@@ -48254,15 +48416,17 @@
|
|
|
48254
48416
|
function TnTabViewComponent(_commonService) {
|
|
48255
48417
|
this._commonService = _commonService;
|
|
48256
48418
|
this.data = [];
|
|
48419
|
+
this._hiddenTab = [];
|
|
48420
|
+
this.hiddenInfo = {};
|
|
48257
48421
|
this.allowViewAll = false;
|
|
48258
48422
|
this.isDynamicHeight = false;
|
|
48259
|
-
this.useScrollbar = false;
|
|
48260
48423
|
this.onTabChange = new i0.EventEmitter();
|
|
48261
48424
|
this.activeIndexChange = new i0.EventEmitter();
|
|
48262
48425
|
this.template = {};
|
|
48263
48426
|
this.onlyIcon = false;
|
|
48264
48427
|
this.styleClass = 'tn-tabview-beauty';
|
|
48265
48428
|
this.height = '100%';
|
|
48429
|
+
this.ready = false;
|
|
48266
48430
|
}
|
|
48267
48431
|
Object.defineProperty(TnTabViewComponent.prototype, "vertical", {
|
|
48268
48432
|
set: function (value) {
|
|
@@ -48273,6 +48437,21 @@
|
|
|
48273
48437
|
configurable: true
|
|
48274
48438
|
});
|
|
48275
48439
|
;
|
|
48440
|
+
Object.defineProperty(TnTabViewComponent.prototype, "hiddenTab", {
|
|
48441
|
+
set: function (value) {
|
|
48442
|
+
if (value) {
|
|
48443
|
+
this._hiddenTab = value;
|
|
48444
|
+
}
|
|
48445
|
+
else {
|
|
48446
|
+
this._hiddenTab = [];
|
|
48447
|
+
}
|
|
48448
|
+
if (this.ready) {
|
|
48449
|
+
this.setHiddenInfo();
|
|
48450
|
+
}
|
|
48451
|
+
},
|
|
48452
|
+
enumerable: false,
|
|
48453
|
+
configurable: true
|
|
48454
|
+
});
|
|
48276
48455
|
Object.defineProperty(TnTabViewComponent.prototype, "activeIndex", {
|
|
48277
48456
|
set: function (value) {
|
|
48278
48457
|
this.currentTabIndex = value;
|
|
@@ -48292,6 +48471,8 @@
|
|
|
48292
48471
|
}
|
|
48293
48472
|
this.currentTabIndex = currentTabIndex;
|
|
48294
48473
|
}
|
|
48474
|
+
this.ready = true;
|
|
48475
|
+
this.setHiddenInfo();
|
|
48295
48476
|
};
|
|
48296
48477
|
TnTabViewComponent.prototype.ngAfterContentInit = function () {
|
|
48297
48478
|
var _this = this;
|
|
@@ -48304,6 +48485,13 @@
|
|
|
48304
48485
|
});
|
|
48305
48486
|
this.setStyleClass();
|
|
48306
48487
|
};
|
|
48488
|
+
TnTabViewComponent.prototype.setHiddenInfo = function () {
|
|
48489
|
+
var _this = this;
|
|
48490
|
+
this.hiddenInfo = {};
|
|
48491
|
+
this._hiddenTab.forEach(function (tabCode) {
|
|
48492
|
+
_this.hiddenInfo[tabCode] = true;
|
|
48493
|
+
});
|
|
48494
|
+
};
|
|
48307
48495
|
TnTabViewComponent.prototype.setStyleClass = function () {
|
|
48308
48496
|
var result = 'tn-tabview-beauty';
|
|
48309
48497
|
if (this._vertical) {
|
|
@@ -48317,14 +48505,20 @@
|
|
|
48317
48505
|
TnTabViewComponent.prototype.handleTabChange = function (evt) {
|
|
48318
48506
|
this.currentTabIndex = evt.index;
|
|
48319
48507
|
this.activeIndexChange.emit(this.currentTabIndex);
|
|
48320
|
-
|
|
48508
|
+
};
|
|
48509
|
+
TnTabViewComponent.prototype.handleTabLoaded = function (item) {
|
|
48510
|
+
this.currentTabCode = item.code;
|
|
48511
|
+
this.onTabChange.emit({
|
|
48512
|
+
index: this.currentTabIndex,
|
|
48513
|
+
code: this.currentTabCode
|
|
48514
|
+
});
|
|
48321
48515
|
};
|
|
48322
48516
|
return TnTabViewComponent;
|
|
48323
48517
|
}());
|
|
48324
48518
|
TnTabViewComponent.decorators = [
|
|
48325
48519
|
{ type: i0.Component, args: [{
|
|
48326
48520
|
selector: 'tn-tabview',
|
|
48327
|
-
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 <tn-custom-scrollbar *ngIf=\"useScrollbar\">\r\n <ng-container *ngTemplateOutlet=\"template[item.code]; context: {$implicit: item}\">\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <ng-container *ngIf=\"!useScrollbar\">\r\n <ng-container *ngTemplateOutlet=\"template[item.code]; context: {$implicit: item}\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </p-tabPanel>\r\n </ng-container>\r\n </p-tabView>\r\n</div>",
|
|
48521
|
+
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 && !hiddenInfo[item.code]\" [leftIcon]=\"item.icon\" [header]=\"item.label\"\r\n [headerStyleClass]=\"item.headerStyleClass\">\r\n <ng-container *ngIf=\"allowViewAll || item.alwayRender || currentTabIndex == i\">\r\n <tn-custom-scrollbar *ngIf=\"item.useScrollbar\">\r\n <ng-container *ngTemplateOutlet=\"template[item.code]; context: {$implicit: item}\">\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <ng-container *ngIf=\"!item.useScrollbar\">\r\n <ng-container *ngTemplateOutlet=\"template[item.code]; context: {$implicit: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <after-view-checked (loaded)=\"handleTabLoaded(item)\"></after-view-checked>\r\n </ng-container>\r\n </p-tabPanel>\r\n </ng-container>\r\n </p-tabView>\r\n</div>",
|
|
48328
48522
|
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}}"]
|
|
48329
48523
|
},] }
|
|
48330
48524
|
];
|
|
@@ -48335,10 +48529,10 @@
|
|
|
48335
48529
|
children: [{ type: i0.ContentChildren, args: [i0.TemplateRef,] }],
|
|
48336
48530
|
vertical: [{ type: i0.Input }],
|
|
48337
48531
|
data: [{ type: i0.Input }],
|
|
48532
|
+
hiddenTab: [{ type: i0.Input }],
|
|
48338
48533
|
allowViewAll: [{ type: i0.Input }],
|
|
48339
48534
|
activeIndex: [{ type: i0.Input }],
|
|
48340
48535
|
isDynamicHeight: [{ type: i0.Input }],
|
|
48341
|
-
useScrollbar: [{ type: i0.Input }],
|
|
48342
48536
|
onTabChange: [{ type: i0.Output }],
|
|
48343
48537
|
activeIndexChange: [{ type: i0.Output }]
|
|
48344
48538
|
};
|
|
@@ -48382,6 +48576,7 @@
|
|
|
48382
48576
|
_this.required = false;
|
|
48383
48577
|
_this.height = 200;
|
|
48384
48578
|
_this.field = '';
|
|
48579
|
+
_this.onInit = new i0.EventEmitter();
|
|
48385
48580
|
_this.keydown = new i0.EventEmitter();
|
|
48386
48581
|
_this.onBlur = new i0.EventEmitter();
|
|
48387
48582
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -48410,6 +48605,7 @@
|
|
|
48410
48605
|
}
|
|
48411
48606
|
TnTinymceComponent.prototype.ngOnInit = function () {
|
|
48412
48607
|
this.subscribeContentInsert();
|
|
48608
|
+
this.onInit.emit(this);
|
|
48413
48609
|
};
|
|
48414
48610
|
TnTinymceComponent.prototype.ngAfterViewInit = function () {
|
|
48415
48611
|
var mode = this.mode;
|
|
@@ -48767,6 +48963,7 @@
|
|
|
48767
48963
|
height: [{ type: i0.Input }],
|
|
48768
48964
|
field: [{ type: i0.Input }],
|
|
48769
48965
|
languageCode: [{ type: i0.Input }],
|
|
48966
|
+
onInit: [{ type: i0.Output }],
|
|
48770
48967
|
keydown: [{ type: i0.Output }],
|
|
48771
48968
|
onBlur: [{ type: i0.Output }],
|
|
48772
48969
|
onChanged: [{ type: i0.Output }]
|
|
@@ -49132,6 +49329,7 @@
|
|
|
49132
49329
|
});
|
|
49133
49330
|
_this.multiple = false;
|
|
49134
49331
|
_this.disabled = false;
|
|
49332
|
+
_this.onInit = new i0.EventEmitter();
|
|
49135
49333
|
_this.onSelect = new i0.EventEmitter();
|
|
49136
49334
|
_this.onUnSelect = new i0.EventEmitter();
|
|
49137
49335
|
_this.onChanged = new i0.EventEmitter();
|
|
@@ -49243,6 +49441,7 @@
|
|
|
49243
49441
|
this.createSchemaSearch();
|
|
49244
49442
|
this.updateFuncCheckReadOnlyItem();
|
|
49245
49443
|
this.onReady.emit();
|
|
49444
|
+
this.onInit.emit(this);
|
|
49246
49445
|
};
|
|
49247
49446
|
UserPickerComponent.prototype.updateFuncCheckReadOnlyItem = function () {
|
|
49248
49447
|
if (this.readOnlyValues && this.readOnlyValues.length) {
|
|
@@ -49763,6 +49962,7 @@
|
|
|
49763
49962
|
multiple: [{ type: i0.Input }],
|
|
49764
49963
|
disabled: [{ type: i0.Input }],
|
|
49765
49964
|
readOnlyValues: [{ type: i0.Input }],
|
|
49965
|
+
onInit: [{ type: i0.Output }],
|
|
49766
49966
|
onSelect: [{ type: i0.Output, args: ['onSelect',] }],
|
|
49767
49967
|
onUnSelect: [{ type: i0.Output, args: ['onUnSelect',] }],
|
|
49768
49968
|
onChanged: [{ type: i0.Output, args: ['onChanged',] }],
|
|
@@ -50268,6 +50468,7 @@
|
|
|
50268
50468
|
var _this = _super.call(this, _injector) || this;
|
|
50269
50469
|
_this._vanBanDenService = _vanBanDenService;
|
|
50270
50470
|
_this._vanBanDiService = _vanBanDiService;
|
|
50471
|
+
_this.onInit = new i0.EventEmitter();
|
|
50271
50472
|
_this.onChanged = new i0.EventEmitter();
|
|
50272
50473
|
_this.onReady = new i0.EventEmitter();
|
|
50273
50474
|
_this.environment = {};
|
|
@@ -50314,6 +50515,7 @@
|
|
|
50314
50515
|
this.setting.fieldSearchText = ['code', 'name'];
|
|
50315
50516
|
this.setting.objectName = ' văn bản';
|
|
50316
50517
|
_super.prototype.ngOnInit.call(this);
|
|
50518
|
+
this.onInit.emit(this);
|
|
50317
50519
|
};
|
|
50318
50520
|
VanBanPickerComponent.prototype.getVanBanDen = function (originGridInfo) {
|
|
50319
50521
|
var _this = this;
|
|
@@ -50551,6 +50753,7 @@
|
|
|
50551
50753
|
loaiVanBan: [{ type: i0.Input }],
|
|
50552
50754
|
readOnly: [{ type: i0.Input }],
|
|
50553
50755
|
control: [{ type: i0.Input }],
|
|
50756
|
+
onInit: [{ type: i0.Output }],
|
|
50554
50757
|
onChanged: [{ type: i0.Output }],
|
|
50555
50758
|
onReady: [{ type: i0.Output }]
|
|
50556
50759
|
};
|
|
@@ -57063,6 +57266,7 @@
|
|
|
57063
57266
|
__extends(ReferenceTextBoxComponent, _super);
|
|
57064
57267
|
function ReferenceTextBoxComponent(injector) {
|
|
57065
57268
|
var _this = _super.call(this, injector) || this;
|
|
57269
|
+
_this.onInit = new i0.EventEmitter();
|
|
57066
57270
|
_this.data = '';
|
|
57067
57271
|
_this.ready = false;
|
|
57068
57272
|
return _this;
|
|
@@ -57082,6 +57286,7 @@
|
|
|
57082
57286
|
this.control._component = this;
|
|
57083
57287
|
this.ready = true;
|
|
57084
57288
|
this.checkAndGetData();
|
|
57289
|
+
this.onInit.emit(this);
|
|
57085
57290
|
};
|
|
57086
57291
|
ReferenceTextBoxComponent.prototype.checkAndGetData = function () {
|
|
57087
57292
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -57135,7 +57340,8 @@
|
|
|
57135
57340
|
]; };
|
|
57136
57341
|
ReferenceTextBoxComponent.propDecorators = {
|
|
57137
57342
|
control: [{ type: i0.Input }],
|
|
57138
|
-
value: [{ type: i0.Input }]
|
|
57343
|
+
value: [{ type: i0.Input }],
|
|
57344
|
+
onInit: [{ type: i0.Output }]
|
|
57139
57345
|
};
|
|
57140
57346
|
|
|
57141
57347
|
var LoadingPageV1Component = /** @class */ (function () {
|
|
@@ -59816,6 +60022,7 @@
|
|
|
59816
60022
|
exports.ɵ12 = ɵ12;
|
|
59817
60023
|
exports.ɵ13 = ɵ13;
|
|
59818
60024
|
exports.ɵ14 = ɵ14;
|
|
60025
|
+
exports.ɵ15 = ɵ15;
|
|
59819
60026
|
exports.ɵ2 = ɵ2;
|
|
59820
60027
|
exports.ɵ3 = ɵ3;
|
|
59821
60028
|
exports.ɵ4 = ɵ4;
|