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
package/fesm2015/tnx-shared.js
CHANGED
|
@@ -1286,6 +1286,7 @@ class CheckBoxListControlSchema extends DataSourceControlSchema {
|
|
|
1286
1286
|
class TableSchema extends FormControlBase {
|
|
1287
1287
|
constructor(init) {
|
|
1288
1288
|
super();
|
|
1289
|
+
this.autoGenerateId = false;
|
|
1289
1290
|
this.showNumber = true;
|
|
1290
1291
|
this.showFunction = true;
|
|
1291
1292
|
this.showFooter = true;
|
|
@@ -1502,6 +1503,8 @@ class EventData {
|
|
|
1502
1503
|
class TabViewData {
|
|
1503
1504
|
constructor(init) {
|
|
1504
1505
|
this.hidden = false;
|
|
1506
|
+
this.alwayRender = false;
|
|
1507
|
+
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
|
|
1505
1508
|
for (const key in init) {
|
|
1506
1509
|
this[key] = init[key];
|
|
1507
1510
|
}
|
|
@@ -2369,8 +2372,8 @@ class CommonService {
|
|
|
2369
2372
|
result[field] = data;
|
|
2370
2373
|
}
|
|
2371
2374
|
else {
|
|
2372
|
-
if (typeof result[field] === 'undefined'
|
|
2373
|
-
!isObject(result[field])) {
|
|
2375
|
+
if (typeof result[field] === 'undefined'
|
|
2376
|
+
|| !isObject(result[field])) {
|
|
2374
2377
|
result[field] = {};
|
|
2375
2378
|
}
|
|
2376
2379
|
result = result[field];
|
|
@@ -2436,8 +2439,8 @@ class CommonService {
|
|
|
2436
2439
|
});
|
|
2437
2440
|
}
|
|
2438
2441
|
if (colVal) {
|
|
2439
|
-
rowString
|
|
2440
|
-
colVal
|
|
2442
|
+
rowString
|
|
2443
|
+
+= colVal
|
|
2441
2444
|
.toString()
|
|
2442
2445
|
.replace(',', '.')
|
|
2443
2446
|
.replace('\n', '')
|
|
@@ -2499,8 +2502,8 @@ class CommonService {
|
|
|
2499
2502
|
});
|
|
2500
2503
|
}
|
|
2501
2504
|
if (colVal) {
|
|
2502
|
-
rowString
|
|
2503
|
-
colVal
|
|
2505
|
+
rowString
|
|
2506
|
+
+= colVal
|
|
2504
2507
|
.toString()
|
|
2505
2508
|
.replace(',', '.')
|
|
2506
2509
|
.replace('\n', '')
|
|
@@ -2564,8 +2567,8 @@ class CommonService {
|
|
|
2564
2567
|
});
|
|
2565
2568
|
}
|
|
2566
2569
|
if (colVal) {
|
|
2567
|
-
rowString
|
|
2568
|
-
colVal
|
|
2570
|
+
rowString
|
|
2571
|
+
+= colVal
|
|
2569
2572
|
.toString()
|
|
2570
2573
|
.replace(',', '.')
|
|
2571
2574
|
.replace('\n', '')
|
|
@@ -2611,11 +2614,11 @@ class CommonService {
|
|
|
2611
2614
|
}
|
|
2612
2615
|
getLabel(item, textField, textField2, prefixTextField2) {
|
|
2613
2616
|
if (textField2) {
|
|
2614
|
-
return (item[textField]
|
|
2615
|
-
' - '
|
|
2616
|
-
prefixTextField2
|
|
2617
|
-
' '
|
|
2618
|
-
item[textField2]);
|
|
2617
|
+
return (item[textField]
|
|
2618
|
+
+ ' - '
|
|
2619
|
+
+ prefixTextField2
|
|
2620
|
+
+ ' '
|
|
2621
|
+
+ item[textField2]);
|
|
2619
2622
|
}
|
|
2620
2623
|
else {
|
|
2621
2624
|
return item[textField];
|
|
@@ -2958,12 +2961,13 @@ class CommonService {
|
|
|
2958
2961
|
return `DEFAULT_${action}`.toUpperCase();
|
|
2959
2962
|
}
|
|
2960
2963
|
cloneObject(obj) {
|
|
2961
|
-
if (obj !== undefined)
|
|
2964
|
+
if (obj !== undefined) {
|
|
2962
2965
|
return JSON.parse(JSON.stringify(obj));
|
|
2966
|
+
}
|
|
2963
2967
|
return undefined;
|
|
2964
2968
|
}
|
|
2965
2969
|
setProperty(prop, val, model) {
|
|
2966
|
-
|
|
2970
|
+
const clone = this.cloneObject(model);
|
|
2967
2971
|
if (clone) {
|
|
2968
2972
|
clone[prop] = val;
|
|
2969
2973
|
}
|
|
@@ -3038,10 +3042,10 @@ class CommonService {
|
|
|
3038
3042
|
words.forEach((word) => {
|
|
3039
3043
|
if (word.trim() != '') {
|
|
3040
3044
|
if (word.length > 1) {
|
|
3041
|
-
result
|
|
3042
|
-
word.substring(0, 1).toUpperCase()
|
|
3043
|
-
word.substring(1)
|
|
3044
|
-
' ';
|
|
3045
|
+
result
|
|
3046
|
+
+= word.substring(0, 1).toUpperCase()
|
|
3047
|
+
+ word.substring(1)
|
|
3048
|
+
+ ' ';
|
|
3045
3049
|
}
|
|
3046
3050
|
else {
|
|
3047
3051
|
result += word.toUpperCase() + ' ';
|
|
@@ -3080,22 +3084,26 @@ class CommonService {
|
|
|
3080
3084
|
return n !== Infinity && String(n) === str;
|
|
3081
3085
|
}
|
|
3082
3086
|
hasAnyMask() {
|
|
3083
|
-
return (document.body.querySelector('div[class~="ui-dialog-mask"]')
|
|
3084
|
-
document.body.querySelector('div[class~="ui-sidebar-mask"]'));
|
|
3087
|
+
return (document.body.querySelector('div[class~="ui-dialog-mask"]')
|
|
3088
|
+
|| document.body.querySelector('div[class~="ui-sidebar-mask"]'));
|
|
3085
3089
|
}
|
|
3086
3090
|
safeStringify(data) {
|
|
3087
3091
|
const item = stringify.stableStringify(data, null, 2);
|
|
3088
3092
|
return item;
|
|
3089
3093
|
}
|
|
3090
3094
|
compareString(value1, value2) {
|
|
3091
|
-
if (value1 == null && value2 != null)
|
|
3095
|
+
if (value1 == null && value2 != null) {
|
|
3092
3096
|
return -1;
|
|
3093
|
-
|
|
3097
|
+
}
|
|
3098
|
+
else if (value1 != null && value2 == null) {
|
|
3094
3099
|
return 1;
|
|
3095
|
-
|
|
3100
|
+
}
|
|
3101
|
+
else if (value1 == null && value2 == null) {
|
|
3096
3102
|
return 0;
|
|
3097
|
-
|
|
3103
|
+
}
|
|
3104
|
+
else if (typeof value1 === 'string' && typeof value2 === 'string') {
|
|
3098
3105
|
return value1.localeCompare(value2);
|
|
3106
|
+
}
|
|
3099
3107
|
else {
|
|
3100
3108
|
return 0;
|
|
3101
3109
|
}
|
|
@@ -3168,7 +3176,7 @@ class CommonService {
|
|
|
3168
3176
|
return output;
|
|
3169
3177
|
}
|
|
3170
3178
|
distinctArray(array) {
|
|
3171
|
-
|
|
3179
|
+
const arrResult = array.filter((item, index) => array.indexOf(item) === index);
|
|
3172
3180
|
return arrResult;
|
|
3173
3181
|
}
|
|
3174
3182
|
distinctField(array, field) {
|
|
@@ -3235,7 +3243,7 @@ class CommonService {
|
|
|
3235
3243
|
* chỉ giao một đầu mút.
|
|
3236
3244
|
*/
|
|
3237
3245
|
hasIntersection(start, end, compareStart, compareEnd) {
|
|
3238
|
-
|
|
3246
|
+
const hasIntersection = (start < compareStart && compareStart < end)
|
|
3239
3247
|
|| (start < compareEnd && compareEnd < end)
|
|
3240
3248
|
|| (compareStart <= start && end <= compareEnd);
|
|
3241
3249
|
return hasIntersection;
|
|
@@ -3252,8 +3260,8 @@ class CommonService {
|
|
|
3252
3260
|
if (!strDate1 || !strDate2) {
|
|
3253
3261
|
return null;
|
|
3254
3262
|
}
|
|
3255
|
-
|
|
3256
|
-
|
|
3263
|
+
const d1 = new Date(strDate1);
|
|
3264
|
+
const d2 = new Date(strDate2);
|
|
3257
3265
|
let offset = (d1.getTime() - d2.getTime()) / 1000 / 60;
|
|
3258
3266
|
if (round) {
|
|
3259
3267
|
offset = Math.round(offset);
|
|
@@ -3276,11 +3284,13 @@ class CommonService {
|
|
|
3276
3284
|
: null;
|
|
3277
3285
|
}
|
|
3278
3286
|
isSameArray(array1, array2) {
|
|
3279
|
-
if (array1.length != array2.length)
|
|
3287
|
+
if (array1.length != array2.length) {
|
|
3280
3288
|
return false;
|
|
3289
|
+
}
|
|
3281
3290
|
for (var item of array1) {
|
|
3282
|
-
if (!array2.some(q => q == item))
|
|
3291
|
+
if (!array2.some(q => q == item)) {
|
|
3283
3292
|
return false;
|
|
3293
|
+
}
|
|
3284
3294
|
}
|
|
3285
3295
|
return true;
|
|
3286
3296
|
}
|
|
@@ -10034,7 +10044,7 @@ var EnumUserRule;
|
|
|
10034
10044
|
(function (EnumUserRule) {
|
|
10035
10045
|
// NGUOI_TAO = 1,
|
|
10036
10046
|
EnumUserRule[EnumUserRule["CAP_TREN"] = 2] = "CAP_TREN";
|
|
10037
|
-
|
|
10047
|
+
EnumUserRule[EnumUserRule["NGUOI_CUOI_CUNG"] = 3] = "NGUOI_CUOI_CUNG";
|
|
10038
10048
|
EnumUserRule[EnumUserRule["NGUOI_THAM_GIA_QUY_TRINH"] = 4] = "NGUOI_THAM_GIA_QUY_TRINH";
|
|
10039
10049
|
// Cấp trên mà xử lý bản ghi đối tượng trình lên
|
|
10040
10050
|
// CAP_TREN_DA_GUI = 5,
|
|
@@ -13751,8 +13761,10 @@ class CrudFormComponent extends ComponentBase {
|
|
|
13751
13761
|
continue;
|
|
13752
13762
|
}
|
|
13753
13763
|
}
|
|
13754
|
-
else
|
|
13755
|
-
|
|
13764
|
+
else {
|
|
13765
|
+
if (childNode['_hidden'] || childNode.control['_hidden'])
|
|
13766
|
+
continue;
|
|
13767
|
+
}
|
|
13756
13768
|
if (!(yield this.validate(childNode, true))) {
|
|
13757
13769
|
this._inValidForm = true;
|
|
13758
13770
|
}
|
|
@@ -13864,6 +13876,13 @@ class CrudFormComponent extends ComponentBase {
|
|
|
13864
13876
|
}
|
|
13865
13877
|
});
|
|
13866
13878
|
}
|
|
13879
|
+
handleLoadedControl(_component, control, parentPath) {
|
|
13880
|
+
const parentNode = this._rootNode.getNodeByPath(parentPath);
|
|
13881
|
+
const currentNode = parentNode.getChildNode(control.field);
|
|
13882
|
+
if (_component && currentNode) {
|
|
13883
|
+
currentNode._component = _component;
|
|
13884
|
+
}
|
|
13885
|
+
}
|
|
13867
13886
|
handleControlReadyEvent(control, parentPath) {
|
|
13868
13887
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13869
13888
|
const parentNode = this._rootNode.getNodeByPath(parentPath);
|
|
@@ -14285,6 +14304,10 @@ class CrudFormComponent extends ComponentBase {
|
|
|
14285
14304
|
const index = tableNode.childNodes.length;
|
|
14286
14305
|
const parentPath = tablePath + '[' + index + ']';
|
|
14287
14306
|
const data = {};
|
|
14307
|
+
if (control.autoGenerateId) {
|
|
14308
|
+
data.id = this._commonService.guid();
|
|
14309
|
+
}
|
|
14310
|
+
// Thêm id để ngăn render liên tục
|
|
14288
14311
|
for (const subControl of control.rowTemplate) {
|
|
14289
14312
|
this.initControlDefaultValue(data, subControl, parentPath);
|
|
14290
14313
|
}
|
|
@@ -14545,7 +14568,7 @@ class CrudFormComponent extends ComponentBase {
|
|
|
14545
14568
|
|| (parentModel._status[control.field].hidden === undefined
|
|
14546
14569
|
&& (control.hidden
|
|
14547
14570
|
|| (control.hiddenCheck && control.hiddenCheck(this._minimizedData, currentNode))));
|
|
14548
|
-
|
|
14571
|
+
currentNode['_hidden'] = !!result;
|
|
14549
14572
|
return result;
|
|
14550
14573
|
}
|
|
14551
14574
|
getContextTd(control, data, index, tablePath) {
|
|
@@ -14622,7 +14645,7 @@ class CrudFormComponent extends ComponentBase {
|
|
|
14622
14645
|
CrudFormComponent.decorators = [
|
|
14623
14646
|
{ type: Component, args: [{
|
|
14624
14647
|
selector: 'crud-form',
|
|
14625
|
-
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>",
|
|
14648
|
+
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>",
|
|
14626
14649
|
providers: [ComponentContextService],
|
|
14627
14650
|
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}"]
|
|
14628
14651
|
},] }
|
|
@@ -14715,7 +14738,12 @@ class ControlTreeNode {
|
|
|
14715
14738
|
}
|
|
14716
14739
|
else {
|
|
14717
14740
|
if (!this.schemaPath) {
|
|
14718
|
-
|
|
14741
|
+
Object.keys(schemas).forEach(key => {
|
|
14742
|
+
const item = schemas[key];
|
|
14743
|
+
if (item.uniqueField == item.field) {
|
|
14744
|
+
keysPlus.push(key);
|
|
14745
|
+
}
|
|
14746
|
+
});
|
|
14719
14747
|
}
|
|
14720
14748
|
}
|
|
14721
14749
|
this.keysPlus = keysPlus;
|
|
@@ -14736,6 +14764,22 @@ class ControlTreeNode {
|
|
|
14736
14764
|
this.childNodeDic[childNode.field] = childNode;
|
|
14737
14765
|
}
|
|
14738
14766
|
}
|
|
14767
|
+
// Sau khi đã init xong node cho row thì fire event cho các control trong row
|
|
14768
|
+
// Thường dùng với mục đích cần disabled, hidden các control của row khi có nhu cầu
|
|
14769
|
+
try {
|
|
14770
|
+
this.childNodes.forEach(_ => {
|
|
14771
|
+
if (_.control && _.control.onRowNodeFinishInit) {
|
|
14772
|
+
const eventData = new EventData({
|
|
14773
|
+
sourceNode: _,
|
|
14774
|
+
currentNode: _,
|
|
14775
|
+
eventType: 'rowFinishInit'
|
|
14776
|
+
});
|
|
14777
|
+
_.control.onRowNodeFinishInit(eventData);
|
|
14778
|
+
}
|
|
14779
|
+
});
|
|
14780
|
+
}
|
|
14781
|
+
catch (err) {
|
|
14782
|
+
}
|
|
14739
14783
|
}
|
|
14740
14784
|
else if (isArray(model)) {
|
|
14741
14785
|
let i = 0;
|
|
@@ -14795,6 +14839,12 @@ class ControlTreeNode {
|
|
|
14795
14839
|
else
|
|
14796
14840
|
this.data = val;
|
|
14797
14841
|
}
|
|
14842
|
+
get component() {
|
|
14843
|
+
return this._component;
|
|
14844
|
+
}
|
|
14845
|
+
set component(val) {
|
|
14846
|
+
this._component = val;
|
|
14847
|
+
}
|
|
14798
14848
|
setHidden(field, hidden = true) {
|
|
14799
14849
|
if (Array.isArray(field)) {
|
|
14800
14850
|
field.forEach(f => {
|
|
@@ -14806,13 +14856,29 @@ class ControlTreeNode {
|
|
|
14806
14856
|
}
|
|
14807
14857
|
}
|
|
14808
14858
|
setHiddenField(field, hidden) {
|
|
14859
|
+
this.setPrivateStatus(field, 'hidden', hidden);
|
|
14860
|
+
}
|
|
14861
|
+
setDisabled(field, disabled = true) {
|
|
14862
|
+
if (Array.isArray(field)) {
|
|
14863
|
+
field.forEach(f => {
|
|
14864
|
+
this.setDisabledField(f, disabled);
|
|
14865
|
+
});
|
|
14866
|
+
}
|
|
14867
|
+
else {
|
|
14868
|
+
this.setDisabledField(field, disabled);
|
|
14869
|
+
}
|
|
14870
|
+
}
|
|
14871
|
+
setDisabledField(field, disabled) {
|
|
14872
|
+
this.setPrivateStatus(field, 'disabled', disabled);
|
|
14873
|
+
}
|
|
14874
|
+
setPrivateStatus(field, prop, value) {
|
|
14809
14875
|
if (field.indexOf('.') > -1) {
|
|
14810
14876
|
const childNode = this.getNodeByPath(`${this.modelPath}.${field}`);
|
|
14811
14877
|
const lastField = field.split('.').pop();
|
|
14812
|
-
childNode.parentNode.data._status[lastField]
|
|
14878
|
+
childNode.parentNode.data._status[lastField][prop] = value;
|
|
14813
14879
|
}
|
|
14814
14880
|
else {
|
|
14815
|
-
this.data._status[field]
|
|
14881
|
+
this.data._status[field][prop] = value;
|
|
14816
14882
|
}
|
|
14817
14883
|
}
|
|
14818
14884
|
getNodeByPath(modelPath) {
|
|
@@ -17508,10 +17574,10 @@ class CrudListComponent extends ComponentBase {
|
|
|
17508
17574
|
}
|
|
17509
17575
|
}
|
|
17510
17576
|
extendColumns(cols, appendCol = true) {
|
|
17577
|
+
this.setting.advanceData.fieldNeedGetRef = [];
|
|
17511
17578
|
if (!cols) {
|
|
17512
17579
|
return;
|
|
17513
17580
|
}
|
|
17514
|
-
this.setting.advanceData.fieldNeedGetRef = [];
|
|
17515
17581
|
const temp = [];
|
|
17516
17582
|
const tmpCols = [...cols];
|
|
17517
17583
|
if (this.setting.columnSetting.details) {
|
|
@@ -21656,14 +21722,17 @@ class ListBase extends ComponentBase {
|
|
|
21656
21722
|
dataSource,
|
|
21657
21723
|
allowFilter: this.setting.allowFilterWorkflowColumn
|
|
21658
21724
|
});
|
|
21659
|
-
this.setting.advanceData.fieldNeedGetRef
|
|
21725
|
+
// Nếu chưa có this.setting.advanceData.fieldNeedGetRef thì bên crud-list sẽ add cột này sau
|
|
21726
|
+
if (this.setting.advanceData.fieldNeedGetRef) {
|
|
21727
|
+
this.setting.advanceData.fieldNeedGetRef.unshift(colParent);
|
|
21728
|
+
}
|
|
21660
21729
|
const children = Object.assign(Object.assign({}, colParent), { rawColumn: colParent, controlType: ControlType.dropdown, dataType: colParent.dataTypeRefField, field: 'str' + colParent.field, allowFilter: colParent.allowFilter, sort: false, visible: !this.setting.hiddenWorkflowColumn });
|
|
21661
21730
|
colParent.visible = false;
|
|
21662
21731
|
this.setting.cols.push(colParent, children);
|
|
21663
|
-
this.crudList
|
|
21664
|
-
|
|
21665
|
-
|
|
21666
|
-
|
|
21732
|
+
if (this.crudList) {
|
|
21733
|
+
this.crudList.formatColumns([colParent, children]);
|
|
21734
|
+
this.crudList.buildFilterColumn([colParent]);
|
|
21735
|
+
}
|
|
21667
21736
|
const userCurrent = this._userService.getCurrentUser();
|
|
21668
21737
|
if (userCurrent.userName == 'admin') {
|
|
21669
21738
|
const colForAdmin = new ColumnSchemaBase({
|
|
@@ -21676,8 +21745,10 @@ class ListBase extends ComponentBase {
|
|
|
21676
21745
|
sort: false
|
|
21677
21746
|
});
|
|
21678
21747
|
this.setting.cols.push(colForAdmin);
|
|
21679
|
-
this.crudList
|
|
21680
|
-
|
|
21748
|
+
if (this.crudList) {
|
|
21749
|
+
this.crudList.formatColumns([colForAdmin]);
|
|
21750
|
+
this.crudList.buildFilterColumn([colForAdmin]);
|
|
21751
|
+
}
|
|
21681
21752
|
}
|
|
21682
21753
|
}
|
|
21683
21754
|
getDataSourceTrangThaiWorkflow() {
|
|
@@ -22547,6 +22618,7 @@ class AddressComponent extends DataFormBase {
|
|
|
22547
22618
|
this._showSubLabel = true;
|
|
22548
22619
|
this.readyToReload = false;
|
|
22549
22620
|
this._readyStatus = {};
|
|
22621
|
+
this.onInit = new EventEmitter();
|
|
22550
22622
|
this.onSelect = new EventEmitter();
|
|
22551
22623
|
this.dataChange = new EventEmitter();
|
|
22552
22624
|
this.onReady = new EventEmitter();
|
|
@@ -22649,6 +22721,7 @@ class AddressComponent extends DataFormBase {
|
|
|
22649
22721
|
if (this.viewMode) {
|
|
22650
22722
|
this.getModelText();
|
|
22651
22723
|
}
|
|
22724
|
+
this.onInit.emit(this);
|
|
22652
22725
|
}
|
|
22653
22726
|
setDisabledControl() {
|
|
22654
22727
|
const disabled = this._disabled ? true : null;
|
|
@@ -22752,6 +22825,7 @@ AddressComponent.propDecorators = {
|
|
|
22752
22825
|
viewMode: [{ type: Input }],
|
|
22753
22826
|
data: [{ type: Input }],
|
|
22754
22827
|
showSubLabel: [{ type: Input }],
|
|
22828
|
+
onInit: [{ type: Output }],
|
|
22755
22829
|
onSelect: [{ type: Output }],
|
|
22756
22830
|
dataChange: [{ type: Output }],
|
|
22757
22831
|
onReady: [{ type: Output }]
|
|
@@ -22811,6 +22885,7 @@ class AutocompleteDatasourceComponent {
|
|
|
22811
22885
|
this._deviceDetectorService = _deviceDetectorService;
|
|
22812
22886
|
this.dataSource = [];
|
|
22813
22887
|
this.control = new AutoCompleteControlSchema();
|
|
22888
|
+
this.onInit = new EventEmitter();
|
|
22814
22889
|
this.onValueChanged = new EventEmitter();
|
|
22815
22890
|
this.lstDataSuggest = [];
|
|
22816
22891
|
this.hideTransitionOptions = '195ms ease-in';
|
|
@@ -22824,6 +22899,7 @@ class AutocompleteDatasourceComponent {
|
|
|
22824
22899
|
if (!this._deviceDetectorService.isDesktop()) {
|
|
22825
22900
|
this.hideTransitionOptions = this.showTransitionOptions = '';
|
|
22826
22901
|
}
|
|
22902
|
+
this.onInit.emit(this);
|
|
22827
22903
|
}
|
|
22828
22904
|
handleBlur(event) {
|
|
22829
22905
|
if (this.selectedValueBefore != this.selectedValue) {
|
|
@@ -22912,6 +22988,7 @@ AutocompleteDatasourceComponent.ctorParameters = () => [
|
|
|
22912
22988
|
AutocompleteDatasourceComponent.propDecorators = {
|
|
22913
22989
|
suggestions: [{ type: Input }],
|
|
22914
22990
|
control: [{ type: Input }],
|
|
22991
|
+
onInit: [{ type: Output }],
|
|
22915
22992
|
onValueChanged: [{ type: Output }]
|
|
22916
22993
|
};
|
|
22917
22994
|
|
|
@@ -22951,6 +23028,7 @@ class AutoCompletePickerComponent extends ComponentBase {
|
|
|
22951
23028
|
height: 900,
|
|
22952
23029
|
maximize: true
|
|
22953
23030
|
});
|
|
23031
|
+
this.onInit = new EventEmitter();
|
|
22954
23032
|
this.onSelect = new EventEmitter();
|
|
22955
23033
|
this.onUnSelect = new EventEmitter();
|
|
22956
23034
|
this.onChanged = new EventEmitter();
|
|
@@ -22984,6 +23062,7 @@ class AutoCompletePickerComponent extends ComponentBase {
|
|
|
22984
23062
|
this.buildFilterKeyword();
|
|
22985
23063
|
this.buildSettingEntityPicker();
|
|
22986
23064
|
this.updateFuncCheckReadOnlyItem();
|
|
23065
|
+
this.onInit.emit(this);
|
|
22987
23066
|
}
|
|
22988
23067
|
updateFuncCheckReadOnlyItem() {
|
|
22989
23068
|
if (this.readOnlyValues && this.readOnlyValues.length) {
|
|
@@ -23410,14 +23489,17 @@ class AutoCompletePickerComponent extends ComponentBase {
|
|
|
23410
23489
|
this.getDataSelectedValue(obj)
|
|
23411
23490
|
.then(res => {
|
|
23412
23491
|
this.updateSelectedValue();
|
|
23413
|
-
|
|
23414
|
-
this.isFiredReady = true;
|
|
23415
|
-
// 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
|
|
23416
|
-
// Nếu có trường hợp nào khác thì cần phải xử lý khác
|
|
23417
|
-
this.onReady.emit();
|
|
23418
|
-
}
|
|
23492
|
+
this.checkFireReady();
|
|
23419
23493
|
});
|
|
23420
23494
|
}
|
|
23495
|
+
checkFireReady() {
|
|
23496
|
+
if (!this.isFiredReady && this.hasValue) {
|
|
23497
|
+
this.isFiredReady = true;
|
|
23498
|
+
// 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
|
|
23499
|
+
// Nếu có trường hợp nào khác thì cần phải xử lý khác
|
|
23500
|
+
this.onReady.emit();
|
|
23501
|
+
}
|
|
23502
|
+
}
|
|
23421
23503
|
registerOnChange(fn) {
|
|
23422
23504
|
this.onChangeBase = fn;
|
|
23423
23505
|
}
|
|
@@ -23451,6 +23533,7 @@ AutoCompletePickerComponent.propDecorators = {
|
|
|
23451
23533
|
disabled: [{ type: Input }],
|
|
23452
23534
|
popupSize: [{ type: Input }],
|
|
23453
23535
|
readOnlyValues: [{ type: Input }],
|
|
23536
|
+
onInit: [{ type: Output }],
|
|
23454
23537
|
onSelect: [{ type: Output }],
|
|
23455
23538
|
onUnSelect: [{ type: Output }],
|
|
23456
23539
|
onChanged: [{ type: Output }],
|
|
@@ -25391,6 +25474,7 @@ class FileUploadComponent extends ComponentBase {
|
|
|
25391
25474
|
this.invalidFileLimitMessageSummary = 'Quá số lượng file cho phép, ';
|
|
25392
25475
|
this.invalidFileLimitMessageDetail = 'tối đa {0} file.';
|
|
25393
25476
|
this.sharedFolderType = SharedFolderType.Tempt;
|
|
25477
|
+
this.onInit = new EventEmitter();
|
|
25394
25478
|
this.onSelect = new EventEmitter();
|
|
25395
25479
|
this.onRemove = new EventEmitter();
|
|
25396
25480
|
this.onChanged = new EventEmitter();
|
|
@@ -25416,6 +25500,7 @@ class FileUploadComponent extends ComponentBase {
|
|
|
25416
25500
|
this.isDisabled = isDisabled;
|
|
25417
25501
|
}
|
|
25418
25502
|
ngOnInit() {
|
|
25503
|
+
this.onInit.emit(this);
|
|
25419
25504
|
}
|
|
25420
25505
|
getFile() {
|
|
25421
25506
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -25557,6 +25642,7 @@ FileUploadComponent.propDecorators = {
|
|
|
25557
25642
|
invalidFileLimitMessageSummary: [{ type: Input }],
|
|
25558
25643
|
invalidFileLimitMessageDetail: [{ type: Input }],
|
|
25559
25644
|
sharedFolderType: [{ type: Input }],
|
|
25645
|
+
onInit: [{ type: Output }],
|
|
25560
25646
|
onSelect: [{ type: Output }],
|
|
25561
25647
|
onRemove: [{ type: Output }],
|
|
25562
25648
|
onChanged: [{ type: Output }]
|
|
@@ -25802,6 +25888,7 @@ class CheckBoxListComponent {
|
|
|
25802
25888
|
this._dropDownService = _dropDownService;
|
|
25803
25889
|
this._deviceDetectorService = _deviceDetectorService;
|
|
25804
25890
|
this._styleClass = 'p-grid tn-check-box-list';
|
|
25891
|
+
this.onInit = new EventEmitter();
|
|
25805
25892
|
this.onSelect = new EventEmitter();
|
|
25806
25893
|
this.onReady = new EventEmitter();
|
|
25807
25894
|
this.dataSourceInternal = [];
|
|
@@ -25852,6 +25939,7 @@ class CheckBoxListComponent {
|
|
|
25852
25939
|
if (this.control.pColClass) {
|
|
25853
25940
|
this.classCheckBox += ` p-col-${this.control.pColClass}`;
|
|
25854
25941
|
}
|
|
25942
|
+
this.onInit.emit(this);
|
|
25855
25943
|
}
|
|
25856
25944
|
bindDataSource(serviceUri, baseService) {
|
|
25857
25945
|
var _a, _b;
|
|
@@ -25978,6 +26066,7 @@ CheckBoxListComponent.propDecorators = {
|
|
|
25978
26066
|
control: [{ type: Input }],
|
|
25979
26067
|
dataSource: [{ type: Input }],
|
|
25980
26068
|
disabled: [{ type: Input }],
|
|
26069
|
+
onInit: [{ type: Output }],
|
|
25981
26070
|
onSelect: [{ type: Output }],
|
|
25982
26071
|
onReady: [{ type: Output }]
|
|
25983
26072
|
};
|
|
@@ -26062,6 +26151,7 @@ class CoCauToChucPickerListComponent extends ComponentBase {
|
|
|
26062
26151
|
this._coCauToChucService = _coCauToChucService;
|
|
26063
26152
|
this._translateService = _translateService;
|
|
26064
26153
|
this.disabled = false;
|
|
26154
|
+
this.onInit = new EventEmitter();
|
|
26065
26155
|
this.onChanged = new EventEmitter();
|
|
26066
26156
|
this.onSelect = new EventEmitter();
|
|
26067
26157
|
this.onUnSelect = new EventEmitter();
|
|
@@ -26092,6 +26182,7 @@ class CoCauToChucPickerListComponent extends ComponentBase {
|
|
|
26092
26182
|
sort: false
|
|
26093
26183
|
})
|
|
26094
26184
|
], mdWidth: 12 }));
|
|
26185
|
+
this.onInit.emit(this);
|
|
26095
26186
|
}
|
|
26096
26187
|
handleFocus(evt) {
|
|
26097
26188
|
this.onFocus.emit(evt);
|
|
@@ -26147,6 +26238,7 @@ CoCauToChucPickerListComponent.propDecorators = {
|
|
|
26147
26238
|
control: [{ type: Input }],
|
|
26148
26239
|
disabled: [{ type: Input }],
|
|
26149
26240
|
readOnlyValues: [{ type: Input }],
|
|
26241
|
+
onInit: [{ type: Output }],
|
|
26150
26242
|
onChanged: [{ type: Output }],
|
|
26151
26243
|
onSelect: [{ type: Output }],
|
|
26152
26244
|
onUnSelect: [{ type: Output }],
|
|
@@ -26170,6 +26262,7 @@ class CoCauToChucPickerComponent {
|
|
|
26170
26262
|
this.showClear = false;
|
|
26171
26263
|
this.disabledParentItem = true;
|
|
26172
26264
|
this.rootParentId = null;
|
|
26265
|
+
this.onInit = new EventEmitter();
|
|
26173
26266
|
this.onChanged = new EventEmitter();
|
|
26174
26267
|
this.guidEmpty = '00000000-0000-0000-0000-000000000000';
|
|
26175
26268
|
this.flashCacheParent = [];
|
|
@@ -26207,6 +26300,7 @@ class CoCauToChucPickerComponent {
|
|
|
26207
26300
|
if (this.control)
|
|
26208
26301
|
this.control._component = this;
|
|
26209
26302
|
this.bindingUser();
|
|
26303
|
+
this.onInit.emit(this);
|
|
26210
26304
|
}
|
|
26211
26305
|
bindingUser() {
|
|
26212
26306
|
this._organizationService.getAll().then(staffResult => {
|
|
@@ -26353,6 +26447,7 @@ CoCauToChucPickerComponent.propDecorators = {
|
|
|
26353
26447
|
showClear: [{ type: Input }],
|
|
26354
26448
|
disabledParentItem: [{ type: Input }],
|
|
26355
26449
|
rootParentId: [{ type: Input }],
|
|
26450
|
+
onInit: [{ type: Output }],
|
|
26356
26451
|
onChanged: [{ type: Output, args: ['onChanged',] }]
|
|
26357
26452
|
};
|
|
26358
26453
|
|
|
@@ -27413,10 +27508,29 @@ class MenuService {
|
|
|
27413
27508
|
const menuUrl = `assets/menus/${appCode.toLocaleLowerCase()}.json`;
|
|
27414
27509
|
fetch(menuUrl).then((rs) => __awaiter(this, void 0, void 0, function* () {
|
|
27415
27510
|
const menu = JSON.parse(yield rs.text());
|
|
27511
|
+
this.setDefaultIcon(menu, 0);
|
|
27416
27512
|
yield this.setMenuItems(menu);
|
|
27417
27513
|
}));
|
|
27418
27514
|
});
|
|
27419
27515
|
}
|
|
27516
|
+
setDefaultIcon(menus, level) {
|
|
27517
|
+
if (!menus)
|
|
27518
|
+
return;
|
|
27519
|
+
menus.forEach(itemMenu => {
|
|
27520
|
+
if (!itemMenu.icon) {
|
|
27521
|
+
if (level === 0) {
|
|
27522
|
+
itemMenu.icon = 'pi pi-th-large';
|
|
27523
|
+
}
|
|
27524
|
+
else if (level === 1) {
|
|
27525
|
+
itemMenu.icon = 'pi pi-star-o';
|
|
27526
|
+
}
|
|
27527
|
+
else {
|
|
27528
|
+
itemMenu.icon = 'pi pi-circle-on';
|
|
27529
|
+
}
|
|
27530
|
+
}
|
|
27531
|
+
this.setDefaultIcon(itemMenu.items, level + 1);
|
|
27532
|
+
});
|
|
27533
|
+
}
|
|
27420
27534
|
}
|
|
27421
27535
|
MenuService.ɵprov = ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(ɵɵinject(ModuleConfigService), ɵɵinject(PermissionService), ɵɵinject(CommonService), ɵɵinject(ApplicationContextService)); }, token: MenuService, providedIn: "root" });
|
|
27422
27536
|
MenuService.decorators = [
|
|
@@ -30047,11 +30161,13 @@ class CongViecPickerComponent extends ComponentBase {
|
|
|
30047
30161
|
constructor(_injector, _notifierService) {
|
|
30048
30162
|
super(_injector);
|
|
30049
30163
|
this._notifierService = _notifierService;
|
|
30164
|
+
this.onInit = new EventEmitter();
|
|
30050
30165
|
this.onChanged = new EventEmitter();
|
|
30051
30166
|
this.idCongViecs = [];
|
|
30052
30167
|
this.formState = FormState;
|
|
30053
30168
|
}
|
|
30054
30169
|
ngOnInit() {
|
|
30170
|
+
this.onInit.emit(this);
|
|
30055
30171
|
}
|
|
30056
30172
|
handleIdsChange(ids) {
|
|
30057
30173
|
this.idCongViecs = ids;
|
|
@@ -30100,6 +30216,7 @@ CongViecPickerComponent.ctorParameters = () => [
|
|
|
30100
30216
|
];
|
|
30101
30217
|
CongViecPickerComponent.propDecorators = {
|
|
30102
30218
|
control: [{ type: Input }],
|
|
30219
|
+
onInit: [{ type: Output }],
|
|
30103
30220
|
onChanged: [{ type: Output }]
|
|
30104
30221
|
};
|
|
30105
30222
|
|
|
@@ -30667,14 +30784,16 @@ TableDetailFormComponent.propDecorators = {
|
|
|
30667
30784
|
class DatetimePickerRangeComponent {
|
|
30668
30785
|
constructor() {
|
|
30669
30786
|
this.control = new DateTimeRangeControlSchema();
|
|
30787
|
+
this.onInit = new EventEmitter();
|
|
30670
30788
|
this.onClose = new EventEmitter();
|
|
30671
30789
|
this.onChanged = new EventEmitter();
|
|
30672
30790
|
this._controlModelData = [undefined, undefined];
|
|
30673
30791
|
}
|
|
30674
30792
|
ngOnInit() {
|
|
30793
|
+
this.onInit.emit(this);
|
|
30675
30794
|
}
|
|
30676
30795
|
clear() {
|
|
30677
|
-
|
|
30796
|
+
const re = (this._controlModelData[0] != null) || (this._controlModelData[1] != null);
|
|
30678
30797
|
this._controlModelData = [undefined, undefined];
|
|
30679
30798
|
return re;
|
|
30680
30799
|
}
|
|
@@ -30723,6 +30842,7 @@ DatetimePickerRangeComponent.ctorParameters = () => [];
|
|
|
30723
30842
|
DatetimePickerRangeComponent.propDecorators = {
|
|
30724
30843
|
control: [{ type: Input }],
|
|
30725
30844
|
disabled: [{ type: Input }],
|
|
30845
|
+
onInit: [{ type: Output }],
|
|
30726
30846
|
onClose: [{ type: Output }],
|
|
30727
30847
|
onChanged: [{ type: Output }]
|
|
30728
30848
|
};
|
|
@@ -30735,6 +30855,7 @@ class DatetimePickerComponent {
|
|
|
30735
30855
|
this.hideTransitionOptions = '195ms ease-in';
|
|
30736
30856
|
this.showTransitionOptions = '225ms ease-out';
|
|
30737
30857
|
this.control = new DateTimeControlSchema();
|
|
30858
|
+
this.onInit = new EventEmitter();
|
|
30738
30859
|
this.onSelect = new EventEmitter();
|
|
30739
30860
|
this.onChanged = new EventEmitter();
|
|
30740
30861
|
this.onFocus = new EventEmitter();
|
|
@@ -30742,6 +30863,7 @@ class DatetimePickerComponent {
|
|
|
30742
30863
|
this.onClose = new EventEmitter();
|
|
30743
30864
|
}
|
|
30744
30865
|
ngOnInit() {
|
|
30866
|
+
this.onInit.emit(this);
|
|
30745
30867
|
}
|
|
30746
30868
|
writeValue(obj) {
|
|
30747
30869
|
if (obj) {
|
|
@@ -30913,6 +31035,7 @@ DatetimePickerComponent.propDecorators = {
|
|
|
30913
31035
|
calendar: [{ type: ViewChild, args: ['calendar', { static: true },] }],
|
|
30914
31036
|
control: [{ type: Input }],
|
|
30915
31037
|
disabled: [{ type: Input }],
|
|
31038
|
+
onInit: [{ type: Output }],
|
|
30916
31039
|
onSelect: [{ type: Output }],
|
|
30917
31040
|
onChanged: [{ type: Output }],
|
|
30918
31041
|
onFocus: [{ type: Output }],
|
|
@@ -30930,6 +31053,7 @@ class DropdownComponent extends ComponentBase {
|
|
|
30930
31053
|
this.appendTo = 'body';
|
|
30931
31054
|
this.defaultSelectedStyleClass = 'custom-select-item';
|
|
30932
31055
|
this._itemSelectedStyleClass = this.defaultSelectedStyleClass;
|
|
31056
|
+
this.onInit = new EventEmitter();
|
|
30933
31057
|
this.onChanged = new EventEmitter();
|
|
30934
31058
|
this.onCollapse = new EventEmitter();
|
|
30935
31059
|
this.onExpand = new EventEmitter();
|
|
@@ -31060,6 +31184,7 @@ class DropdownComponent extends ComponentBase {
|
|
|
31060
31184
|
if (this.control.onInit) {
|
|
31061
31185
|
this.control.onInit(this);
|
|
31062
31186
|
}
|
|
31187
|
+
this.onInit.emit(this);
|
|
31063
31188
|
}
|
|
31064
31189
|
setDefaultSetting() {
|
|
31065
31190
|
if (this.control.isTree) {
|
|
@@ -31760,6 +31885,7 @@ DropdownComponent.propDecorators = {
|
|
|
31760
31885
|
dataSource: [{ type: Input }],
|
|
31761
31886
|
value: [{ type: Input }],
|
|
31762
31887
|
itemSelectedStyleClass: [{ type: Input }],
|
|
31888
|
+
onInit: [{ type: Output }],
|
|
31763
31889
|
onChanged: [{ type: Output }],
|
|
31764
31890
|
onCollapse: [{ type: Output }],
|
|
31765
31891
|
onExpand: [{ type: Output }],
|
|
@@ -33077,6 +33203,7 @@ class EntityPickerComponent extends DataListBase {
|
|
|
33077
33203
|
this._translateService = _translateService;
|
|
33078
33204
|
this.disabled = false;
|
|
33079
33205
|
this.readOnly = false;
|
|
33206
|
+
this.onInit = new EventEmitter();
|
|
33080
33207
|
this.onSelect = new EventEmitter();
|
|
33081
33208
|
this.onUnSelect = new EventEmitter();
|
|
33082
33209
|
this.onChanged = new EventEmitter();
|
|
@@ -33132,6 +33259,7 @@ class EntityPickerComponent extends DataListBase {
|
|
|
33132
33259
|
});
|
|
33133
33260
|
this.advanceData.fields = this.getFields();
|
|
33134
33261
|
super.ngOnInit();
|
|
33262
|
+
this.onInit.emit(this);
|
|
33135
33263
|
}
|
|
33136
33264
|
selectEntity() {
|
|
33137
33265
|
this.showDetailForm = true;
|
|
@@ -33301,6 +33429,7 @@ EntityPickerComponent.propDecorators = {
|
|
|
33301
33429
|
disabled: [{ type: Input }],
|
|
33302
33430
|
readOnly: [{ type: Input }],
|
|
33303
33431
|
children: [{ type: Input }],
|
|
33432
|
+
onInit: [{ type: Output }],
|
|
33304
33433
|
onSelect: [{ type: Output, args: ['onSelect',] }],
|
|
33305
33434
|
onUnSelect: [{ type: Output, args: ['onUnSelect',] }],
|
|
33306
33435
|
onChanged: [{ type: Output, args: ['onChanged',] }]
|
|
@@ -34361,6 +34490,7 @@ class ServiceFileUploadComponent extends ComponentBase {
|
|
|
34361
34490
|
this.serviceCode = '';
|
|
34362
34491
|
this.entity = '';
|
|
34363
34492
|
this.chooseLabel = 'Chọn';
|
|
34493
|
+
this.onInit = new EventEmitter();
|
|
34364
34494
|
this.onSelect = new EventEmitter();
|
|
34365
34495
|
this.onRemove = new EventEmitter();
|
|
34366
34496
|
this.onChanged = new EventEmitter();
|
|
@@ -34399,6 +34529,7 @@ class ServiceFileUploadComponent extends ComponentBase {
|
|
|
34399
34529
|
ngOnInit() {
|
|
34400
34530
|
this.setUp();
|
|
34401
34531
|
this.subscribe();
|
|
34532
|
+
this.onInit.emit(this);
|
|
34402
34533
|
}
|
|
34403
34534
|
setUp() {
|
|
34404
34535
|
this.accept = this.control.accept;
|
|
@@ -34760,6 +34891,7 @@ ServiceFileUploadComponent.propDecorators = {
|
|
|
34760
34891
|
entity: [{ type: Input }],
|
|
34761
34892
|
entityKey: [{ type: Input }],
|
|
34762
34893
|
chooseLabel: [{ type: Input }],
|
|
34894
|
+
onInit: [{ type: Output }],
|
|
34763
34895
|
onSelect: [{ type: Output }],
|
|
34764
34896
|
onRemove: [{ type: Output }],
|
|
34765
34897
|
onChanged: [{ type: Output }]
|
|
@@ -34912,6 +35044,7 @@ class FileManagerComponent extends DataListBase {
|
|
|
34912
35044
|
this.inTaiLieuChung = false;
|
|
34913
35045
|
this.copyToFolderId = this._commonService.guidEmpty();
|
|
34914
35046
|
this.multipleCheckWhenClickRow = true;
|
|
35047
|
+
this.onInit = new EventEmitter();
|
|
34915
35048
|
this.onReady = new EventEmitter();
|
|
34916
35049
|
this.entityKeyChange = new EventEmitter();
|
|
34917
35050
|
this.closePopup = new EventEmitter();
|
|
@@ -35002,6 +35135,7 @@ class FileManagerComponent extends DataListBase {
|
|
|
35002
35135
|
}
|
|
35003
35136
|
this.reloadData();
|
|
35004
35137
|
this.checkAndLoadRootFolderContent();
|
|
35138
|
+
this.onInit.emit(this);
|
|
35005
35139
|
}
|
|
35006
35140
|
checkAndLoadRootFolderContent() {
|
|
35007
35141
|
if (!this.inited || this.fileDataService)
|
|
@@ -36121,6 +36255,7 @@ FileManagerComponent.propDecorators = {
|
|
|
36121
36255
|
copyToFolderId: [{ type: Input }],
|
|
36122
36256
|
value: [{ type: Input }],
|
|
36123
36257
|
multipleCheckWhenClickRow: [{ type: Input }],
|
|
36258
|
+
onInit: [{ type: Output }],
|
|
36124
36259
|
onReady: [{ type: Output }],
|
|
36125
36260
|
entityKeyChange: [{ type: Output }],
|
|
36126
36261
|
closePopup: [{ type: Output }],
|
|
@@ -37098,6 +37233,7 @@ class MaskComponent {
|
|
|
37098
37233
|
this.viewMode = false;
|
|
37099
37234
|
this.inputStyleClass = '';
|
|
37100
37235
|
this.autoFormat = true;
|
|
37236
|
+
this.onInit = new EventEmitter();
|
|
37101
37237
|
this.onFocus = new EventEmitter();
|
|
37102
37238
|
this.onBlur = new EventEmitter();
|
|
37103
37239
|
this.onChanged = new EventEmitter();
|
|
@@ -37112,6 +37248,7 @@ class MaskComponent {
|
|
|
37112
37248
|
if (!this.autoFormat) {
|
|
37113
37249
|
this.thousandSeperator = '';
|
|
37114
37250
|
}
|
|
37251
|
+
this.onInit.emit(this);
|
|
37115
37252
|
}
|
|
37116
37253
|
writeValue(obj) {
|
|
37117
37254
|
if (obj) {
|
|
@@ -37210,6 +37347,7 @@ MaskComponent.propDecorators = {
|
|
|
37210
37347
|
viewMode: [{ type: Input }],
|
|
37211
37348
|
inputStyleClass: [{ type: Input }],
|
|
37212
37349
|
autoFormat: [{ type: Input }],
|
|
37350
|
+
onInit: [{ type: Output }],
|
|
37213
37351
|
onFocus: [{ type: Output }],
|
|
37214
37352
|
onBlur: [{ type: Output }],
|
|
37215
37353
|
onChanged: [{ type: Output }]
|
|
@@ -37272,6 +37410,7 @@ class NumberPickerRangeComponent {
|
|
|
37272
37410
|
this.suffix = '';
|
|
37273
37411
|
this.prefix = '';
|
|
37274
37412
|
this.decimalPlaces = 2;
|
|
37413
|
+
this.onInit = new EventEmitter();
|
|
37275
37414
|
this.focus = new EventEmitter();
|
|
37276
37415
|
this.enterSmart = new EventEmitter();
|
|
37277
37416
|
this.enter = new EventEmitter();
|
|
@@ -37279,9 +37418,10 @@ class NumberPickerRangeComponent {
|
|
|
37279
37418
|
this.change = new EventEmitter();
|
|
37280
37419
|
}
|
|
37281
37420
|
ngOnInit() {
|
|
37421
|
+
this.onInit.emit(this);
|
|
37282
37422
|
}
|
|
37283
37423
|
clear() {
|
|
37284
|
-
|
|
37424
|
+
const re = (this.model[0] != null && this.model[0] !== '') || (this.model[1] != null && this.model[1] !== '');
|
|
37285
37425
|
this.model = [null, null];
|
|
37286
37426
|
this.onChange(this.model);
|
|
37287
37427
|
return re;
|
|
@@ -37390,6 +37530,7 @@ NumberPickerRangeComponent.propDecorators = {
|
|
|
37390
37530
|
min: [{ type: Input }],
|
|
37391
37531
|
max: [{ type: Input }],
|
|
37392
37532
|
decimalPlaces: [{ type: Input }],
|
|
37533
|
+
onInit: [{ type: Output }],
|
|
37393
37534
|
focus: [{ type: Output }],
|
|
37394
37535
|
enterSmart: [{ type: Output }],
|
|
37395
37536
|
enter: [{ type: Output }],
|
|
@@ -37804,6 +37945,7 @@ class RadioButtonListComponent {
|
|
|
37804
37945
|
constructor(_crudService, _deviceDetectorService) {
|
|
37805
37946
|
this._crudService = _crudService;
|
|
37806
37947
|
this._deviceDetectorService = _deviceDetectorService;
|
|
37948
|
+
this.onInit = new EventEmitter();
|
|
37807
37949
|
this.valueChange = new EventEmitter();
|
|
37808
37950
|
this.onChanged = new EventEmitter();
|
|
37809
37951
|
this.onDataSourceLoaded = new EventEmitter();
|
|
@@ -37837,6 +37979,7 @@ class RadioButtonListComponent {
|
|
|
37837
37979
|
if (!this._deviceDetectorService.isDesktop()) {
|
|
37838
37980
|
this.hideTransitionOptions = this.showTransitionOptions = '';
|
|
37839
37981
|
}
|
|
37982
|
+
this.onInit.emit(this);
|
|
37840
37983
|
}
|
|
37841
37984
|
setDefaultSetting() {
|
|
37842
37985
|
if (this.control.returnType == 'value') {
|
|
@@ -38034,6 +38177,7 @@ RadioButtonListComponent.propDecorators = {
|
|
|
38034
38177
|
dataSource: [{ type: Input }],
|
|
38035
38178
|
value: [{ type: Input }],
|
|
38036
38179
|
disabled: [{ type: Input }],
|
|
38180
|
+
onInit: [{ type: Output }],
|
|
38037
38181
|
valueChange: [{ type: Output }],
|
|
38038
38182
|
onChanged: [{ type: Output }],
|
|
38039
38183
|
onDataSourceLoaded: [{ type: Output }],
|
|
@@ -38797,6 +38941,9 @@ class SplashComponentV1Component extends ComponentBase {
|
|
|
38797
38941
|
}
|
|
38798
38942
|
}
|
|
38799
38943
|
});
|
|
38944
|
+
if (this.appSwitcherItems.length === 1) {
|
|
38945
|
+
this.switchApp(this.appSwitcherItems[0]);
|
|
38946
|
+
}
|
|
38800
38947
|
}
|
|
38801
38948
|
});
|
|
38802
38949
|
}
|
|
@@ -38979,6 +39126,9 @@ class SplashComponentV2Component extends ComponentBase {
|
|
|
38979
39126
|
}
|
|
38980
39127
|
}
|
|
38981
39128
|
});
|
|
39129
|
+
if (this.appSwitcherItems.length === 1) {
|
|
39130
|
+
this.switchApp(this.appSwitcherItems[0]);
|
|
39131
|
+
}
|
|
38982
39132
|
}
|
|
38983
39133
|
});
|
|
38984
39134
|
}
|
|
@@ -39168,6 +39318,9 @@ class SplashComponentComponent extends ComponentBase {
|
|
|
39168
39318
|
}
|
|
39169
39319
|
}
|
|
39170
39320
|
});
|
|
39321
|
+
if (this.appSwitcherItems.length === 1) {
|
|
39322
|
+
this.switchApp(this.appSwitcherItems[0]);
|
|
39323
|
+
}
|
|
39171
39324
|
}
|
|
39172
39325
|
});
|
|
39173
39326
|
}
|
|
@@ -39340,32 +39493,32 @@ const DataSourceTargetType = [
|
|
|
39340
39493
|
{ id: ɵ4, ten: 'Đơn vị' },
|
|
39341
39494
|
{ id: ɵ5, ten: 'Nhóm người dùng' },
|
|
39342
39495
|
];
|
|
39343
|
-
const ɵ6 = EnumUserRule.CAP_TREN, ɵ7 = EnumUserRule.
|
|
39496
|
+
const ɵ6 = EnumUserRule.CAP_TREN, ɵ7 = EnumUserRule.NGUOI_CUOI_CUNG, ɵ8 = EnumUserRule.NGUOI_THAM_GIA_QUY_TRINH, ɵ9 = EnumUserRule.NGUOI_NHAN, ɵ10 = EnumUserRule.NGUOI_THEO_DOI, ɵ11 = EnumUserRule.NGUOI_THAO_TAC;
|
|
39344
39497
|
const DataSourceUserRule = [
|
|
39345
39498
|
// { id: EnumUserRule.NGUOI_TAO, ten: 'Người tạo' },
|
|
39346
39499
|
{ id: ɵ6, ten: 'Cấp trên' },
|
|
39347
39500
|
// { id: EnumUserRule.CAP_TREN, ten: 'Cấp dưới' },
|
|
39348
39501
|
// { id: EnumUserRule.CAP_TREN_DA_GUI, ten: 'Cấp trên đã trình' },
|
|
39349
|
-
|
|
39350
|
-
{ id: ɵ
|
|
39502
|
+
{ id: ɵ7, ten: 'Người cuối cùng' },
|
|
39503
|
+
{ id: ɵ8, ten: 'Người tham gia quy trình' },
|
|
39351
39504
|
// { id: EnumUserRule.NGUOI_DA_NHAN, ten: 'Người đã nhận', tooltip: 'Người đã từng nhận' },
|
|
39352
|
-
{ id: ɵ
|
|
39353
|
-
{ id: ɵ
|
|
39354
|
-
{ id: ɵ
|
|
39505
|
+
{ id: ɵ9, ten: 'Người nhận' },
|
|
39506
|
+
{ id: ɵ10, ten: 'Người theo dõi' },
|
|
39507
|
+
{ id: ɵ11, ten: 'Người thực hiện thao tác' }
|
|
39355
39508
|
];
|
|
39356
|
-
const ɵ
|
|
39509
|
+
const ɵ12 = EnumUserRule.CAP_TREN, ɵ13 = EnumUserRule.NGUOI_THAM_GIA_QUY_TRINH;
|
|
39357
39510
|
const DataSourceUserSender = [
|
|
39358
39511
|
// { id: EnumUserRule.NGUOI_TAO, ten: 'Người tạo' },
|
|
39359
|
-
{ id: ɵ
|
|
39512
|
+
{ id: ɵ12, ten: 'Cấp trên' },
|
|
39360
39513
|
// { id: EnumUserRule.CAP_TREN_DA_GUI, ten: 'Cấp trên đã trình' },
|
|
39361
39514
|
// { id: EnumUserRule.NGUOI_CUOI_CUNG, ten: 'Người cuối cùng' },
|
|
39362
|
-
{ id: ɵ
|
|
39515
|
+
{ id: ɵ13, ten: 'Người tham gia quy trình' }
|
|
39363
39516
|
];
|
|
39364
|
-
const ɵ
|
|
39517
|
+
const ɵ14 = EnumWorkflowCheckboxOption.TAO_CONG_VIEC, ɵ15 = EnumWorkflowCheckboxOption.AUTO_START_TASK;
|
|
39365
39518
|
const DataSourceWorkflowCheckboxOption = [
|
|
39366
|
-
{ id: ɵ
|
|
39519
|
+
{ id: ɵ14, ten: 'Tạo công việc' },
|
|
39367
39520
|
// { id: EnumWorkflowCheckboxOption.AUTO_NEXT_STEP, ten: 'Tự động chuyển bước đầu tiên' },
|
|
39368
|
-
{ id: ɵ
|
|
39521
|
+
{ id: ɵ15, ten: 'Bắt đầu nhanh công việc' }
|
|
39369
39522
|
];
|
|
39370
39523
|
|
|
39371
39524
|
function createJsPlumnInstance(containerId, options = null) {
|
|
@@ -42437,6 +42590,7 @@ class TnColorPickerComponent extends ComponentBase {
|
|
|
42437
42590
|
super(injector);
|
|
42438
42591
|
this.disabled = false;
|
|
42439
42592
|
this.appendTo = 'body';
|
|
42593
|
+
this.onInit = new EventEmitter();
|
|
42440
42594
|
this.change = new EventEmitter();
|
|
42441
42595
|
}
|
|
42442
42596
|
writeValue(obj) {
|
|
@@ -42458,7 +42612,7 @@ class TnColorPickerComponent extends ComponentBase {
|
|
|
42458
42612
|
this.disabled = isDisabled;
|
|
42459
42613
|
}
|
|
42460
42614
|
ngOnInit() {
|
|
42461
|
-
|
|
42615
|
+
this.onInit.emit(this);
|
|
42462
42616
|
}
|
|
42463
42617
|
changePicker(evt) {
|
|
42464
42618
|
this.model.inputValue = this.model.value;
|
|
@@ -42492,6 +42646,7 @@ TnColorPickerComponent.ctorParameters = () => [
|
|
|
42492
42646
|
TnColorPickerComponent.propDecorators = {
|
|
42493
42647
|
disabled: [{ type: Input }],
|
|
42494
42648
|
appendTo: [{ type: Input }],
|
|
42649
|
+
onInit: [{ type: Output }],
|
|
42495
42650
|
change: [{ type: Output }]
|
|
42496
42651
|
};
|
|
42497
42652
|
|
|
@@ -42643,7 +42798,7 @@ class TnDialogComponent {
|
|
|
42643
42798
|
TnDialogComponent.decorators = [
|
|
42644
42799
|
{ type: Component, args: [{
|
|
42645
42800
|
selector: 'tn-dialog',
|
|
42646
|
-
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
|
|
42801
|
+
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>",
|
|
42647
42802
|
styles: [""]
|
|
42648
42803
|
},] }
|
|
42649
42804
|
];
|
|
@@ -42683,21 +42838,34 @@ class TnTabViewComponent {
|
|
|
42683
42838
|
constructor(_commonService) {
|
|
42684
42839
|
this._commonService = _commonService;
|
|
42685
42840
|
this.data = [];
|
|
42841
|
+
this._hiddenTab = [];
|
|
42842
|
+
this.hiddenInfo = {};
|
|
42686
42843
|
this.allowViewAll = false;
|
|
42687
42844
|
this.isDynamicHeight = false;
|
|
42688
|
-
this.useScrollbar = false;
|
|
42689
42845
|
this.onTabChange = new EventEmitter();
|
|
42690
42846
|
this.activeIndexChange = new EventEmitter();
|
|
42691
42847
|
this.template = {};
|
|
42692
42848
|
this.onlyIcon = false;
|
|
42693
42849
|
this.styleClass = 'tn-tabview-beauty';
|
|
42694
42850
|
this.height = '100%';
|
|
42851
|
+
this.ready = false;
|
|
42695
42852
|
}
|
|
42696
42853
|
set vertical(value) {
|
|
42697
42854
|
this._vertical = value;
|
|
42698
42855
|
this.setStyleClass();
|
|
42699
42856
|
}
|
|
42700
42857
|
;
|
|
42858
|
+
set hiddenTab(value) {
|
|
42859
|
+
if (value) {
|
|
42860
|
+
this._hiddenTab = value;
|
|
42861
|
+
}
|
|
42862
|
+
else {
|
|
42863
|
+
this._hiddenTab = [];
|
|
42864
|
+
}
|
|
42865
|
+
if (this.ready) {
|
|
42866
|
+
this.setHiddenInfo();
|
|
42867
|
+
}
|
|
42868
|
+
}
|
|
42701
42869
|
set activeIndex(value) {
|
|
42702
42870
|
this.currentTabIndex = value;
|
|
42703
42871
|
}
|
|
@@ -42713,6 +42881,8 @@ class TnTabViewComponent {
|
|
|
42713
42881
|
}
|
|
42714
42882
|
this.currentTabIndex = currentTabIndex;
|
|
42715
42883
|
}
|
|
42884
|
+
this.ready = true;
|
|
42885
|
+
this.setHiddenInfo();
|
|
42716
42886
|
}
|
|
42717
42887
|
ngAfterContentInit() {
|
|
42718
42888
|
this.onlyIcon = true;
|
|
@@ -42724,6 +42894,12 @@ class TnTabViewComponent {
|
|
|
42724
42894
|
});
|
|
42725
42895
|
this.setStyleClass();
|
|
42726
42896
|
}
|
|
42897
|
+
setHiddenInfo() {
|
|
42898
|
+
this.hiddenInfo = {};
|
|
42899
|
+
this._hiddenTab.forEach(tabCode => {
|
|
42900
|
+
this.hiddenInfo[tabCode] = true;
|
|
42901
|
+
});
|
|
42902
|
+
}
|
|
42727
42903
|
setStyleClass() {
|
|
42728
42904
|
let result = 'tn-tabview-beauty';
|
|
42729
42905
|
if (this._vertical) {
|
|
@@ -42737,13 +42913,19 @@ class TnTabViewComponent {
|
|
|
42737
42913
|
handleTabChange(evt) {
|
|
42738
42914
|
this.currentTabIndex = evt.index;
|
|
42739
42915
|
this.activeIndexChange.emit(this.currentTabIndex);
|
|
42740
|
-
|
|
42916
|
+
}
|
|
42917
|
+
handleTabLoaded(item) {
|
|
42918
|
+
this.currentTabCode = item.code;
|
|
42919
|
+
this.onTabChange.emit({
|
|
42920
|
+
index: this.currentTabIndex,
|
|
42921
|
+
code: this.currentTabCode
|
|
42922
|
+
});
|
|
42741
42923
|
}
|
|
42742
42924
|
}
|
|
42743
42925
|
TnTabViewComponent.decorators = [
|
|
42744
42926
|
{ type: Component, args: [{
|
|
42745
42927
|
selector: 'tn-tabview',
|
|
42746
|
-
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>",
|
|
42928
|
+
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>",
|
|
42747
42929
|
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}}"]
|
|
42748
42930
|
},] }
|
|
42749
42931
|
];
|
|
@@ -42754,10 +42936,10 @@ TnTabViewComponent.propDecorators = {
|
|
|
42754
42936
|
children: [{ type: ContentChildren, args: [TemplateRef,] }],
|
|
42755
42937
|
vertical: [{ type: Input }],
|
|
42756
42938
|
data: [{ type: Input }],
|
|
42939
|
+
hiddenTab: [{ type: Input }],
|
|
42757
42940
|
allowViewAll: [{ type: Input }],
|
|
42758
42941
|
activeIndex: [{ type: Input }],
|
|
42759
42942
|
isDynamicHeight: [{ type: Input }],
|
|
42760
|
-
useScrollbar: [{ type: Input }],
|
|
42761
42943
|
onTabChange: [{ type: Output }],
|
|
42762
42944
|
activeIndexChange: [{ type: Output }]
|
|
42763
42945
|
};
|
|
@@ -42797,6 +42979,7 @@ class TnTinymceComponent extends ComponentBase {
|
|
|
42797
42979
|
this.required = false;
|
|
42798
42980
|
this.height = 200;
|
|
42799
42981
|
this.field = '';
|
|
42982
|
+
this.onInit = new EventEmitter();
|
|
42800
42983
|
this.keydown = new EventEmitter();
|
|
42801
42984
|
this.onBlur = new EventEmitter();
|
|
42802
42985
|
this.onChanged = new EventEmitter();
|
|
@@ -42824,6 +43007,7 @@ class TnTinymceComponent extends ComponentBase {
|
|
|
42824
43007
|
}
|
|
42825
43008
|
ngOnInit() {
|
|
42826
43009
|
this.subscribeContentInsert();
|
|
43010
|
+
this.onInit.emit(this);
|
|
42827
43011
|
}
|
|
42828
43012
|
ngAfterViewInit() {
|
|
42829
43013
|
let mode = this.mode;
|
|
@@ -43174,6 +43358,7 @@ TnTinymceComponent.propDecorators = {
|
|
|
43174
43358
|
height: [{ type: Input }],
|
|
43175
43359
|
field: [{ type: Input }],
|
|
43176
43360
|
languageCode: [{ type: Input }],
|
|
43361
|
+
onInit: [{ type: Output }],
|
|
43177
43362
|
keydown: [{ type: Output }],
|
|
43178
43363
|
onBlur: [{ type: Output }],
|
|
43179
43364
|
onChanged: [{ type: Output }]
|
|
@@ -43504,6 +43689,7 @@ class UserPickerComponent extends ComponentBase {
|
|
|
43504
43689
|
});
|
|
43505
43690
|
this.multiple = false;
|
|
43506
43691
|
this.disabled = false;
|
|
43692
|
+
this.onInit = new EventEmitter();
|
|
43507
43693
|
this.onSelect = new EventEmitter();
|
|
43508
43694
|
this.onUnSelect = new EventEmitter();
|
|
43509
43695
|
this.onChanged = new EventEmitter();
|
|
@@ -43609,6 +43795,7 @@ class UserPickerComponent extends ComponentBase {
|
|
|
43609
43795
|
this.createSchemaSearch();
|
|
43610
43796
|
this.updateFuncCheckReadOnlyItem();
|
|
43611
43797
|
this.onReady.emit();
|
|
43798
|
+
this.onInit.emit(this);
|
|
43612
43799
|
}
|
|
43613
43800
|
updateFuncCheckReadOnlyItem() {
|
|
43614
43801
|
if (this.readOnlyValues && this.readOnlyValues.length) {
|
|
@@ -44040,6 +44227,7 @@ UserPickerComponent.propDecorators = {
|
|
|
44040
44227
|
multiple: [{ type: Input }],
|
|
44041
44228
|
disabled: [{ type: Input }],
|
|
44042
44229
|
readOnlyValues: [{ type: Input }],
|
|
44230
|
+
onInit: [{ type: Output }],
|
|
44043
44231
|
onSelect: [{ type: Output, args: ['onSelect',] }],
|
|
44044
44232
|
onUnSelect: [{ type: Output, args: ['onUnSelect',] }],
|
|
44045
44233
|
onChanged: [{ type: Output, args: ['onChanged',] }],
|
|
@@ -44517,6 +44705,7 @@ class VanBanPickerComponent extends DataListBase {
|
|
|
44517
44705
|
super(_injector);
|
|
44518
44706
|
this._vanBanDenService = _vanBanDenService;
|
|
44519
44707
|
this._vanBanDiService = _vanBanDiService;
|
|
44708
|
+
this.onInit = new EventEmitter();
|
|
44520
44709
|
this.onChanged = new EventEmitter();
|
|
44521
44710
|
this.onReady = new EventEmitter();
|
|
44522
44711
|
this.environment = {};
|
|
@@ -44562,6 +44751,7 @@ class VanBanPickerComponent extends DataListBase {
|
|
|
44562
44751
|
this.setting.fieldSearchText = ['code', 'name'];
|
|
44563
44752
|
this.setting.objectName = ' văn bản';
|
|
44564
44753
|
super.ngOnInit();
|
|
44754
|
+
this.onInit.emit(this);
|
|
44565
44755
|
}
|
|
44566
44756
|
getVanBanDen(originGridInfo) {
|
|
44567
44757
|
const gridInfo = new GridInfo(Object.assign(Object.assign({}, originGridInfo), { filters: [...originGridInfo.filters.map(q => (Object.assign({}, q)))] }));
|
|
@@ -44781,6 +44971,7 @@ VanBanPickerComponent.propDecorators = {
|
|
|
44781
44971
|
loaiVanBan: [{ type: Input }],
|
|
44782
44972
|
readOnly: [{ type: Input }],
|
|
44783
44973
|
control: [{ type: Input }],
|
|
44974
|
+
onInit: [{ type: Output }],
|
|
44784
44975
|
onChanged: [{ type: Output }],
|
|
44785
44976
|
onReady: [{ type: Output }]
|
|
44786
44977
|
};
|
|
@@ -50246,6 +50437,7 @@ UsersFormatPipe.ctorParameters = () => [
|
|
|
50246
50437
|
class ReferenceTextBoxComponent extends ComponentBase {
|
|
50247
50438
|
constructor(injector) {
|
|
50248
50439
|
super(injector);
|
|
50440
|
+
this.onInit = new EventEmitter();
|
|
50249
50441
|
this.data = '';
|
|
50250
50442
|
this.ready = false;
|
|
50251
50443
|
}
|
|
@@ -50260,6 +50452,7 @@ class ReferenceTextBoxComponent extends ComponentBase {
|
|
|
50260
50452
|
this.control._component = this;
|
|
50261
50453
|
this.ready = true;
|
|
50262
50454
|
this.checkAndGetData();
|
|
50455
|
+
this.onInit.emit(this);
|
|
50263
50456
|
}
|
|
50264
50457
|
checkAndGetData() {
|
|
50265
50458
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -50302,7 +50495,8 @@ ReferenceTextBoxComponent.ctorParameters = () => [
|
|
|
50302
50495
|
];
|
|
50303
50496
|
ReferenceTextBoxComponent.propDecorators = {
|
|
50304
50497
|
control: [{ type: Input }],
|
|
50305
|
-
value: [{ type: Input }]
|
|
50498
|
+
value: [{ type: Input }],
|
|
50499
|
+
onInit: [{ type: Output }]
|
|
50306
50500
|
};
|
|
50307
50501
|
|
|
50308
50502
|
class LoadingPageV1Component {
|
|
@@ -52383,5 +52577,5 @@ DynamicComponentService.ctorParameters = () => [
|
|
|
52383
52577
|
* Generated bundle index. Do not edit.
|
|
52384
52578
|
*/
|
|
52385
52579
|
|
|
52386
|
-
export { AccessDeniedComponent, Action, ActionChoYKienBase, ActionThuHoiBase, ActionUpdateModel, AddressControlSchema, AddressService, AdvanceSearchData, AdvanceSearchSetting, AppComponentBase, AppListService, ApplicationContextService, ApprovalPipe, ArrayPair, AtLeastOneRowTableValidator, AuthenService, AuthorizeDirective, AutoCompleteControlSchema, AutoCompletePickerControlSchema, AutocompleteDatasourceComponent, AvatarUploaderComponent, BaseCauHinhWorkflowComponent, BaseCongViecComponent, BaseCongViecFormComponent, BaseDmLinhVucCongViecComponent, BaseDmLoaiCongViecComponent, BaseDmPriorityComponent, BaseMenuService, BaseModule, BaseService, BooleanFormatPipe, ButtonControlSchema, ButtonPermission, ButtonPermissions, ButtonTextActionCongViec, CONFIG_CALENDAR_VIETNAMESE, CalculationEngineService, CanBoHoSoService, CauHinhWorkflowService, CellExcel, ChatBoxComponent, ChatSendMessageBoxComponent, CheckBoxListControlSchema, CheckControlVisibleService, CheckDuplicateFieldsValidator, CheckDuplicateValidator, CheckboxControlSchema, ClientV5Service, CoCauToChucControlSchema, CoCauToChucPickerComponent, CoCauToChucPickerControlSchema, CoCauToChucService, ColorBlack, ColorControlSchema, ColorPickerControlSchema, ColorWhite, Column, ColumnSchemaBase, ColumnSetting, ColumnSettingDetail, ComCtxConstants, CommandType, CommonAppComponentComponent, CommonDashboardComponent, CommonErrorCode, CommonService, CompareValidator, ComponentBase, ComponentConstants, ComponentContextService, ConditionalBuilderService, CongViecLienQuanService, CongViecNextFirstStepComponent, CongViecPickerControlSchema, CongViecService, ContainerSchema, ControlTreeNode, ControlType, ConvertMoneyToWordPipe, CoreConfigService, CrudBase, CrudFormComponent, CrudFormCustomFunction, CrudFormData, CrudFormSetting, CrudListComponent, CrudListConfig, CrudListCustomFunction, CrudListData, CrudListHelper, CrudListSetting, CrudService, CustomControlSchema, CustomRouterService, CustomizeUiModel, CustomizeUiService, DanhmucApiService, DataExcel, DataFormBase, DataListBase, DataSourceControlSchema, DataSourcePermissionBase, DataSourceStateType, DataSourceTargetType, DataSourceUserRule, DataSourceUserSender, DataSourceWorkflowCheckboxOption, DataSourceWorkflowCoreStatus, DataType, DateCompareValidator, DateTimeControlSchema, DateTimeRangeControlSchema, DbOrganizationOrganizationService, DbOrganizationPositionService, Deadline, DeadlineType, DhvinhGuardService, DialogModel, DmLinhVucCongViecService, DmLoaiCongViecService, DmPriorityService, DomService, DownloadLinkService, DropdownComponent, DropdownControlSchema, DropdownOptions, DummyWorkflowCode, DynamicComponentService, ENUM_DON_VI_HANH_CHINH, EXPLORER_TYPES, EXPORT_VERSION_V4, EXPORT_VERSION_V5, EditFileCommand, EditorControlSchema, EformService, EmailValidator, EntityMedataDataSetting, EntityMetadataService, EntityPickerColumn, EntityPickerControlSchema, EntityWorkflowType, EnumActionType, EnumControlPickerType, EnumFileLayout, EnumGetRefType, EnumLoaiDanhSachCongViec, EnumLoaiVanBanBase, EnumPermissionType, EnumProcessWorkflowType, EnumStateByMenuCongViec, EnumStateType, EnumTargetType, EnumTypeSplash, EnumUserRule, EnumWFNhomTrangThai, EnumWorkflowCheckboxOption, EnumWorkflowCoreCodeSettingKey, EnumWorkflowHistoryStatus, ErrorType, EventData, ExactOneValueInTableValidator, ExportAllMode, ExportItem, ExportItemType, ExportItemsMode, ExportManyModel, ExportManyResultModel, ExportModel, ExportService, ExportWithoutTemplateModel, Extension, FILE_TYPES, FieldDefineHasTask, FieldDefineIsTaskFormControl, FieldDefineIsWorkflowControl, FieldOrderCrudList, FieldRowSpan, FieldWorkflowCodeInCrudForm, FileDataService, FileExplorerService, FileManagerComponent, FileManagerControlSchema, FileManagerMode, FileManagerSetting, FileObjectService, FilePickerDialogComponent, FileUploadComponent, FileUploadControlSchema, FileUploadMode, FileUploadSetting, FileV4Service, Filter, FolderService, FormControlBase, FormControlBaseWithService, FormSchemaBase, FormSchemaBaseWithService, FormState, Gender, GenerateLinkDownloadDTO, GenericGuardService, GetRefDataSchema, GlobalService, GmailCorrector, GridInfo, GuardService, GuardSvService, HeightType, HighPerformanceService, HighlightPipe, HtmlFormatPipe, HttpOptions, ImageService, Include, JsPlumbOption, KeyFieldGetRefType, KeyFilterStateByMenuCongViec, KeyFlashShow, KeyFunctionReload, KeyValueComponent, KeyValueControlSchema, LabelSchema, LabelWFNhomTrangThai, LabelWorkflowCoreStatus, LengthValidator, ListHelperService, LoaiPhieuDeXuat, LocalCacheService, LowerCorrector, MA_THONG_BAO_PHAN_HE, MaActionBatDauQuyTrinh, ManagerType, MaskControlSchema, MasterDataItem, MasterDataPipe, MasterDataService, MenuService, MethodResult, ModelKySoDonVi, ModelSchema, ModuleConfigService, MultiTranslateHttpLoader, MultipleReferenceDataFormatPipe, NodeService, NotificationObjectType, NotificationService, NotifierService, NotifierType, NumberCompareValidator, NumberOnlyValidator, NumberRangeControlSchema, Operator, OrganizationFormatPipe, OrganizationNameFormatPipe, OrganizationPickerControlSchema, OrganizationService, OrganizationsFormatPipe, PageInfo, PageSetting, Pair, Pattern, PercentControlSchema, PermissionBase, PermissionConstant, PermissionService, PermissionStorage, PermissionTypes, PermissionUtilsComponent, PersonalSetting, PhanQuyenModel, PhoneNumberValidator, PhoneValidator, PopupSize, PositionService, PrintService, PublicFunction, QueryBuilderComponent, QueryBuilderGroupComponent, QueryBuilderRuleComponent, QueryGroup, QueryRule, RELOAD_FILE_LIST, RadioButtonListControlSchema, RandomDataService, RefField, ReferenceDataFormatPipe, ReferenceTextControlSchema, RegexSplitFieldByItem, RequiredFieldsValidator, RequiredValidator, RowColorOption, RowExcel, SHARE_COMPONENT_ID, SHARE_EVENT, SafeHtmlPipe, SafeStylePipe, SafeUrlPipe, SameValueValidator, SchemaBase, SecurePipe, ServiceFileUploadComponent, SessionTypes, SharedFolderType, SignalRService, SimpleDicItem, SimpleDictionary, Sort, SortDirs, SpanControlSchema, SplashComponentComponent, StartupBusinessComponentBase, StateComponent, StateMachineTopic, StateMachinesConnectionMetadataComponent, StateMachinesDesignerComponent, StateMachinesService, StateMetadataComponent, Status, StatusAction, StatusGroup, StatusOption, StatusOrg, StatusUser, StorageService, StorageUpdatedService, StringCompareOption, StringFormatPipe, SummaryPipe, SwitchControlSchema, TBL_DM_COSODAOTAO_CONSTS, TBL_DM_PHONGHOC_CONSTS, TBL_KTX_NGUOITHUE_HOSO, TBL_TS_PHIEUDEXUAT, TBL_TS_TAISANCODINH_CONSTS, TabViewData, TableSchema, TagSeparator, TaiLieuComponent, TemplateConstant, TemplateControlSchema, TemplateInstanceService, TemplateService, TemplateTextItem, TemplateTextMany, TemplateTextV4Service, TemplateType, TemplateV4Service, TenContainer, TextAlign, TextAreaControlSchema, TextControlSchema, TextControlSchemaWithService, TitleSchema, TnClientCommand, TnClientService, TnComponentConfig, TnCustomScrollbarComponent, TnDatePipe, TnMenuItem, TnReorderableColumnDirective, TnReorderableRowDirective, TnSortIcon, TnSortableColumnDirective, TnTreeTableToggler, TnUser, TnxSharedModule, TopicReloadCongViecV5, TopicReloadCountCongViecV5, TopicReloadNotification, TrangThaiMasterData, TrangThais, TreeDataOption, TreeListBase, TrimCorrector, TrimEndCorrector, TrimStartCorrector, TypeDanhMucAPI, UniqueFieldInTableValidator, UniqueNumberService, UpperCorrector, UserFormatPipe, UserGroupRealService, UserGroupService, UserPickerControlSchema, UserPickerDialogComponent, UserService, UserType, UserV5Service, UsersFormatPipe, Validation, VanBanPickerControlSchema, VirtualBaseService, WorkflowConfigAdvance, WorkflowCoreStatusEnum, WorkflowFieldStateCode, WorkflowHistoryService, WorkflowPermissionDetailService, WorkflowPickerComponent, WorkflowService, WorkflowSetting, WorkflowSettingNew, WorkflowSettingsService, WrapPickerControlSchema, addDay, addZero, appendDefaultFilter, clearAll, clone, cloneOld, coreDeclaration, coreModuleImport, coreProvider, createJsPlumnInstance, createOrgPickerControl, createRolePickerControl, createUserGroupPickerControl, createUserPickerControl, dataSourceIcon$1 as dataSourceIcon, dateDiff, genQueryFromFilters, getDateFromStringDateVN, getDayOfWeek, getEnvironmentByName, getEnvironmentData, getListMenuByName, getMenuData, getMonday, getStringDate, getStringDateTime, getStringDateVN, getStringDateVNLocal, getTimeSpan, isArray, isBoolean, isDate, isFunction, isLiteralObject, isNumber, isObjectOld, isRegular, isSimpleType, isString, isValidDate, isValidTime, keyUserSurveyLocal, maximumPageSize, mergeJSON, mergeJSONOld, moduleConfigFunc, monthDiff, multipleSort, romanize, setMetadataConnection, setMetadataState, translateStateMachine, ɵ0, ɵ1, ɵ10, ɵ11, ɵ12, ɵ13, ɵ14, ɵ2, ɵ3, ɵ4, ɵ5, ɵ6, ɵ7, ɵ8, ɵ9, AddressComponent as ɵa, DropdownService as ɵb, BaseDmLinhVucCongViecFormComponent as ɵba, BaseDmPriorityFormComponent as ɵbb, BaseCongviecDinhkemComponent as ɵbc, BaseCongviecDinhkemFormComponent as ɵbd, DatetimePickerComponent as ɵbe, DatetimePickerRangeComponent as ɵbf, DynamicNodeComponent as ɵbg, EntityPickerBoxComponent as ɵbh, EntityPickerDataComponent as ɵbi, EntityPickerSelectedComponent as ɵbj, EntityPickerComponent as ɵbk, EntityPickerDialogComponent as ɵbl, EntityPermissionComponent as ɵbm, DM_ChucVuService as ɵbn, RoleService as ɵbo, EntityPermissionService as ɵbp, EquationEditorComponent as ɵbq, MaskComponent as ɵbr, NumberPickerRangeComponent as ɵbs, PagingNextBackOnlyComponent as ɵbt, RadioButtonListComponent as ɵbu, VanBanPickerComponent as ɵbv, VanBanDenService as ɵbw, VanBanDiService as ɵbx, VanBanPickerDialogComponent as ɵby, VanbanDiPickerComponent as ɵbz, EntityPickerService as ɵc, VanbanDenPickerComponent as ɵca, CongViecPickerComponent as ɵcb, SettingsComponent as ɵcc, SettingsRowComponent as ɵcd, SettingsWorkflowComponent as ɵce, SettingsWorkflowNo1Component as ɵcf, SimpleWorkflowFormComponent as ɵcg, ProcessWorkflowTargetComponent as ɵch, DmChucVuService as ɵci, ChoYKienFormComponent as ɵcj, SplashComponentV1Component as ɵck, SplashComponentV2Component as ɵcl, StateMachinesConnectionReceiverComponent as ɵcm, StateMachinesConnectionReceiverConditionComponent as ɵcn, StateMachinesConnectionReceiverDepartmentComponent as ɵco, StateMachinesConnectionReceiverGroupComponent as ɵcp, StateMachinesConnectionReceiverUserComponent as ɵcq, StateMachinesConnectionReceiverRoleComponent as ɵcr, StateMachinesConnectionSenderComponent as ɵcs, StartWorkflowComponent as ɵct, ShareLinkByPermissionComponent as ɵcu, WorkflowSettingNewComponent as ɵcv, PermissionSharingComponent as ɵcw, WorkflowPermissionService as ɵcx, TnCheckboxComponent as ɵcy, TnDialogComponent as ɵcz, ExceptionHandlerService as ɵd, TnColorPickerComponent as ɵda, TnTinymceComponent as ɵdb, TnTabViewComponent as ɵdc, TableDetailFormComponent as ɵdd, FileIconPipe as ɵde, FileSizePipe as ɵdf, QuickAddFormComponent as ɵdg, PreventShiftTabDirective as ɵdh, TnTemplateDirective as ɵdi, UserPickerComponent as ɵdj, UserPickerBoxComponent as ɵdk, CoCauToChucTestService as ɵdl, TnAppHelpComponent as ɵdm, PathNameService as ɵdn, HelperCurrentPageComponent as ɵdo, TnAppNotificationListComponent as ɵdp, TnAppNotificationComponent as ɵdq, MyDriveService as ɵdr, FileVersionService as ɵds, FileExplorerNewService as ɵdt, FileManagerService as ɵdu, FolderFormComponent as ɵdv, FileFormComponent as ɵdw, FileViewerComponent as ɵdx, FileVersionListComponent as ɵdy, WorkflowHistoryComponent as ɵdz, CanBo_HoSoService as ɵe, EntityWorkflowHistoryService as ɵea, WorkflowHistoryDialogComponent as ɵeb, WorkflowHistoryNewComponent as ɵec, WorkflowSettingComponent as ɵed, EntityWorkflowSettingService as ɵee, WorkflowSettingDialogComponent as ɵef, WorkflowPermissionComponent as ɵeg, WorkflowPermissionFormComponent as ɵeh, ReferenceTextBoxComponent as ɵei, QrCodeGeneratorComponent as ɵej, AccessDeniedV1Component as ɵek, AddNewsComponent as ɵel, ArticleService as ɵem, NewsCategoryService as ɵen, NotFoundComponent as ɵeo, UniversalLinkProcessorComponent as ɵep, SignatureDetailComponent as ɵeq, ChatService as ɵer, ContentsService as ɵes, StatusExtendsService as ɵet, MessageBoardService as ɵeu, KySoSimDanhSachChuKyComponent as ɵev, KySoSimChuKyUserService as ɵew, FileKySoSimComponent as ɵex, KySoSimSignPDFService as ɵey, TaiLieuCuaToiComponent as ɵez, AfterViewCheckedComponent as ɵf, KhaiThacTaiLieuDungChungComponent as ɵfa, DanhMucDungChungService as ɵfb, TnTemplateComponent as ɵfc, LoadingPageV1Component as ɵfd, CheckReadyComponent as ɵfe, SendAccessTokenInterceptor as ɵff, LogInterceptor as ɵfg, PermissionUtilsInterceptor as ɵfh, TraceInterceptor as ɵfi, AdvanceSearchComponent as ɵg, AppRootMenuComponent as ɵh, AppTopBarComponent as ɵi, AppTopBarV1Component as ɵj, AppTopBarV2Component as ɵk, AppProfileComponent as ɵl, AppSubMenuComponent as ɵm, AppMenuComponent as ɵn, AutoCompletePickerComponent as ɵo, CheckBoxListComponent as ɵp, ReportQueueComponent as ɵq, CoCauToChucPickerListComponent as ɵr, TreeTableComponent as ɵs, BaseCongViecTestComponent as ɵt, ListBase as ɵu, CongViecDinhKemService as ɵv, CongViecThayDoiService as ɵw, ProcessWorkflowFormComponent as ɵx, BaseCauHinhWorkflowDetailComponent as ɵy, BaseDmLoaiCongViecFormComponent as ɵz };
|
|
52580
|
+
export { AccessDeniedComponent, Action, ActionChoYKienBase, ActionThuHoiBase, ActionUpdateModel, AddressControlSchema, AddressService, AdvanceSearchData, AdvanceSearchSetting, AppComponentBase, AppListService, ApplicationContextService, ApprovalPipe, ArrayPair, AtLeastOneRowTableValidator, AuthenService, AuthorizeDirective, AutoCompleteControlSchema, AutoCompletePickerControlSchema, AutocompleteDatasourceComponent, AvatarUploaderComponent, BaseCauHinhWorkflowComponent, BaseCongViecComponent, BaseCongViecFormComponent, BaseDmLinhVucCongViecComponent, BaseDmLoaiCongViecComponent, BaseDmPriorityComponent, BaseMenuService, BaseModule, BaseService, BooleanFormatPipe, ButtonControlSchema, ButtonPermission, ButtonPermissions, ButtonTextActionCongViec, CONFIG_CALENDAR_VIETNAMESE, CalculationEngineService, CanBoHoSoService, CauHinhWorkflowService, CellExcel, ChatBoxComponent, ChatSendMessageBoxComponent, CheckBoxListControlSchema, CheckControlVisibleService, CheckDuplicateFieldsValidator, CheckDuplicateValidator, CheckboxControlSchema, ClientV5Service, CoCauToChucControlSchema, CoCauToChucPickerComponent, CoCauToChucPickerControlSchema, CoCauToChucService, ColorBlack, ColorControlSchema, ColorPickerControlSchema, ColorWhite, Column, ColumnSchemaBase, ColumnSetting, ColumnSettingDetail, ComCtxConstants, CommandType, CommonAppComponentComponent, CommonDashboardComponent, CommonErrorCode, CommonService, CompareValidator, ComponentBase, ComponentConstants, ComponentContextService, ConditionalBuilderService, CongViecLienQuanService, CongViecNextFirstStepComponent, CongViecPickerControlSchema, CongViecService, ContainerSchema, ControlTreeNode, ControlType, ConvertMoneyToWordPipe, CoreConfigService, CrudBase, CrudFormComponent, CrudFormCustomFunction, CrudFormData, CrudFormSetting, CrudListComponent, CrudListConfig, CrudListCustomFunction, CrudListData, CrudListHelper, CrudListSetting, CrudService, CustomControlSchema, CustomRouterService, CustomizeUiModel, CustomizeUiService, DanhmucApiService, DataExcel, DataFormBase, DataListBase, DataSourceControlSchema, DataSourcePermissionBase, DataSourceStateType, DataSourceTargetType, DataSourceUserRule, DataSourceUserSender, DataSourceWorkflowCheckboxOption, DataSourceWorkflowCoreStatus, DataType, DateCompareValidator, DateTimeControlSchema, DateTimeRangeControlSchema, DbOrganizationOrganizationService, DbOrganizationPositionService, Deadline, DeadlineType, DhvinhGuardService, DialogModel, DmLinhVucCongViecService, DmLoaiCongViecService, DmPriorityService, DomService, DownloadLinkService, DropdownComponent, DropdownControlSchema, DropdownOptions, DummyWorkflowCode, DynamicComponentService, ENUM_DON_VI_HANH_CHINH, EXPLORER_TYPES, EXPORT_VERSION_V4, EXPORT_VERSION_V5, EditFileCommand, EditorControlSchema, EformService, EmailValidator, EntityMedataDataSetting, EntityMetadataService, EntityPickerColumn, EntityPickerControlSchema, EntityWorkflowType, EnumActionType, EnumControlPickerType, EnumFileLayout, EnumGetRefType, EnumLoaiDanhSachCongViec, EnumLoaiVanBanBase, EnumPermissionType, EnumProcessWorkflowType, EnumStateByMenuCongViec, EnumStateType, EnumTargetType, EnumTypeSplash, EnumUserRule, EnumWFNhomTrangThai, EnumWorkflowCheckboxOption, EnumWorkflowCoreCodeSettingKey, EnumWorkflowHistoryStatus, ErrorType, EventData, ExactOneValueInTableValidator, ExportAllMode, ExportItem, ExportItemType, ExportItemsMode, ExportManyModel, ExportManyResultModel, ExportModel, ExportService, ExportWithoutTemplateModel, Extension, FILE_TYPES, FieldDefineHasTask, FieldDefineIsTaskFormControl, FieldDefineIsWorkflowControl, FieldOrderCrudList, FieldRowSpan, FieldWorkflowCodeInCrudForm, FileDataService, FileExplorerService, FileManagerComponent, FileManagerControlSchema, FileManagerMode, FileManagerSetting, FileObjectService, FilePickerDialogComponent, FileUploadComponent, FileUploadControlSchema, FileUploadMode, FileUploadSetting, FileV4Service, Filter, FolderService, FormControlBase, FormControlBaseWithService, FormSchemaBase, FormSchemaBaseWithService, FormState, Gender, GenerateLinkDownloadDTO, GenericGuardService, GetRefDataSchema, GlobalService, GmailCorrector, GridInfo, GuardService, GuardSvService, HeightType, HighPerformanceService, HighlightPipe, HtmlFormatPipe, HttpOptions, ImageService, Include, JsPlumbOption, KeyFieldGetRefType, KeyFilterStateByMenuCongViec, KeyFlashShow, KeyFunctionReload, KeyValueComponent, KeyValueControlSchema, LabelSchema, LabelWFNhomTrangThai, LabelWorkflowCoreStatus, LengthValidator, ListHelperService, LoaiPhieuDeXuat, LocalCacheService, LowerCorrector, MA_THONG_BAO_PHAN_HE, MaActionBatDauQuyTrinh, ManagerType, MaskControlSchema, MasterDataItem, MasterDataPipe, MasterDataService, MenuService, MethodResult, ModelKySoDonVi, ModelSchema, ModuleConfigService, MultiTranslateHttpLoader, MultipleReferenceDataFormatPipe, NodeService, NotificationObjectType, NotificationService, NotifierService, NotifierType, NumberCompareValidator, NumberOnlyValidator, NumberRangeControlSchema, Operator, OrganizationFormatPipe, OrganizationNameFormatPipe, OrganizationPickerControlSchema, OrganizationService, OrganizationsFormatPipe, PageInfo, PageSetting, Pair, Pattern, PercentControlSchema, PermissionBase, PermissionConstant, PermissionService, PermissionStorage, PermissionTypes, PermissionUtilsComponent, PersonalSetting, PhanQuyenModel, PhoneNumberValidator, PhoneValidator, PopupSize, PositionService, PrintService, PublicFunction, QueryBuilderComponent, QueryBuilderGroupComponent, QueryBuilderRuleComponent, QueryGroup, QueryRule, RELOAD_FILE_LIST, RadioButtonListControlSchema, RandomDataService, RefField, ReferenceDataFormatPipe, ReferenceTextControlSchema, RegexSplitFieldByItem, RequiredFieldsValidator, RequiredValidator, RowColorOption, RowExcel, SHARE_COMPONENT_ID, SHARE_EVENT, SafeHtmlPipe, SafeStylePipe, SafeUrlPipe, SameValueValidator, SchemaBase, SecurePipe, ServiceFileUploadComponent, SessionTypes, SharedFolderType, SignalRService, SimpleDicItem, SimpleDictionary, Sort, SortDirs, SpanControlSchema, SplashComponentComponent, StartupBusinessComponentBase, StateComponent, StateMachineTopic, StateMachinesConnectionMetadataComponent, StateMachinesDesignerComponent, StateMachinesService, StateMetadataComponent, Status, StatusAction, StatusGroup, StatusOption, StatusOrg, StatusUser, StorageService, StorageUpdatedService, StringCompareOption, StringFormatPipe, SummaryPipe, SwitchControlSchema, TBL_DM_COSODAOTAO_CONSTS, TBL_DM_PHONGHOC_CONSTS, TBL_KTX_NGUOITHUE_HOSO, TBL_TS_PHIEUDEXUAT, TBL_TS_TAISANCODINH_CONSTS, TabViewData, TableSchema, TagSeparator, TaiLieuComponent, TemplateConstant, TemplateControlSchema, TemplateInstanceService, TemplateService, TemplateTextItem, TemplateTextMany, TemplateTextV4Service, TemplateType, TemplateV4Service, TenContainer, TextAlign, TextAreaControlSchema, TextControlSchema, TextControlSchemaWithService, TitleSchema, TnClientCommand, TnClientService, TnComponentConfig, TnCustomScrollbarComponent, TnDatePipe, TnMenuItem, TnReorderableColumnDirective, TnReorderableRowDirective, TnSortIcon, TnSortableColumnDirective, TnTreeTableToggler, TnUser, TnxSharedModule, TopicReloadCongViecV5, TopicReloadCountCongViecV5, TopicReloadNotification, TrangThaiMasterData, TrangThais, TreeDataOption, TreeListBase, TrimCorrector, TrimEndCorrector, TrimStartCorrector, TypeDanhMucAPI, UniqueFieldInTableValidator, UniqueNumberService, UpperCorrector, UserFormatPipe, UserGroupRealService, UserGroupService, UserPickerControlSchema, UserPickerDialogComponent, UserService, UserType, UserV5Service, UsersFormatPipe, Validation, VanBanPickerControlSchema, VirtualBaseService, WorkflowConfigAdvance, WorkflowCoreStatusEnum, WorkflowFieldStateCode, WorkflowHistoryService, WorkflowPermissionDetailService, WorkflowPickerComponent, WorkflowService, WorkflowSetting, WorkflowSettingNew, WorkflowSettingsService, WrapPickerControlSchema, addDay, addZero, appendDefaultFilter, clearAll, clone, cloneOld, coreDeclaration, coreModuleImport, coreProvider, createJsPlumnInstance, createOrgPickerControl, createRolePickerControl, createUserGroupPickerControl, createUserPickerControl, dataSourceIcon$1 as dataSourceIcon, dateDiff, genQueryFromFilters, getDateFromStringDateVN, getDayOfWeek, getEnvironmentByName, getEnvironmentData, getListMenuByName, getMenuData, getMonday, getStringDate, getStringDateTime, getStringDateVN, getStringDateVNLocal, getTimeSpan, isArray, isBoolean, isDate, isFunction, isLiteralObject, isNumber, isObjectOld, isRegular, isSimpleType, isString, isValidDate, isValidTime, keyUserSurveyLocal, maximumPageSize, mergeJSON, mergeJSONOld, moduleConfigFunc, monthDiff, multipleSort, romanize, setMetadataConnection, setMetadataState, translateStateMachine, ɵ0, ɵ1, ɵ10, ɵ11, ɵ12, ɵ13, ɵ14, ɵ15, ɵ2, ɵ3, ɵ4, ɵ5, ɵ6, ɵ7, ɵ8, ɵ9, AddressComponent as ɵa, DropdownService as ɵb, BaseDmLinhVucCongViecFormComponent as ɵba, BaseDmPriorityFormComponent as ɵbb, BaseCongviecDinhkemComponent as ɵbc, BaseCongviecDinhkemFormComponent as ɵbd, DatetimePickerComponent as ɵbe, DatetimePickerRangeComponent as ɵbf, DynamicNodeComponent as ɵbg, EntityPickerBoxComponent as ɵbh, EntityPickerDataComponent as ɵbi, EntityPickerSelectedComponent as ɵbj, EntityPickerComponent as ɵbk, EntityPickerDialogComponent as ɵbl, EntityPermissionComponent as ɵbm, DM_ChucVuService as ɵbn, RoleService as ɵbo, EntityPermissionService as ɵbp, EquationEditorComponent as ɵbq, MaskComponent as ɵbr, NumberPickerRangeComponent as ɵbs, PagingNextBackOnlyComponent as ɵbt, RadioButtonListComponent as ɵbu, VanBanPickerComponent as ɵbv, VanBanDenService as ɵbw, VanBanDiService as ɵbx, VanBanPickerDialogComponent as ɵby, VanbanDiPickerComponent as ɵbz, EntityPickerService as ɵc, VanbanDenPickerComponent as ɵca, CongViecPickerComponent as ɵcb, SettingsComponent as ɵcc, SettingsRowComponent as ɵcd, SettingsWorkflowComponent as ɵce, SettingsWorkflowNo1Component as ɵcf, SimpleWorkflowFormComponent as ɵcg, ProcessWorkflowTargetComponent as ɵch, DmChucVuService as ɵci, ChoYKienFormComponent as ɵcj, SplashComponentV1Component as ɵck, SplashComponentV2Component as ɵcl, StateMachinesConnectionReceiverComponent as ɵcm, StateMachinesConnectionReceiverConditionComponent as ɵcn, StateMachinesConnectionReceiverDepartmentComponent as ɵco, StateMachinesConnectionReceiverGroupComponent as ɵcp, StateMachinesConnectionReceiverUserComponent as ɵcq, StateMachinesConnectionReceiverRoleComponent as ɵcr, StateMachinesConnectionSenderComponent as ɵcs, StartWorkflowComponent as ɵct, ShareLinkByPermissionComponent as ɵcu, WorkflowSettingNewComponent as ɵcv, PermissionSharingComponent as ɵcw, WorkflowPermissionService as ɵcx, TnCheckboxComponent as ɵcy, TnDialogComponent as ɵcz, ExceptionHandlerService as ɵd, TnColorPickerComponent as ɵda, TnTinymceComponent as ɵdb, TnTabViewComponent as ɵdc, TableDetailFormComponent as ɵdd, FileIconPipe as ɵde, FileSizePipe as ɵdf, QuickAddFormComponent as ɵdg, PreventShiftTabDirective as ɵdh, TnTemplateDirective as ɵdi, UserPickerComponent as ɵdj, UserPickerBoxComponent as ɵdk, CoCauToChucTestService as ɵdl, TnAppHelpComponent as ɵdm, PathNameService as ɵdn, HelperCurrentPageComponent as ɵdo, TnAppNotificationListComponent as ɵdp, TnAppNotificationComponent as ɵdq, MyDriveService as ɵdr, FileVersionService as ɵds, FileExplorerNewService as ɵdt, FileManagerService as ɵdu, FolderFormComponent as ɵdv, FileFormComponent as ɵdw, FileViewerComponent as ɵdx, FileVersionListComponent as ɵdy, WorkflowHistoryComponent as ɵdz, CanBo_HoSoService as ɵe, EntityWorkflowHistoryService as ɵea, WorkflowHistoryDialogComponent as ɵeb, WorkflowHistoryNewComponent as ɵec, WorkflowSettingComponent as ɵed, EntityWorkflowSettingService as ɵee, WorkflowSettingDialogComponent as ɵef, WorkflowPermissionComponent as ɵeg, WorkflowPermissionFormComponent as ɵeh, ReferenceTextBoxComponent as ɵei, QrCodeGeneratorComponent as ɵej, AccessDeniedV1Component as ɵek, AddNewsComponent as ɵel, ArticleService as ɵem, NewsCategoryService as ɵen, NotFoundComponent as ɵeo, UniversalLinkProcessorComponent as ɵep, SignatureDetailComponent as ɵeq, ChatService as ɵer, ContentsService as ɵes, StatusExtendsService as ɵet, MessageBoardService as ɵeu, KySoSimDanhSachChuKyComponent as ɵev, KySoSimChuKyUserService as ɵew, FileKySoSimComponent as ɵex, KySoSimSignPDFService as ɵey, TaiLieuCuaToiComponent as ɵez, AfterViewCheckedComponent as ɵf, KhaiThacTaiLieuDungChungComponent as ɵfa, DanhMucDungChungService as ɵfb, TnTemplateComponent as ɵfc, LoadingPageV1Component as ɵfd, CheckReadyComponent as ɵfe, SendAccessTokenInterceptor as ɵff, LogInterceptor as ɵfg, PermissionUtilsInterceptor as ɵfh, TraceInterceptor as ɵfi, AdvanceSearchComponent as ɵg, AppRootMenuComponent as ɵh, AppTopBarComponent as ɵi, AppTopBarV1Component as ɵj, AppTopBarV2Component as ɵk, AppProfileComponent as ɵl, AppSubMenuComponent as ɵm, AppMenuComponent as ɵn, AutoCompletePickerComponent as ɵo, CheckBoxListComponent as ɵp, ReportQueueComponent as ɵq, CoCauToChucPickerListComponent as ɵr, TreeTableComponent as ɵs, BaseCongViecTestComponent as ɵt, ListBase as ɵu, CongViecDinhKemService as ɵv, CongViecThayDoiService as ɵw, ProcessWorkflowFormComponent as ɵx, BaseCauHinhWorkflowDetailComponent as ɵy, BaseDmLoaiCongViecFormComponent as ɵz };
|
|
52387
52581
|
//# sourceMappingURL=tnx-shared.js.map
|