kely 11 months ago
parent
commit
353dc128f9
  1. 28
      web-admin-app/angular.json
  2. 7
      web-admin-app/src/app/app.routes.ts
  3. 2
      web-admin-app/src/app/components/index.ts
  4. 30
      web-admin-app/src/app/components/permissions-select/permissions-select.component.html
  5. 4
      web-admin-app/src/app/components/permissions-select/permissions-select.component.less
  6. 98
      web-admin-app/src/app/components/permissions-select/permissions-select.component.ts
  7. 15
      web-admin-app/src/app/guards/auth.guard.ts
  8. 1
      web-admin-app/src/app/pages/home/home.component.html
  9. 0
      web-admin-app/src/app/pages/home/home.component.less
  10. 27
      web-admin-app/src/app/pages/home/home.component.ts
  11. 8
      web-admin-app/src/app/pages/org-setting/org-setting.component.html
  12. 28
      web-admin-app/src/app/pages/org-setting/org-setting.component.ts
  13. 4
      web-admin-app/src/app/pages/system/system-role/system-role.component.html
  14. 7
      web-admin-app/src/app/pages/system/system-role/system-role.component.ts
  15. 8
      web-admin-app/src/app/services/api.service.ts
  16. 86
      web-admin-app/src/app/shared/components/header/header.component.html
  17. 58
      web-admin-app/src/app/shared/components/server-paginated-table/server-paginated-table.component.ts
  18. 4
      web-admin-app/src/app/shared/permission/permission.directive.ts
  19. 2
      web-admin-app/src/app/shared/permission/permission.service.ts

28
web-admin-app/angular.json

@ -20,9 +20,7 @@
"outputPath": "dist/license-web-app", "outputPath": "dist/license-web-app",
"index": "src/index.html", "index": "src/index.html",
"browser": "src/main.ts", "browser": "src/main.ts",
"polyfills": [ "polyfills": ["zone.js"],
"zone.js"
],
"tsConfig": "tsconfig.app.json", "tsConfig": "tsconfig.app.json",
"inlineStyleLanguage": "less", "inlineStyleLanguage": "less",
"assets": [ "assets": [
@ -39,12 +37,8 @@
"output": "/assets/tinymce/" "output": "/assets/tinymce/"
} }
], ],
"styles": [ "styles": ["src/styles.less"],
"src/styles.less" "scripts": ["node_modules/tinymce/tinymce.min.js"]
],
"scripts": [
"node_modules/tinymce/tinymce.min.js"
]
}, },
"configurations": { "configurations": {
"production": { "production": {
@ -82,7 +76,7 @@
}, },
"defaultConfiguration": "development", "defaultConfiguration": "development",
"options": { "options": {
"port": 6001, "port": 7001,
"host": "0.0.0.0" "host": "0.0.0.0"
} }
}, },
@ -95,19 +89,11 @@
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular-devkit/build-angular:karma",
"options": { "options": {
"polyfills": [ "polyfills": ["zone.js", "zone.js/testing"],
"zone.js",
"zone.js/testing"
],
"tsConfig": "tsconfig.spec.json", "tsConfig": "tsconfig.spec.json",
"inlineStyleLanguage": "less", "inlineStyleLanguage": "less",
"assets": [ "assets": ["src/favicon.ico", "src/assets"],
"src/favicon.ico", "styles": ["src/styles.less"],
"src/assets"
],
"styles": [
"src/styles.less"
],
"scripts": [] "scripts": []
} }
} }

7
web-admin-app/src/app/app.routes.ts

@ -59,6 +59,7 @@ import { FlowMyTodoComponent } from './pages/flow/flow-my-todo/flow-my-todo.comp
import { FlowLayoutComponent } from './pages/flow/flow-layout/flow-layout.component' import { FlowLayoutComponent } from './pages/flow/flow-layout/flow-layout.component'
import { FlowMyFinishedComponent } from './pages/flow/flow-my-finished/flow-my-finished.component' import { FlowMyFinishedComponent } from './pages/flow/flow-my-finished/flow-my-finished.component'
import { FixedAssetStorageComponent } from './pages/fixed-asset/ledger/fixed-asset-storage/fixed-asset-storage.component' import { FixedAssetStorageComponent } from './pages/fixed-asset/ledger/fixed-asset-storage/fixed-asset-storage.component'
import { HomeComponent } from './pages/home/home.component'
export const routes: Routes = [ export const routes: Routes = [
{ {
@ -77,7 +78,11 @@ export const routes: Routes = [
{ {
path: '', path: '',
pathMatch: 'full', pathMatch: 'full',
redirectTo: 'dashboard', redirectTo: 'home',
},
{
path: 'home',
component: HomeComponent,
}, },
{ {
path: 'dashboard', path: 'dashboard',

2
web-admin-app/src/app/components/index.ts

@ -1,3 +1,5 @@
export * from './permissions-select/permissions-select.component'
export * from './component-org-tree/component-org-tree.component' export * from './component-org-tree/component-org-tree.component'
export * from './component-basic-category-tree/component-basic-category-tree.component' export * from './component-basic-category-tree/component-basic-category-tree.component'
export * from './select-user-by-org/select-user-by-org.component' export * from './select-user-by-org/select-user-by-org.component'

30
web-admin-app/src/app/components/permissions-select/permissions-select.component.html

@ -0,0 +1,30 @@
<div cl>
<nz-checkbox-wrapper>
<div class="checkAll mb-3">
<label
nz-checkbox
[(ngModel)]="checkAll"
(ngModelChange)="onCheckAll($event)"
[nzIndeterminate]="indeterminate"
>
全选/取消
</label>
</div>
<div class="h-64 overflow-y-auto p-3">
<div nz-row [nzGutter]="[12, 12]">
@for (item of menus; track $index) {
<div nz-col nzSpan="8">
<label
nz-checkbox
[nzValue]="item.menuId"
(nzCheckedChange)="onMenuChange($event, item)"
[nzChecked]="value.has(item.menuId)"
>
{{ item.menuName }}
</label>
</div>
}
</div>
</div>
</nz-checkbox-wrapper>
</div>

4
web-admin-app/src/app/components/permissions-select/permissions-select.component.less

@ -0,0 +1,4 @@
.checkAll {
padding: 12px 0;
border-bottom: 1px solid #e8e8e8;
}

98
web-admin-app/src/app/components/permissions-select/permissions-select.component.ts

@ -0,0 +1,98 @@
import { CommonModule } from '@angular/common'
import { ChangeDetectorRef, Component, Input, OnInit, TemplateRef, forwardRef } from '@angular/core'
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'
import { NzCardModule } from 'ng-zorro-antd/card'
import { NzSafeAny } from 'ng-zorro-antd/core/types'
import { NzModalModule, NzModalService } from 'ng-zorro-antd/modal'
import { ApiService } from 'app/services'
import { NzMessageModule, NzMessageService } from 'ng-zorro-antd/message'
import { SharedModule } from 'app/shared/shared.module'
@Component({
selector: 'app-permissions-select',
standalone: true,
imports: [SharedModule],
templateUrl: './permissions-select.component.html',
styleUrl: './permissions-select.component.less',
providers: [
{
provide: NG_VALUE_ACCESSOR,
multi: true,
useExisting: forwardRef(() => PermissionsSelectComponent),
},
],
})
export class PermissionsSelectComponent {
constructor(
private modal: NzModalService,
private api: ApiService,
private msg: NzMessageService,
private cdr: ChangeDetectorRef,
) {}
value = new Set<NzSafeAny>()
disabled = false
menus: NzSafeAny[] = []
checkAll = false
indeterminate = false
ngOnInit(): void {
this.api.getMenus().subscribe((res) => {
this.menus = res.body
this.refreashCheckStatus()
})
}
onTouched = () => {}
onCheckAll(checked: any) {
if (checked) {
this.value = new Set(this.menus.map((i) => i.menuId))
} else {
this.value.clear()
}
this.refreashCheckStatus()
}
onMenuChange(checked: NzSafeAny, item: NzSafeAny) {
if (checked) {
this.value.add(item.menuId)
} else {
this.value.delete(item.menuId)
}
this.refreashCheckStatus()
}
refreashCheckStatus() {
this.indeterminate = this.menus.length !== 0 && this.value.size > 0 && this.menus.length !== this.value.size
this.checkAll = this.menus.length === this.value.size
this.onChange(Array.from(this.value))
}
onChange(v: NzSafeAny[]) {}
writeValue(v: NzSafeAny[]): void {
if (Array.isArray(v) && v.length > 0) {
this.value = new Set(v)
this.refreashCheckStatus()
}
}
registerOnChange(fn: any): void {
this.onChange = fn
}
registerOnTouched(fn: any): void {
this.onTouched = fn
}
setDisabledState?(isDisabled: boolean): void {
this.disabled = isDisabled
}
}

15
web-admin-app/src/app/guards/auth.guard.ts

@ -1,19 +1,18 @@
import { inject } from '@angular/core' import { inject } from '@angular/core'
import { CanActivateFn, Router, UrlTree } from '@angular/router' import { CanActivateFn, Router, UrlTree } from '@angular/router'
import { ApiService, LocalHttpInterceptorService } from 'app/services' import { ApiService } from 'app/services'
import { map } from 'rxjs' import { PermissionService } from 'app/shared/permission/permission.service'
export const authGuard: CanActivateFn = (route, state) => { export const authGuard: CanActivateFn = (route, state) => {
// const local = inject(LocalHttpInterceptorService)
// const accessData = local.getAccess()
// let token = accessData?.access_token
// if (token) {
// return true
// }
const router = inject(Router) const router = inject(Router)
const permission = inject(PermissionService)
const api = inject(ApiService) const api = inject(ApiService)
const authInfo = api.authInfo
if (!api.authInfo) { if (!api.authInfo) {
return router.createUrlTree(['/login']) return router.createUrlTree(['/login'])
} }
permission.loadPermission(authInfo?.permissions ?? [])
permission.isRoot = Boolean(authInfo?.roles.includes('admin'))
// console.log('authInfo', authInfo, Boolean(authInfo?.roles.includes('admin')), permission)
return true return true
} }

1
web-admin-app/src/app/pages/home/home.component.html

@ -0,0 +1 @@
<p>home works!</p>

0
web-admin-app/src/app/pages/home/home.component.less

27
web-admin-app/src/app/pages/home/home.component.ts

@ -0,0 +1,27 @@
import { Component } from '@angular/core'
import { Router } from '@angular/router'
import { PermissionService } from 'app/shared/permission/permission.service'
import { NzMessageService } from 'ng-zorro-antd/message'
@Component({
selector: 'app-home',
standalone: true,
imports: [],
templateUrl: './home.component.html',
styleUrl: './home.component.less',
})
export class HomeComponent {
constructor(
private permission: PermissionService,
private router: Router,
private msg: NzMessageService,
) {}
ngOnInit(): void {
if (this.permission.hasPermission('dashboard:view') || this.permission.isRoot) {
this.router.navigate(['/dashboard'])
return
}
this.router.navigate(['/profile/basic'])
}
}

8
web-admin-app/src/app/pages/org-setting/org-setting.component.html

@ -146,6 +146,14 @@
<input type="password" nz-input formControlName="repassword" placeholder="请输入密码" /> <input type="password" nz-input formControlName="repassword" placeholder="请输入密码" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item>
<nz-form-label> 角色 </nz-form-label>
<nz-form-control [nzErrorTip]="errorTpl">
<nz-select class="!w-fulle" formControlName="roleId" nzPlaceHolder="请选择">
<nz-option *ngFor="let item of roles" [nzValue]="item.roleId" [nzLabel]="item.roleName"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label> 状态 </nz-form-label> <nz-form-label> 状态 </nz-form-label>
<nz-form-control [nzErrorTip]="errorTpl"> <nz-form-control [nzErrorTip]="errorTpl">

28
web-admin-app/src/app/pages/org-setting/org-setting.component.ts

@ -10,8 +10,10 @@ import { NzSafeAny } from 'ng-zorro-antd/core/types'
import { NzModalService } from 'ng-zorro-antd/modal' import { NzModalService } from 'ng-zorro-antd/modal'
import { NzMessageService } from 'ng-zorro-antd/message' import { NzMessageService } from 'ng-zorro-antd/message'
import { NzDrawerRef, NzDrawerService } from 'ng-zorro-antd/drawer' import { NzDrawerRef, NzDrawerService } from 'ng-zorro-antd/drawer'
import { lastValueFrom } from 'rxjs' import { Subject, lastValueFrom, switchMap } from 'rxjs'
import { FormValidators } from 'app/utils' import { FormValidators } from 'app/utils'
import { MAX_PAGE_SIZE } from 'app/constants'
import { Observable } from 'tinymce'
@Component({ @Component({
selector: 'app-org-setting', selector: 'app-org-setting',
@ -27,9 +29,19 @@ export class OrgSettingComponent implements OnInit {
private drawer: NzDrawerService, private drawer: NzDrawerService,
private api: ApiService, private api: ApiService,
private fb: FormBuilder, private fb: FormBuilder,
) {} ) {
this.requestSubject
.pipe(switchMap((p: NzSafeAny, q: NzSafeAny) => this.fetchData(p, q)))
.subscribe((response) => {
console.log(response)
})
}
private requestSubject = new Subject<void>()
table = new TableOption(this.fetchData.bind(this)) table = new TableOption(this.fetchData.bind(this), {
manual: true,
})
queryForm!: FormGroup queryForm!: FormGroup
@ -43,6 +55,8 @@ export class OrgSettingComponent implements OnInit {
uploadLoading = false uploadLoading = false
roles: NzSafeAny[] = []
@ViewChild('drawerFooterTpl') drawerFooterTpl!: TemplateRef<NzSafeAny> @ViewChild('drawerFooterTpl') drawerFooterTpl!: TemplateRef<NzSafeAny>
@ViewChild('formContentTpl') formContentTpl!: TemplateRef<NzSafeAny> @ViewChild('formContentTpl') formContentTpl!: TemplateRef<NzSafeAny>
@ -94,21 +108,23 @@ export class OrgSettingComponent implements OnInit {
]) ])
this.initQueryForm() this.initQueryForm()
this.initCreateForm() this.initCreateForm()
this.api.getRolePage({ pageSize: MAX_PAGE_SIZE, pageNum: 1 }).subscribe((res) => {
this.roles = res.body.rows
})
} }
fetchData(p: {}, q: AnyObject) { fetchData(p: {}, q: AnyObject) {
return this.api.getUserPage({ ...p, ...q, organizationId: this.organization?.organizationId }) return this.api.getUserPage({ ...p, ...q, organizationId: this.organization?.organizationId }).pipe()
} }
onOrgSelectedChange(org: NzSafeAny) { onOrgSelectedChange(org: NzSafeAny) {
console.log('org', org)
this.organization = org this.organization = org
this.table.ref.search() this.table.ref.search()
} }
onCreate(data?: NzSafeAny) { onCreate(data?: NzSafeAny) {
if (data) { if (data) {
this.createForm.patchValue(data) this.createForm.patchValue({ ...data, roleId: data._umsRole.roleId })
} }
this.drawerRef = this.drawer.create({ this.drawerRef = this.drawer.create({
nzTitle: data ? '编辑员工' : '新增员工', nzTitle: data ? '编辑员工' : '新增员工',

4
web-admin-app/src/app/pages/system/system-role/system-role.component.html

@ -60,7 +60,9 @@
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item>
<nz-form-label>权限菜单</nz-form-label> <nz-form-label>权限菜单</nz-form-label>
<nz-form-control> 《权限菜单》 </nz-form-control> <nz-form-control>
<app-permissions-select formControlName="menuIdList" />
</nz-form-control>
</nz-form-item> </nz-form-item>
<!-- <nz-form-item> <!-- <nz-form-item>
<nz-form-label>备注</nz-form-label> <nz-form-label>备注</nz-form-label>

7
web-admin-app/src/app/pages/system/system-role/system-role.component.ts

@ -11,11 +11,12 @@ import { NzModalService } from 'ng-zorro-antd/modal'
import { NzMessageService } from 'ng-zorro-antd/message' import { NzMessageService } from 'ng-zorro-antd/message'
import { BUSINESS_STATUS_MAP } from 'app/constants' import { BUSINESS_STATUS_MAP } from 'app/constants'
import { FormValidators } from 'app/utils' import { FormValidators } from 'app/utils'
import { PermissionsSelectComponent } from 'app/components'
@Component({ @Component({
selector: 'app-system-role', selector: 'app-system-role',
standalone: true, standalone: true,
imports: [SharedModule], imports: [SharedModule, PermissionsSelectComponent],
templateUrl: './system-role.component.html', templateUrl: './system-role.component.html',
styleUrl: './system-role.component.less', styleUrl: './system-role.component.less',
}) })
@ -74,11 +75,13 @@ export class SystemRoleComponent {
onCreate(data?: NzSafeAny) { onCreate(data?: NzSafeAny) {
if (data) { if (data) {
this.createForm.patchValue(data) this.createForm.patchValue({ ...data, menuIdList: data._menus.map((i: NzSafeAny) => i.menuId) })
} }
this.modal.create({ this.modal.create({
nzTitle: data ? '编辑角色' : '添加角色', nzTitle: data ? '编辑角色' : '添加角色',
nzContent: this.createFormTpl, nzContent: this.createFormTpl,
nzWrapClassName: 'modal-lg',
nzWidth: '720px',
nzOnOk: async () => { nzOnOk: async () => {
if (FormValidators.validateFormGroup(this.createForm)) { if (FormValidators.validateFormGroup(this.createForm)) {
const vals = this.createForm.value const vals = this.createForm.value

8
web-admin-app/src/app/services/api.service.ts

@ -31,12 +31,15 @@ export class ApiService {
const strData = localStorage.getItem(this.AUTH_KEY_NAME) const strData = localStorage.getItem(this.AUTH_KEY_NAME)
if (strData) { if (strData) {
authInfo = JSON.parse(strData) authInfo = JSON.parse(strData)
this.permission.loadPermission(authInfo?.permissions ?? [])
} }
} catch (error) {} } catch (error) {}
return authInfo return authInfo
} }
getAuthInfo() {
return of(Boolean(this.authInfo))
}
removeAuthData() { removeAuthData() {
localStorage.removeItem(this.AUTH_KEY_NAME) localStorage.removeItem(this.AUTH_KEY_NAME)
} }
@ -95,6 +98,9 @@ export class ApiService {
} }
return this.http.post<JwResponse>('/api/umsUser/update', data) return this.http.post<JwResponse>('/api/umsUser/update', data)
} }
getMenus() {
return this.http.post<JwResponse>('/api/umsMenu/listAll', null)
}
getRolePage(data: {}) { getRolePage(data: {}) {
return this.http.post<JwResponse>('/api/umsRole/list', data) return this.http.post<JwResponse>('/api/umsRole/list', data)
} }

86
web-admin-app/src/app/shared/components/header/header.component.html

@ -6,63 +6,65 @@
</a> </a>
<ul class="ml-8 nav flex"> <ul class="ml-8 nav flex">
<li class="nav-item"> <li class="nav-item" *appPermission="['dashboard:view']">
<a routerLink="/dashboard" routerLinkActive="active">首页</a> <a routerLink="/dashboard" routerLinkActive="active">首页</a>
</li> </li>
<li class="nav-item">
<a routerLink="/fixed-asset" routerLinkActive="active">固资管理</a>
</li>
<li class="nav-item">
<a routerLink="/asset-flow" routerLinkActive="active">固资流程</a>
</li>
<!-- <li class="nav-item">
<a routerLink="/org" routerLinkActive="active">人事管理</a>
</li> -->
<li class="nav-item">
<a routerLink="/system" routerLinkActive="active">系统管理</a>
</li>
<!-- <li
class="nav-item"
*appPermission="['jwClient:model', 'jwClient:list', 'jwClient:add', 'jwClient:edit', 'jwClient:delete']"
>
<a routerLink="/entity" routerLinkActive="active">授权实体</a>
</li>
<li <li
class="nav-item" class="nav-item"
*appPermission="[ *appPermission="[
'jwProduct:model', 'ledger-asset-search:view',
'jwProduct:list', 'ledger-storage:view',
'jwProduct:add', 'ledger-asset-belong:view',
'jwProduct:edit', 'ledger-asset-org:view',
'jwProduct:delete' 'ledger-asset-position:view',
'ledger-asset-category:view',
'ledger-asset-my-own:view',
'fixed-asset-manage:view',
'fixed-asset-manage-entry:view',
'fixed-asset-manage-distribution:view',
'fixed-asset-manage-return:view',
'fixed-asset-manage-borrow:view',
'fixed-asset-manage-revert:view',
'fixed-asset-manage-allot:view',
'fixed-asset-manage-transfer:view',
'fixed-asset-manage-scrap:view',
'fixed-asset-repair-type:view',
'fixed-asset-repair-list:view',
'fixed-asset-repair-fault:view',
'stocktaking-plan:view',
'stocktaking-job:view',
'alert-borrow:view',
'alert-maintenance:view',
'alert-inventory-safety:view',
'alert-inventory-up:view',
'alert-inventory-down:view',
'basic-category:view',
'basic-manufacturer:view',
'basic-supplier:view',
'basic-maintainer:view',
'basic-save-position:view',
'basic-warehouse:view'
]" ]"
> >
<a routerLink="/product" routerLinkActive="active">产品管理</a> <a routerLink="/fixed-asset" routerLinkActive="active">固资管理</a>
</li> </li>
<li <li
class="nav-item" class="nav-item"
*appPermission="[ *appPermission="[
'userGroup:model', 'asset-flow-home:view',
'sysUser:model', 'asset-flow-my-apply:view',
'sysUser:list', 'asset-flow-my-todo:view',
'sysUser:add', 'asset-flow-my-finished:view'
'sysUser:edit',
'sysUser:delete'
]" ]"
> >
<a routerLink="/contacts" routerLinkActive="active">用户管理</a> <a routerLink="/asset-flow" routerLinkActive="active">固资流程</a>
</li>
<li
class="nav-item"
*appPermission="['sysRole:model', 'sysRole:list', 'sysRole:add', 'sysRole:edit', 'sysRole:delete']"
>
<a routerLink="/role" routerLinkActive="active">角色管理</a>
</li> </li>
<li class="nav-item" *appPermission="['sysLog:model']"> <!-- <li class="nav-item">
<a routerLink="/log" routerLinkActive="active">操作记录</a> <a routerLink="/org" routerLinkActive="active">人事管理</a>
</li> --> </li> -->
<li class="nav-item" *appPermission="['system-user:view', 'system-role:view', 'system-flow-form:view']">
<a routerLink="/system" routerLinkActive="active">系统管理</a>
</li>
</ul> </ul>
<div class="ml-auto flex items-center"> <div class="ml-auto flex items-center">

58
web-admin-app/src/app/shared/components/server-paginated-table/server-paginated-table.component.ts

@ -17,7 +17,7 @@ import {
TableColumnsInterface, TableColumnsInterface,
persistKey, persistKey,
} from './server-paginated-table.service' } from './server-paginated-table.service'
import { finalize, map } from 'rxjs' import { Subject, finalize, map, switchMap } from 'rxjs'
import { FormGroup } from '@angular/forms' import { FormGroup } from '@angular/forms'
import { TableFormDirective } from './table-form.directive' import { TableFormDirective } from './table-form.directive'
import { Router } from '@angular/router' import { Router } from '@angular/router'
@ -153,7 +153,35 @@ export class ServerPaginatedTableComponent implements OnInit, OnChanges {
private pageTable: ServerPaginatedTableService, private pageTable: ServerPaginatedTableService,
private router: Router, private router: Router,
private drawer: NzDrawerService, private drawer: NzDrawerService,
) {} ) {
this.trigger$
.pipe(
switchMap(() => {
const { pageIndex, pageSize } = this.pagination
const page = this.pageTable.globalConfig.formatPaginationData({ pageIndex, pageSize })
const query = this.formGroup?.value ?? {}
this.pagination.loading = true
return this.options.fetchData(page, query).pipe(
map(this.pageTable.globalConfig.formatServiceData),
finalize(() => {
this.saveCacheState()
this.pagination.loading = false
}),
)
}),
)
.subscribe((res) => {
this.pagination = {
...this.pagination,
...res,
}
// 不允许跨页选择
this.selected.clear()
this.onSelectChange()
})
}
@Input() options!: TableOption @Input() options!: TableOption
@ -276,30 +304,10 @@ export class ServerPaginatedTableComponent implements OnInit, OnChanges {
return persistKey + this.router.url.replaceAll('/', '_') return persistKey + this.router.url.replaceAll('/', '_')
} }
private run() { trigger$ = new Subject()
const { pageIndex, pageSize } = this.pagination
const page = this.pageTable.globalConfig.formatPaginationData({ pageIndex, pageSize })
const query = this.formGroup?.value ?? {}
this.pagination.loading = true private run() {
this.options this.trigger$.next(null)
.fetchData(page, query)
.pipe(
map(this.pageTable.globalConfig.formatServiceData),
finalize(() => {
this.saveCacheState()
this.pagination.loading = false
}),
)
.subscribe((res) => {
this.pagination = {
...this.pagination,
...res,
}
// 不允许跨页选择
this.selected.clear()
this.onSelectChange()
})
} }
reload() { reload() {

4
web-admin-app/src/app/shared/permission/permission.directive.ts

@ -19,7 +19,9 @@ export class PermissionDirective {
} }
private checkPermission(): void { private checkPermission(): void {
const hasPermission = this.permissionService.hasPermission(this.requiredPermission) const hasPermission =
this.permissionService.isRoot || this.permissionService.hasPermission(this.requiredPermission)
console.log('hasPermission', this.permissionService)
if (hasPermission) { if (hasPermission) {
this.viewContainerRef.createEmbeddedView(this.templateRef) this.viewContainerRef.createEmbeddedView(this.templateRef)
} else { } else {

2
web-admin-app/src/app/shared/permission/permission.service.ts

@ -4,7 +4,7 @@ import { Injectable } from '@angular/core'
export class PermissionService { export class PermissionService {
constructor() {} constructor() {}
private permissons: string[] = [] permissons: string[] = []
isRoot = false isRoot = false

Loading…
Cancel
Save