Browse Source

Merge branch 'master' of http://39.98.153.250:9080/bowintek/GHSCPartyBuild

82064491C07A712AE32B5B57EC6EF136 9 months ago
parent
commit
9b060a2a8b
34 changed files with 908 additions and 13 deletions
  1. 6 0
      parth5/parth5/src/app/views/pages/study/againt/againt.component.html
  2. 13 0
      parth5/parth5/src/app/views/pages/study/againt/againt.component.scss
  3. 27 0
      parth5/parth5/src/app/views/pages/study/againt/againt.component.spec.ts
  4. 14 0
      parth5/parth5/src/app/views/pages/study/againt/againt.component.ts
  5. 7 0
      parth5/parth5/src/app/views/pages/study/education/education.component.html
  6. 13 0
      parth5/parth5/src/app/views/pages/study/education/education.component.scss
  7. 27 0
      parth5/parth5/src/app/views/pages/study/education/education.component.spec.ts
  8. 14 0
      parth5/parth5/src/app/views/pages/study/education/education.component.ts
  9. 16 0
      parth5/parth5/src/app/views/pages/study/partycourse/fileshower/fileshower.component.html
  10. 7 0
      parth5/parth5/src/app/views/pages/study/partycourse/fileshower/fileshower.component.scss
  11. 6 6
      parth5/parth5/src/app/views/tapp/tab-work/tab-work.page.spec.ts
  12. 38 0
      parth5/parth5/src/app/views/pages/study/partycourse/fileshower/fileshower.component.ts
  13. 62 0
      parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.html
  14. 160 0
      parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.scss
  15. 27 0
      parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.spec.ts
  16. 301 0
      parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.ts
  17. 6 0
      parth5/parth5/src/app/views/pages/study/rule/rule.component.html
  18. 13 0
      parth5/parth5/src/app/views/pages/study/rule/rule.component.scss
  19. 27 0
      parth5/parth5/src/app/views/pages/study/rule/rule.component.spec.ts
  20. 14 0
      parth5/parth5/src/app/views/pages/study/rule/rule.component.ts
  21. 1 1
      parth5/parth5/src/app/views/tapp/tab-main/tab-main-routing.module.ts
  22. 1 1
      parth5/parth5/src/app/views/tapp/tab-main/tab-main.module.ts
  23. 0 0
      parth5/parth5/src/app/views/tapp/tab-main/tab-main.route.ts
  24. 10 0
      parth5/parth5/src/app/views/tapp/tab-study/tab-study-routing.module.ts
  25. 24 0
      parth5/parth5/src/app/views/tapp/tab-study/tab-study.module.ts
  26. 25 0
      parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.html
  27. 14 0
      parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.scss
  28. 15 0
      parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.ts
  29. 9 0
      parth5/parth5/src/app/views/tapp/tab-study/tab-study.route.ts
  30. 1 1
      parth5/parth5/src/app/views/tapp/tab-user/tab-user-routing.module.ts
  31. 1 1
      parth5/parth5/src/app/views/tapp/tab-user/tab-user.module.ts
  32. 0 0
      parth5/parth5/src/app/views/tapp/tab-user/tab-user.route.ts
  33. 4 0
      parth5/parth5/src/app/views/tapp/tabs/tabs-routing.module.ts
  34. 5 3
      parth5/parth5/src/app/views/tapp/tabs/tabs.page.html

+ 6 - 0
parth5/parth5/src/app/views/pages/study/againt/againt.component.html

@@ -0,0 +1,6 @@
+<ion-content>
+  <div class="building">
+    <img class="building-img" src="assets/icon/education.svg">
+    <ion-text class="building-text">建设中...</ion-text>
+  </div>
+</ion-content>

+ 13 - 0
parth5/parth5/src/app/views/pages/study/againt/againt.component.scss

@@ -0,0 +1,13 @@
+.building {
+  display: flex;
+  flex-direction: column;
+  margin: 15px 0;
+  .building-img{
+    width: 20%;
+    display: flex;
+    align-self: center;
+  }
+  .building-text{
+    text-align: center;
+  }
+}

+ 27 - 0
parth5/parth5/src/app/views/pages/study/againt/againt.component.spec.ts

@@ -0,0 +1,27 @@
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { AgaintComponent } from './againt.component';
+
+describe('AgaintComponent', () => {
+  let component: AgaintComponent;
+  let fixture: ComponentFixture<AgaintComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ AgaintComponent ],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA],
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(AgaintComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 14 - 0
parth5/parth5/src/app/views/pages/study/againt/againt.component.ts

@@ -0,0 +1,14 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-againt',
+  templateUrl: './againt.component.html',
+  styleUrls: ['./againt.component.scss'],
+})
+export class AgaintComponent implements OnInit {
+
+  constructor() { }
+
+  ngOnInit() {}
+
+}

+ 7 - 0
parth5/parth5/src/app/views/pages/study/education/education.component.html

@@ -0,0 +1,7 @@
+
+<ion-content>
+  <div class="building">
+    <img class="building-img" src="assets/icon/education.svg">
+    <ion-text class="building-text">建设中...</ion-text>
+  </div>
+</ion-content>

+ 13 - 0
parth5/parth5/src/app/views/pages/study/education/education.component.scss

@@ -0,0 +1,13 @@
+.building {
+  display: flex;
+  flex-direction: column;
+  margin: 15px 0;
+  .building-img{
+    width: 20%;
+    display: flex;
+    align-self: center;
+  }
+  .building-text{
+    text-align: center;
+  }
+}

+ 27 - 0
parth5/parth5/src/app/views/pages/study/education/education.component.spec.ts

@@ -0,0 +1,27 @@
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { EducationComponent } from './education.component';
+
+describe('EducationComponent', () => {
+  let component: EducationComponent;
+  let fixture: ComponentFixture<EducationComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ EducationComponent ],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA],
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(EducationComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 14 - 0
parth5/parth5/src/app/views/pages/study/education/education.component.ts

@@ -0,0 +1,14 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-education',
+  templateUrl: './education.component.html',
+  styleUrls: ['./education.component.scss'],
+})
+export class EducationComponent implements OnInit {
+
+  constructor() { }
+
+  ngOnInit() {}
+
+}

+ 16 - 0
parth5/parth5/src/app/views/pages/study/partycourse/fileshower/fileshower.component.html

@@ -0,0 +1,16 @@
+<ion-header id="main-content" mode="md">
+  <ion-toolbar>
+    <ion-buttons slot="start">
+      <ion-button (click)="close()">
+        <ion-icon name="arrow-back-outline" size="large" class="back-img"></ion-icon>
+      </ion-button>
+    </ion-buttons>
+    <ion-label>{{pdfTitle}}</ion-label>
+  </ion-toolbar>
+</ion-header>
+<ion-content fullscreen="true">
+  <pinch-zoom>
+    <pdf-viewer [src]="safeUrl" [render-text]="false" [show-all]="true"
+                [original-size]="false" [autoresize]="true" class="pdf-viewer"></pdf-viewer>
+  </pinch-zoom>
+</ion-content>

+ 7 - 0
parth5/parth5/src/app/views/pages/study/partycourse/fileshower/fileshower.component.scss

@@ -0,0 +1,7 @@
+.pdf-viewer{
+  border: 0;
+  height: 100%;
+  width:100%;
+}
+
+

+ 6 - 6
parth5/parth5/src/app/views/tapp/tab-work/tab-work.page.spec.ts

@@ -1,19 +1,19 @@
 import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
 import { IonicModule } from '@ionic/angular';
 
-import { TabWorkPage } from './tab-work.page';
+import { FileshowerComponent } from './fileshower.component';
 
-describe('TabWorkPage', () => {
-  let component: TabWorkPage;
-  let fixture: ComponentFixture<TabWorkPage>;
+describe('FileshowerComponent', () => {
+  let component: FileshowerComponent;
+  let fixture: ComponentFixture<FileshowerComponent>;
 
   beforeEach(waitForAsync(() => {
     TestBed.configureTestingModule({
-      declarations: [ TabWorkPage ],
+      declarations: [ FileshowerComponent ],
       imports: [IonicModule.forRoot()]
     }).compileComponents();
 
-    fixture = TestBed.createComponent(TabWorkPage);
+    fixture = TestBed.createComponent(FileshowerComponent);
     component = fixture.componentInstance;
     fixture.detectChanges();
   }));

+ 38 - 0
parth5/parth5/src/app/views/pages/study/partycourse/fileshower/fileshower.component.ts

@@ -0,0 +1,38 @@
+import {Component, Input, OnInit} from '@angular/core';
+import {ConfigService} from "../../../service/config.service";
+import {ModalController} from "@ionic/angular";
+import { DomSanitizer } from '@angular/platform-browser';
+
+@Component({
+  selector: 'app-fileshower',
+  templateUrl: './fileshower.component.html',
+  styleUrls: ['./fileshower.component.scss'],
+})
+export class FileshowerComponent implements OnInit {
+
+  pdfUrl:string='/appApi/FileMgr/showDoc/';
+
+  safeUrl:any;
+
+  @Input()
+  pdfTitle:string='';
+
+  @Input()
+  fileId: string;
+
+  constructor(private configService:ConfigService,public modalController: ModalController,private sanitizer: DomSanitizer) { }
+
+  ngOnInit() {
+
+    this.configService.GetConfig().subscribe(config=>{
+      //this.sanitizer.bypassSecurityTrustResourceUrl(
+      this.safeUrl=config.webServerHost+this.pdfUrl+this.fileId;
+    });
+
+  }
+
+  close(){
+    this.modalController.dismiss({});
+  }
+
+}

+ 62 - 0
parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.html

@@ -0,0 +1,62 @@
+<ion-header id="main-content">
+  <ion-toolbar>
+    <ion-label style="font-size: 20px;">制度学习</ion-label>
+    <ion-searchbar slot="end" mode="ios" enterkeyhint="search" placeholder="搜索文件名称" showCancelButton="never" (ionChange)="searchChange($event)"></ion-searchbar>
+  </ion-toolbar>
+  <div class="panel-background search-panel">
+    <div class="search-label">
+      当前选中制度:
+    </div>
+    <div class="search-text">
+      <span>{{fileTypeData.fileTypeName}}</span>
+      <div class="select-right" (click)="selectFileType()">
+        <span>选目录</span>
+        <img src="assets/icon/icon-treeparty.png" height="16" width="16"/>
+      </div>
+    </div>
+  </div>
+  <ion-item class="item-filter item-title">
+  </ion-item>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item class="item1" (click)="ShowPdf(it)" *ngFor="let it of dataList$|async">
+      <ion-label>
+        <h4>{{it.FILENAME}}</h4>
+        <p class="item-fileno">类型:{{it.FILETYPENAME}}</p>
+      </ion-label>
+      <ion-img src="assets/icon/read-book.svg" class="img-read" slot="end"></ion-img>
+    </ion-item>
+  </ion-list>
+  <ion-infinite-scroll threshold="100px" (ionInfinite)="scroll($event)">
+    <ion-infinite-scroll-content
+      loadingSpinner="bubbles"
+      loadingText="{{total>searchParams.pageIndex*searchParams.pageSize?'正在加载...':'暂无更多'}}">
+    </ion-infinite-scroll-content>
+  </ion-infinite-scroll>
+</ion-content>
+<ion-menu menuId="typeRoot" side="end" type="overlay" class="menu-body" contentId="main-content">
+  <ion-header class="menu-header">
+    <ion-icon name="close-circle-outline" class="btn-close" (click)="CloseMenu()"></ion-icon>
+    <ion-toolbar>
+      <ion-buttons slot="start">
+        <ion-button [hidden]="fileTypeData.selectedParent==null" (click)="BackMenu()">
+          <ion-icon class="back-img" name="arrow-back-outline"></ion-icon>
+        </ion-button>
+      </ion-buttons>
+      <ion-label [class]="{'filetype-selected':selectedTitle()}" (click)="SelectTitleFileType()" class="header-title">{{fileTypeData.pSelectedName}}</ion-label>
+    </ion-toolbar>
+  </ion-header>
+  <ion-content class="menu-content">
+    <ion-list>
+      <ion-item *ngFor="let it of typeList" (click)="ShowKidsFileType(it)">
+        <ion-label [class]="{'filetype-selected':selectedItem(it)}" >{{it.filetypename}}</ion-label>
+        <ion-icon [hidden]="it.childcount==0"   name="chevron-forward-outline" slot="end"></ion-icon>
+      </ion-item>
+    </ion-list>
+  </ion-content>
+  <ion-toolbar id="menu-bar" class="toolbar-center">
+    <ion-button color="light" (click)="CloseMenu()" mode="ios">关闭</ion-button>
+    <ion-button color="danger" (click)="chooseFileType()" mode="ios">选择</ion-button>
+  </ion-toolbar>
+</ion-menu>

+ 160 - 0
parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.scss

@@ -0,0 +1,160 @@
+:host{
+  --background:#000000;
+}
+
+.building {
+  display: flex;
+  flex-direction: column;
+  margin: 15px 0;
+  .building-img{
+    width: 20%;
+    display: flex;
+    align-self: center;
+  }
+  .building-text{
+    text-align: center;
+  }
+}
+.toolbar-label{
+  padding-left: 10px;
+}
+.search-panel {
+  padding: 5px 15px 15px 15px;
+  .search-label {
+    opacity: 0.75;
+    font-size: 14px;
+  }
+
+  .search-text {
+    display: flex;
+    justify-content: space-between;
+    padding-top: 15px;
+
+    div {
+      display: flex;
+      cursor: pointer;
+
+      img {
+        padding-left: 2px;
+      }
+    }
+  }
+}
+
+.filetype-selected {
+  color: #DE4F3F !important;
+}
+
+.back-btn {
+  padding: 10px;
+}
+
+#menu-bar{
+  margin-bottom: 40px;
+  :nth-child(1){
+    margin-right: 15px;
+    width: 100px;
+  }
+  :nth-child(2){
+    margin-left: 15px;
+    width: 100px;
+  }
+}
+
+.item-title{
+  height: 6px;
+}
+
+.item1{
+  --background:#F8F9FC;
+  --border-radius:10pt;
+  margin: 5px;
+
+  .img-read {
+    height: 22px;
+    width: 22px;
+  }
+}
+
+.search-panel {
+  padding: 5px 15px 15px 15px;
+
+  .search-label {
+    opacity: 0.75;
+    font-size: 14px;
+  }
+
+  .search-text {
+    display: flex;
+    justify-content: space-between;
+    padding-top: 15px;
+
+    ion-icon {
+      padding-top: 3px;
+    }
+
+    .select-right{
+      display: flex;
+      cursor: pointer;
+      margin-right: 15px;
+      img{
+        margin-left: 2px;
+        margin-top: 3px;
+      }
+    }
+  }
+}
+
+.selected {
+  color: #DE4F3F;
+
+  .img-check {
+    margin-right: 8px;
+  }
+}
+
+.menu-content {
+  .up-title {
+    color: #DE4F3F;
+  }
+
+}
+
+.menu-body {
+  --background: transparent;
+
+  .menu-header {
+    border-top-left-radius: 8px;
+    background: white;
+    --background: #fff;
+
+    ion-toolbar {
+      --background: #fff;
+      border-top-left-radius: 8px;
+    }
+    .back-img {
+      color: #380F0A;
+    }
+    .header-title {
+      padding: 20px 15px 10px 15px;
+      font-size: 15px;
+      color: #380F0A;
+      font-weight: bold;
+    }
+
+    .btn-close {
+      font-size: 22px;
+      padding: 10px 0 0 10px;
+      color: #5E4545;
+      cursor: pointer;
+    }
+  }
+
+  .toolbar-center {
+    border-bottom-left-radius: 8px;
+  }
+}
+
+
+
+

+ 27 - 0
parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.spec.ts

@@ -0,0 +1,27 @@
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PartycourseComponent } from './partycourse.component';
+
+describe('PartycourseComponent', () => {
+  let component: PartycourseComponent;
+  let fixture: ComponentFixture<PartycourseComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ PartycourseComponent ],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA],
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(PartycourseComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 301 - 0
parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.ts

@@ -0,0 +1,301 @@
+import {Component, Inject, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {ConfigService, RequsetData} from "../../service/config.service";
+import {UserService} from "../../service/user.service";
+import {AlertController, MenuController, ModalController} from "@ionic/angular";
+import {PartycourseService, IFileParams} from '../../api/partycourse.service';
+import {Observable, Subject} from 'rxjs';
+import {FileshowerComponent} from './fileshower/fileshower.component';
+import {
+  debounceTime, distinctUntilChanged, switchMap, map, tap
+} from 'rxjs/operators';
+import {DOCUMENT} from "@angular/common";
+import {ShowpdfComponent} from "../../comm/modal/showpdf/showpdf.component";
+
+@Component({
+  selector: 'app-partycourse',
+  templateUrl: './partycourse.component.html',
+  styleUrls: ['./partycourse.component.scss'],
+})
+export class PartycourseComponent implements OnInit {
+
+  private searchFiles = new Subject<any>();
+  dataList$: Observable<any[]>;
+  dataParams: any = {
+    target: null,
+    total: 10,
+    searchParams: null
+  };
+  searchParams: IFileParams = {
+    pageIndex: 1,
+    pageSize: 10,
+    fileTypeId: '',
+    fileName: ''
+  };
+
+  dataList: any[] = [];
+  typeList: any[] = [];
+
+  total: number = 30;
+  fileTypeData: any = {
+    title: '全部目录',
+    allTypeName: '制度查询',
+    pSelectedName: '全部目录',
+    rootKids: [],
+    selectedNode: null,
+    selectedParent: null,
+    fileTypeName: ''
+  };
+  sourceType: null;
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private partycourseService: PartycourseService, private configService: ConfigService, private userService: UserService,
+              public alertController: AlertController, private menu: MenuController, private modal: ModalController, @Inject(DOCUMENT) private document: any) {
+
+
+  }
+
+  ionViewWillEnter(): void {
+    this.searchParams.pageIndex = 1;
+  }
+
+  ngOnInit() {
+
+    this.dataList$ = this.searchFiles.pipe(
+      debounceTime(300),
+      distinctUntilChanged(null, x => x.searchParams.fileName + x.searchParams.fileTypeId + x.searchParams.pageIndex + x.searchParams.pageSize),
+      switchMap((params: any) => {
+
+        let sMap = this.partycourseService.GetFileListByType(params.searchParams).pipe(map(x => {
+
+          //this.total=x.item.total;
+          this.dataParams.total = x.item.total;
+
+          if (params.target) {
+            this.dataList = this.dataList.concat(x.item.list);
+            params.target.complete();
+          } else {
+            this.dataList = x.item.list;
+          }
+
+          return this.dataList;
+        }));
+
+        return sMap;
+      })
+    );
+    this.routeInfo.queryParams.subscribe(params => {
+      this.sourceType = params['sourceType'] == undefined ? null : params['sourceType'];
+      this.partycourseService.GetfileTypeRoot({sourceType: this.sourceType}).subscribe(next => {
+
+        this.fileTypeData.rootKids = next.item;
+        if (this.fileTypeData.rootKids.length > 0) {
+          if (this.sourceType != null) {
+            this.fileTypeData.selectedNode = this.fileTypeData.rootKids[0];
+            this.searchParams.fileTypeId = this.fileTypeData.selectedNode.filetypeid.toString();
+            this.fileTypeData.fileTypeName = this.fileTypeData.selectedNode.filetypename;
+          }
+          this.dataParams.searchParams = this.searchParams;
+          this.dataParams.target = null;
+          this.searchFiles.next(this.dataParams);
+          //this.loadFilesbyType();
+        }
+        this.typeList = this.fileTypeData.rootKids;
+      });
+    });
+  }
+
+
+  scroll(event) {
+
+    if (this.dataParams.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+      this.searchParams.pageIndex += 1;
+      //this.getList();
+      this.dataParams.target = event.target;
+      //this.dataParams.searchParams=this.searchParams;
+      this.searchFiles.next(this.dataParams);
+    } else {
+      setTimeout(() => {
+        event.target.complete();
+      }, 500);
+    }
+    /*
+      setTimeout(() => {
+        //event.target.complete();
+
+        }
+      }, 500);*/
+  }
+
+  back() {
+    this.router.navigateByUrl('/main/tabs/tab3');
+    //this.navCtrl.back();
+  }
+
+  searchChange(event) {
+    /*
+    this.fieldList[0].value = event.detail.value;
+    this.searchParams.dzzmc = event.detail.value;
+    this.reload();*/
+
+    //this.searchFiles.next(event.detail.value);
+
+    this.searchParams.fileName = event.detail.value;
+    this.searchParams.pageIndex = 1;
+    this.dataParams.target = null;
+    this.searchFiles.next(this.dataParams);
+    /*
+    this.searchParams.pageIndex=1;
+    this.dataList.length=0;
+    this.searchParams.fileTypeId=null;
+    this.fileTypeData.fileTypeName="";
+    this.loadFilesBySearch();*/
+  }
+
+  loadFilesBySearch() {
+
+    this.partycourseService.GetfileListByKey(this.searchParams).subscribe(next => {
+      //next.item
+      this.dataList = this.dataList.concat(next.item.list);
+    });
+
+  }
+
+  loadFilesbyType() {
+    //this.partycourseService.GetFileListByType(this.searchParams)
+
+    this.partycourseService.GetFileListByType(this.searchParams).subscribe(next => {
+      //next.item
+      //this.dataList=this.dataList.concat(next.item.list);
+
+    });
+  }
+
+  selectFileType() {
+    this.menu.enable(true, 'typeRoot').then(a => {
+    });
+    this.menu.open('typeRoot').then(a => {
+    });
+  }
+
+  ClickPFileType(it: any) {
+    /*
+    this.fileTypeData.pSelectedId=it.filetypeid;
+    this.fileTypeData.pSelectedName=it.filetypename;*/
+    //this.fileTypeData.selectedId=it.
+    this.fileTypeData.selectedNode = it;
+
+  }
+
+  selectedItem(it: any) {
+    let result = false;
+    if (this.fileTypeData.selectedNode != null) {
+      result = this.fileTypeData.selectedNode.filetypeid == it.filetypeid;
+    }
+    return result;
+  }
+
+  selectedTitle() {
+    let result = false;
+
+    if (this.fileTypeData.selectedNode == null) {
+      result = true;
+    } else {
+      if (this.fileTypeData.selectedParent != null) {
+        result = this.fileTypeData.selectedNode.filetypeid == this.fileTypeData.selectedParent.filetypeid;
+      }
+    }
+
+    return result;
+  }
+
+  SelectTitleFileType() {
+    this.fileTypeData.selectedNode = this.fileTypeData.selectedParent;
+  }
+
+  ShowKidsFileType(it: any) {
+    //this.ClickPFileType(it);
+    this.fileTypeData.selectedNode = it;
+
+    if (it.childcount == 0) {
+      return true;
+    }
+
+    this.fileTypeData.pSelectedName = it.filetypename;
+    this.fileTypeData.selectedParent = it;
+
+    if (it.kids != null) {
+      this.typeList = it.kids;
+
+    } else {
+      this.partycourseService.GetileTypesByParent(it.filetypeid).subscribe(req => {
+        it.kids = req.item;
+        it.kids.forEach(kit => {
+          kit.parent = it;
+        });
+        this.typeList = it.kids;
+
+      });
+    }
+
+  }
+
+  BackMenu() {
+    if (this.fileTypeData.selectedParent != null) {
+      this.fileTypeData.selectedNode = this.fileTypeData.selectedParent;
+      this.fileTypeData.selectedParent = this.fileTypeData.selectedParent.parent;
+    }
+
+    if (this.fileTypeData.selectedParent != null) {
+      this.typeList = this.fileTypeData.selectedParent.kids;
+    } else {
+      this.typeList = this.fileTypeData.rootKids;
+      this.fileTypeData.pSelectedName = this.fileTypeData.title;
+      this.fileTypeData.selectedNode = null;
+    }
+  }
+
+  CloseMenu() {
+    this.menu.close('typeRoot').then(a => {
+    });
+  }
+
+  chooseFileType() {
+    if (this.fileTypeData.selectedNode == null) {
+      this.searchParams.fileTypeId = '';
+      this.fileTypeData.fileTypeName = this.fileTypeData.title;
+    } else {
+      this.searchParams.fileTypeId = this.fileTypeData.selectedNode.filetypeid.toString();
+      this.fileTypeData.fileTypeName = this.fileTypeData.selectedNode.filetypename;
+    }
+    this.searchParams.pageIndex = 1;
+    this.dataParams.target = null;
+    //this.searchParams.fileName="";
+    //this.dataList.length=0;
+    this.searchFiles.next(this.dataParams);
+    //this.loadFilesbyType();
+    this.CloseMenu();
+  }
+
+  ShowPdf(it: any) {
+    let pdfModal = this.modal.create({
+      component: ShowpdfComponent,
+      componentProps: {
+        pdfTitle: it.FILENAME,
+        // pdfUrl:"/assets/study/pdf/"+it.URL
+        pdfUrl: '/appApi/FileMgr/showDoc/' + it.FILEID,
+        pointType: 2,
+        fileid: it.FILEID,
+        duration: it.DURATION
+      }
+    });
+    this.configService.HttpGetRomote('/appApi/onlineCourse/insertCourseRecord', {
+      courseId: it.FILEID,
+      studentUserId: this.userService.GetUser().userid, pointType: 2, title: it.FILENAME,
+      userName: this.userService.GetUser().username
+    }).subscribe((data: RequsetData) => {
+      if (data.success) {
+      }
+    });
+    pdfModal.then(a => a.present());
+  }
+}

+ 6 - 0
parth5/parth5/src/app/views/pages/study/rule/rule.component.html

@@ -0,0 +1,6 @@
+<ion-content>
+  <div class="building">
+    <img class="building-img" src="assets/icon/education.svg">
+    <ion-text class="building-text">建设中...</ion-text>
+  </div>
+</ion-content>

+ 13 - 0
parth5/parth5/src/app/views/pages/study/rule/rule.component.scss

@@ -0,0 +1,13 @@
+.building {
+  display: flex;
+  flex-direction: column;
+  margin: 15px 0;
+  .building-img{
+    width: 20%;
+    display: flex;
+    align-self: center;
+  }
+  .building-text{
+    text-align: center;
+  }
+}

+ 27 - 0
parth5/parth5/src/app/views/pages/study/rule/rule.component.spec.ts

@@ -0,0 +1,27 @@
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RuleComponent } from './rule.component';
+
+describe('RuleComponent', () => {
+  let component: RuleComponent;
+  let fixture: ComponentFixture<RuleComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ RuleComponent ],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA],
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RuleComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 14 - 0
parth5/parth5/src/app/views/pages/study/rule/rule.component.ts

@@ -0,0 +1,14 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-rule',
+  templateUrl: './rule.component.html',
+  styleUrls: ['./rule.component.scss'],
+})
+export class RuleComponent implements OnInit {
+
+  constructor() { }
+
+  ngOnInit() {}
+
+}

+ 1 - 1
parth5/parth5/src/app/views/tapp/tab-main/tab-main-routing.module.ts

@@ -1,7 +1,7 @@
 import {NgModule} from '@angular/core';
 import {RouterModule} from '@angular/router';
 
-import {routes} from "./tab-main-routes";
+import {routes} from "./tab-main.route";
 
 
 @NgModule({

+ 1 - 1
parth5/parth5/src/app/views/tapp/tab-main/tab-main.module.ts

@@ -6,7 +6,7 @@ import {TabMainPageRoutingModule} from './tab-main-routing.module';
 import {PartysearchComponent} from "../../../comm/modal/partysearch/partysearch.component";
 import {PartytreeComponent} from "../../../comm/modal/partytree/partytree.component";
 import {SearchComponent} from "../../../comm/modal/search/search.component";
-import {routes} from "./tab-main-routes";
+import {routes} from "./tab-main.route";
 import {EmptyComponent} from "../../../comm/modal/empty/empty.component";
 import {Routes} from "@angular/router";
 import {PartyselectComponent} from "../../../comm/modal/partyselect/partyselect.component";

parth5/parth5/src/app/views/tapp/tab-main/tab-main-routes.ts → parth5/parth5/src/app/views/tapp/tab-main/tab-main.route.ts


+ 10 - 0
parth5/parth5/src/app/views/tapp/tab-study/tab-study-routing.module.ts

@@ -0,0 +1,10 @@
+import { NgModule } from '@angular/core';
+import { RouterModule } from '@angular/router';
+import { routes } from "./tab-study.route";
+
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule],
+})
+export class TabStudyPageRoutingModule {}

+ 24 - 0
parth5/parth5/src/app/views/tapp/tab-study/tab-study.module.ts

@@ -0,0 +1,24 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule } from '@angular/forms';
+
+import { IonicModule } from '@ionic/angular';
+
+import { TabStudyPageRoutingModule } from './tab-study-routing.module';
+
+import { routes } from "./tab-study.route";
+
+const pubComponents = [
+
+];
+
+@NgModule({
+  imports: [
+    CommonModule,
+    FormsModule,
+    IonicModule,
+    TabStudyPageRoutingModule
+  ],
+  declarations: [...routes.map(e => e.component), ...pubComponents]
+})
+export class TabStudyPageModule {}

+ 25 - 0
parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.html

@@ -0,0 +1,25 @@
+<ion-header>
+  <ion-toolbar color="danger">
+    <ion-input clearInput placeholder="输入查询标题"></ion-input>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-tabs>
+    <ion-tab-bar slot="top" class="tab-bar">
+      <ion-tab-button tab="education">
+        <ion-label>专题教育</ion-label>
+      </ion-tab-button>
+      <ion-tab-button routerLink="/main/tabs/tab3/partycourse">
+        <ion-label>党课</ion-label>
+      </ion-tab-button>
+      <ion-tab-button tab="againt">
+        <ion-label>反腐倡廉</ion-label>
+      </ion-tab-button>
+      <ion-tab-button tab="rule">
+        <ion-label>法律法规</ion-label>
+      </ion-tab-button>
+    </ion-tab-bar>
+  </ion-tabs>
+
+
+</ion-content>

+ 14 - 0
parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.scss

@@ -0,0 +1,14 @@
+ion-tab-button {
+  font-size: 16px;
+  color: black;
+}
+ion-tab-button.tab-selected {
+  color: red;
+  text-decoration: red;
+  text-decoration-style: solid;
+  text-decoration-line: underline;
+}
+
+.tab-bar{
+  --background:#ffeff1;
+}

+ 15 - 0
parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.ts

@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-tab-study',
+  templateUrl: './tab-study.page.html',
+  styleUrls: ['./tab-study.page.scss'],
+})
+export class TabStudyPage implements OnInit {
+
+  constructor() { }
+
+  ngOnInit() {
+  }
+
+}

+ 9 - 0
parth5/parth5/src/app/views/tapp/tab-study/tab-study.route.ts

@@ -0,0 +1,9 @@
+import {Routes} from "@angular/router";
+import {TabStudyPage} from "./tab-study.page";
+
+export const routes: Routes = [
+  {
+    path: '',
+    component: TabStudyPage
+  },
+];

+ 1 - 1
parth5/parth5/src/app/views/tapp/tab-user/tab-user-routing.module.ts

@@ -1,6 +1,6 @@
 import { NgModule } from '@angular/core';
 import { RouterModule } from '@angular/router';
-import { routes } from './tab-user.routes'
+import { routes } from './tab-user.route'
 
 @NgModule({
   imports: [RouterModule.forChild(routes)],

+ 1 - 1
parth5/parth5/src/app/views/tapp/tab-user/tab-user.module.ts

@@ -6,7 +6,7 @@ import { IonicModule } from '@ionic/angular';
 
 import { TabUserPageRoutingModule } from './tab-user-routing.module';
 
-import { routes } from "./tab-user.routes";
+import { routes } from "./tab-user.route";
 
 const pubComponents = [
 

parth5/parth5/src/app/views/tapp/tab-user/tab-user.routes.ts → parth5/parth5/src/app/views/tapp/tab-user/tab-user.route.ts


+ 4 - 0
parth5/parth5/src/app/views/tapp/tabs/tabs-routing.module.ts

@@ -15,6 +15,10 @@ const routes: Routes = [
         path: 'tabWork',
         loadChildren: () => import('../tab-work/tab-work.module').then(m => m.TabWorkPageModule)
       },
+      {
+        path: 'tabStudy',
+        loadChildren: () => import('../tab-study/tab-study.module').then(m => m.TabStudyPageModule)
+      },
       {
         path: 'tabUser',
         loadChildren: () => import('../tab-user/tab-user.module').then(m => m.TabUserPageModule)

+ 5 - 3
parth5/parth5/src/app/views/tapp/tabs/tabs.page.html

@@ -4,12 +4,14 @@
       <img src="assets/icon/tab_main.svg"/>
       <ion-label >首页</ion-label>
     </ion-tab-button>
-
-    <ion-tab-button class="tab-zuzhi"  tab="tabWork">
+    <ion-tab-button class="tab-zuzhi" tab="tabWork">
       <img src="assets/icon/tab_work.svg"/>
       <ion-label>工作提醒</ion-label>
     </ion-tab-button>
-
+    <ion-tab-button class="tab-xuexi" tab="tabStudy">
+      <img src="assets/icon/tab_xuexi.svg"/>
+      <ion-label>制度查询</ion-label>
+    </ion-tab-button>
     <ion-tab-button class="tab-me" tab="tabUser">
       <img src="assets/icon/tab_me.svg" />
       <ion-label>我的</ion-label>