@brggroup/share-lib 0.1.79 → 0.1.80
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/fesm2022/brggroup-share-lib.mjs +462 -112
- package/fesm2022/brggroup-share-lib.mjs.map +1 -1
- package/lib/WF/wf.routes.d.ts +3 -0
- package/lib/WF/wf.routes.d.ts.map +1 -0
- package/lib/admin/admin.routes.d.ts +3 -0
- package/lib/admin/admin.routes.d.ts.map +1 -0
- package/lib/admin/component/menu/list/menu-list.d.ts +4 -7
- package/lib/admin/component/menu/list/menu-list.d.ts.map +1 -1
- package/lib/admin/component/module/app-module-list.d.ts +24 -0
- package/lib/admin/component/module/app-module-list.d.ts.map +1 -0
- package/lib/admin/component/module/app-module.model.d.ts +19 -0
- package/lib/admin/component/module/app-module.model.d.ts.map +1 -0
- package/lib/admin/component/module/app-module.service.d.ts +19 -0
- package/lib/admin/component/module/app-module.service.d.ts.map +1 -0
- package/lib/admin/model/menu.model.d.ts +2 -0
- package/lib/admin/model/menu.model.d.ts.map +1 -1
- package/lib/auth/auth.service.d.ts +3 -3
- package/lib/auth/auth.service.d.ts.map +1 -1
- package/lib/auth/session-manager.service.d.ts +1 -1
- package/lib/auth/session-manager.service.d.ts.map +1 -1
- package/lib/components/base.component.d.ts.map +1 -1
- package/lib/components/layout/layout.component.d.ts +7 -1
- package/lib/components/layout/layout.component.d.ts.map +1 -1
- package/lib/components/layout/menu/side-menu/side-menu.d.ts +3 -2
- package/lib/components/layout/menu/side-menu/side-menu.d.ts.map +1 -1
- package/lib/components/login/login.component.d.ts +1 -0
- package/lib/components/login/login.component.d.ts.map +1 -1
- package/lib/components/login-1/login.component.d.ts +1 -0
- package/lib/components/login-1/login.component.d.ts.map +1 -1
- package/lib/components/login-2/login.component.d.ts +1 -0
- package/lib/components/login-2/login.component.d.ts.map +1 -1
- package/lib/components/module-select/module-select.d.ts +17 -0
- package/lib/components/module-select/module-select.d.ts.map +1 -0
- package/lib/services/router-monitor.service.d.ts.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -1
|
@@ -94,6 +94,7 @@ import * as i4$3 from 'ng-zorro-antd/menu';
|
|
|
94
94
|
import { NzMenuModule } from 'ng-zorro-antd/menu';
|
|
95
95
|
import * as i11 from 'ng-zorro-antd/switch';
|
|
96
96
|
import { NzSwitchModule } from 'ng-zorro-antd/switch';
|
|
97
|
+
import { NzTypographyModule } from 'ng-zorro-antd/typography';
|
|
97
98
|
import * as i7$1 from 'ng-zorro-antd/tag';
|
|
98
99
|
import { NzTagModule } from 'ng-zorro-antd/tag';
|
|
99
100
|
import * as i1$6 from 'ng-zorro-antd/upload';
|
|
@@ -705,7 +706,7 @@ class TokenStorage {
|
|
|
705
706
|
}
|
|
706
707
|
}
|
|
707
708
|
|
|
708
|
-
const URLs$
|
|
709
|
+
const URLs$k = {
|
|
709
710
|
login: '/api/Auth/Login',
|
|
710
711
|
register: '/api/Auth/Register',
|
|
711
712
|
pingAuth: '/api/Auth/PingAuth',
|
|
@@ -750,7 +751,7 @@ class AuthService extends HTTPService {
|
|
|
750
751
|
/* ----------------------------------------
|
|
751
752
|
LOGIN
|
|
752
753
|
---------------------------------------- */
|
|
753
|
-
async _signIn(username, password, orgid, returnUrl) {
|
|
754
|
+
async _signIn(username, password, orgid, returnUrl, MODULE_IN_USE) {
|
|
754
755
|
try {
|
|
755
756
|
const body = {
|
|
756
757
|
UserName: username,
|
|
@@ -764,9 +765,15 @@ class AuthService extends HTTPService {
|
|
|
764
765
|
}
|
|
765
766
|
this.notiService.success('Đăng nhập thành công');
|
|
766
767
|
TokenStorage.saveToken(res);
|
|
767
|
-
|
|
768
|
+
console.log('go to module select: ', MODULE_IN_USE);
|
|
769
|
+
if (returnUrl && returnUrl != '/') {
|
|
770
|
+
console.log('go to returnUrl: ', returnUrl);
|
|
768
771
|
this.router.navigateByUrl(returnUrl);
|
|
769
772
|
}
|
|
773
|
+
else if (MODULE_IN_USE) {
|
|
774
|
+
console.log('go to module select');
|
|
775
|
+
this.router.navigateByUrl('/module');
|
|
776
|
+
}
|
|
770
777
|
return true;
|
|
771
778
|
}
|
|
772
779
|
catch (err) {
|
|
@@ -775,7 +782,7 @@ class AuthService extends HTTPService {
|
|
|
775
782
|
}
|
|
776
783
|
}
|
|
777
784
|
async sendSignIn(body) {
|
|
778
|
-
return firstValueFrom(this.http.post(AppGlobals.apiEndpoint + URLs$
|
|
785
|
+
return firstValueFrom(this.http.post(AppGlobals.apiEndpoint + URLs$k.login, body, {
|
|
779
786
|
headers: new HttpHeaders().set('Content-Type', 'application/json').set('No-Loading-Mark', '1'),
|
|
780
787
|
}));
|
|
781
788
|
}
|
|
@@ -798,7 +805,7 @@ class AuthService extends HTTPService {
|
|
|
798
805
|
---------------------------------------- */
|
|
799
806
|
async pingAuth() {
|
|
800
807
|
try {
|
|
801
|
-
const res = await this.get(AppGlobals.apiEndpoint + URLs$
|
|
808
|
+
const res = await this.get(AppGlobals.apiEndpoint + URLs$k.pingAuth, true);
|
|
802
809
|
return res?.IsSuccess;
|
|
803
810
|
}
|
|
804
811
|
catch {
|
|
@@ -807,7 +814,7 @@ class AuthService extends HTTPService {
|
|
|
807
814
|
}
|
|
808
815
|
async getUserPermission() {
|
|
809
816
|
try {
|
|
810
|
-
const res = await this.get(AppGlobals.apiEndpoint + URLs$
|
|
817
|
+
const res = await this.get(AppGlobals.apiEndpoint + URLs$k.getUserPermission, true);
|
|
811
818
|
return res.Data;
|
|
812
819
|
}
|
|
813
820
|
catch {
|
|
@@ -817,12 +824,13 @@ class AuthService extends HTTPService {
|
|
|
817
824
|
/* ----------------------------------------
|
|
818
825
|
MENU
|
|
819
826
|
---------------------------------------- */
|
|
820
|
-
getUserMenu(headerMenuId) {
|
|
821
|
-
let pr = new HttpParams().append('headerMenuId', headerMenuId);
|
|
827
|
+
getUserMenu(moduleId, headerMenuId) {
|
|
828
|
+
let pr = new HttpParams().append('moduleId', moduleId || '').append('headerMenuId', headerMenuId || '');
|
|
822
829
|
return this.postParams(AppGlobals.apiEndpoint + '/api/Auth/getUserMenu', pr);
|
|
823
830
|
}
|
|
824
|
-
getUserHeaderMenu() {
|
|
825
|
-
|
|
831
|
+
getUserHeaderMenu(moduleId) {
|
|
832
|
+
let pr = new HttpParams().append('moduleId', moduleId || '');
|
|
833
|
+
return this.getParams(AppGlobals.apiEndpoint + '/api/Auth/getUserHeaderMenu', pr);
|
|
826
834
|
}
|
|
827
835
|
async checkUserMenu(url) {
|
|
828
836
|
try {
|
|
@@ -839,10 +847,10 @@ class AuthService extends HTTPService {
|
|
|
839
847
|
PASSWORD
|
|
840
848
|
---------------------------------------- */
|
|
841
849
|
changePassword(data) {
|
|
842
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
850
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$k.changePassword, data);
|
|
843
851
|
}
|
|
844
852
|
setPass(data) {
|
|
845
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
853
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$k.setPass, data);
|
|
846
854
|
}
|
|
847
855
|
/* ----------------------------------------
|
|
848
856
|
REGISTER
|
|
@@ -863,7 +871,7 @@ class AuthService extends HTTPService {
|
|
|
863
871
|
}
|
|
864
872
|
}
|
|
865
873
|
async sendSignUp(d) {
|
|
866
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
874
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$k.register, d);
|
|
867
875
|
}
|
|
868
876
|
/* ----------------------------------------
|
|
869
877
|
CHANGE ORG
|
|
@@ -885,7 +893,7 @@ class AuthService extends HTTPService {
|
|
|
885
893
|
}
|
|
886
894
|
async sendChangeOrg(App_Org_Id) {
|
|
887
895
|
let params = new HttpParams().append('App_Org_Id', App_Org_Id);
|
|
888
|
-
return this.postParams(AppGlobals.apiEndpoint + URLs$
|
|
896
|
+
return this.postParams(AppGlobals.apiEndpoint + URLs$k.changeOrgLogin, params);
|
|
889
897
|
}
|
|
890
898
|
static pingInterVal;
|
|
891
899
|
startPingAuth(intervalTime) {
|
|
@@ -1242,8 +1250,8 @@ class SessionManagerService {
|
|
|
1242
1250
|
// clearTimeout(this.refreshTimer);
|
|
1243
1251
|
// clearInterval(this.heartbeatTimer);
|
|
1244
1252
|
// }
|
|
1245
|
-
async login(username, password, orgid, returnUrl) {
|
|
1246
|
-
var ret = await this.authService._signIn(username, password, orgid, returnUrl);
|
|
1253
|
+
async login(username, password, orgid, returnUrl, MODULE_IN_USE) {
|
|
1254
|
+
var ret = await this.authService._signIn(username, password, orgid, returnUrl, MODULE_IN_USE);
|
|
1247
1255
|
if (ret) {
|
|
1248
1256
|
console.log('SessionManagerService > broadcast LOGIN');
|
|
1249
1257
|
this.broadcast(this.LOGIN_EVENT);
|
|
@@ -1587,6 +1595,7 @@ class BaseComponent {
|
|
|
1587
1595
|
let currentRoute = this.router.routerState.root.snapshot;
|
|
1588
1596
|
let currentProjectId = null;
|
|
1589
1597
|
let currentHeaderMenuId = null;
|
|
1598
|
+
let currentModuleId = null;
|
|
1590
1599
|
// 1. Lấy ID từ URL hiện tại đang đứng (State hiện tại)
|
|
1591
1600
|
while (currentRoute) {
|
|
1592
1601
|
if (currentRoute.params) {
|
|
@@ -1596,6 +1605,9 @@ class BaseComponent {
|
|
|
1596
1605
|
if (currentRoute.params['headerMenuId'] && !currentHeaderMenuId) {
|
|
1597
1606
|
currentHeaderMenuId = currentRoute.params['headerMenuId'];
|
|
1598
1607
|
}
|
|
1608
|
+
if (currentRoute.params['moduleId'] && !currentModuleId) {
|
|
1609
|
+
currentModuleId = currentRoute.params['moduleId'];
|
|
1610
|
+
}
|
|
1599
1611
|
}
|
|
1600
1612
|
currentRoute = currentRoute.firstChild;
|
|
1601
1613
|
}
|
|
@@ -1603,15 +1615,24 @@ class BaseComponent {
|
|
|
1603
1615
|
currentProjectId = this.getUrlParam('projectId');
|
|
1604
1616
|
if (!currentHeaderMenuId)
|
|
1605
1617
|
currentHeaderMenuId = this.getUrlParam('headerMenuId');
|
|
1618
|
+
if (!currentModuleId)
|
|
1619
|
+
currentModuleId = this.getUrlParam('moduleId');
|
|
1606
1620
|
// 2. Ưu tiên ID từ URL truyền vào (nếu người dùng click menu khác)
|
|
1621
|
+
let targetModuleId = currentModuleId;
|
|
1607
1622
|
let targetHeaderMenuId = currentHeaderMenuId;
|
|
1608
1623
|
let targetProjectId = currentProjectId;
|
|
1609
1624
|
// Regex bóc tách ID, dừng lại trước dấu "/" hoặc "?" (query param)
|
|
1610
|
-
const
|
|
1625
|
+
const headerModuleRegex = /\/module\/([^\/\?]+)/i;
|
|
1626
|
+
const headerModuleMatch = url.match(headerModuleRegex);
|
|
1627
|
+
if (headerModuleMatch) {
|
|
1628
|
+
targetHeaderMenuId = headerModuleMatch[1]; // Ghi đè bằng ID của menu mới click
|
|
1629
|
+
url = url.replace(headerModuleMatch[0], ''); // Xóa phần /headermenu/... ra khỏi url
|
|
1630
|
+
}
|
|
1631
|
+
const headerMenuRegex = /\/headermenu\/([^\/\?]+)/i;
|
|
1611
1632
|
const headerMatch = url.match(headerMenuRegex);
|
|
1612
1633
|
if (headerMatch) {
|
|
1613
1634
|
targetHeaderMenuId = headerMatch[1]; // Ghi đè bằng ID của menu mới click
|
|
1614
|
-
url = url.replace(headerMatch[0], ''); // Xóa phần /
|
|
1635
|
+
url = url.replace(headerMatch[0], ''); // Xóa phần /headermenu/... ra khỏi url
|
|
1615
1636
|
}
|
|
1616
1637
|
const projectRegex = /\/projectid\/([^\/\?]+)/i;
|
|
1617
1638
|
const projectMatch = url.match(projectRegex);
|
|
@@ -1627,7 +1648,10 @@ class BaseComponent {
|
|
|
1627
1648
|
url = `/projectid/${targetProjectId}${url}`;
|
|
1628
1649
|
}
|
|
1629
1650
|
if (targetHeaderMenuId) {
|
|
1630
|
-
url = `/
|
|
1651
|
+
url = `/headermenu/${targetHeaderMenuId}${url}`;
|
|
1652
|
+
}
|
|
1653
|
+
if (targetModuleId) {
|
|
1654
|
+
url = `/module/${targetModuleId}${url}`;
|
|
1631
1655
|
}
|
|
1632
1656
|
if (url === '')
|
|
1633
1657
|
url = '/';
|
|
@@ -3502,7 +3526,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
|
|
|
3502
3526
|
}]
|
|
3503
3527
|
}] });
|
|
3504
3528
|
|
|
3505
|
-
const URLs$
|
|
3529
|
+
const URLs$j = {
|
|
3506
3530
|
getById: '/api/App_Dic_Domain/GetById',
|
|
3507
3531
|
getAll: '/api/App_Dic_Domain/GetAll',
|
|
3508
3532
|
getList: '/api/App_Dic_Domain/GetList',
|
|
@@ -3514,21 +3538,21 @@ const URLs$i = {
|
|
|
3514
3538
|
class DicDomainService extends HTTPService {
|
|
3515
3539
|
getById(id) {
|
|
3516
3540
|
let pr = new HttpParams().append('id', id);
|
|
3517
|
-
return this.postParams(AppGlobals.apiEndpoint + URLs$
|
|
3541
|
+
return this.postParams(AppGlobals.apiEndpoint + URLs$j.getById, pr);
|
|
3518
3542
|
}
|
|
3519
3543
|
getPaging(filter) {
|
|
3520
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
3544
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$j.getPaging, filter);
|
|
3521
3545
|
}
|
|
3522
3546
|
addOrEdit(obj) {
|
|
3523
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
3547
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$j.addOrEdit, obj);
|
|
3524
3548
|
}
|
|
3525
3549
|
delete(id) {
|
|
3526
3550
|
const params = new HttpParams().append('id', id);
|
|
3527
|
-
return this.postParams(AppGlobals.apiEndpoint + URLs$
|
|
3551
|
+
return this.postParams(AppGlobals.apiEndpoint + URLs$j.delete, params);
|
|
3528
3552
|
}
|
|
3529
3553
|
async getByDomain(DomainCode) {
|
|
3530
3554
|
var pr = new HttpParams().append('DomainCode', DomainCode);
|
|
3531
|
-
const ret = await this.postParams(AppGlobals.apiEndpoint + URLs$
|
|
3555
|
+
const ret = await this.postParams(AppGlobals.apiEndpoint + URLs$j.getByDomain, pr);
|
|
3532
3556
|
return ret.Data;
|
|
3533
3557
|
}
|
|
3534
3558
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: DicDomainService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -5436,7 +5460,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
|
|
|
5436
5460
|
}]
|
|
5437
5461
|
}] });
|
|
5438
5462
|
|
|
5439
|
-
const URLs$
|
|
5463
|
+
const URLs$i = {
|
|
5440
5464
|
getById: '/api/App_Setting/GetById',
|
|
5441
5465
|
getAll: '/api/App_Setting/GetAll',
|
|
5442
5466
|
getList: '/api/App_Setting/GetList',
|
|
@@ -5458,10 +5482,10 @@ let SettingService$1 = class SettingService extends HTTPService {
|
|
|
5458
5482
|
});
|
|
5459
5483
|
}
|
|
5460
5484
|
getAll() {
|
|
5461
|
-
return this.post(AppGlobals.apiEndpoint + URLs$
|
|
5485
|
+
return this.post(AppGlobals.apiEndpoint + URLs$i.getAll);
|
|
5462
5486
|
}
|
|
5463
5487
|
getList(filter) {
|
|
5464
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
5488
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$i.getList, filter);
|
|
5465
5489
|
}
|
|
5466
5490
|
getPaging(filter) {
|
|
5467
5491
|
return this.cms.ESP({
|
|
@@ -5477,27 +5501,27 @@ let SettingService$1 = class SettingService extends HTTPService {
|
|
|
5477
5501
|
}
|
|
5478
5502
|
delete(id) {
|
|
5479
5503
|
const params = new HttpParams().append('id', id);
|
|
5480
|
-
return this.postParams(AppGlobals.apiEndpoint + URLs$
|
|
5504
|
+
return this.postParams(AppGlobals.apiEndpoint + URLs$i.delete, params);
|
|
5481
5505
|
}
|
|
5482
5506
|
getByCodeAnonymous(code) {
|
|
5483
5507
|
const params = new HttpParams().append('Code', code);
|
|
5484
|
-
return this.getParams(AppGlobals.apiEndpoint + URLs$
|
|
5508
|
+
return this.getParams(AppGlobals.apiEndpoint + URLs$i.getByCodeAnonymous, params);
|
|
5485
5509
|
}
|
|
5486
5510
|
// getGroupByCodeAnonymous(code: string) {
|
|
5487
5511
|
// const params = new HttpParams().append('Code', code);
|
|
5488
5512
|
// return this.getParams(AppGlobals.apiEndpoint + URLs.getByCodeAnonymous, params);
|
|
5489
5513
|
// }
|
|
5490
5514
|
getAllConfig() {
|
|
5491
|
-
return this.post(AppGlobals.apiEndpoint + URLs$
|
|
5515
|
+
return this.post(AppGlobals.apiEndpoint + URLs$i.GetAllConfig);
|
|
5492
5516
|
}
|
|
5493
5517
|
applyConfig(config) {
|
|
5494
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
5518
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$i.ApplyConfig, config);
|
|
5495
5519
|
}
|
|
5496
5520
|
getDbInfo() {
|
|
5497
|
-
return this.post(AppGlobals.apiEndpoint + URLs$
|
|
5521
|
+
return this.post(AppGlobals.apiEndpoint + URLs$i.GetDbInfo);
|
|
5498
5522
|
}
|
|
5499
5523
|
loadConfigTheme() {
|
|
5500
|
-
return this.get(AppGlobals.apiEndpoint + URLs$
|
|
5524
|
+
return this.get(AppGlobals.apiEndpoint + URLs$i.ConfigTheme);
|
|
5501
5525
|
}
|
|
5502
5526
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SettingService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
5503
5527
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SettingService, providedIn: 'root' });
|
|
@@ -5726,11 +5750,11 @@ class SignalRService {
|
|
|
5726
5750
|
let targetHeaderMenuId = currentHeaderMenuId;
|
|
5727
5751
|
let targetProjectId = currentProjectId;
|
|
5728
5752
|
// Regex bóc tách ID, dừng lại trước dấu "/" hoặc "?" (query param)
|
|
5729
|
-
const headerMenuRegex = /\/
|
|
5753
|
+
const headerMenuRegex = /\/headermenu\/([^\/\?]+)/i;
|
|
5730
5754
|
const headerMatch = url.match(headerMenuRegex);
|
|
5731
5755
|
if (headerMatch) {
|
|
5732
5756
|
targetHeaderMenuId = headerMatch[1]; // Ghi đè bằng ID của menu mới click
|
|
5733
|
-
url = url.replace(headerMatch[0], ''); // Xóa phần /
|
|
5757
|
+
url = url.replace(headerMatch[0], ''); // Xóa phần /headermenu/... ra khỏi url
|
|
5734
5758
|
}
|
|
5735
5759
|
const projectRegex = /\/projectid\/([^\/\?]+)/i;
|
|
5736
5760
|
const projectMatch = url.match(projectRegex);
|
|
@@ -5746,7 +5770,7 @@ class SignalRService {
|
|
|
5746
5770
|
url = `/projectid/${targetProjectId}${url}`;
|
|
5747
5771
|
}
|
|
5748
5772
|
if (targetHeaderMenuId) {
|
|
5749
|
-
url = `/
|
|
5773
|
+
url = `/headermenu/${targetHeaderMenuId}${url}`;
|
|
5750
5774
|
}
|
|
5751
5775
|
if (url === '')
|
|
5752
5776
|
url = '/';
|
|
@@ -6131,7 +6155,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
|
|
|
6131
6155
|
type: Output
|
|
6132
6156
|
}] } });
|
|
6133
6157
|
|
|
6134
|
-
const URLs$
|
|
6158
|
+
const URLs$h = {
|
|
6135
6159
|
getById: '/api/file/GetById',
|
|
6136
6160
|
getAll: '/api/file/GetAll',
|
|
6137
6161
|
getList: '/api/file/GetList',
|
|
@@ -6145,23 +6169,23 @@ class FileService extends HTTPService {
|
|
|
6145
6169
|
cms = inject(CommonService);
|
|
6146
6170
|
getById(id) {
|
|
6147
6171
|
const params = new HttpParams().append('id', id);
|
|
6148
|
-
return this.postParams(AppGlobals.apiEndpoint + URLs$
|
|
6172
|
+
return this.postParams(AppGlobals.apiEndpoint + URLs$h.getById, params);
|
|
6149
6173
|
}
|
|
6150
6174
|
getAll() {
|
|
6151
|
-
return this.post(AppGlobals.apiEndpoint + URLs$
|
|
6175
|
+
return this.post(AppGlobals.apiEndpoint + URLs$h.getAll);
|
|
6152
6176
|
}
|
|
6153
6177
|
getList(filter) {
|
|
6154
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
6178
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$h.getList, filter);
|
|
6155
6179
|
}
|
|
6156
6180
|
getPaging(filter) {
|
|
6157
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
6181
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$h.getPaging, filter);
|
|
6158
6182
|
}
|
|
6159
6183
|
addOrEdit(obj) {
|
|
6160
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
6184
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$h.addOrEdit, obj);
|
|
6161
6185
|
}
|
|
6162
6186
|
delete(id) {
|
|
6163
6187
|
const params = new HttpParams().append('id', id);
|
|
6164
|
-
return this.postParams(AppGlobals.apiEndpoint + URLs$
|
|
6188
|
+
return this.postParams(AppGlobals.apiEndpoint + URLs$h.delete, params);
|
|
6165
6189
|
}
|
|
6166
6190
|
downloadFileById(id) {
|
|
6167
6191
|
const params = new HttpParams().append('id', id);
|
|
@@ -6211,7 +6235,7 @@ class FileService extends HTTPService {
|
|
|
6211
6235
|
});
|
|
6212
6236
|
}
|
|
6213
6237
|
addFileWithRef(obj) {
|
|
6214
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
6238
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$h.addFileWithRef, obj);
|
|
6215
6239
|
}
|
|
6216
6240
|
getAnhWithRef(Ref_Table, Ref_Id) {
|
|
6217
6241
|
return this.cms.ESP({
|
|
@@ -6220,7 +6244,7 @@ class FileService extends HTTPService {
|
|
|
6220
6244
|
});
|
|
6221
6245
|
}
|
|
6222
6246
|
moveFileToDisk(obj) {
|
|
6223
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
6247
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$h.moveFileToDisk, obj);
|
|
6224
6248
|
}
|
|
6225
6249
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: FileService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
6226
6250
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: FileService, providedIn: 'root' });
|
|
@@ -6234,17 +6258,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
|
|
|
6234
6258
|
|
|
6235
6259
|
class SideMenuComponent extends BaseComponent {
|
|
6236
6260
|
filteredLstMenu = [];
|
|
6237
|
-
|
|
6261
|
+
moduleId = '';
|
|
6262
|
+
headerMenuId = '';
|
|
6238
6263
|
onClickToMenu = new EventEmitter();
|
|
6239
6264
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SideMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
6240
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: SideMenuComponent, isStandalone: true, selector: "side-menu", inputs: { filteredLstMenu: "filteredLstMenu",
|
|
6265
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: SideMenuComponent, isStandalone: true, selector: "side-menu", inputs: { filteredLstMenu: "filteredLstMenu", moduleId: "moduleId", headerMenuId: "headerMenuId" }, outputs: { onClickToMenu: "onClickToMenu" }, usesInheritance: true, ngImport: i0, template: "<ul class=\"side-menu-wrapper\" nz-menu nzMode=\"inline\" [nzInlineIndent]=\"12\">\n @for (menuLv1 of filteredLstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv4.Open\" [nzTitle]=\"menuLv4.Name\" [nzIcon]=\"menuLv4.Icon\">\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <nz-icon *ngIf=\"menuLv4.Icon\" [nzType]=\"menuLv4.Icon\"></nz-icon>\n <box [width]=\"2\"></box>\n <a\n [routerLink]=\"\n (moduleId ? '/module/' + moduleId : '') +\n (headerMenuId ? '/headermenu/' + headerMenuId : '') +\n menuLv4.Url\n \"\n (click)=\"onClickToMenu.emit()\"\n >\n {{ menuLv4.Name }}\n </a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <nz-icon *ngIf=\"menuLv3.Icon\" [nzType]=\"menuLv3.Icon\"></nz-icon><box [width]=\"2\"></box>\n <a\n [routerLink]=\"\n (moduleId ? '/module/' + moduleId : '') +\n (headerMenuId ? '/headermenu/' + headerMenuId : '') +\n menuLv3.Url\n \"\n (click)=\"onClickToMenu.emit()\"\n >\n {{ menuLv3.Name }}\n </a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <nz-icon *ngIf=\"menuLv2.Icon\" [nzType]=\"menuLv2.Icon\"></nz-icon><box [width]=\"2\"></box>\n <a\n [routerLink]=\"\n (moduleId ? '/module/' + moduleId : '') +\n (headerMenuId ? '/headermenu/' + headerMenuId : '') +\n menuLv2.Url\n \"\n (click)=\"onClickToMenu.emit()\"\n >\n {{ menuLv2.Name }}\n </a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <nz-icon *ngIf=\"menuLv1.Icon\" [nzType]=\"menuLv1.Icon\"></nz-icon><box [width]=\"2\"></box>\n <a\n [routerLink]=\"\n (moduleId ? '/module/' + moduleId : '') + (headerMenuId ? '/headermenu/' + headerMenuId : '') + menuLv1.Url\n \"\n (click)=\"onClickToMenu.emit()\"\n >\n {{ menuLv1.Name }}\n </a>\n </li>\n }\n }\n</ul>\n", styles: ["@charset \"UTF-8\";.side-menu-wrapper .ant-menu-item{margin:0;font-weight:500}.side-menu-wrapper .ant-menu-item a{color:var(--app-text)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: NzMenuModule }, { kind: "directive", type: i4$3.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$3.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "component", type: i4$3.NzSubMenuComponent, selector: "[nz-submenu]", inputs: ["nzMenuClassName", "nzPaddingLeft", "nzTitle", "nzIcon", "nzTriggerSubMenuAction", "nzOpen", "nzDisabled", "nzPlacement"], outputs: ["nzOpenChange"], exportAs: ["nzSubmenu"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i4$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
6241
6266
|
}
|
|
6242
6267
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: SideMenuComponent, decorators: [{
|
|
6243
6268
|
type: Component,
|
|
6244
|
-
args: [{ selector: 'side-menu', imports: [CommonModule, NzMenuModule, NzIconModule, Box, RouterModule], template: "<ul class=\"side-menu-wrapper\" nz-menu nzMode=\"inline\" [nzInlineIndent]=\"12\">\n @for (menuLv1 of filteredLstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv4.Open\" [nzTitle]=\"menuLv4.Name\" [nzIcon]=\"menuLv4.Icon\">\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <nz-icon *ngIf=\"menuLv4.Icon\" [nzType]=\"menuLv4.Icon\"></nz-icon>\n <box [width]=\"2\"></box>\n <a\n [routerLink]=\"(
|
|
6269
|
+
args: [{ selector: 'side-menu', imports: [CommonModule, NzMenuModule, NzIconModule, Box, RouterModule], template: "<ul class=\"side-menu-wrapper\" nz-menu nzMode=\"inline\" [nzInlineIndent]=\"12\">\n @for (menuLv1 of filteredLstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu?.length) {\n <ul nz-submenu [nzOpen]=\"menuLv4.Open\" [nzTitle]=\"menuLv4.Name\" [nzIcon]=\"menuLv4.Icon\">\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <nz-icon *ngIf=\"menuLv4.Icon\" [nzType]=\"menuLv4.Icon\"></nz-icon>\n <box [width]=\"2\"></box>\n <a\n [routerLink]=\"\n (moduleId ? '/module/' + moduleId : '') +\n (headerMenuId ? '/headermenu/' + headerMenuId : '') +\n menuLv4.Url\n \"\n (click)=\"onClickToMenu.emit()\"\n >\n {{ menuLv4.Name }}\n </a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <nz-icon *ngIf=\"menuLv3.Icon\" [nzType]=\"menuLv3.Icon\"></nz-icon><box [width]=\"2\"></box>\n <a\n [routerLink]=\"\n (moduleId ? '/module/' + moduleId : '') +\n (headerMenuId ? '/headermenu/' + headerMenuId : '') +\n menuLv3.Url\n \"\n (click)=\"onClickToMenu.emit()\"\n >\n {{ menuLv3.Name }}\n </a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <nz-icon *ngIf=\"menuLv2.Icon\" [nzType]=\"menuLv2.Icon\"></nz-icon><box [width]=\"2\"></box>\n <a\n [routerLink]=\"\n (moduleId ? '/module/' + moduleId : '') +\n (headerMenuId ? '/headermenu/' + headerMenuId : '') +\n menuLv2.Url\n \"\n (click)=\"onClickToMenu.emit()\"\n >\n {{ menuLv2.Name }}\n </a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <nz-icon *ngIf=\"menuLv1.Icon\" [nzType]=\"menuLv1.Icon\"></nz-icon><box [width]=\"2\"></box>\n <a\n [routerLink]=\"\n (moduleId ? '/module/' + moduleId : '') + (headerMenuId ? '/headermenu/' + headerMenuId : '') + menuLv1.Url\n \"\n (click)=\"onClickToMenu.emit()\"\n >\n {{ menuLv1.Name }}\n </a>\n </li>\n }\n }\n</ul>\n", styles: ["@charset \"UTF-8\";.side-menu-wrapper .ant-menu-item{margin:0;font-weight:500}.side-menu-wrapper .ant-menu-item a{color:var(--app-text)}\n"] }]
|
|
6245
6270
|
}], propDecorators: { filteredLstMenu: [{
|
|
6246
6271
|
type: Input
|
|
6247
|
-
}],
|
|
6272
|
+
}], moduleId: [{
|
|
6273
|
+
type: Input
|
|
6274
|
+
}], headerMenuId: [{
|
|
6248
6275
|
type: Input
|
|
6249
6276
|
}], onClickToMenu: [{
|
|
6250
6277
|
type: Output
|
|
@@ -6319,10 +6346,12 @@ class LayoutComponent extends BaseComponent {
|
|
|
6319
6346
|
LayoutComponent = LayoutComponent;
|
|
6320
6347
|
static noShowSideMenu = false;
|
|
6321
6348
|
static noShowBreadcrumb = false;
|
|
6349
|
+
static noShowHeaderMenu = false;
|
|
6322
6350
|
MENU_TYPE = 0;
|
|
6323
6351
|
SYSTEM_NAME = '';
|
|
6324
6352
|
SYSTEM_SUB_NAME_LEFT = '';
|
|
6325
6353
|
SYSTEM_SUB_NAME_RIGHT = '';
|
|
6354
|
+
MODULE_IN_USE = false;
|
|
6326
6355
|
isCollapsed = false; // đóng mở menu, true là đóng
|
|
6327
6356
|
isXSmall = false;
|
|
6328
6357
|
nodes = [];
|
|
@@ -6350,6 +6379,7 @@ class LayoutComponent extends BaseComponent {
|
|
|
6350
6379
|
}
|
|
6351
6380
|
lstHeaderMenu = [];
|
|
6352
6381
|
currentHeaderId = '';
|
|
6382
|
+
currentModuleId = '';
|
|
6353
6383
|
logoUrl$ = this.fileService
|
|
6354
6384
|
.getFileVersion('LOGO')
|
|
6355
6385
|
.pipe(map((res) => `${AppGlobals.apiEndpoint}/api/file/image?code=LOGO&v=${res || ''}`));
|
|
@@ -6361,20 +6391,44 @@ class LayoutComponent extends BaseComponent {
|
|
|
6361
6391
|
else {
|
|
6362
6392
|
document.body.classList.remove('dark-theme');
|
|
6363
6393
|
}
|
|
6394
|
+
await this.settingService
|
|
6395
|
+
.getByCodeAnonymous('SYSTEM_MODULE_IN_USE')
|
|
6396
|
+
.then((res) => (this.MODULE_IN_USE = res?.Data == 1));
|
|
6364
6397
|
this.handleHeaderMenu();
|
|
6398
|
+
if (this.MODULE_IN_USE) {
|
|
6399
|
+
// Lần chạy đầu tiên
|
|
6400
|
+
this.currentModuleId = this.getParamFromRoute('moduleId') || '';
|
|
6401
|
+
if (this.currentModuleId) {
|
|
6402
|
+
this.handleUserHeaderMenu(this.currentModuleId);
|
|
6403
|
+
}
|
|
6404
|
+
// Khi chuyển trang
|
|
6405
|
+
this._router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {
|
|
6406
|
+
// Cố gắng lấy moduleId mới
|
|
6407
|
+
const newModuleId = this.getParamFromRoute('moduleId') || '';
|
|
6408
|
+
// Nếu ID thay đổi (hoặc từ có thành không có)
|
|
6409
|
+
if (newModuleId !== this.currentModuleId) {
|
|
6410
|
+
this.currentModuleId = newModuleId;
|
|
6411
|
+
if (this.currentModuleId) {
|
|
6412
|
+
// Đã vào trong 1 module cụ thể -> gọi API lấy menu
|
|
6413
|
+
this.handleUserHeaderMenu(this.currentModuleId);
|
|
6414
|
+
}
|
|
6415
|
+
else {
|
|
6416
|
+
// Đang ở màn hình ngoài (chọn module) -> reset menu, KHÔNG gọi API
|
|
6417
|
+
this.lstHeaderMenu = [];
|
|
6418
|
+
this.lstMenu = [];
|
|
6419
|
+
this.nodes = [];
|
|
6420
|
+
this.visibleMenus = [];
|
|
6421
|
+
this.hiddenMenus = [];
|
|
6422
|
+
this.cdr.detectChanges();
|
|
6423
|
+
}
|
|
6424
|
+
}
|
|
6425
|
+
});
|
|
6426
|
+
}
|
|
6427
|
+
else {
|
|
6428
|
+
this.handleUserHeaderMenu();
|
|
6429
|
+
}
|
|
6365
6430
|
this.vscService.initVersionCheck();
|
|
6366
6431
|
this.signalrService.initNoti();
|
|
6367
|
-
this.authService.getUserHeaderMenu().then((res) => {
|
|
6368
|
-
this.lstHeaderMenu = res.Data || [];
|
|
6369
|
-
if (this.lstHeaderMenu.length == 0) {
|
|
6370
|
-
this.getUserMenu();
|
|
6371
|
-
}
|
|
6372
|
-
else {
|
|
6373
|
-
setTimeout(() => {
|
|
6374
|
-
this.calculateMenuOverflow();
|
|
6375
|
-
}, 0);
|
|
6376
|
-
}
|
|
6377
|
-
});
|
|
6378
6432
|
await this.settingService.getByCodeAnonymous('MENU_TYPE').then((res) => {
|
|
6379
6433
|
if (res?.Data) {
|
|
6380
6434
|
this.MENU_TYPE = res.Data;
|
|
@@ -6426,13 +6480,31 @@ class LayoutComponent extends BaseComponent {
|
|
|
6426
6480
|
this.resizeObserver.disconnect(); // Hủy observe khi component bị destroy
|
|
6427
6481
|
}
|
|
6428
6482
|
}
|
|
6483
|
+
handleUserHeaderMenu(moduleId = '') {
|
|
6484
|
+
this.authService.getUserHeaderMenu(moduleId).then((res) => {
|
|
6485
|
+
this.lstHeaderMenu = res.Data || [];
|
|
6486
|
+
if (this.lstHeaderMenu.length == 0) {
|
|
6487
|
+
this.getUserMenu();
|
|
6488
|
+
}
|
|
6489
|
+
else {
|
|
6490
|
+
setTimeout(() => {
|
|
6491
|
+
this.calculateMenuOverflow();
|
|
6492
|
+
}, 0);
|
|
6493
|
+
}
|
|
6494
|
+
});
|
|
6495
|
+
}
|
|
6429
6496
|
handleHeaderMenu() {
|
|
6430
|
-
const headerId = this.
|
|
6431
|
-
|
|
6432
|
-
|
|
6433
|
-
|
|
6434
|
-
|
|
6435
|
-
|
|
6497
|
+
const headerId = this.getParamFromRoute('headerMenuId');
|
|
6498
|
+
console.log('headerId: ', headerId);
|
|
6499
|
+
if (headerId) {
|
|
6500
|
+
this._handleHeaderMenu(headerId);
|
|
6501
|
+
}
|
|
6502
|
+
this._router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {
|
|
6503
|
+
const updatedHeaderId = this.getParamFromRoute('headerMenuId');
|
|
6504
|
+
if (updatedHeaderId) {
|
|
6505
|
+
this._handleHeaderMenu(updatedHeaderId);
|
|
6506
|
+
}
|
|
6507
|
+
});
|
|
6436
6508
|
}
|
|
6437
6509
|
_handleHeaderMenu(menuId) {
|
|
6438
6510
|
this.getUserMenu(menuId);
|
|
@@ -6442,7 +6514,8 @@ class LayoutComponent extends BaseComponent {
|
|
|
6442
6514
|
return;
|
|
6443
6515
|
}
|
|
6444
6516
|
this.currentHeaderId = headerMenuId || '';
|
|
6445
|
-
this.
|
|
6517
|
+
this.currentModuleId = this.getParamFromRoute('moduleId') || this.currentModuleId;
|
|
6518
|
+
this.authService.getUserMenu(this.currentModuleId, this.currentHeaderId).then((res) => {
|
|
6446
6519
|
this.lstMenu = res.Data || [];
|
|
6447
6520
|
this.nodes = this.buildNzTreeFromSubMenu(this.lstMenu);
|
|
6448
6521
|
this.updateOpenMenus();
|
|
@@ -6460,6 +6533,16 @@ class LayoutComponent extends BaseComponent {
|
|
|
6460
6533
|
const keyword = this._searchValue.toLowerCase();
|
|
6461
6534
|
this.filteredLstMenu = this.filterMenuRecursive(this.lstMenu, keyword);
|
|
6462
6535
|
}
|
|
6536
|
+
getParamFromRoute(paramName) {
|
|
6537
|
+
let currentRoute = this._router.routerState.root.snapshot;
|
|
6538
|
+
while (currentRoute) {
|
|
6539
|
+
if (currentRoute.params && currentRoute.params[paramName]) {
|
|
6540
|
+
return currentRoute.params[paramName];
|
|
6541
|
+
}
|
|
6542
|
+
currentRoute = currentRoute.firstChild;
|
|
6543
|
+
}
|
|
6544
|
+
return null;
|
|
6545
|
+
}
|
|
6463
6546
|
filterMenuRecursive(menus, keyword) {
|
|
6464
6547
|
const result = [];
|
|
6465
6548
|
for (const menu of menus) {
|
|
@@ -6613,10 +6696,10 @@ class LayoutComponent extends BaseComponent {
|
|
|
6613
6696
|
}
|
|
6614
6697
|
this._handleHeaderMenu(menu.App_Menu_Id);
|
|
6615
6698
|
if (menu.Url) {
|
|
6616
|
-
this.goto(`/
|
|
6699
|
+
this.goto(`/headermenu/${menu.App_Menu_Id}${menu.Url}`);
|
|
6617
6700
|
}
|
|
6618
6701
|
else {
|
|
6619
|
-
// this.goto('/
|
|
6702
|
+
// this.goto('/headermenu/' + menu.App_Menu_Id);
|
|
6620
6703
|
}
|
|
6621
6704
|
}
|
|
6622
6705
|
openMenuDrawer() {
|
|
@@ -6689,8 +6772,16 @@ class LayoutComponent extends BaseComponent {
|
|
|
6689
6772
|
this.hiddenMenus = tempHidden;
|
|
6690
6773
|
this.cdr.detectChanges();
|
|
6691
6774
|
}
|
|
6775
|
+
gotoSelectModule() {
|
|
6776
|
+
if (this.MODULE_IN_USE) {
|
|
6777
|
+
this._router.navigateByUrl('/module');
|
|
6778
|
+
}
|
|
6779
|
+
else {
|
|
6780
|
+
this._router.navigateByUrl('/');
|
|
6781
|
+
}
|
|
6782
|
+
}
|
|
6692
6783
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LayoutComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
6693
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: LayoutComponent, isStandalone: true, selector: "layout", viewQueries: [{ propertyName: "menuContainer", first: true, predicate: ["menuContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nz-layout class=\"app-layout\">\n <nz-header class=\"app-header\">\n <div nz-row nzAlign=\"middle\" class=\"header-content\">\n @if (isCollapsed) {\n <div @fadeInOut>\n \n <button nz-button nzType=\"text\" style=\"color: var(--theme-text-color)\" (click)=\"visibleMenuDrawer = true\">\n <nz-icon nzType=\"menu\" nzTheme=\"outline\" />\n </button>\n </div>\n }\n\n <div\n class=\"header-logo\"\n [style.width]=\"!isCollapsed ? siderWidthStorage : 'auto'\"\n [style.padding-right]=\"!isCollapsed ? '0' : '16px'\"\n >\n <div nz-flex nzJustify=\"center\" nzGap=\"small\" style=\"line-height: var(--app-header-height)\">\n <img\n *ngIf=\"logoUrl$ | async as url\"\n [src]=\"url\"\n style=\"padding: 4px; height: var(--app-header-height)\"\n hideIfError\n />\n @if (SYSTEM_NAME) {\n <h2 style=\"color: whitesmoke; margin-bottom: 0\">{{ SYSTEM_NAME }}</h2>\n } @else {\n -- o0o --\n }\n </div>\n </div>\n\n <!-- header menu -->\n <div nz-col nzFlex=\"auto\" class=\"header-menu\" style=\"min-width: 0\" #menuContainer>\n <ul\n nz-menu\n nzTheme=\"light\"\n nzMode=\"horizontal\"\n style=\"display: flex; flex-wrap: nowrap; border-bottom: none; line-height: var(--app-header-height)\"\n >\n @for (item of visibleMenus; track item) {\n <li\n nz-menu-item\n [nzSelected]=\"this.currentHeaderId === item.App_Menu_Id\"\n (click)=\"handleValueChangeHeaderMenu(item)\"\n >\n <nz-icon *ngIf=\"item.Icon\" [nzType]=\"item.Icon\"></nz-icon><box [width]=\"4\"></box>{{ item.Name }}\n </li>\n }\n\n @if (hiddenMenus.length > 0) {\n <li nz-submenu nzTitle=\". . .\" style=\"padding: 0 16px\">\n <ul>\n @for (item of hiddenMenus; track item) {\n <li\n nz-menu-item\n [nzSelected]=\"this.currentHeaderId === item.App_Menu_Id\"\n (click)=\"handleValueChangeHeaderMenu(item)\"\n >\n <nz-icon *ngIf=\"item.Icon\" [nzType]=\"item.Icon\"></nz-icon><box [width]=\"4\"></box>{{ item.Name }}\n </li>\n }\n </ul>\n </li>\n }\n </ul>\n </div>\n\n <div style=\"display: flex; align-items: center; flex-shrink: 0; gap: 8px; padding-right: 16px\">\n <header-search></header-search>\n <app-notification-center></app-notification-center>\n <header-user></header-user>\n </div>\n </div>\n </nz-header>\n <nz-layout class=\"body-layout\">\n <nz-sider\n [class.hide-side-menu]=\"LayoutComponent.noShowSideMenu\"\n class=\"menu-sidebar\"\n nzCollapsible\n [nzWidth]=\"siderWidth\"\n [nzCollapsedWidth]=\"0\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\"\n [nzTheme]=\"'dark'\"\n >\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzHideUnMatched]=\"true\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper\">\n <side-menu [filteredLstMenu]=\"filteredLstMenu\" [currentHeaderId]=\"currentHeaderId\"></side-menu>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n </div>\n <div class=\"sider-footer\" style=\"height: var(--app-footer-height)\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 10px; color: lightgray\">\n {{ SYSTEM_SUB_NAME_LEFT || \"-- o0o --\" }}\n\n <span style=\"float: right\" (click)=\"triggerCollapse()\">\n <nz-icon class=\"trigger\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" nz-tooltip=\"\u1EA8n menu\" />\n </span>\n </div>\n </div>\n </nz-sider>\n <nz-layout class=\"main-layout\">\n <nz-content class=\"content\">\n <div class=\"inner-content\">\n @if (!LayoutComponent.noShowBreadcrumb) {\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\"></app-breadcrumb>\n }\n <router-outlet></router-outlet>\n </div>\n <div nz-row class=\"sider-footer\" style=\"height: var(--app-footer-height)\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 10px; color: lightgray\">\n {{ SYSTEM_SUB_NAME_RIGHT || \"-- o0o --\" }}\n </div>\n </div>\n <!-- <nz-back-top [nzTarget]=\"'.content'\" [nzVisibilityHeight]=\"500\"></nz-back-top> -->\n </nz-content>\n </nz-layout>\n </nz-layout>\n</nz-layout>\n\n<nz-drawer\n [nzWrapClassName]=\"'same-theme-color menu-drawer'\"\n [nzWidth]=\"350\"\n [nzClosable]=\"false\"\n [(nzVisible)]=\"visibleMenuDrawer\"\n [nzMaskClosable]=\"true\"\n nzPlacement=\"left\"\n nzTitle=\"\"\n (nzOnClose)=\"closeMenuDrawer()\"\n>\n <ng-container *nzDrawerContent>\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper in-drawer\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzHideUnMatched]=\"true\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper in-drawer\">\n <side-menu\n [filteredLstMenu]=\"filteredLstMenu\"\n [currentHeaderId]=\"currentHeaderId\"\n (onClickToMenu)=\"visibleMenuDrawer = false\"\n ></side-menu>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\" [nzAddOnAfter]=\"afterTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n <ng-template #afterTemplate>\n <button nz-button (click)=\"triggerCollapse(); this.visibleMenuDrawer = false\">\n <nz-icon *ngIf=\"isCollapsed\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </button>\n </ng-template>\n </div>\n </ng-container>\n</nz-drawer>\n<app-global-spinner></app-global-spinner>\n", styles: ["@charset \"UTF-8\";:host{display:flex;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bg-sidebar: #f0f2f5;--bg-content: #fff;--bg-inner: #fff;--border-color: transparent;--text-main: rgba(0, 0, 0, .85)}:host-context(.dark-theme),:host(.dark-theme){--theme-color: #303030 !important;--theme-text-color: #e1e1e1 !important;--bg-sidebar: #262626;--bg-content: #1f1f1f;--bg-inner: #1f1f1f;--border-color: #424242;--text-main: #e1e1e1}html,body,app-root{height:100%;margin:0}.app-layout{display:flex;flex-direction:column;height:100vh}.app-header{position:fixed;top:0;left:0;width:100%;height:var(--app-header-height);background:var(--theme-color);color:var(--theme-text-color);box-shadow:0 1px 4px #00152914;z-index:1000;display:flex;align-items:center;padding:0;border-bottom:1px solid var(--border-color);transition:background-color .3s ease}.header-content{width:100%;flex-wrap:nowrap!important}.header-logo{height:var(--app-header-height);text-align:center;color:var(--theme-text-color);transition:width .3s;flex-shrink:0;overflow:hidden}.body-layout{display:flex;flex:1;margin-top:var(--app-header-height);height:calc(100vh - var(--app-header-height));overflow:hidden}.menu-sidebar{width:256px;background:#f0f2f5;overflow-y:auto;overflow-x:hidden;transition:all .3s cubic-bezier(.25,.8,.25,1)!important;min-height:calc(100vh - var(--app-header-height))}.menu-sidebar.hide-side-menu{flex:0 0 0px!important;max-width:0px!important;min-width:0px!important;width:0px!important}.menu-wapper{min-height:calc(100% - var(--app-footer-height))}.main-layout{display:flex;flex-direction:column;flex:1;overflow:hidden}.content{flex:1;background:var(--bg-content);overflow-x:hidden;overflow-y:auto;height:100%}.inner-content{background:var(--bg-inner);color:var(--text-main);min-height:calc(100% - var(--app-footer-height));padding:8px;box-sizing:border-box}.content-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:center}.sider-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:right}.trigger{margin-right:8px}.menu-sidebar .ant-menu-inline .ant-menu-item{margin-top:0;margin-bottom:0}::ng-deep .menu-wapper .anticon-file{display:none}:host ::ng-deep .ant-back-top{right:30px;bottom:40px}::ng-deep .same-theme-color .ant-drawer-content{background:var(--theme-menu-color)}.nz-tree-wapper{height:calc(100vh - var(--app-header-height) - var(--app-footer-height) - 32px);overflow-y:auto}.nz-tree-wapper.in-drawer{height:calc(100vh - 32px);overflow-y:auto}::ng-deep .menu-drawer .ant-drawer-body{padding:0}::ng-deep .ant-breadcrumb-link{cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-link{color:var(--theme-text-color);cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item:not(.ant-segmented-item-selected){color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item{border-left:1px solid}::ng-deep .header-menu .ant-segmented-item:last-child{border-right:1px solid}.suffix-wrap{position:relative;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.suffix-icon{position:absolute;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .16s ease,transform .18s cubic-bezier(.4,0,.2,1);transform:scale(.6) translate(4px)}.suffix-icon.show{opacity:1;pointer-events:auto;transform:scale(1) translate(0)}.search{color:#00000073}.delete{color:#bfbfbf}.delete.show{animation:popIn .18s ease}::ng-deep .header-menu .ant-menu-horizontal{background-color:transparent!important;border-bottom:none!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu{color:var(--theme-text-color)!important;opacity:.85;font-weight:600}::ng-deep .header-menu .ant-menu-submenu-title .anticon{color:var(--theme-text-color)!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item:hover,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu:hover,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item-selected,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-open,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-selected{color:var(--theme-text-color)!important;opacity:1;background-color:#ffffff1a!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item:hover:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu:hover:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item-selected:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-open:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-selected:after{border-bottom-color:#40a9ff!important}@keyframes popIn{0%{transform:scale(.5)}70%{transform:scale(1.15)}to{transform:scale(1)}}:host-context(.dark-theme) .content-footer,:host-context(.dark-theme) .sider-footer{background-color:var(--bg-sidebar);border-top:1px solid var(--border-color)}:host-context(.dark-theme) ::ng-deep .menu-sidebar .ant-tree,:host-context(.dark-theme) ::ng-deep .menu-drawer .ant-tree{background:transparent;color:var(--text-main)}:host-context(.dark-theme) ::ng-deep .ant-tree-node-content-wrapper:hover{background-color:#ffffff14!important}:host-context(.dark-theme) ::ng-deep .ant-tree-node-selected{background-color:#ffffff1f!important;color:#fff!important}:host-context(.dark-theme) ::ng-deep .menu-wapper .ant-input,:host-context(.dark-theme) ::ng-deep .menu-wapper .ant-input-group-addon{background-color:var(--bg-content);border-color:var(--border-color);color:var(--text-main)}:host-context(.dark-theme) ::ng-deep .menu-wapper .search,:host-context(.dark-theme) ::ng-deep .menu-wapper .delete{color:#8c8c8c}:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-link,:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:#8c8c8c!important}:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-link:hover{color:var(--text-main)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: NzLayoutModule }, { kind: "component", type: i2$5.NzLayoutComponent, selector: "nz-layout", exportAs: ["nzLayout"] }, { kind: "component", type: i2$5.NzHeaderComponent, selector: "nz-header", exportAs: ["nzHeader"] }, { kind: "component", type: i2$5.NzContentComponent, selector: "nz-content", exportAs: ["nzContent"] }, { kind: "component", type: i2$5.NzSiderComponent, selector: "nz-sider", inputs: ["nzWidth", "nzTheme", "nzCollapsedWidth", "nzBreakpoint", "nzZeroTrigger", "nzTrigger", "nzReverseArrow", "nzCollapsible", "nzCollapsed"], outputs: ["nzCollapsedChange"], exportAs: ["nzSider"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i4$3.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$3.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "component", type: i4$3.NzSubMenuComponent, selector: "[nz-submenu]", inputs: ["nzMenuClassName", "nzPaddingLeft", "nzTitle", "nzIcon", "nzTriggerSubMenuAction", "nzOpen", "nzDisabled", "nzPlacement"], outputs: ["nzOpenChange"], exportAs: ["nzSubmenu"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$5.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$2.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4$1.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "component", type: Breadcrumb, selector: "app-breadcrumb" }, { kind: "ngmodule", type: NzTreeModule }, { kind: "component", type: i10$1.NzTreeComponent, selector: "nz-tree", inputs: ["nzShowIcon", "nzHideUnMatched", "nzBlockNode", "nzExpandAll", "nzSelectMode", "nzCheckStrictly", "nzShowExpand", "nzShowLine", "nzCheckable", "nzAsyncData", "nzDraggable", "nzMultiple", "nzExpandedIcon", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzTreeTemplate", "nzBeforeDrop", "nzData", "nzExpandedKeys", "nzSelectedKeys", "nzCheckedKeys", "nzSearchValue", "nzSearchFunc"], outputs: ["nzExpandedKeysChange", "nzSelectedKeysChange", "nzCheckedKeysChange", "nzSearchValueChange", "nzClick", "nzDblClick", "nzContextMenu", "nzCheckboxChange", "nzExpandChange", "nzOnDragStart", "nzOnDragEnter", "nzOnDragOver", "nzOnDragLeave", "nzOnDrop", "nzOnDragEnd"], exportAs: ["nzTree"] }, { kind: "ngmodule", type: NzBackTopModule }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "component", type: i3$4.NzDrawerComponent, selector: "nz-drawer", inputs: ["nzContent", "nzCloseIcon", "nzClosable", "nzMaskClosable", "nzMask", "nzCloseOnNavigation", "nzNoAnimation", "nzKeyboard", "nzTitle", "nzExtra", "nzFooter", "nzPlacement", "nzSize", "nzMaskStyle", "nzBodyStyle", "nzWrapClassName", "nzWidth", "nzHeight", "nzZIndex", "nzOffsetX", "nzOffsetY", "nzVisible"], outputs: ["nzOnViewInit", "nzOnClose", "nzVisibleChange"], exportAs: ["nzDrawer"] }, { kind: "directive", type: i3$4.NzDrawerContentDirective, selector: "[nzDrawerContent]", exportAs: ["nzDrawerContent"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i6.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i6.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzSegmentedModule }, { kind: "component", type: LayoutUser, selector: "header-user" }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconSearch, selector: "icon-search", inputs: ["size"], outputs: ["click"] }, { kind: "directive", type: HideIfErrorDirective, selector: "img[hideIfError]" }, { kind: "component", type: NotificationCenterComponent, selector: "app-notification-center" }, { kind: "component", type: HeaderSearchComponent, selector: "header-search", inputs: ["searchValue"], outputs: ["searchValueChange", "onSearch"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i8.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "ngmodule", type: NzMenuModule }, { kind: "component", type: SideMenuComponent, selector: "side-menu", inputs: ["filteredLstMenu", "currentHeaderId"], outputs: ["onClickToMenu"] }, { kind: "component", type: GlobalSpinnerComponent, selector: "app-global-spinner" }], animations: [fadeInOut] });
|
|
6784
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: LayoutComponent, isStandalone: true, selector: "layout", viewQueries: [{ propertyName: "menuContainer", first: true, predicate: ["menuContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nz-layout class=\"app-layout\">\n <nz-header class=\"app-header\">\n <div nz-row nzAlign=\"middle\" class=\"header-content\">\n @if (isCollapsed) {\n <div @fadeInOut>\n \n <button nz-button nzType=\"text\" style=\"color: var(--theme-text-color)\" (click)=\"visibleMenuDrawer = true\">\n <nz-icon nzType=\"menu\" nzTheme=\"outline\" />\n </button>\n </div>\n }\n\n <div\n class=\"header-logo\"\n [style.width]=\"!isCollapsed ? siderWidthStorage : 'auto'\"\n [style.padding-right]=\"!isCollapsed ? '0' : '16px'\"\n >\n <div\n nz-flex\n nzJustify=\"center\"\n nzGap=\"small\"\n style=\"line-height: var(--app-header-height); cursor: pointer\"\n (click)=\"gotoSelectModule()\"\n >\n <img\n *ngIf=\"logoUrl$ | async as url\"\n [src]=\"url\"\n style=\"padding: 4px; height: var(--app-header-height)\"\n hideIfError\n />\n @if (SYSTEM_NAME) {\n <h2 style=\"color: whitesmoke; margin-bottom: 0\">{{ SYSTEM_NAME }}</h2>\n } @else {\n -- o0o --\n }\n </div>\n </div>\n\n <!-- header menu -->\n <div nz-col nzFlex=\"auto\" class=\"header-menu\" style=\"min-width: 0\" #menuContainer>\n <ul\n *ngIf=\"!LayoutComponent.noShowHeaderMenu\"\n nz-menu\n nzTheme=\"light\"\n nzMode=\"horizontal\"\n style=\"display: flex; flex-wrap: nowrap; border-bottom: none; line-height: var(--app-header-height)\"\n >\n @for (item of visibleMenus; track item) {\n <li\n nz-menu-item\n [nzSelected]=\"this.currentHeaderId === item.App_Menu_Id\"\n (click)=\"handleValueChangeHeaderMenu(item)\"\n >\n <nz-icon *ngIf=\"item.Icon\" [nzType]=\"item.Icon\"></nz-icon><box [width]=\"4\"></box>{{ item.Name }}\n </li>\n }\n\n @if (hiddenMenus.length > 0) {\n <li nz-submenu nzTitle=\". . .\" style=\"padding: 0 16px\">\n <ul>\n @for (item of hiddenMenus; track item) {\n <li\n nz-menu-item\n [nzSelected]=\"this.currentHeaderId === item.App_Menu_Id\"\n (click)=\"handleValueChangeHeaderMenu(item)\"\n >\n <nz-icon *ngIf=\"item.Icon\" [nzType]=\"item.Icon\"></nz-icon><box [width]=\"4\"></box>{{ item.Name }}\n </li>\n }\n </ul>\n </li>\n }\n </ul>\n </div>\n\n <div style=\"display: flex; align-items: center; flex-shrink: 0; gap: 8px; padding-right: 16px\">\n <header-search></header-search>\n <app-notification-center></app-notification-center>\n <header-user></header-user>\n </div>\n </div>\n </nz-header>\n <nz-layout class=\"body-layout\">\n <nz-sider\n [class.hide-side-menu]=\"LayoutComponent.noShowSideMenu\"\n class=\"menu-sidebar\"\n nzCollapsible\n [nzWidth]=\"siderWidth\"\n [nzCollapsedWidth]=\"0\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\"\n [nzTheme]=\"'dark'\"\n >\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzHideUnMatched]=\"true\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper\">\n <side-menu\n [filteredLstMenu]=\"filteredLstMenu\"\n [moduleId]=\"currentModuleId\"\n [headerMenuId]=\"currentHeaderId\"\n ></side-menu>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n </div>\n <div class=\"sider-footer\" style=\"height: var(--app-footer-height)\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 10px; color: lightgray\">\n {{ SYSTEM_SUB_NAME_LEFT || \"-- o0o --\" }}\n\n <span style=\"float: right\" (click)=\"triggerCollapse()\">\n <nz-icon class=\"trigger\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" nz-tooltip=\"\u1EA8n menu\" />\n </span>\n </div>\n </div>\n </nz-sider>\n <nz-layout class=\"main-layout\">\n <nz-content class=\"content\">\n <div class=\"inner-content\">\n @if (!LayoutComponent.noShowBreadcrumb) {\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\"></app-breadcrumb>\n }\n <router-outlet></router-outlet>\n </div>\n <div nz-row class=\"sider-footer\" style=\"height: var(--app-footer-height)\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 10px; color: lightgray\">\n {{ SYSTEM_SUB_NAME_RIGHT || \"-- o0o --\" }}\n </div>\n </div>\n <!-- <nz-back-top [nzTarget]=\"'.content'\" [nzVisibilityHeight]=\"500\"></nz-back-top> -->\n </nz-content>\n </nz-layout>\n </nz-layout>\n</nz-layout>\n\n<nz-drawer\n [nzWrapClassName]=\"'same-theme-color menu-drawer'\"\n [nzWidth]=\"350\"\n [nzClosable]=\"false\"\n [(nzVisible)]=\"visibleMenuDrawer\"\n [nzMaskClosable]=\"true\"\n nzPlacement=\"left\"\n nzTitle=\"\"\n (nzOnClose)=\"closeMenuDrawer()\"\n>\n <ng-container *nzDrawerContent>\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper in-drawer\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzHideUnMatched]=\"true\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper in-drawer\">\n <side-menu\n [filteredLstMenu]=\"filteredLstMenu\"\n [moduleId]=\"currentModuleId\"\n [headerMenuId]=\"currentHeaderId\"\n (onClickToMenu)=\"visibleMenuDrawer = false\"\n ></side-menu>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\" [nzAddOnAfter]=\"afterTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n <ng-template #afterTemplate>\n <button nz-button (click)=\"triggerCollapse(); this.visibleMenuDrawer = false\">\n <nz-icon *ngIf=\"isCollapsed\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </button>\n </ng-template>\n </div>\n </ng-container>\n</nz-drawer>\n<app-global-spinner></app-global-spinner>\n", styles: ["@charset \"UTF-8\";:host{display:flex;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bg-sidebar: #f0f2f5;--bg-content: #fff;--bg-inner: #fff;--border-color: transparent;--text-main: rgba(0, 0, 0, .85)}:host-context(.dark-theme),:host(.dark-theme){--theme-color: #303030 !important;--theme-text-color: #e1e1e1 !important;--bg-sidebar: #262626;--bg-content: #1f1f1f;--bg-inner: #1f1f1f;--border-color: #424242;--text-main: #e1e1e1}html,body,app-root{height:100%;margin:0}.app-layout{display:flex;flex-direction:column;height:100vh}.app-header{position:fixed;top:0;left:0;width:100%;height:var(--app-header-height);background:var(--theme-color);color:var(--theme-text-color);box-shadow:0 1px 4px #00152914;z-index:1000;display:flex;align-items:center;padding:0;border-bottom:1px solid var(--border-color);transition:background-color .3s ease}.header-content{width:100%;flex-wrap:nowrap!important}.header-logo{height:var(--app-header-height);text-align:center;color:var(--theme-text-color);transition:width .3s;flex-shrink:0;overflow:hidden}.body-layout{display:flex;flex:1;margin-top:var(--app-header-height);height:calc(100vh - var(--app-header-height));overflow:hidden}.menu-sidebar{width:256px;background:#f0f2f5;overflow-y:auto;overflow-x:hidden;transition:all .3s cubic-bezier(.25,.8,.25,1)!important;min-height:calc(100vh - var(--app-header-height))}.menu-sidebar.hide-side-menu{flex:0 0 0px!important;max-width:0px!important;min-width:0px!important;width:0px!important}.menu-wapper{min-height:calc(100% - var(--app-footer-height))}.main-layout{display:flex;flex-direction:column;flex:1;overflow:hidden}.content{flex:1;background:var(--bg-content);overflow-x:hidden;overflow-y:auto;height:100%}.inner-content{background:var(--bg-inner);color:var(--text-main);min-height:calc(100% - var(--app-footer-height));padding:8px;box-sizing:border-box}.content-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:center}.sider-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:right}.trigger{margin-right:8px}.menu-sidebar .ant-menu-inline .ant-menu-item{margin-top:0;margin-bottom:0}::ng-deep .menu-wapper .anticon-file{display:none}:host ::ng-deep .ant-back-top{right:30px;bottom:40px}::ng-deep .same-theme-color .ant-drawer-content{background:var(--theme-menu-color)}.nz-tree-wapper{height:calc(100vh - var(--app-header-height) - var(--app-footer-height) - 32px);overflow-y:auto}.nz-tree-wapper.in-drawer{height:calc(100vh - 32px);overflow-y:auto}::ng-deep .menu-drawer .ant-drawer-body{padding:0}::ng-deep .ant-breadcrumb-link{cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-link{color:var(--theme-text-color);cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item:not(.ant-segmented-item-selected){color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item{border-left:1px solid}::ng-deep .header-menu .ant-segmented-item:last-child{border-right:1px solid}.suffix-wrap{position:relative;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.suffix-icon{position:absolute;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .16s ease,transform .18s cubic-bezier(.4,0,.2,1);transform:scale(.6) translate(4px)}.suffix-icon.show{opacity:1;pointer-events:auto;transform:scale(1) translate(0)}.search{color:#00000073}.delete{color:#bfbfbf}.delete.show{animation:popIn .18s ease}::ng-deep .header-menu .ant-menu-horizontal{background-color:transparent!important;border-bottom:none!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu{color:var(--theme-text-color)!important;opacity:.85;font-weight:600}::ng-deep .header-menu .ant-menu-submenu-title .anticon{color:var(--theme-text-color)!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item:hover,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu:hover,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item-selected,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-open,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-selected{color:var(--theme-text-color)!important;opacity:1;background-color:#ffffff1a!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item:hover:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu:hover:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item-selected:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-open:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-selected:after{border-bottom-color:#40a9ff!important}@keyframes popIn{0%{transform:scale(.5)}70%{transform:scale(1.15)}to{transform:scale(1)}}:host-context(.dark-theme) .content-footer,:host-context(.dark-theme) .sider-footer{background-color:var(--bg-sidebar);border-top:1px solid var(--border-color)}:host-context(.dark-theme) ::ng-deep .menu-sidebar .ant-tree,:host-context(.dark-theme) ::ng-deep .menu-drawer .ant-tree{background:transparent;color:var(--text-main)}:host-context(.dark-theme) ::ng-deep .ant-tree-node-content-wrapper:hover{background-color:#ffffff14!important}:host-context(.dark-theme) ::ng-deep .ant-tree-node-selected{background-color:#ffffff1f!important;color:#fff!important}:host-context(.dark-theme) ::ng-deep .menu-wapper .ant-input,:host-context(.dark-theme) ::ng-deep .menu-wapper .ant-input-group-addon{background-color:var(--bg-content);border-color:var(--border-color);color:var(--text-main)}:host-context(.dark-theme) ::ng-deep .menu-wapper .search,:host-context(.dark-theme) ::ng-deep .menu-wapper .delete{color:#8c8c8c}:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-link,:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:#8c8c8c!important}:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-link:hover{color:var(--text-main)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: NzLayoutModule }, { kind: "component", type: i2$5.NzLayoutComponent, selector: "nz-layout", exportAs: ["nzLayout"] }, { kind: "component", type: i2$5.NzHeaderComponent, selector: "nz-header", exportAs: ["nzHeader"] }, { kind: "component", type: i2$5.NzContentComponent, selector: "nz-content", exportAs: ["nzContent"] }, { kind: "component", type: i2$5.NzSiderComponent, selector: "nz-sider", inputs: ["nzWidth", "nzTheme", "nzCollapsedWidth", "nzBreakpoint", "nzZeroTrigger", "nzTrigger", "nzReverseArrow", "nzCollapsible", "nzCollapsed"], outputs: ["nzCollapsedChange"], exportAs: ["nzSider"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i4$3.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$3.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "component", type: i4$3.NzSubMenuComponent, selector: "[nz-submenu]", inputs: ["nzMenuClassName", "nzPaddingLeft", "nzTitle", "nzIcon", "nzTriggerSubMenuAction", "nzOpen", "nzDisabled", "nzPlacement"], outputs: ["nzOpenChange"], exportAs: ["nzSubmenu"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$5.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$2.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4$1.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "component", type: Breadcrumb, selector: "app-breadcrumb" }, { kind: "ngmodule", type: NzTreeModule }, { kind: "component", type: i10$1.NzTreeComponent, selector: "nz-tree", inputs: ["nzShowIcon", "nzHideUnMatched", "nzBlockNode", "nzExpandAll", "nzSelectMode", "nzCheckStrictly", "nzShowExpand", "nzShowLine", "nzCheckable", "nzAsyncData", "nzDraggable", "nzMultiple", "nzExpandedIcon", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzTreeTemplate", "nzBeforeDrop", "nzData", "nzExpandedKeys", "nzSelectedKeys", "nzCheckedKeys", "nzSearchValue", "nzSearchFunc"], outputs: ["nzExpandedKeysChange", "nzSelectedKeysChange", "nzCheckedKeysChange", "nzSearchValueChange", "nzClick", "nzDblClick", "nzContextMenu", "nzCheckboxChange", "nzExpandChange", "nzOnDragStart", "nzOnDragEnter", "nzOnDragOver", "nzOnDragLeave", "nzOnDrop", "nzOnDragEnd"], exportAs: ["nzTree"] }, { kind: "ngmodule", type: NzBackTopModule }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "component", type: i3$4.NzDrawerComponent, selector: "nz-drawer", inputs: ["nzContent", "nzCloseIcon", "nzClosable", "nzMaskClosable", "nzMask", "nzCloseOnNavigation", "nzNoAnimation", "nzKeyboard", "nzTitle", "nzExtra", "nzFooter", "nzPlacement", "nzSize", "nzMaskStyle", "nzBodyStyle", "nzWrapClassName", "nzWidth", "nzHeight", "nzZIndex", "nzOffsetX", "nzOffsetY", "nzVisible"], outputs: ["nzOnViewInit", "nzOnClose", "nzVisibleChange"], exportAs: ["nzDrawer"] }, { kind: "directive", type: i3$4.NzDrawerContentDirective, selector: "[nzDrawerContent]", exportAs: ["nzDrawerContent"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i6.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i6.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzSegmentedModule }, { kind: "component", type: LayoutUser, selector: "header-user" }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconSearch, selector: "icon-search", inputs: ["size"], outputs: ["click"] }, { kind: "directive", type: HideIfErrorDirective, selector: "img[hideIfError]" }, { kind: "component", type: NotificationCenterComponent, selector: "app-notification-center" }, { kind: "component", type: HeaderSearchComponent, selector: "header-search", inputs: ["searchValue"], outputs: ["searchValueChange", "onSearch"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i8.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "ngmodule", type: NzMenuModule }, { kind: "component", type: SideMenuComponent, selector: "side-menu", inputs: ["filteredLstMenu", "moduleId", "headerMenuId"], outputs: ["onClickToMenu"] }, { kind: "component", type: GlobalSpinnerComponent, selector: "app-global-spinner" }], animations: [fadeInOut] });
|
|
6694
6785
|
}
|
|
6695
6786
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LayoutComponent, decorators: [{
|
|
6696
6787
|
type: Component,
|
|
@@ -6723,13 +6814,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
|
|
|
6723
6814
|
NzMenuModule,
|
|
6724
6815
|
SideMenuComponent,
|
|
6725
6816
|
GlobalSpinnerComponent,
|
|
6726
|
-
], animations: [fadeInOut], template: "<nz-layout class=\"app-layout\">\n <nz-header class=\"app-header\">\n <div nz-row nzAlign=\"middle\" class=\"header-content\">\n @if (isCollapsed) {\n <div @fadeInOut>\n \n <button nz-button nzType=\"text\" style=\"color: var(--theme-text-color)\" (click)=\"visibleMenuDrawer = true\">\n <nz-icon nzType=\"menu\" nzTheme=\"outline\" />\n </button>\n </div>\n }\n\n <div\n class=\"header-logo\"\n [style.width]=\"!isCollapsed ? siderWidthStorage : 'auto'\"\n [style.padding-right]=\"!isCollapsed ? '0' : '16px'\"\n >\n <div nz-flex nzJustify=\"center\" nzGap=\"small\" style=\"line-height: var(--app-header-height)\">\n <img\n *ngIf=\"logoUrl$ | async as url\"\n [src]=\"url\"\n style=\"padding: 4px; height: var(--app-header-height)\"\n hideIfError\n />\n @if (SYSTEM_NAME) {\n <h2 style=\"color: whitesmoke; margin-bottom: 0\">{{ SYSTEM_NAME }}</h2>\n } @else {\n -- o0o --\n }\n </div>\n </div>\n\n <!-- header menu -->\n <div nz-col nzFlex=\"auto\" class=\"header-menu\" style=\"min-width: 0\" #menuContainer>\n <ul\n nz-menu\n nzTheme=\"light\"\n nzMode=\"horizontal\"\n style=\"display: flex; flex-wrap: nowrap; border-bottom: none; line-height: var(--app-header-height)\"\n >\n @for (item of visibleMenus; track item) {\n <li\n nz-menu-item\n [nzSelected]=\"this.currentHeaderId === item.App_Menu_Id\"\n (click)=\"handleValueChangeHeaderMenu(item)\"\n >\n <nz-icon *ngIf=\"item.Icon\" [nzType]=\"item.Icon\"></nz-icon><box [width]=\"4\"></box>{{ item.Name }}\n </li>\n }\n\n @if (hiddenMenus.length > 0) {\n <li nz-submenu nzTitle=\". . .\" style=\"padding: 0 16px\">\n <ul>\n @for (item of hiddenMenus; track item) {\n <li\n nz-menu-item\n [nzSelected]=\"this.currentHeaderId === item.App_Menu_Id\"\n (click)=\"handleValueChangeHeaderMenu(item)\"\n >\n <nz-icon *ngIf=\"item.Icon\" [nzType]=\"item.Icon\"></nz-icon><box [width]=\"4\"></box>{{ item.Name }}\n </li>\n }\n </ul>\n </li>\n }\n </ul>\n </div>\n\n <div style=\"display: flex; align-items: center; flex-shrink: 0; gap: 8px; padding-right: 16px\">\n <header-search></header-search>\n <app-notification-center></app-notification-center>\n <header-user></header-user>\n </div>\n </div>\n </nz-header>\n <nz-layout class=\"body-layout\">\n <nz-sider\n [class.hide-side-menu]=\"LayoutComponent.noShowSideMenu\"\n class=\"menu-sidebar\"\n nzCollapsible\n [nzWidth]=\"siderWidth\"\n [nzCollapsedWidth]=\"0\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\"\n [nzTheme]=\"'dark'\"\n >\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzHideUnMatched]=\"true\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper\">\n <side-menu [filteredLstMenu]=\"filteredLstMenu\" [currentHeaderId]=\"currentHeaderId\"></side-menu>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n </div>\n <div class=\"sider-footer\" style=\"height: var(--app-footer-height)\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 10px; color: lightgray\">\n {{ SYSTEM_SUB_NAME_LEFT || \"-- o0o --\" }}\n\n <span style=\"float: right\" (click)=\"triggerCollapse()\">\n <nz-icon class=\"trigger\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" nz-tooltip=\"\u1EA8n menu\" />\n </span>\n </div>\n </div>\n </nz-sider>\n <nz-layout class=\"main-layout\">\n <nz-content class=\"content\">\n <div class=\"inner-content\">\n @if (!LayoutComponent.noShowBreadcrumb) {\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\"></app-breadcrumb>\n }\n <router-outlet></router-outlet>\n </div>\n <div nz-row class=\"sider-footer\" style=\"height: var(--app-footer-height)\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 10px; color: lightgray\">\n {{ SYSTEM_SUB_NAME_RIGHT || \"-- o0o --\" }}\n </div>\n </div>\n <!-- <nz-back-top [nzTarget]=\"'.content'\" [nzVisibilityHeight]=\"500\"></nz-back-top> -->\n </nz-content>\n </nz-layout>\n </nz-layout>\n</nz-layout>\n\n<nz-drawer\n [nzWrapClassName]=\"'same-theme-color menu-drawer'\"\n [nzWidth]=\"350\"\n [nzClosable]=\"false\"\n [(nzVisible)]=\"visibleMenuDrawer\"\n [nzMaskClosable]=\"true\"\n nzPlacement=\"left\"\n nzTitle=\"\"\n (nzOnClose)=\"closeMenuDrawer()\"\n>\n <ng-container *nzDrawerContent>\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper in-drawer\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzHideUnMatched]=\"true\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper in-drawer\">\n <side-menu\n [filteredLstMenu]=\"filteredLstMenu\"\n [currentHeaderId]=\"currentHeaderId\"\n (onClickToMenu)=\"visibleMenuDrawer = false\"\n ></side-menu>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\" [nzAddOnAfter]=\"afterTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n <ng-template #afterTemplate>\n <button nz-button (click)=\"triggerCollapse(); this.visibleMenuDrawer = false\">\n <nz-icon *ngIf=\"isCollapsed\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </button>\n </ng-template>\n </div>\n </ng-container>\n</nz-drawer>\n<app-global-spinner></app-global-spinner>\n", styles: ["@charset \"UTF-8\";:host{display:flex;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bg-sidebar: #f0f2f5;--bg-content: #fff;--bg-inner: #fff;--border-color: transparent;--text-main: rgba(0, 0, 0, .85)}:host-context(.dark-theme),:host(.dark-theme){--theme-color: #303030 !important;--theme-text-color: #e1e1e1 !important;--bg-sidebar: #262626;--bg-content: #1f1f1f;--bg-inner: #1f1f1f;--border-color: #424242;--text-main: #e1e1e1}html,body,app-root{height:100%;margin:0}.app-layout{display:flex;flex-direction:column;height:100vh}.app-header{position:fixed;top:0;left:0;width:100%;height:var(--app-header-height);background:var(--theme-color);color:var(--theme-text-color);box-shadow:0 1px 4px #00152914;z-index:1000;display:flex;align-items:center;padding:0;border-bottom:1px solid var(--border-color);transition:background-color .3s ease}.header-content{width:100%;flex-wrap:nowrap!important}.header-logo{height:var(--app-header-height);text-align:center;color:var(--theme-text-color);transition:width .3s;flex-shrink:0;overflow:hidden}.body-layout{display:flex;flex:1;margin-top:var(--app-header-height);height:calc(100vh - var(--app-header-height));overflow:hidden}.menu-sidebar{width:256px;background:#f0f2f5;overflow-y:auto;overflow-x:hidden;transition:all .3s cubic-bezier(.25,.8,.25,1)!important;min-height:calc(100vh - var(--app-header-height))}.menu-sidebar.hide-side-menu{flex:0 0 0px!important;max-width:0px!important;min-width:0px!important;width:0px!important}.menu-wapper{min-height:calc(100% - var(--app-footer-height))}.main-layout{display:flex;flex-direction:column;flex:1;overflow:hidden}.content{flex:1;background:var(--bg-content);overflow-x:hidden;overflow-y:auto;height:100%}.inner-content{background:var(--bg-inner);color:var(--text-main);min-height:calc(100% - var(--app-footer-height));padding:8px;box-sizing:border-box}.content-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:center}.sider-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:right}.trigger{margin-right:8px}.menu-sidebar .ant-menu-inline .ant-menu-item{margin-top:0;margin-bottom:0}::ng-deep .menu-wapper .anticon-file{display:none}:host ::ng-deep .ant-back-top{right:30px;bottom:40px}::ng-deep .same-theme-color .ant-drawer-content{background:var(--theme-menu-color)}.nz-tree-wapper{height:calc(100vh - var(--app-header-height) - var(--app-footer-height) - 32px);overflow-y:auto}.nz-tree-wapper.in-drawer{height:calc(100vh - 32px);overflow-y:auto}::ng-deep .menu-drawer .ant-drawer-body{padding:0}::ng-deep .ant-breadcrumb-link{cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-link{color:var(--theme-text-color);cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item:not(.ant-segmented-item-selected){color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item{border-left:1px solid}::ng-deep .header-menu .ant-segmented-item:last-child{border-right:1px solid}.suffix-wrap{position:relative;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.suffix-icon{position:absolute;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .16s ease,transform .18s cubic-bezier(.4,0,.2,1);transform:scale(.6) translate(4px)}.suffix-icon.show{opacity:1;pointer-events:auto;transform:scale(1) translate(0)}.search{color:#00000073}.delete{color:#bfbfbf}.delete.show{animation:popIn .18s ease}::ng-deep .header-menu .ant-menu-horizontal{background-color:transparent!important;border-bottom:none!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu{color:var(--theme-text-color)!important;opacity:.85;font-weight:600}::ng-deep .header-menu .ant-menu-submenu-title .anticon{color:var(--theme-text-color)!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item:hover,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu:hover,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item-selected,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-open,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-selected{color:var(--theme-text-color)!important;opacity:1;background-color:#ffffff1a!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item:hover:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu:hover:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item-selected:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-open:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-selected:after{border-bottom-color:#40a9ff!important}@keyframes popIn{0%{transform:scale(.5)}70%{transform:scale(1.15)}to{transform:scale(1)}}:host-context(.dark-theme) .content-footer,:host-context(.dark-theme) .sider-footer{background-color:var(--bg-sidebar);border-top:1px solid var(--border-color)}:host-context(.dark-theme) ::ng-deep .menu-sidebar .ant-tree,:host-context(.dark-theme) ::ng-deep .menu-drawer .ant-tree{background:transparent;color:var(--text-main)}:host-context(.dark-theme) ::ng-deep .ant-tree-node-content-wrapper:hover{background-color:#ffffff14!important}:host-context(.dark-theme) ::ng-deep .ant-tree-node-selected{background-color:#ffffff1f!important;color:#fff!important}:host-context(.dark-theme) ::ng-deep .menu-wapper .ant-input,:host-context(.dark-theme) ::ng-deep .menu-wapper .ant-input-group-addon{background-color:var(--bg-content);border-color:var(--border-color);color:var(--text-main)}:host-context(.dark-theme) ::ng-deep .menu-wapper .search,:host-context(.dark-theme) ::ng-deep .menu-wapper .delete{color:#8c8c8c}:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-link,:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:#8c8c8c!important}:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-link:hover{color:var(--text-main)!important}\n"] }]
|
|
6817
|
+
], animations: [fadeInOut], template: "<nz-layout class=\"app-layout\">\n <nz-header class=\"app-header\">\n <div nz-row nzAlign=\"middle\" class=\"header-content\">\n @if (isCollapsed) {\n <div @fadeInOut>\n \n <button nz-button nzType=\"text\" style=\"color: var(--theme-text-color)\" (click)=\"visibleMenuDrawer = true\">\n <nz-icon nzType=\"menu\" nzTheme=\"outline\" />\n </button>\n </div>\n }\n\n <div\n class=\"header-logo\"\n [style.width]=\"!isCollapsed ? siderWidthStorage : 'auto'\"\n [style.padding-right]=\"!isCollapsed ? '0' : '16px'\"\n >\n <div\n nz-flex\n nzJustify=\"center\"\n nzGap=\"small\"\n style=\"line-height: var(--app-header-height); cursor: pointer\"\n (click)=\"gotoSelectModule()\"\n >\n <img\n *ngIf=\"logoUrl$ | async as url\"\n [src]=\"url\"\n style=\"padding: 4px; height: var(--app-header-height)\"\n hideIfError\n />\n @if (SYSTEM_NAME) {\n <h2 style=\"color: whitesmoke; margin-bottom: 0\">{{ SYSTEM_NAME }}</h2>\n } @else {\n -- o0o --\n }\n </div>\n </div>\n\n <!-- header menu -->\n <div nz-col nzFlex=\"auto\" class=\"header-menu\" style=\"min-width: 0\" #menuContainer>\n <ul\n *ngIf=\"!LayoutComponent.noShowHeaderMenu\"\n nz-menu\n nzTheme=\"light\"\n nzMode=\"horizontal\"\n style=\"display: flex; flex-wrap: nowrap; border-bottom: none; line-height: var(--app-header-height)\"\n >\n @for (item of visibleMenus; track item) {\n <li\n nz-menu-item\n [nzSelected]=\"this.currentHeaderId === item.App_Menu_Id\"\n (click)=\"handleValueChangeHeaderMenu(item)\"\n >\n <nz-icon *ngIf=\"item.Icon\" [nzType]=\"item.Icon\"></nz-icon><box [width]=\"4\"></box>{{ item.Name }}\n </li>\n }\n\n @if (hiddenMenus.length > 0) {\n <li nz-submenu nzTitle=\". . .\" style=\"padding: 0 16px\">\n <ul>\n @for (item of hiddenMenus; track item) {\n <li\n nz-menu-item\n [nzSelected]=\"this.currentHeaderId === item.App_Menu_Id\"\n (click)=\"handleValueChangeHeaderMenu(item)\"\n >\n <nz-icon *ngIf=\"item.Icon\" [nzType]=\"item.Icon\"></nz-icon><box [width]=\"4\"></box>{{ item.Name }}\n </li>\n }\n </ul>\n </li>\n }\n </ul>\n </div>\n\n <div style=\"display: flex; align-items: center; flex-shrink: 0; gap: 8px; padding-right: 16px\">\n <header-search></header-search>\n <app-notification-center></app-notification-center>\n <header-user></header-user>\n </div>\n </div>\n </nz-header>\n <nz-layout class=\"body-layout\">\n <nz-sider\n [class.hide-side-menu]=\"LayoutComponent.noShowSideMenu\"\n class=\"menu-sidebar\"\n nzCollapsible\n [nzWidth]=\"siderWidth\"\n [nzCollapsedWidth]=\"0\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\"\n [nzTheme]=\"'dark'\"\n >\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzHideUnMatched]=\"true\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper\">\n <side-menu\n [filteredLstMenu]=\"filteredLstMenu\"\n [moduleId]=\"currentModuleId\"\n [headerMenuId]=\"currentHeaderId\"\n ></side-menu>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n </div>\n <div class=\"sider-footer\" style=\"height: var(--app-footer-height)\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 10px; color: lightgray\">\n {{ SYSTEM_SUB_NAME_LEFT || \"-- o0o --\" }}\n\n <span style=\"float: right\" (click)=\"triggerCollapse()\">\n <nz-icon class=\"trigger\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" nz-tooltip=\"\u1EA8n menu\" />\n </span>\n </div>\n </div>\n </nz-sider>\n <nz-layout class=\"main-layout\">\n <nz-content class=\"content\">\n <div class=\"inner-content\">\n @if (!LayoutComponent.noShowBreadcrumb) {\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\"></app-breadcrumb>\n }\n <router-outlet></router-outlet>\n </div>\n <div nz-row class=\"sider-footer\" style=\"height: var(--app-footer-height)\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 10px; color: lightgray\">\n {{ SYSTEM_SUB_NAME_RIGHT || \"-- o0o --\" }}\n </div>\n </div>\n <!-- <nz-back-top [nzTarget]=\"'.content'\" [nzVisibilityHeight]=\"500\"></nz-back-top> -->\n </nz-content>\n </nz-layout>\n </nz-layout>\n</nz-layout>\n\n<nz-drawer\n [nzWrapClassName]=\"'same-theme-color menu-drawer'\"\n [nzWidth]=\"350\"\n [nzClosable]=\"false\"\n [(nzVisible)]=\"visibleMenuDrawer\"\n [nzMaskClosable]=\"true\"\n nzPlacement=\"left\"\n nzTitle=\"\"\n (nzOnClose)=\"closeMenuDrawer()\"\n>\n <ng-container *nzDrawerContent>\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper in-drawer\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzHideUnMatched]=\"true\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper in-drawer\">\n <side-menu\n [filteredLstMenu]=\"filteredLstMenu\"\n [moduleId]=\"currentModuleId\"\n [headerMenuId]=\"currentHeaderId\"\n (onClickToMenu)=\"visibleMenuDrawer = false\"\n ></side-menu>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\" [nzAddOnAfter]=\"afterTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n <ng-template #afterTemplate>\n <button nz-button (click)=\"triggerCollapse(); this.visibleMenuDrawer = false\">\n <nz-icon *ngIf=\"isCollapsed\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </button>\n </ng-template>\n </div>\n </ng-container>\n</nz-drawer>\n<app-global-spinner></app-global-spinner>\n", styles: ["@charset \"UTF-8\";:host{display:flex;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bg-sidebar: #f0f2f5;--bg-content: #fff;--bg-inner: #fff;--border-color: transparent;--text-main: rgba(0, 0, 0, .85)}:host-context(.dark-theme),:host(.dark-theme){--theme-color: #303030 !important;--theme-text-color: #e1e1e1 !important;--bg-sidebar: #262626;--bg-content: #1f1f1f;--bg-inner: #1f1f1f;--border-color: #424242;--text-main: #e1e1e1}html,body,app-root{height:100%;margin:0}.app-layout{display:flex;flex-direction:column;height:100vh}.app-header{position:fixed;top:0;left:0;width:100%;height:var(--app-header-height);background:var(--theme-color);color:var(--theme-text-color);box-shadow:0 1px 4px #00152914;z-index:1000;display:flex;align-items:center;padding:0;border-bottom:1px solid var(--border-color);transition:background-color .3s ease}.header-content{width:100%;flex-wrap:nowrap!important}.header-logo{height:var(--app-header-height);text-align:center;color:var(--theme-text-color);transition:width .3s;flex-shrink:0;overflow:hidden}.body-layout{display:flex;flex:1;margin-top:var(--app-header-height);height:calc(100vh - var(--app-header-height));overflow:hidden}.menu-sidebar{width:256px;background:#f0f2f5;overflow-y:auto;overflow-x:hidden;transition:all .3s cubic-bezier(.25,.8,.25,1)!important;min-height:calc(100vh - var(--app-header-height))}.menu-sidebar.hide-side-menu{flex:0 0 0px!important;max-width:0px!important;min-width:0px!important;width:0px!important}.menu-wapper{min-height:calc(100% - var(--app-footer-height))}.main-layout{display:flex;flex-direction:column;flex:1;overflow:hidden}.content{flex:1;background:var(--bg-content);overflow-x:hidden;overflow-y:auto;height:100%}.inner-content{background:var(--bg-inner);color:var(--text-main);min-height:calc(100% - var(--app-footer-height));padding:8px;box-sizing:border-box}.content-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:center}.sider-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:right}.trigger{margin-right:8px}.menu-sidebar .ant-menu-inline .ant-menu-item{margin-top:0;margin-bottom:0}::ng-deep .menu-wapper .anticon-file{display:none}:host ::ng-deep .ant-back-top{right:30px;bottom:40px}::ng-deep .same-theme-color .ant-drawer-content{background:var(--theme-menu-color)}.nz-tree-wapper{height:calc(100vh - var(--app-header-height) - var(--app-footer-height) - 32px);overflow-y:auto}.nz-tree-wapper.in-drawer{height:calc(100vh - 32px);overflow-y:auto}::ng-deep .menu-drawer .ant-drawer-body{padding:0}::ng-deep .ant-breadcrumb-link{cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-link{color:var(--theme-text-color);cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item:not(.ant-segmented-item-selected){color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item{border-left:1px solid}::ng-deep .header-menu .ant-segmented-item:last-child{border-right:1px solid}.suffix-wrap{position:relative;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.suffix-icon{position:absolute;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .16s ease,transform .18s cubic-bezier(.4,0,.2,1);transform:scale(.6) translate(4px)}.suffix-icon.show{opacity:1;pointer-events:auto;transform:scale(1) translate(0)}.search{color:#00000073}.delete{color:#bfbfbf}.delete.show{animation:popIn .18s ease}::ng-deep .header-menu .ant-menu-horizontal{background-color:transparent!important;border-bottom:none!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu{color:var(--theme-text-color)!important;opacity:.85;font-weight:600}::ng-deep .header-menu .ant-menu-submenu-title .anticon{color:var(--theme-text-color)!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item:hover,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu:hover,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item-selected,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-open,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-selected{color:var(--theme-text-color)!important;opacity:1;background-color:#ffffff1a!important}::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item:hover:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu:hover:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-item-selected:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-open:after,::ng-deep .header-menu .ant-menu-horizontal>.ant-menu-submenu-selected:after{border-bottom-color:#40a9ff!important}@keyframes popIn{0%{transform:scale(.5)}70%{transform:scale(1.15)}to{transform:scale(1)}}:host-context(.dark-theme) .content-footer,:host-context(.dark-theme) .sider-footer{background-color:var(--bg-sidebar);border-top:1px solid var(--border-color)}:host-context(.dark-theme) ::ng-deep .menu-sidebar .ant-tree,:host-context(.dark-theme) ::ng-deep .menu-drawer .ant-tree{background:transparent;color:var(--text-main)}:host-context(.dark-theme) ::ng-deep .ant-tree-node-content-wrapper:hover{background-color:#ffffff14!important}:host-context(.dark-theme) ::ng-deep .ant-tree-node-selected{background-color:#ffffff1f!important;color:#fff!important}:host-context(.dark-theme) ::ng-deep .menu-wapper .ant-input,:host-context(.dark-theme) ::ng-deep .menu-wapper .ant-input-group-addon{background-color:var(--bg-content);border-color:var(--border-color);color:var(--text-main)}:host-context(.dark-theme) ::ng-deep .menu-wapper .search,:host-context(.dark-theme) ::ng-deep .menu-wapper .delete{color:#8c8c8c}:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-link,:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:#8c8c8c!important}:host-context(.dark-theme) ::ng-deep .breadcrumb-header .ant-breadcrumb-link:hover{color:var(--text-main)!important}\n"] }]
|
|
6727
6818
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { menuContainer: [{
|
|
6728
6819
|
type: ViewChild,
|
|
6729
6820
|
args: ['menuContainer']
|
|
6730
6821
|
}] } });
|
|
6731
6822
|
|
|
6732
|
-
const URLs$
|
|
6823
|
+
const URLs$g = {
|
|
6733
6824
|
getById: '/api/App_Org/GetById',
|
|
6734
6825
|
getAll: '/api/App_Org/GetAll',
|
|
6735
6826
|
getList: '/api/App_Org/GetList',
|
|
@@ -6741,23 +6832,23 @@ class OrgService extends HTTPService {
|
|
|
6741
6832
|
cms = inject(CommonService);
|
|
6742
6833
|
getById(id) {
|
|
6743
6834
|
let pr = new HttpParams().append('id', id);
|
|
6744
|
-
return this.postParams(AppGlobals.apiEndpoint + URLs$
|
|
6835
|
+
return this.postParams(AppGlobals.apiEndpoint + URLs$g.getById, pr);
|
|
6745
6836
|
}
|
|
6746
6837
|
getAll() {
|
|
6747
|
-
return this.post(AppGlobals.apiEndpoint + URLs$
|
|
6838
|
+
return this.post(AppGlobals.apiEndpoint + URLs$g.getAll);
|
|
6748
6839
|
}
|
|
6749
6840
|
getList(filter) {
|
|
6750
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
6841
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$g.getList, filter);
|
|
6751
6842
|
}
|
|
6752
6843
|
getPaging(filter) {
|
|
6753
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
6844
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$g.getPaging, filter);
|
|
6754
6845
|
}
|
|
6755
6846
|
addOrEdit(obj) {
|
|
6756
|
-
return this.postData(AppGlobals.apiEndpoint + URLs$
|
|
6847
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$g.addOrEdit, obj);
|
|
6757
6848
|
}
|
|
6758
6849
|
delete(id) {
|
|
6759
6850
|
const params = new HttpParams().append('id', id);
|
|
6760
|
-
return this.postParams(AppGlobals.apiEndpoint + URLs$
|
|
6851
|
+
return this.postParams(AppGlobals.apiEndpoint + URLs$g.delete, params);
|
|
6761
6852
|
}
|
|
6762
6853
|
getAllForLogin(UserName) {
|
|
6763
6854
|
const params = new HttpParams().append('UserName', UserName);
|
|
@@ -6795,6 +6886,7 @@ class LoginComponent extends BaseComponent {
|
|
|
6795
6886
|
lstOrg = [];
|
|
6796
6887
|
isOneUserMultiOrgs = false;
|
|
6797
6888
|
SYSTEM_NAME_LOGIN = '';
|
|
6889
|
+
MODULE_IN_USE = false;
|
|
6798
6890
|
async ngOnInit() {
|
|
6799
6891
|
this.route.queryParams.subscribe((params) => (this.returnUrl = params['returnUrl'] || '/'));
|
|
6800
6892
|
if (TokenStorage.getToken() && (await this.authService.pingAuth())) {
|
|
@@ -6807,11 +6899,8 @@ class LoginComponent extends BaseComponent {
|
|
|
6807
6899
|
orgid: [null],
|
|
6808
6900
|
langSwitch: [AppStorage.getLang() === 'vn'],
|
|
6809
6901
|
});
|
|
6810
|
-
this.settingService.getByCodeAnonymous('
|
|
6811
|
-
|
|
6812
|
-
this.SYSTEM_NAME_LOGIN = res.Data;
|
|
6813
|
-
}
|
|
6814
|
-
}, (err) => this.handleError(err));
|
|
6902
|
+
this.settingService.getByCodeAnonymous('SYSTEM_MODULE_IN_USE').then((res) => (this.MODULE_IN_USE = res?.Data == 1));
|
|
6903
|
+
this.settingService.getByCodeAnonymous('SYSTEM_NAME_LOGIN').then((res) => (this.SYSTEM_NAME_LOGIN = res?.Data));
|
|
6815
6904
|
this.settingService.getByCodeAnonymous('ONE_USER_MULTI_ORGS').then((res) => {
|
|
6816
6905
|
if (res?.Data) {
|
|
6817
6906
|
if (res.Data == '1') {
|
|
@@ -6853,7 +6942,7 @@ class LoginComponent extends BaseComponent {
|
|
|
6853
6942
|
}
|
|
6854
6943
|
if (this.loginForm.valid) {
|
|
6855
6944
|
this.isLoading = true;
|
|
6856
|
-
await this.sessionManager.login(this.loginForm.value.username, this.loginForm.value.password, this.loginForm.value.orgid, this.returnUrl);
|
|
6945
|
+
await this.sessionManager.login(this.loginForm.value.username, this.loginForm.value.password, this.loginForm.value.orgid, this.returnUrl, this.MODULE_IN_USE);
|
|
6857
6946
|
this.isLoading = false;
|
|
6858
6947
|
}
|
|
6859
6948
|
this.vscService.checkVersion();
|
|
@@ -6914,6 +7003,7 @@ class Login1Component extends BaseComponent {
|
|
|
6914
7003
|
lstOrg = [];
|
|
6915
7004
|
isOneUserMultiOrgs = false;
|
|
6916
7005
|
SYSTEM_NAME_LOGIN = '';
|
|
7006
|
+
MODULE_IN_USE = false;
|
|
6917
7007
|
async ngOnInit() {
|
|
6918
7008
|
this.route.queryParams.subscribe((params) => (this.returnUrl = params['returnUrl'] || '/'));
|
|
6919
7009
|
if (TokenStorage.getToken() && (await this.authService.pingAuth())) {
|
|
@@ -6926,11 +7016,8 @@ class Login1Component extends BaseComponent {
|
|
|
6926
7016
|
orgid: [null],
|
|
6927
7017
|
langSwitch: [AppStorage.getLang() === 'vn'],
|
|
6928
7018
|
});
|
|
6929
|
-
this.settingService.getByCodeAnonymous('
|
|
6930
|
-
|
|
6931
|
-
this.SYSTEM_NAME_LOGIN = res.Data;
|
|
6932
|
-
}
|
|
6933
|
-
}, (err) => this.handleError(err));
|
|
7019
|
+
this.settingService.getByCodeAnonymous('SYSTEM_MODULE_IN_USE').then((res) => (this.MODULE_IN_USE = res?.Data == 1));
|
|
7020
|
+
this.settingService.getByCodeAnonymous('SYSTEM_NAME_LOGIN').then((res) => (this.SYSTEM_NAME_LOGIN = res?.Data));
|
|
6934
7021
|
this.settingService.getByCodeAnonymous('ONE_USER_MULTI_ORGS').then((res) => {
|
|
6935
7022
|
if (res?.Data) {
|
|
6936
7023
|
if (res.Data == '1') {
|
|
@@ -6972,7 +7059,7 @@ class Login1Component extends BaseComponent {
|
|
|
6972
7059
|
}
|
|
6973
7060
|
if (this.loginForm.valid) {
|
|
6974
7061
|
this.isLoading = true;
|
|
6975
|
-
await this.sessionManager.login(this.loginForm.value.username, this.loginForm.value.password, this.loginForm.value.orgid, this.returnUrl);
|
|
7062
|
+
await this.sessionManager.login(this.loginForm.value.username, this.loginForm.value.password, this.loginForm.value.orgid, this.returnUrl, this.MODULE_IN_USE);
|
|
6976
7063
|
this.isLoading = false;
|
|
6977
7064
|
}
|
|
6978
7065
|
this.vscService.checkVersion();
|
|
@@ -7033,6 +7120,7 @@ class Login2Component extends BaseComponent {
|
|
|
7033
7120
|
lstOrg = [];
|
|
7034
7121
|
isOneUserMultiOrgs = false;
|
|
7035
7122
|
SYSTEM_NAME_LOGIN = '';
|
|
7123
|
+
MODULE_IN_USE = false;
|
|
7036
7124
|
isDarkMode = false;
|
|
7037
7125
|
sub;
|
|
7038
7126
|
async ngOnInit() {
|
|
@@ -7047,11 +7135,8 @@ class Login2Component extends BaseComponent {
|
|
|
7047
7135
|
orgid: [null],
|
|
7048
7136
|
langSwitch: [AppStorage.getLang() === 'vn'],
|
|
7049
7137
|
});
|
|
7050
|
-
this.settingService.getByCodeAnonymous('
|
|
7051
|
-
|
|
7052
|
-
this.SYSTEM_NAME_LOGIN = res.Data;
|
|
7053
|
-
}
|
|
7054
|
-
}, (err) => this.handleError(err));
|
|
7138
|
+
this.settingService.getByCodeAnonymous('SYSTEM_MODULE_IN_USE').then((res) => (this.MODULE_IN_USE = res?.Data == 1));
|
|
7139
|
+
this.settingService.getByCodeAnonymous('SYSTEM_NAME_LOGIN').then((res) => (this.SYSTEM_NAME_LOGIN = res?.Data));
|
|
7055
7140
|
this.settingService.getByCodeAnonymous('ONE_USER_MULTI_ORGS').then((res) => {
|
|
7056
7141
|
if (res?.Data) {
|
|
7057
7142
|
if (res.Data == '1') {
|
|
@@ -7109,7 +7194,7 @@ class Login2Component extends BaseComponent {
|
|
|
7109
7194
|
}
|
|
7110
7195
|
if (this.loginForm.valid) {
|
|
7111
7196
|
this.isLoading = true;
|
|
7112
|
-
await this.sessionManager.login(this.loginForm.value.username, this.loginForm.value.password, this.loginForm.value.orgid, this.returnUrl);
|
|
7197
|
+
await this.sessionManager.login(this.loginForm.value.username, this.loginForm.value.password, this.loginForm.value.orgid, this.returnUrl, this.MODULE_IN_USE);
|
|
7113
7198
|
this.isLoading = false;
|
|
7114
7199
|
}
|
|
7115
7200
|
this.vscService.checkVersion();
|
|
@@ -7157,6 +7242,108 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
|
|
|
7157
7242
|
], selector: 'login', template: "<div class=\"login-wrapper\" [class.dark-theme]=\"isDarkMode\">\n <!-- \u0110\u1ED5i \u1EA3nh n\u1EC1n theo Theme -->\n <img *ngIf=\"!isDarkMode && (bgLightUrl$ | async) as url\" class=\"bg-image\" [src]=\"url\" hideIfError />\n <img *ngIf=\"isDarkMode && (bgDarkUrl$ | async) as url\" class=\"bg-image\" [src]=\"url\" hideIfError />\n\n <!-- N\u00FAt chuy\u1EC3n \u0111\u1ED5i Theme -->\n <button nz-button nzType=\"text\" class=\"theme-toggle\" (click)=\"toggleTheme()\">\n <nz-icon [nzType]=\"isDarkMode ? 'sun' : 'moon'\" nzTheme=\"outline\" />\n </button>\n\n <div class=\"form-container\">\n <form nz-flex nzVertical=\"true\" nz-form [formGroup]=\"loginForm\" class=\"login-form\" (ngSubmit)=\"dologin()\">\n <div>\n <div style=\"text-align: center; margin-bottom: 10px\">\n <img *ngIf=\"logoUrl$ | async as url\" class=\"logo-img\" [src]=\"url\" hideIfError />\n </div>\n <div class=\"form-field\" style=\"text-align: center; margin-bottom: 24px\">\n <h3 class=\"system-title\">{{ SYSTEM_NAME_LOGIN }}</h3>\n </div>\n </div>\n\n <div nz-row [nzJustify]=\"'center'\">\n <div nz-col nzSm=\"24\" nzMd=\"22\">\n <div nz-flex nzVertical=\"true\">\n <nz-form-item>\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\n <nz-input-group nzPrefixIcon=\"user\" nzSize=\"large\">\n <input type=\"text\" nz-input formControlName=\"username\" placeholder=\"{{ 'USERNAME' | translate }}\" />\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n\n <nz-form-item>\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\n <nz-input-group\n nzPrefixIcon=\"lock\"\n nzSize=\"large\"\n [nzSuffix]=\"visible ? suffixTemplateHiddenPassword : suffixTemplateShowPassword\"\n >\n <input\n type=\"{{ passwordType }}\"\n nz-input\n formControlName=\"password\"\n placeholder=\"{{ 'PASSWORD' | translate }}\"\n />\n </nz-input-group>\n </nz-form-control>\n <ng-template #suffixTemplateShowPassword>\n <nz-icon\n nzType=\"eye\"\n nzTheme=\"outline\"\n nz-tooltip\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\n (click)=\"visible = !visible; passwordType = 'text'\"\n />\n </ng-template>\n <ng-template #suffixTemplateHiddenPassword>\n <nz-icon\n nzType=\"eye-invisible\"\n nzTheme=\"outline\"\n nz-tooltip\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\n (click)=\"visible = !visible; passwordType = 'password'\"\n />\n </ng-template>\n </nz-form-item>\n\n @if (isOneUserMultiOrgs) {\n <nz-form-item class=\"org-select\">\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\n <nz-input-group nzPrefixIcon=\"cluster\" nzSize=\"large\" nzHasFeedback=\"false\">\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzDropdownMatchSelectWidth]=\"false\"\n [nzBorderless]=\"true\"\n nzPlaceHolder=\"{{ 'ORG' | translate }}\"\n formControlName=\"orgid\"\n class=\"no-error-border\"\n (nzFocus)=\"onFocusOrg()\"\n >\n @for (item of lstOrg; track $index) {\n <nz-option [nzLabel]=\"item.TreeNodeName!\" [nzValue]=\"item.App_Org_Id\"></nz-option>\n }\n </nz-select>\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n }\n\n <div nz-flex nzVertical=\"true\" nzGap=\"4px\" style=\"margin-top: 8px\">\n <button nz-button [nzType]=\"'primary'\" nzSize=\"large\" [nzLoading]=\"isLoading\" nzBlock class=\"submit-btn\">\n {{ \"LOGIN\" | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;height:100vh;width:100vw;overflow:hidden}.login-wrapper{--page-bg-light: #f0f2f5;--page-bg-dark: #141414;--form-position: flex-end;--form-offset-x: 10vw;--glass-blur: 10px;--glass-bg-light: rgba(255, 255, 255, .25);--glass-border-light: rgba(255, 255, 255, .5);--glass-bg-dark: rgba(10, 10, 10, .45);--glass-border-dark: rgba(255, 255, 255, .15);display:flex;justify-content:var(--form-position);align-items:center;height:100vh;position:relative;padding:0 var(--form-offset-x);--page-bg: var(--page-bg-light);--form-bg: var(--glass-bg-light);--form-border: var(--glass-border-light);--text-color: #1a1a1a;--input-bg: rgba(255, 255, 255, .6);--input-text: #333333;--input-border: rgba(0, 0, 0, .15);--autofill-bg: #ffffff;--shadow-color: rgba(0, 0, 0, .15);--icon-color: #595959;background-color:var(--page-bg);transition:all .3s ease}.login-wrapper.dark-theme{--page-bg: var(--page-bg-dark);--form-bg: var(--glass-bg-dark);--form-border: var(--glass-border-dark);--text-color: rgba(255, 255, 255, .85);--input-bg: rgba(0, 0, 0, .3);--input-text: rgba(255, 255, 255, .85);--input-border: rgba(255, 255, 255, .2);--autofill-bg: #2a2a2a;--shadow-color: rgba(0, 0, 0, .5);--icon-color: #bfbfbf}.login-wrapper.dark-theme ::ng-deep .ant-input,.login-wrapper.dark-theme ::ng-deep .ant-input-affix-wrapper{background-color:var(--input-bg)!important;color:var(--input-text)!important;border-color:var(--input-border)!important}.login-wrapper.dark-theme ::ng-deep .ant-input::placeholder{color:#fff9}.login-wrapper.dark-theme ::ng-deep .ant-select-selector{background-color:transparent!important;color:var(--input-text)!important}.login-wrapper.dark-theme ::ng-deep .ant-select-selection-placeholder{color:#fff9!important}.login-wrapper.dark-theme ::ng-deep .ant-input-prefix i,.login-wrapper.dark-theme ::ng-deep .ant-input-suffix i{color:var(--icon-color)!important}.login-wrapper.dark-theme .logo-img{filter:brightness(0) invert(1) hue-rotate(180deg) saturate(3);opacity:.85}.form-container{position:relative;z-index:1;width:clamp(320px,90vw,420px);background-color:var(--form-bg);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));box-shadow:0 12px 40px var(--shadow-color);padding:40px 30px;border-radius:20px;border:1px solid var(--form-border);transition:all .4s cubic-bezier(.25,.8,.25,1)}.theme-toggle{position:absolute;top:24px;right:24px;z-index:10;font-size:22px;color:var(--text-color);background:#fff3;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border-radius:50%;width:44px;height:44px;display:flex;align-items:center;justify-content:center;border:1px solid var(--form-border);cursor:pointer}.theme-toggle:hover{color:#1890ff;background:#ffffff4d;transform:scale(1.05)}.logo-img{max-width:220px;width:100%;object-fit:contain;filter:drop-shadow(0px 4px 6px rgba(0,0,0,.1))}.system-title{font-weight:700;font-size:22px;color:var(--text-color);margin:0;transition:color .3s ease;text-shadow:0px 2px 4px rgba(0,0,0,.1)}.bg-image{position:absolute;top:0;left:0;width:100vw;height:100vh;object-fit:cover;object-position:center;z-index:0;pointer-events:none;animation:fadeIn .8s ease-in-out}@keyframes fadeIn{0%{opacity:.5}to{opacity:1}}::ng-deep .login-form .ant-input-affix-wrapper{background-color:var(--input-bg)!important;border:1px solid var(--input-border)!important;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border-radius:10px;padding:8px 12px;transition:all .3s ease}::ng-deep .login-form .ant-input-affix-wrapper:focus,::ng-deep .login-form .ant-input-affix-wrapper:focus-within{box-shadow:0 0 0 2px #1890ff33!important;border-color:#1890ff!important}::ng-deep .login-form .ant-input{background-color:transparent!important;border:none!important;box-shadow:none!important;color:var(--input-text)!important}::ng-deep .login-form .ant-input:-webkit-autofill,::ng-deep .login-form .ant-input:-webkit-autofill:hover,::ng-deep .login-form .ant-input:-webkit-autofill:focus,::ng-deep .login-form .ant-input:-webkit-autofill:active{-webkit-box-shadow:0 0 0px 1000px var(--autofill-bg) inset!important;-webkit-text-fill-color:var(--input-text)!important;font-family:inherit;transition:background-color 5000s ease-in-out 0s}::ng-deep .login-form .ant-btn{border-radius:10px}::ng-deep .login-form .org-select .ant-input-group{display:flex;align-items:center;padding-left:11px}::ng-deep .login-form .submit-btn{font-weight:600;letter-spacing:.5px;margin-top:10px;height:44px;border:none;box-shadow:0 4px 15px #1890ff66;transition:all .3s}::ng-deep .login-form .submit-btn:hover{transform:translateY(-2px);box-shadow:0 6px 20px #1890ff99}\n"] }]
|
|
7158
7243
|
}] });
|
|
7159
7244
|
|
|
7245
|
+
const URLs$f = {
|
|
7246
|
+
getById: '/api/App_Module/GetById',
|
|
7247
|
+
getList: '/api/App_Module/GetList',
|
|
7248
|
+
getPaging: '/api/App_Module/GetPaging',
|
|
7249
|
+
addOrEdit: '/api/App_Module/AddOrEdit',
|
|
7250
|
+
delete: '/api/App_Module/Delete',
|
|
7251
|
+
};
|
|
7252
|
+
class App_ModuleService extends HTTPService {
|
|
7253
|
+
getById(id) {
|
|
7254
|
+
let pr = new HttpParams().append('id', id);
|
|
7255
|
+
return this.getParams(AppGlobals.apiEndpoint + URLs$f.getById, pr);
|
|
7256
|
+
}
|
|
7257
|
+
getList(filter) {
|
|
7258
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$f.getList, filter);
|
|
7259
|
+
}
|
|
7260
|
+
getPaging(filter) {
|
|
7261
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$f.getPaging, filter);
|
|
7262
|
+
}
|
|
7263
|
+
addOrEdit(obj) {
|
|
7264
|
+
return this.postData(AppGlobals.apiEndpoint + URLs$f.addOrEdit, obj);
|
|
7265
|
+
}
|
|
7266
|
+
delete(id) {
|
|
7267
|
+
const params = new HttpParams().append('id', id);
|
|
7268
|
+
return this.postParams(AppGlobals.apiEndpoint + URLs$f.delete, params);
|
|
7269
|
+
}
|
|
7270
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: App_ModuleService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
7271
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: App_ModuleService, providedIn: 'root' });
|
|
7272
|
+
}
|
|
7273
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: App_ModuleService, decorators: [{
|
|
7274
|
+
type: Injectable,
|
|
7275
|
+
args: [{ providedIn: 'root' }]
|
|
7276
|
+
}] });
|
|
7277
|
+
|
|
7278
|
+
class App_Module {
|
|
7279
|
+
// #region properties
|
|
7280
|
+
App_Module_Id;
|
|
7281
|
+
CreatedDate;
|
|
7282
|
+
CreatedUser;
|
|
7283
|
+
UpdatedDate;
|
|
7284
|
+
UpdatedUser;
|
|
7285
|
+
IsActive;
|
|
7286
|
+
Name;
|
|
7287
|
+
Icon;
|
|
7288
|
+
IconFileId;
|
|
7289
|
+
OrderValue;
|
|
7290
|
+
// #endregion properties
|
|
7291
|
+
constructor(obj) {
|
|
7292
|
+
obj = obj || {};
|
|
7293
|
+
this.App_Module_Id = obj.App_Module_Id || '';
|
|
7294
|
+
this.CreatedDate = obj.CreatedDate || null;
|
|
7295
|
+
this.CreatedUser = obj.CreatedUser || '';
|
|
7296
|
+
this.UpdatedDate = obj.UpdatedDate || null;
|
|
7297
|
+
this.UpdatedUser = obj.UpdatedUser || '';
|
|
7298
|
+
this.IsActive = obj.IsActive || false;
|
|
7299
|
+
this.Name = obj.Name || '';
|
|
7300
|
+
this.Icon = obj.Icon || '';
|
|
7301
|
+
this.IconFileId = obj.IconFileId || '';
|
|
7302
|
+
this.OrderValue = obj.OrderValue || null;
|
|
7303
|
+
}
|
|
7304
|
+
}
|
|
7305
|
+
class App_ModuleFilter extends GridFilter {
|
|
7306
|
+
IsActive;
|
|
7307
|
+
constructor() {
|
|
7308
|
+
super();
|
|
7309
|
+
this.OrderOption.FieldName = 'App_Module_Id';
|
|
7310
|
+
this.OrderOption.Direction = 'ascend';
|
|
7311
|
+
}
|
|
7312
|
+
}
|
|
7313
|
+
|
|
7314
|
+
class ModuleSelectComponent extends BaseComponent {
|
|
7315
|
+
service = inject(App_ModuleService);
|
|
7316
|
+
_router = inject(Router);
|
|
7317
|
+
lstModule = [];
|
|
7318
|
+
ngOnInit() {
|
|
7319
|
+
setTimeout(() => {
|
|
7320
|
+
LayoutComponent.noShowSideMenu = true;
|
|
7321
|
+
LayoutComponent.noShowBreadcrumb = true;
|
|
7322
|
+
LayoutComponent.noShowHeaderMenu = true;
|
|
7323
|
+
});
|
|
7324
|
+
const f = new App_ModuleFilter();
|
|
7325
|
+
f.IsActive = true;
|
|
7326
|
+
this.service.getList(f).then((res) => (this.lstModule = res.Data || []));
|
|
7327
|
+
}
|
|
7328
|
+
ngOnDestroy() {
|
|
7329
|
+
setTimeout(() => {
|
|
7330
|
+
LayoutComponent.noShowSideMenu = false;
|
|
7331
|
+
LayoutComponent.noShowBreadcrumb = false;
|
|
7332
|
+
LayoutComponent.noShowHeaderMenu = false;
|
|
7333
|
+
});
|
|
7334
|
+
}
|
|
7335
|
+
selectModule(module) {
|
|
7336
|
+
console.log(`navigateByUrl: /module/${module.App_Module_Id}`);
|
|
7337
|
+
this._router.navigateByUrl(`/module/${module.App_Module_Id}`);
|
|
7338
|
+
}
|
|
7339
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ModuleSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
7340
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ModuleSelectComponent, isStandalone: true, selector: "app-module-select", usesInheritance: true, ngImport: i0, template: "<div class=\"module-select-container\">\n <div class=\"module-select-wrapper\">\n <div nz-row [nzGutter]=\"[24, 24]\" nzJustify=\"center\">\n @for (module of lstModule; track module.App_Module_Id) {\n <div nz-col [nzXs]=\"24\" [nzSm]=\"12\" [nzMd]=\"8\" [nzLg]=\"6\">\n <nz-card nzHoverable class=\"module-card glass-panel\" (click)=\"selectModule(module)\">\n <div class=\"card-content\">\n <!-- Hi\u1EC3n th\u1ECB Icon, n\u1EBFu ch\u01B0a c\u00F3 d\u1EEF li\u1EC7u s\u1EBD fallback v\u1EC1 icon 'appstore' -->\n <nz-icon [nzType]=\"module.Icon || 'appstore'\" nzTheme=\"outline\" class=\"module-icon\"></nz-icon>\n <h3 class=\"module-name\">{{ module.Name }}</h3>\n </div>\n </nz-card>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;--mod-bg-container: linear-gradient(135deg, #e2e8f0 0%, #f1f5f9 100%);--mod-bg-card: #ffffff;--mod-border: #cbd5e1;--mod-primary: #3b82f6;--mod-text-name: #334155;--mod-text-icon: #64748b}.module-select-container{min-height:calc(100vh - 100px);display:flex;align-items:flex-start;padding-top:15vh;justify-content:center;padding-left:24px;padding-right:24px}.module-select-wrapper{width:100%;max-width:1200px}::ng-deep .ant-card.module-card{background:var(--mod-bg-card)!important;border:2px solid var(--mod-border)!important;border-radius:16px!important;box-shadow:0 8px 24px #959da526!important;transition:all .3s cubic-bezier(.25,.8,.25,1)!important;cursor:pointer;overflow:hidden}::ng-deep .ant-card.module-card .ant-card-body{padding:0!important}::ng-deep .ant-card.module-card:hover{transform:translateY(-8px)!important;border-color:var(--mod-primary)!important;box-shadow:0 16px 32px #3b82f640!important}::ng-deep .ant-card.module-card:hover .module-icon,::ng-deep .ant-card.module-card:hover .module-name{color:var(--mod-primary)!important}::ng-deep .ant-card.module-card:hover .module-icon{transform:scale(1.1)}.card-content{padding:24px!important;display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;text-align:center!important;gap:20px!important;width:100%;height:100%}.module-icon{font-size:84px!important;line-height:1!important;color:var(--mod-text-icon);transition:all .3s ease;display:inline-flex}.module-name{margin:0;font-size:18px;font-weight:600;color:var(--mod-text-name);transition:color .3s ease;text-transform:capitalize;line-height:1.4}\n"], dependencies: [{ kind: "ngmodule", type: NzCardModule }, { kind: "component", type: i2$4.NzCardComponent, selector: "nz-card", inputs: ["nzBordered", "nzLoading", "nzHoverable", "nzBodyStyle", "nzCover", "nzActions", "nzType", "nzSize", "nzTitle", "nzExtra"], exportAs: ["nzCard"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzTypographyModule }] });
|
|
7341
|
+
}
|
|
7342
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ModuleSelectComponent, decorators: [{
|
|
7343
|
+
type: Component,
|
|
7344
|
+
args: [{ selector: 'app-module-select', standalone: true, imports: [NzCardModule, NzGridModule, NzIconModule, NzTypographyModule], template: "<div class=\"module-select-container\">\n <div class=\"module-select-wrapper\">\n <div nz-row [nzGutter]=\"[24, 24]\" nzJustify=\"center\">\n @for (module of lstModule; track module.App_Module_Id) {\n <div nz-col [nzXs]=\"24\" [nzSm]=\"12\" [nzMd]=\"8\" [nzLg]=\"6\">\n <nz-card nzHoverable class=\"module-card glass-panel\" (click)=\"selectModule(module)\">\n <div class=\"card-content\">\n <!-- Hi\u1EC3n th\u1ECB Icon, n\u1EBFu ch\u01B0a c\u00F3 d\u1EEF li\u1EC7u s\u1EBD fallback v\u1EC1 icon 'appstore' -->\n <nz-icon [nzType]=\"module.Icon || 'appstore'\" nzTheme=\"outline\" class=\"module-icon\"></nz-icon>\n <h3 class=\"module-name\">{{ module.Name }}</h3>\n </div>\n </nz-card>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";:host{display:block;--mod-bg-container: linear-gradient(135deg, #e2e8f0 0%, #f1f5f9 100%);--mod-bg-card: #ffffff;--mod-border: #cbd5e1;--mod-primary: #3b82f6;--mod-text-name: #334155;--mod-text-icon: #64748b}.module-select-container{min-height:calc(100vh - 100px);display:flex;align-items:flex-start;padding-top:15vh;justify-content:center;padding-left:24px;padding-right:24px}.module-select-wrapper{width:100%;max-width:1200px}::ng-deep .ant-card.module-card{background:var(--mod-bg-card)!important;border:2px solid var(--mod-border)!important;border-radius:16px!important;box-shadow:0 8px 24px #959da526!important;transition:all .3s cubic-bezier(.25,.8,.25,1)!important;cursor:pointer;overflow:hidden}::ng-deep .ant-card.module-card .ant-card-body{padding:0!important}::ng-deep .ant-card.module-card:hover{transform:translateY(-8px)!important;border-color:var(--mod-primary)!important;box-shadow:0 16px 32px #3b82f640!important}::ng-deep .ant-card.module-card:hover .module-icon,::ng-deep .ant-card.module-card:hover .module-name{color:var(--mod-primary)!important}::ng-deep .ant-card.module-card:hover .module-icon{transform:scale(1.1)}.card-content{padding:24px!important;display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;text-align:center!important;gap:20px!important;width:100%;height:100%}.module-icon{font-size:84px!important;line-height:1!important;color:var(--mod-text-icon);transition:all .3s ease;display:inline-flex}.module-name{margin:0;font-size:18px;font-weight:600;color:var(--mod-text-name);transition:color .3s ease;text-transform:capitalize;line-height:1.4}\n"] }]
|
|
7345
|
+
}] });
|
|
7346
|
+
|
|
7160
7347
|
class DicDomainListComponent extends BaseComponent {
|
|
7161
7348
|
service = inject(DicDomainService);
|
|
7162
7349
|
data;
|
|
@@ -7528,11 +7715,13 @@ class App_Menu {
|
|
|
7528
7715
|
TreeNodeName;
|
|
7529
7716
|
TreeNodeOrder;
|
|
7530
7717
|
IsHeaderMenu;
|
|
7718
|
+
App_Module_Id;
|
|
7531
7719
|
// #endregion properties
|
|
7532
7720
|
Level;
|
|
7533
7721
|
Open;
|
|
7534
7722
|
SubMenu;
|
|
7535
7723
|
ParentName;
|
|
7724
|
+
ModuleName;
|
|
7536
7725
|
HasEditMenu; // for role menu ref
|
|
7537
7726
|
AllSubHasEditMenu;
|
|
7538
7727
|
SomeSubHasEditMenu;
|
|
@@ -7553,11 +7742,13 @@ class App_Menu {
|
|
|
7553
7742
|
this.IsHidden = obj.IsHidden || false;
|
|
7554
7743
|
this.TreeNodeOrder = obj.TreeNodeOrder || '';
|
|
7555
7744
|
this.IsHeaderMenu = obj.IsHeaderMenu || false;
|
|
7745
|
+
this.App_Module_Id = obj.App_Module_Id || '';
|
|
7556
7746
|
this.TreeNodeName = obj.TreeNodeName;
|
|
7557
7747
|
this.Level = obj.Level;
|
|
7558
7748
|
this.Open = obj.Open;
|
|
7559
7749
|
this.SubMenu = obj.SubMenu;
|
|
7560
7750
|
this.ParentName = obj.ParentName;
|
|
7751
|
+
this.ModuleName = obj.ModuleName;
|
|
7561
7752
|
this.HasEditMenu = obj.HasEditMenu;
|
|
7562
7753
|
this.AllSubHasEditMenu = obj.AllSubHasEditMenu;
|
|
7563
7754
|
this.SomeSubHasEditMenu = obj.SomeSubHasEditMenu;
|
|
@@ -7656,22 +7847,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
|
|
|
7656
7847
|
|
|
7657
7848
|
class MenuListComponent extends BaseComponent {
|
|
7658
7849
|
service = inject(MenuService);
|
|
7850
|
+
moduleService = inject(App_ModuleService);
|
|
7659
7851
|
Breadcrumb = Breadcrumb;
|
|
7660
7852
|
data;
|
|
7661
7853
|
filter = new MenuFilter();
|
|
7662
7854
|
selectedMenu;
|
|
7663
|
-
listOfData = Array.from({ length: 100 }).map((_, i) => ({
|
|
7664
|
-
name: `Edward King ${i}`,
|
|
7665
|
-
age: 32,
|
|
7666
|
-
address: `London`,
|
|
7667
|
-
}));
|
|
7668
7855
|
isDropdownVisible = false; // dùng cho ô search domain code để autofocus
|
|
7669
7856
|
isDropdownParentNameVisible = false;
|
|
7670
7857
|
treeMenu = [];
|
|
7858
|
+
lstModule = [];
|
|
7671
7859
|
ngOnInit() {
|
|
7672
7860
|
this.filter = this.AppGlobals.getFilter(MenuFilter.name) || new MenuFilter();
|
|
7673
7861
|
this.getData();
|
|
7674
7862
|
this.getTreeMenu();
|
|
7863
|
+
this.moduleService.getList({}).then((res) => (this.lstModule = res.Data || []));
|
|
7675
7864
|
Breadcrumb.lstBreadcrumb = [
|
|
7676
7865
|
{
|
|
7677
7866
|
Name: 'Menu',
|
|
@@ -7747,7 +7936,7 @@ class MenuListComponent extends BaseComponent {
|
|
|
7747
7936
|
}
|
|
7748
7937
|
}
|
|
7749
7938
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: MenuListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
7750
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: MenuListComponent, isStandalone: true, selector: "app-menu-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\n <div nz-col nzSpan=\"24\">\n <div nz-flex nzJustify=\"end\">\n <div nz-flex nzGap=\"small\">\n <button-add (click)=\"edit(null)\"></button-add>\n <button-search (click)=\"search()\"></button-search>\n </div>\n </div>\n </div>\n <div nz-col nzSpan=\"24\">\n <nz-table\n #table\n [nzData]=\"this.data?.LstItem || []\"\n [nzBordered]=\"true\"\n [nzSize]=\"'small'\"\n [nzShowPagination]=\"false\"\n [nzFrontPagination]=\"false\"\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\n >\n <ng-template #showTotalTpl let-total let-range=\"range\">\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\n </ng-template>\n <thead>\n <tr>\n <th nzWidth=\"50px\">#</th>\n <th>T\u00EAn</th>\n <th>URL</th>\n <th nzWidth=\"90px\">Icon</th>\n <th nzWidth=\"90px\">Order</th>\n <th>Menu cha</th>\n <th nzWidth=\"110px\">Header menu</th>\n <th nzWidth=\"80px\">Hi\u1EC7u l\u1EF1c</th>\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\n </tr>\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\n <th></th>\n <th>\n <extend-input\n [size]=\"'small'\"\n [showClear]=\"true\"\n [(_ngModel)]=\"filter.Name\"\n (onclickClearIcon)=\"search()\"\n ></extend-input>\n </th>\n <th></th>\n <th></th>\n <th></th>\n <th>\n <extend-input\n [size]=\"'small'\"\n [showClear]=\"true\"\n [(_ngModel)]=\"filter.ParentName\"\n (onclickClearIcon)=\"search()\"\n ></extend-input>\n </th>\n <th class=\"center\">\n <extend-checkbox-3-value\n [(_ngModel)]=\"filter.IsHeaderMenu\"\n (_ngModelChange)=\"search()\"\n ></extend-checkbox-3-value>\n </th>\n <th></th>\n <th class=\"center\" nzRight>\n <icon-add (click)=\"add()\"></icon-add>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (row of table.data; track $index; let i = $index) {\n @if (selectedMenu != row) {\n <tr (click)=\"selectedMenu = row\">\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\n <td>{{ row.TreeNodeName }}</td>\n <td>{{ row.Url }}</td>\n <td>{{ row.Icon }}</td>\n <td>{{ row.OrderValue }}</td>\n <td>{{ row.ParentName }}</td>\n <td class=\"center\">\n @if (row.IsHeaderMenu) {\n <icon-check></icon-check>\n }\n </td>\n <td class=\"center\">\n @if (row.IsActive) {\n <icon-check></icon-check>\n }\n </td>\n <td class=\"center\" nzRight>\n <icon-edit (click)=\"edit(row)\"></icon-edit>\n <box [width]=\"4\"></box>\n <icon-delete (click)=\"delete(row)\"></icon-delete>\n </td>\n </tr>\n } @else {\n <tr (keyup.enter)=\"save()\" class=\"selected\">\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\n <td>\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Name\"></extend-input>\n </td>\n <td>\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Url\"></extend-input>\n </td>\n <td>\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Icon\"></extend-input>\n </td>\n <td>\n <extend-input-number [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.OrderValue\"></extend-input-number>\n </td>\n <td>\n <nz-tree-select\n class=\"full-width\"\n [nzNodes]=\"treeMenu\"\n nzShowSearch\n nzPlaceHolder=\" \"\n [nzSize]=\"'small'\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [(ngModel)]=\"selectedMenu.ParentId\"\n ></nz-tree-select>\n </td>\n <td class=\"center\">\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsHeaderMenu\"></extend-checkbox>\n </td>\n <td class=\"center\">\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsActive\"></extend-checkbox>\n </td>\n <td class=\"center\">\n <icon-save (click)=\"save()\"></icon-save>\n <box [width]=\"4\"></box>\n <icon-delete (click)=\"delete(row)\"></icon-delete>\n </td>\n </tr>\n }\n }\n </tbody>\n </nz-table>\n </div>\n <div nz-col nzSpan=\"24\">\n <div nz-flex nzJustify=\"end\">\n <nz-pagination\n [nzSize]=\"'small'\"\n [nzPageIndex]=\"filter.PageIndex + 1\"\n [nzPageSize]=\"filter.PageSize\"\n [nzTotal]=\"data?.TotalCount || 0\"\n [nzShowSizeChanger]=\"true\"\n [nzShowTotal]=\"showTotalTpl\"\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\n >\n </nz-pagination>\n\n <ng-template #showTotalTpl let-total let-range=\"range\">\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\n </ng-template>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: NzTreeSelectModule }, { kind: "component", type: i3$6.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckboxChange"], exportAs: ["nzTreeSelect"] }, { kind: "component", type: ButtonSearch, selector: "button-search", inputs: ["size"] }, { kind: "component", type: ButtonAdd, selector: "button-add", inputs: ["size"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$5.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i4.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i4.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i4.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i4.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i4.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i4.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i4.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$2.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconAdd, selector: "icon-add", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconSave, selector: "icon-save", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "component", type: ExtendCheckbox3Value, selector: "extend-checkbox-3-value", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }] });
|
|
7939
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: MenuListComponent, isStandalone: true, selector: "app-menu-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\n <div nz-col nzSpan=\"24\">\n <div nz-flex nzJustify=\"end\">\n <div nz-flex nzGap=\"small\">\n <button-add (click)=\"edit(null)\"></button-add>\n <button-search (click)=\"search()\"></button-search>\n </div>\n </div>\n </div>\n <div nz-col nzSpan=\"24\">\n <nz-table\n #table\n [nzData]=\"this.data?.LstItem || []\"\n [nzBordered]=\"true\"\n [nzSize]=\"'small'\"\n [nzShowPagination]=\"false\"\n [nzFrontPagination]=\"false\"\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\n >\n <ng-template #showTotalTpl let-total let-range=\"range\">\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\n </ng-template>\n <thead>\n <tr>\n <th nzWidth=\"50px\">#</th>\n <th>T\u00EAn</th>\n <th>URL</th>\n <th nzWidth=\"90px\">Icon</th>\n <th nzWidth=\"90px\">Order</th>\n <th>Menu cha</th>\n <th nzWidth=\"110px\">Header menu</th>\n <th nzWidth=\"110px\">Module</th>\n <th nzWidth=\"80px\">Hi\u1EC7u l\u1EF1c</th>\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\n </tr>\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\n <th></th>\n <th>\n <extend-input\n [size]=\"'small'\"\n [showClear]=\"true\"\n [(_ngModel)]=\"filter.Name\"\n (onclickClearIcon)=\"search()\"\n ></extend-input>\n </th>\n <th></th>\n <th></th>\n <th></th>\n <th>\n <extend-input\n [size]=\"'small'\"\n [showClear]=\"true\"\n [(_ngModel)]=\"filter.ParentName\"\n (onclickClearIcon)=\"search()\"\n ></extend-input>\n </th>\n <th class=\"center\">\n <extend-checkbox-3-value\n [(_ngModel)]=\"filter.IsHeaderMenu\"\n (_ngModelChange)=\"search()\"\n ></extend-checkbox-3-value>\n </th>\n <th></th>\n <th></th>\n <th class=\"center\" nzRight>\n <icon-add (click)=\"add()\"></icon-add>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (row of table.data; track $index; let i = $index) {\n @if (selectedMenu != row) {\n <tr (click)=\"selectedMenu = row\">\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\n <td>{{ row.TreeNodeName }}</td>\n <td>{{ row.Url }}</td>\n <td>{{ row.Icon }}</td>\n <td>{{ row.OrderValue }}</td>\n <td>{{ row.ParentName }}</td>\n <td class=\"center\">\n @if (row.IsHeaderMenu) {\n <icon-check></icon-check>\n }\n </td>\n <td>{{ row.ModuleName }}</td>\n <td class=\"center\">\n @if (row.IsActive) {\n <icon-check></icon-check>\n }\n </td>\n <td class=\"center\" nzRight>\n <icon-edit (click)=\"edit(row)\"></icon-edit>\n <box [width]=\"4\"></box>\n <icon-delete (click)=\"delete(row)\"></icon-delete>\n </td>\n </tr>\n } @else {\n <tr (keyup.enter)=\"save()\" class=\"selected\">\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\n <td>\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Name\"></extend-input>\n </td>\n <td>\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Url\"></extend-input>\n </td>\n <td>\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Icon\"></extend-input>\n </td>\n <td>\n <extend-input-number [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.OrderValue\"></extend-input-number>\n </td>\n <td>\n <nz-tree-select\n class=\"full-width\"\n [nzNodes]=\"treeMenu\"\n nzShowSearch\n nzPlaceHolder=\" \"\n [nzSize]=\"'small'\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [(ngModel)]=\"selectedMenu.ParentId\"\n ></nz-tree-select>\n </td>\n <td class=\"center\">\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsHeaderMenu\"></extend-checkbox>\n </td>\n <td>\n <extend-select\n [lstItem]=\"lstModule\"\n [valueField]=\"'App_Module_Id'\"\n [displayField]=\"'Name'\"\n [(_ngModel)]=\"selectedMenu.App_Module_Id\"\n ></extend-select>\n </td>\n <td class=\"center\">\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsActive\"></extend-checkbox>\n </td>\n <td class=\"center\">\n <icon-save (click)=\"save()\"></icon-save>\n <box [width]=\"4\"></box>\n <icon-delete (click)=\"delete(row)\"></icon-delete>\n </td>\n </tr>\n }\n }\n </tbody>\n </nz-table>\n </div>\n <div nz-col nzSpan=\"24\">\n <div nz-flex nzJustify=\"end\">\n <nz-pagination\n [nzSize]=\"'small'\"\n [nzPageIndex]=\"filter.PageIndex + 1\"\n [nzPageSize]=\"filter.PageSize\"\n [nzTotal]=\"data?.TotalCount || 0\"\n [nzShowSizeChanger]=\"true\"\n [nzShowTotal]=\"showTotalTpl\"\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\n >\n </nz-pagination>\n\n <ng-template #showTotalTpl let-total let-range=\"range\">\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\n </ng-template>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: NzTreeSelectModule }, { kind: "component", type: i3$6.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckboxChange"], exportAs: ["nzTreeSelect"] }, { kind: "component", type: ButtonSearch, selector: "button-search", inputs: ["size"] }, { kind: "component", type: ButtonAdd, selector: "button-add", inputs: ["size"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$5.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i4.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i4.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i4.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i4.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i4.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i4.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i4.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$2.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconAdd, selector: "icon-add", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconCheck, selector: "icon-check", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconSave, selector: "icon-save", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "component", type: ExtendCheckbox3Value, selector: "extend-checkbox-3-value", inputs: ["label", "labelSpan", "labelFlex", "paddingTop", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendSelectComponent, selector: "extend-select", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "dropdownMatchSelectWidth", "labelSpan", "labelFlex", "disabled", "required", "noBottom", "multiple", "showSelectAll", "maxTagCount", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "lstItem", "displayField", "displayFields", "info", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "itemChange", "onFocus"] }] });
|
|
7751
7940
|
}
|
|
7752
7941
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: MenuListComponent, decorators: [{
|
|
7753
7942
|
type: Component,
|
|
@@ -7772,7 +7961,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
|
|
|
7772
7961
|
ExtendCheckbox,
|
|
7773
7962
|
Box,
|
|
7774
7963
|
ExtendCheckbox3Value,
|
|
7775
|
-
|
|
7964
|
+
ExtendSelectComponent,
|
|
7965
|
+
], template: "<div nz-row [nzGutter]=\"[0, 8]\">\n <div nz-col nzSpan=\"24\">\n <div nz-flex nzJustify=\"end\">\n <div nz-flex nzGap=\"small\">\n <button-add (click)=\"edit(null)\"></button-add>\n <button-search (click)=\"search()\"></button-search>\n </div>\n </div>\n </div>\n <div nz-col nzSpan=\"24\">\n <nz-table\n #table\n [nzData]=\"this.data?.LstItem || []\"\n [nzBordered]=\"true\"\n [nzSize]=\"'small'\"\n [nzShowPagination]=\"false\"\n [nzFrontPagination]=\"false\"\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\n >\n <ng-template #showTotalTpl let-total let-range=\"range\">\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\n </ng-template>\n <thead>\n <tr>\n <th nzWidth=\"50px\">#</th>\n <th>T\u00EAn</th>\n <th>URL</th>\n <th nzWidth=\"90px\">Icon</th>\n <th nzWidth=\"90px\">Order</th>\n <th>Menu cha</th>\n <th nzWidth=\"110px\">Header menu</th>\n <th nzWidth=\"110px\">Module</th>\n <th nzWidth=\"80px\">Hi\u1EC7u l\u1EF1c</th>\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\n </tr>\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\n <th></th>\n <th>\n <extend-input\n [size]=\"'small'\"\n [showClear]=\"true\"\n [(_ngModel)]=\"filter.Name\"\n (onclickClearIcon)=\"search()\"\n ></extend-input>\n </th>\n <th></th>\n <th></th>\n <th></th>\n <th>\n <extend-input\n [size]=\"'small'\"\n [showClear]=\"true\"\n [(_ngModel)]=\"filter.ParentName\"\n (onclickClearIcon)=\"search()\"\n ></extend-input>\n </th>\n <th class=\"center\">\n <extend-checkbox-3-value\n [(_ngModel)]=\"filter.IsHeaderMenu\"\n (_ngModelChange)=\"search()\"\n ></extend-checkbox-3-value>\n </th>\n <th></th>\n <th></th>\n <th class=\"center\" nzRight>\n <icon-add (click)=\"add()\"></icon-add>\n </th>\n </tr>\n </thead>\n <tbody>\n @for (row of table.data; track $index; let i = $index) {\n @if (selectedMenu != row) {\n <tr (click)=\"selectedMenu = row\">\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\n <td>{{ row.TreeNodeName }}</td>\n <td>{{ row.Url }}</td>\n <td>{{ row.Icon }}</td>\n <td>{{ row.OrderValue }}</td>\n <td>{{ row.ParentName }}</td>\n <td class=\"center\">\n @if (row.IsHeaderMenu) {\n <icon-check></icon-check>\n }\n </td>\n <td>{{ row.ModuleName }}</td>\n <td class=\"center\">\n @if (row.IsActive) {\n <icon-check></icon-check>\n }\n </td>\n <td class=\"center\" nzRight>\n <icon-edit (click)=\"edit(row)\"></icon-edit>\n <box [width]=\"4\"></box>\n <icon-delete (click)=\"delete(row)\"></icon-delete>\n </td>\n </tr>\n } @else {\n <tr (keyup.enter)=\"save()\" class=\"selected\">\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\n <td>\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Name\"></extend-input>\n </td>\n <td>\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Url\"></extend-input>\n </td>\n <td>\n <extend-input [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.Icon\"></extend-input>\n </td>\n <td>\n <extend-input-number [size]=\"'small'\" [(_ngModel)]=\"selectedMenu.OrderValue\"></extend-input-number>\n </td>\n <td>\n <nz-tree-select\n class=\"full-width\"\n [nzNodes]=\"treeMenu\"\n nzShowSearch\n nzPlaceHolder=\" \"\n [nzSize]=\"'small'\"\n [nzDropdownMatchSelectWidth]=\"false\"\n [(ngModel)]=\"selectedMenu.ParentId\"\n ></nz-tree-select>\n </td>\n <td class=\"center\">\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsHeaderMenu\"></extend-checkbox>\n </td>\n <td>\n <extend-select\n [lstItem]=\"lstModule\"\n [valueField]=\"'App_Module_Id'\"\n [displayField]=\"'Name'\"\n [(_ngModel)]=\"selectedMenu.App_Module_Id\"\n ></extend-select>\n </td>\n <td class=\"center\">\n <extend-checkbox [(_ngModel)]=\"selectedMenu.IsActive\"></extend-checkbox>\n </td>\n <td class=\"center\">\n <icon-save (click)=\"save()\"></icon-save>\n <box [width]=\"4\"></box>\n <icon-delete (click)=\"delete(row)\"></icon-delete>\n </td>\n </tr>\n }\n }\n </tbody>\n </nz-table>\n </div>\n <div nz-col nzSpan=\"24\">\n <div nz-flex nzJustify=\"end\">\n <nz-pagination\n [nzSize]=\"'small'\"\n [nzPageIndex]=\"filter.PageIndex + 1\"\n [nzPageSize]=\"filter.PageSize\"\n [nzTotal]=\"data?.TotalCount || 0\"\n [nzShowSizeChanger]=\"true\"\n [nzShowTotal]=\"showTotalTpl\"\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\n >\n </nz-pagination>\n\n <ng-template #showTotalTpl let-total let-range=\"range\">\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\n </ng-template>\n </div>\n </div>\n</div>\n" }]
|
|
7776
7966
|
}] });
|
|
7777
7967
|
|
|
7778
7968
|
const URLs$d = {
|
|
@@ -12891,6 +13081,140 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
|
|
|
12891
13081
|
args: ['myTree']
|
|
12892
13082
|
}] } });
|
|
12893
13083
|
|
|
13084
|
+
class App_ModuleListComponent extends BaseComponent {
|
|
13085
|
+
service = inject(App_ModuleService);
|
|
13086
|
+
data = new PagingData();
|
|
13087
|
+
filter = new App_ModuleFilter();
|
|
13088
|
+
drawerVisible = false;
|
|
13089
|
+
editItem = new App_Module();
|
|
13090
|
+
ngOnInit() {
|
|
13091
|
+
this.filter = this.AppGlobals.getFilter(App_ModuleFilter.name) || new App_ModuleFilter();
|
|
13092
|
+
this.getData();
|
|
13093
|
+
Breadcrumb.lstBreadcrumb = [
|
|
13094
|
+
{
|
|
13095
|
+
Name: 'App_Module',
|
|
13096
|
+
Click: () => this.getData(),
|
|
13097
|
+
},
|
|
13098
|
+
{
|
|
13099
|
+
Name: 'Danh sách',
|
|
13100
|
+
Click: () => this.getData(),
|
|
13101
|
+
},
|
|
13102
|
+
];
|
|
13103
|
+
}
|
|
13104
|
+
ngOnDestroy() {
|
|
13105
|
+
this.AppGlobals.setFilter(App_ModuleFilter.name, this.filter);
|
|
13106
|
+
Breadcrumb.lstBreadcrumb = [];
|
|
13107
|
+
}
|
|
13108
|
+
search() {
|
|
13109
|
+
this.filter.PageIndex = 0;
|
|
13110
|
+
this.getData();
|
|
13111
|
+
}
|
|
13112
|
+
getData() {
|
|
13113
|
+
this.service.getPaging(this.filter).then((res) => {
|
|
13114
|
+
this.data = new PagingData(res.Data);
|
|
13115
|
+
}, (err) => this.handleError(err));
|
|
13116
|
+
}
|
|
13117
|
+
edit(item) {
|
|
13118
|
+
if (item?.App_Module_Id) {
|
|
13119
|
+
this.service.getById(item?.App_Module_Id).then((res) => {
|
|
13120
|
+
this.editItem = new App_Module(res.Data);
|
|
13121
|
+
this.drawerVisible = true;
|
|
13122
|
+
}, (err) => this.handleError(err));
|
|
13123
|
+
}
|
|
13124
|
+
else {
|
|
13125
|
+
this.editItem = new App_Module();
|
|
13126
|
+
this.drawerVisible = true;
|
|
13127
|
+
}
|
|
13128
|
+
}
|
|
13129
|
+
async delete(item) {
|
|
13130
|
+
if (await this.confirmDelete()) {
|
|
13131
|
+
if (item.App_Module_Id) {
|
|
13132
|
+
try {
|
|
13133
|
+
await this.service.delete(item.App_Module_Id);
|
|
13134
|
+
this.notiService.success(this.translate.instant(this.TranslateKey.DELETE_SUCCESS));
|
|
13135
|
+
this.getData();
|
|
13136
|
+
}
|
|
13137
|
+
catch (err) {
|
|
13138
|
+
this.handleError(err);
|
|
13139
|
+
}
|
|
13140
|
+
}
|
|
13141
|
+
}
|
|
13142
|
+
}
|
|
13143
|
+
onQueryParamsChange(pageIndex, pageSize) {
|
|
13144
|
+
this.filter.PageIndex = pageIndex;
|
|
13145
|
+
this.filter.PageSize = pageSize;
|
|
13146
|
+
this.getData();
|
|
13147
|
+
}
|
|
13148
|
+
save() {
|
|
13149
|
+
this.service.addOrEdit(this.editItem).then((res) => {
|
|
13150
|
+
this.success();
|
|
13151
|
+
this.getData();
|
|
13152
|
+
this.drawerVisible = false;
|
|
13153
|
+
}, (err) => this.handleError(err));
|
|
13154
|
+
}
|
|
13155
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: App_ModuleListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
13156
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: App_ModuleListComponent, isStandalone: true, selector: "app-app-module-list", usesInheritance: true, ngImport: i0, template: "<div nz-row [nzGutter]=\"[0, 8]\">\n <div nz-col nzSpan=\"24\">\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\n <button-add (click)=\"edit(null)\"></button-add>\n <button-search (click)=\"search()\"></button-search>\n </div>\n </div>\n <div nz-col nzSpan=\"24\">\n <nz-table\n #table\n [nzData]=\"this.data.LstItem || []\"\n [nzBordered]=\"true\"\n [nzSize]=\"'small'\"\n [nzShowPagination]=\"false\"\n [nzFrontPagination]=\"false\"\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\n >\n <thead>\n <tr>\n <th nzWidth=\"50px\">#</th>\n <th>Name</th>\n <th>Icon</th>\n <th>Order Value</th>\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\n </tr>\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th nzRight></th>\n </tr>\n </thead>\n <tbody>\n @for (row of table.data; track $index; let i = $index) {\n <tr>\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Name }}</td>\n <td>{{ row.Icon }}</td>\n <td>{{ row.OrderValue }}</td>\n <td class=\"center\" nzRight>\n <icon-edit (click)=\"edit(row)\"></icon-edit><box [width]=\"4\"></box>\n <icon-delete (click)=\"delete(row)\"></icon-delete>\n </td>\n </tr>\n }\n </tbody>\n </nz-table>\n </div>\n\n <div nz-col [nzSpan]=\"24\">\n <div nz-flex nzJustify=\"end\">\n <nz-pagination\n [nzSize]=\"'small'\"\n [nzPageIndex]=\"filter.PageIndex + 1\"\n [nzPageSize]=\"filter.PageSize\"\n [nzTotal]=\"data.TotalCount || 0\"\n [nzShowSizeChanger]=\"true\"\n [nzShowTotal]=\"showTotalTpl\"\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\n >\n </nz-pagination>\n <ng-template #showTotalTpl let-total let-range=\"range\">\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\n </ng-template>\n </div>\n </div>\n</div>\n\n<nz-drawer\n [nzBodyStyle]=\"{ overflow: 'auto' }\"\n [nzMaskClosable]=\"false\"\n [nzWidth]=\"720\"\n [nzVisible]=\"drawerVisible\"\n [nzTitle]=\"editItem.App_Module_Id ? 'C\u1EADp nh\u1EADt' : 'Th\u00EAm m\u1EDBi'\"\n [nzContent]=\"contentTpl\"\n [nzFooter]=\"footerTpl\"\n (nzOnClose)=\"drawerVisible = false\"\n>\n <ng-template #contentTpl>\n <div nz-row nzGutter=\"16\">\n <extend-input nz-col nzSpan=\"24\" label=\"Name\" [floatingLabel]=\"false\" [(_ngModel)]=\"editItem.Name\"></extend-input>\n <extend-input nz-col nzSpan=\"24\" label=\"Icon\" [floatingLabel]=\"false\" [(_ngModel)]=\"editItem.Icon\"></extend-input>\n <extend-input-number\n nz-col\n nzSpan=\"24\"\n label=\"Order Value\"\n [floatingLabel]=\"false\"\n [(_ngModel)]=\"editItem.OrderValue\"\n ></extend-input-number>\n </div>\n </ng-template>\n <ng-template #footerTpl>\n <div style=\"float: right\">\n <button nz-button style=\"margin-right: 8px\" nzType=\"primary\" (click)=\"save()\">L\u01B0u</button>\n <button nz-button (click)=\"drawerVisible = false\">\u0110\u00F3ng</button>\n </div>\n </ng-template>\n</nz-drawer>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i2$1.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i2$1.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i3$5.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "component", type: i3$4.NzDrawerComponent, selector: "nz-drawer", inputs: ["nzContent", "nzCloseIcon", "nzClosable", "nzMaskClosable", "nzMask", "nzCloseOnNavigation", "nzNoAnimation", "nzKeyboard", "nzTitle", "nzExtra", "nzFooter", "nzPlacement", "nzSize", "nzMaskStyle", "nzBodyStyle", "nzWrapClassName", "nzWidth", "nzHeight", "nzZIndex", "nzOffsetX", "nzOffsetY", "nzVisible"], outputs: ["nzOnViewInit", "nzOnClose", "nzVisibleChange"], exportAs: ["nzDrawer"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i2$2.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i3$2.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4$1.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "component", type: ButtonAdd, selector: "button-add", inputs: ["size"] }, { kind: "component", type: ButtonSearch, selector: "button-search", inputs: ["size"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i4.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i4.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i4.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i4.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i4.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i4.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "directive", type: i4.NzCellFixedDirective, selector: "td[nzRight],th[nzRight],td[nzLeft],th[nzLeft]", inputs: ["nzRight", "nzLeft", "colspan", "colSpan"] }, { kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i5$2.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "component", type: IconEdit, selector: "icon-edit", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "showClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }] });
|
|
13157
|
+
}
|
|
13158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: App_ModuleListComponent, decorators: [{
|
|
13159
|
+
type: Component,
|
|
13160
|
+
args: [{ selector: 'app-app-module-list', imports: [
|
|
13161
|
+
CommonModule,
|
|
13162
|
+
NzGridModule,
|
|
13163
|
+
NzFlexModule,
|
|
13164
|
+
NzDrawerModule,
|
|
13165
|
+
NzButtonModule,
|
|
13166
|
+
ButtonAdd,
|
|
13167
|
+
ButtonSearch,
|
|
13168
|
+
NzTableModule,
|
|
13169
|
+
NzPaginationModule,
|
|
13170
|
+
IconEdit,
|
|
13171
|
+
IconDelete,
|
|
13172
|
+
IconCheck,
|
|
13173
|
+
ExtendInput,
|
|
13174
|
+
Box,
|
|
13175
|
+
ExtendInputNumber,
|
|
13176
|
+
ExtendDatePicker,
|
|
13177
|
+
DicDomainSelectComponent,
|
|
13178
|
+
ExtendTextArea,
|
|
13179
|
+
], template: "<div nz-row [nzGutter]=\"[0, 8]\">\n <div nz-col nzSpan=\"24\">\n <div nz-flex nzGap=\"small\" nzJustify=\"end\">\n <button-add (click)=\"edit(null)\"></button-add>\n <button-search (click)=\"search()\"></button-search>\n </div>\n </div>\n <div nz-col nzSpan=\"24\">\n <nz-table\n #table\n [nzData]=\"this.data.LstItem || []\"\n [nzBordered]=\"true\"\n [nzSize]=\"'small'\"\n [nzShowPagination]=\"false\"\n [nzFrontPagination]=\"false\"\n [nzScroll]=\"{ x: 'auto', y: 'calc(100vh - 235px)' }\"\n >\n <thead>\n <tr>\n <th nzWidth=\"50px\">#</th>\n <th>Name</th>\n <th>Icon</th>\n <th>Order Value</th>\n <th nzWidth=\"75px\" nzRight>Thao t\u00E1c</th>\n </tr>\n <tr class=\"tr-search\" (keyup.enter)=\"search()\">\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n <th nzRight></th>\n </tr>\n </thead>\n <tbody>\n @for (row of table.data; track $index; let i = $index) {\n <tr>\n <td>{{ i + 1 + filter.PageIndex * filter.PageSize }}</td>\n <td class=\"link-detail\" (click)=\"edit(row)\">{{ row.Name }}</td>\n <td>{{ row.Icon }}</td>\n <td>{{ row.OrderValue }}</td>\n <td class=\"center\" nzRight>\n <icon-edit (click)=\"edit(row)\"></icon-edit><box [width]=\"4\"></box>\n <icon-delete (click)=\"delete(row)\"></icon-delete>\n </td>\n </tr>\n }\n </tbody>\n </nz-table>\n </div>\n\n <div nz-col [nzSpan]=\"24\">\n <div nz-flex nzJustify=\"end\">\n <nz-pagination\n [nzSize]=\"'small'\"\n [nzPageIndex]=\"filter.PageIndex + 1\"\n [nzPageSize]=\"filter.PageSize\"\n [nzTotal]=\"data.TotalCount || 0\"\n [nzShowSizeChanger]=\"true\"\n [nzShowTotal]=\"showTotalTpl\"\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\n (nzPageIndexChange)=\"onQueryParamsChange($event - 1, filter.PageSize)\"\n (nzPageSizeChange)=\"onQueryParamsChange(filter.PageIndex, $event)\"\n >\n </nz-pagination>\n <ng-template #showTotalTpl let-total let-range=\"range\">\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\n </ng-template>\n </div>\n </div>\n</div>\n\n<nz-drawer\n [nzBodyStyle]=\"{ overflow: 'auto' }\"\n [nzMaskClosable]=\"false\"\n [nzWidth]=\"720\"\n [nzVisible]=\"drawerVisible\"\n [nzTitle]=\"editItem.App_Module_Id ? 'C\u1EADp nh\u1EADt' : 'Th\u00EAm m\u1EDBi'\"\n [nzContent]=\"contentTpl\"\n [nzFooter]=\"footerTpl\"\n (nzOnClose)=\"drawerVisible = false\"\n>\n <ng-template #contentTpl>\n <div nz-row nzGutter=\"16\">\n <extend-input nz-col nzSpan=\"24\" label=\"Name\" [floatingLabel]=\"false\" [(_ngModel)]=\"editItem.Name\"></extend-input>\n <extend-input nz-col nzSpan=\"24\" label=\"Icon\" [floatingLabel]=\"false\" [(_ngModel)]=\"editItem.Icon\"></extend-input>\n <extend-input-number\n nz-col\n nzSpan=\"24\"\n label=\"Order Value\"\n [floatingLabel]=\"false\"\n [(_ngModel)]=\"editItem.OrderValue\"\n ></extend-input-number>\n </div>\n </ng-template>\n <ng-template #footerTpl>\n <div style=\"float: right\">\n <button nz-button style=\"margin-right: 8px\" nzType=\"primary\" (click)=\"save()\">L\u01B0u</button>\n <button nz-button (click)=\"drawerVisible = false\">\u0110\u00F3ng</button>\n </div>\n </ng-template>\n</nz-drawer>\n" }]
|
|
13180
|
+
}] });
|
|
13181
|
+
|
|
13182
|
+
const ROUTES$1 = [
|
|
13183
|
+
{ path: 'module', component: App_ModuleListComponent },
|
|
13184
|
+
{ path: 'menu', component: MenuListComponent },
|
|
13185
|
+
{ path: 'menu/:id', component: MenuDetailComponent },
|
|
13186
|
+
{ path: 'user', component: UserListComponent },
|
|
13187
|
+
{ path: 'user/:id', component: UserDetailComponent },
|
|
13188
|
+
{ path: 'user_profile', component: UserProfileComponent },
|
|
13189
|
+
{ path: 'dicdomain', component: DicDomainListComponent },
|
|
13190
|
+
{ path: 'role', component: RoleListComponent },
|
|
13191
|
+
{ path: 'role/:id', component: RoleDetailComponent },
|
|
13192
|
+
{ path: 'org', component: OrgListComponent },
|
|
13193
|
+
{ path: 'org/:id', component: OrgDetailComponent },
|
|
13194
|
+
{ path: 'permission', component: PermissionComponent },
|
|
13195
|
+
{ path: 'file', component: FileListComponent },
|
|
13196
|
+
{ path: 'setting', component: SettingListComponent },
|
|
13197
|
+
{ path: 'config', component: ConfigComponent },
|
|
13198
|
+
{ path: 'sequence', component: SequenceListComponent },
|
|
13199
|
+
{ path: 'sequence/:id', component: SequenceDetailComponent },
|
|
13200
|
+
{ path: 'doc-template', component: DocTemplate },
|
|
13201
|
+
{ path: 'appdata', component: AppDataComponent },
|
|
13202
|
+
{ path: 'log-server', component: LogServerComponent },
|
|
13203
|
+
{ path: 'log-server/:file', component: LogServerDetailComponent },
|
|
13204
|
+
{ path: 'log-app', component: LogAppComponent },
|
|
13205
|
+
// { path: 'mail-template', component: MailTemplateListComponent },
|
|
13206
|
+
// { path: 'mail-template/template/new', component: MailTemplateDetailComponent },
|
|
13207
|
+
// { path: 'mail-template/template/:id', component: MailTemplateDetailComponent },
|
|
13208
|
+
// { path: 'mail-template/setting/new', component: MailSendSettingDetailComponent },
|
|
13209
|
+
// { path: 'mail-template/setting/:id', component: MailSendSettingDetailComponent },
|
|
13210
|
+
{ path: 'version', component: VersionComponent },
|
|
13211
|
+
{ path: 'monitor', component: MonitorComponent },
|
|
13212
|
+
{ path: 'cache', component: CacheListComponent },
|
|
13213
|
+
// { path: 'test-app', component: TestAppComponent },
|
|
13214
|
+
{ path: 'synology', component: SynologyComponent },
|
|
13215
|
+
{ path: 'dynamic-form', component: DynamicBuildFormComponent },
|
|
13216
|
+
];
|
|
13217
|
+
|
|
12894
13218
|
class App_Dic_Domain {
|
|
12895
13219
|
// #region properties
|
|
12896
13220
|
App_Dic_Domain_Id;
|
|
@@ -13536,20 +13860,33 @@ class RouteMonitorService {
|
|
|
13536
13860
|
return;
|
|
13537
13861
|
}
|
|
13538
13862
|
let currentRoute = this.router.routerState.root.snapshot;
|
|
13863
|
+
let moduleId = null;
|
|
13539
13864
|
let headerMenuId = null;
|
|
13865
|
+
// 1. Quét toàn bộ route tree để tìm cả moduleId và headerMenuId
|
|
13540
13866
|
while (currentRoute) {
|
|
13541
|
-
if (currentRoute.params
|
|
13542
|
-
|
|
13543
|
-
|
|
13867
|
+
if (currentRoute.params) {
|
|
13868
|
+
if (currentRoute.params['moduleId']) {
|
|
13869
|
+
moduleId = currentRoute.params['moduleId'];
|
|
13870
|
+
}
|
|
13871
|
+
if (currentRoute.params['headerMenuId']) {
|
|
13872
|
+
headerMenuId = currentRoute.params['headerMenuId'];
|
|
13873
|
+
}
|
|
13544
13874
|
}
|
|
13875
|
+
// Chuyển xuống route con tiếp theo
|
|
13545
13876
|
currentRoute = currentRoute.firstChild;
|
|
13546
13877
|
}
|
|
13547
13878
|
let urlToCheck = url;
|
|
13879
|
+
// 2. Loại bỏ moduleId khỏi URL (Giả sử tiền tố trên URL là /module/)
|
|
13880
|
+
if (moduleId) {
|
|
13881
|
+
urlToCheck = urlToCheck.replace(`/module/${moduleId}`, '');
|
|
13882
|
+
}
|
|
13883
|
+
// 3. Loại bỏ headerMenuId khỏi URL như cũ
|
|
13548
13884
|
if (headerMenuId) {
|
|
13549
|
-
urlToCheck = urlToCheck.replace(`/
|
|
13550
|
-
|
|
13551
|
-
|
|
13552
|
-
|
|
13885
|
+
urlToCheck = urlToCheck.replace(`/headermenu/${headerMenuId}`, '');
|
|
13886
|
+
}
|
|
13887
|
+
// Xử lý nếu url sau khi cắt bị rỗng
|
|
13888
|
+
if (urlToCheck === '') {
|
|
13889
|
+
urlToCheck = '/';
|
|
13553
13890
|
}
|
|
13554
13891
|
if (urlToCheck === '/' || urlToCheck === '/no-permission') {
|
|
13555
13892
|
return;
|
|
@@ -20145,9 +20482,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
|
|
|
20145
20482
|
args: ['inputElement', { static: false }]
|
|
20146
20483
|
}] } });
|
|
20147
20484
|
|
|
20485
|
+
const ROUTES = [
|
|
20486
|
+
{ path: 'template', component: WF_TemplateList },
|
|
20487
|
+
{ path: 'template/:id', component: WF_TemplateDetail$1 },
|
|
20488
|
+
{ path: 'doc-list', component: WF_DocListComponent },
|
|
20489
|
+
{ path: 'doc-list/:id', component: WF_DocDetailComponent },
|
|
20490
|
+
{ path: 'doc-list/:id/process', component: WF_DocProcessComponent },
|
|
20491
|
+
{ path: 'doc-list/:id/doc-swimlane', component: WFDocSwimlaneComponent },
|
|
20492
|
+
{ path: 'rpt-config', component: RptConfigList },
|
|
20493
|
+
{ path: 'rpt-config/:id', component: RptConfigDetail },
|
|
20494
|
+
{ path: 'wf-combine', component: WF_Template_CombineListComponent },
|
|
20495
|
+
{ path: 'wf-combine/:id', component: WF_Template_CombineDetailComponent },
|
|
20496
|
+
];
|
|
20497
|
+
|
|
20148
20498
|
/**
|
|
20149
20499
|
* Generated bundle index. Do not edit.
|
|
20150
20500
|
*/
|
|
20151
20501
|
|
|
20152
|
-
export { ABAC_RULES_TOKEN, ActionRule, ActionRuleLine, AnimatedDigitComponent, AppDataComponent, AppGlobals, AppStorage, App_CacheItem, App_Dic_Domain, App_Dic_DomainFilter, App_File, App_Menu, App_Org, App_Role, App_Role_Menu_Ref, App_Setting, App_SettingFilter, App_User, AuthGuard, AuthService, AutoFocusDirective, BarGraphComponent, BaseComponent, BaseGuardChangeComponent, BaseOverlayComponent, Box, Breadcrumb, ButtonAdd, ButtonBack, ButtonDelete, ButtonEdit, ButtonReload, ButtonSave, ButtonSearch, ButtonUpload, CacheFilter, CacheListComponent, CheckModel, CommonService, ConfigComponent, CustomNotiComponent, CustomNotiService, DashcardComponent, DateInputParserDirective, DateTimeHelper, DicDomainListComponent, DicDomainPipe, DicDomainSelectComponent, DicDomainService, DocTemplate, DoughnutGraphComponent, DownloadHelper, DurationFormatPipe, DynamicBuildFormComponent, ENUM_ResponseType, ExpandableSearchComponent, ExtendCheckbox, ExtendCheckbox3Value, ExtendDatePicker, ExtendDateRangePicker, ExtendInput, ExtendInputNumber, ExtendPaginationComponent, ExtendSelectComponent, ExtendTableComponent, ExtendTextArea, FileFilter, FileListComponent, FileService, FormatBytesPipe, GlobalSpinnerComponent, GridFilter, H3Icon, HTTPService, HasPermissionDirective, HasPermissionPipe, HeaderSearchComponent, HideIfErrorDirective, HighlightPipe, IconAdd, IconCheck, IconClose, IconCopy, IconDelete, IconEdit, IconInfo, IconSave, IconSearch, IconView, LayoutComponent, LayoutUser, LimitLettersPipe, LimitWordsPipe, LineGraphComponent, LoadingService, LogAppComponent, LogServerComponent, LogServerDetailComponent, Login1Component, Login2Component, LoginComponent, MailTemplateService, MenuDetailComponent, MenuFilter, MenuListComponent, MenuService, MonitorComponent, MonitorFilter, NoPermission, Nodata, NotiService, NotificationCenterComponent, NullIfEmptyDirective, NumberOnlyDirective, OrderOption, OrgDetailComponent, OrgFilter, OrgListComponent, OrgService, PagingData, PagingModel, PdfViewerComponent, PermissionComponent, PermissionService$1 as PermissionService, ReadMoreProComponent, RegisterComponent, RoleDetailComponent, RoleFilter, RoleListComponent, RoleService, RouteMonitorService, RptConfigDetail, RptConfigList, SequenceDetailComponent, SequenceListComponent, SessionManagerService, SettingListComponent, SettingService, SynologyComponent, TableHeader, ThemeService, TokenStorage, TranslateKey, URLs$
|
|
20502
|
+
export { ABAC_RULES_TOKEN, ROUTES$1 as ADMIN_ROUTES, ActionRule, ActionRuleLine, AnimatedDigitComponent, AppDataComponent, AppGlobals, AppStorage, App_CacheItem, App_Dic_Domain, App_Dic_DomainFilter, App_File, App_Menu, App_ModuleListComponent, App_Org, App_Role, App_Role_Menu_Ref, App_Setting, App_SettingFilter, App_User, AuthGuard, AuthService, AutoFocusDirective, BarGraphComponent, BaseComponent, BaseGuardChangeComponent, BaseOverlayComponent, Box, Breadcrumb, ButtonAdd, ButtonBack, ButtonDelete, ButtonEdit, ButtonReload, ButtonSave, ButtonSearch, ButtonUpload, CacheFilter, CacheListComponent, CheckModel, CommonService, ConfigComponent, CustomNotiComponent, CustomNotiService, DashcardComponent, DateInputParserDirective, DateTimeHelper, DicDomainListComponent, DicDomainPipe, DicDomainSelectComponent, DicDomainService, DocTemplate, DoughnutGraphComponent, DownloadHelper, DurationFormatPipe, DynamicBuildFormComponent, ENUM_ResponseType, ExpandableSearchComponent, ExtendCheckbox, ExtendCheckbox3Value, ExtendDatePicker, ExtendDateRangePicker, ExtendInput, ExtendInputNumber, ExtendPaginationComponent, ExtendSelectComponent, ExtendTableComponent, ExtendTextArea, FileFilter, FileListComponent, FileService, FormatBytesPipe, GlobalSpinnerComponent, GridFilter, H3Icon, HTTPService, HasPermissionDirective, HasPermissionPipe, HeaderSearchComponent, HideIfErrorDirective, HighlightPipe, IconAdd, IconCheck, IconClose, IconCopy, IconDelete, IconEdit, IconInfo, IconSave, IconSearch, IconView, LayoutComponent, LayoutUser, LimitLettersPipe, LimitWordsPipe, LineGraphComponent, LoadingService, LogAppComponent, LogServerComponent, LogServerDetailComponent, Login1Component, Login2Component, LoginComponent, MailTemplateService, MenuDetailComponent, MenuFilter, MenuListComponent, MenuService, ModuleSelectComponent, MonitorComponent, MonitorFilter, NoPermission, Nodata, NotiService, NotificationCenterComponent, NullIfEmptyDirective, NumberOnlyDirective, OrderOption, OrgDetailComponent, OrgFilter, OrgListComponent, OrgService, PagingData, PagingModel, PdfViewerComponent, PermissionComponent, PermissionService$1 as PermissionService, ReadMoreProComponent, RegisterComponent, RoleDetailComponent, RoleFilter, RoleListComponent, RoleService, RouteMonitorService, RptConfigDetail, RptConfigList, SequenceDetailComponent, SequenceListComponent, SessionManagerService, SettingListComponent, SettingService, SynologyComponent, TableHeader, ThemeService, TokenStorage, TranslateKey, URLs$k as URLs, UnsavedChangesGuard, UpperCaseFirsLetterEachWordDirective, UppercaseDirective, UppercaseFirstLetterDirective, UserDetailComponent, UserFilter, UserListComponent, UserProfileComponent, UserProfileService, UserService, VersionComponent, VscService, WFDocSwimlaneComponent, WF_DocDetailComponent, WF_DocListComponent, WF_DocProcessComponent, ROUTES as WF_ROUTES, WF_TemplateActionRef, WF_TemplateDetail$1 as WF_TemplateDetail, WF_TemplateList, WF_Template_CombineDetailComponent, WF_Template_CombineListComponent, WF_TransitionRule, WF_TransitionRuleLine, Workflow, WorkflowAction, WorkflowActionEditorOption, WorkflowActionRef, WorkflowEditorComponent, WorkflowEditorOption, WorkflowStage, WorkflowStageEditorOption, XLSXHelper, authInterceptor, checkPermission, checkRole };
|
|
20153
20503
|
//# sourceMappingURL=brggroup-share-lib.mjs.map
|