Browse Source

app端党组织,党员信息

pengjing 9 months ago
parent
commit
ab9294383c
88 changed files with 2720 additions and 108 deletions
  1. 19 0
      parth5/parth5/src/app/api/meeting/index.ts
  2. 0 16
      parth5/parth5/src/app/api/partycourse.service.spec.ts
  3. 0 44
      parth5/parth5/src/app/api/partycourse.service.ts
  4. 35 0
      parth5/parth5/src/app/api/partyinfo/index.ts
  5. 39 0
      parth5/parth5/src/app/api/partyuser/index.ts
  6. 0 30
      parth5/parth5/src/app/api/test-img-array.service.ts
  7. 2 2
      parth5/parth5/src/app/app-routing.module.ts
  8. 11 2
      parth5/parth5/src/app/app.module.ts
  9. 2 4
      parth5/parth5/src/app/comm/modal/search/search.component.html
  10. 1 1
      parth5/parth5/src/app/comm/modal/search/search.component.ts
  11. 18 0
      parth5/parth5/src/app/routes/partyInfo.ts
  12. 20 0
      parth5/parth5/src/app/routes/partyUser.ts
  13. 1 1
      parth5/parth5/src/app/login/login.module.ts
  14. 0 0
      parth5/parth5/src/app/views/login/login.page.html
  15. 1 1
      parth5/parth5/src/app/login/login.page.scss
  16. 0 0
      parth5/parth5/src/app/views/login/login.page.spec.ts
  17. 7 7
      parth5/parth5/src/app/login/login.page.ts
  18. 117 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/detail.component.html
  19. 21 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/detail.component.scss
  20. 38 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/detail.component.ts
  21. 52 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/evaluate/evaluate.component.html
  22. 36 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/evaluate/evaluate.component.scss
  23. 61 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/evaluate/evaluate.component.ts
  24. 24 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/leaderuser/leaderuser.component.html
  25. 28 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/leaderuser/leaderuser.component.scss
  26. 61 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/leaderuser/leaderuser.component.ts
  27. 24 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/manageuser/manageuser.component.html
  28. 21 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/manageuser/manageuser.component.scss
  29. 70 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/manageuser/manageuser.component.ts
  30. 25 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/reward/reward.component.html
  31. 21 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/reward/reward.component.scss
  32. 62 0
      parth5/parth5/src/app/views/pages/party/party-info/detail/reward/reward.component.ts
  33. 34 0
      parth5/parth5/src/app/views/pages/party/party-info/party-info.component.html
  34. 30 0
      parth5/parth5/src/app/views/pages/party/party-info/party-info.component.scss
  35. 149 0
      parth5/parth5/src/app/views/pages/party/party-info/party-info.component.ts
  36. 26 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/democracy/democracy.component.html
  37. 30 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/democracy/democracy.component.scss
  38. 61 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/democracy/democracy.component.ts
  39. 98 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/detail.component.html
  40. 99 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/detail.component.scss
  41. 42 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/detail.component.ts
  42. 28 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/partyhelp/partyhelp.component.html
  43. 38 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/partyhelp/partyhelp.component.scss
  44. 61 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/partyhelp/partyhelp.component.ts
  45. 25 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/punish/punish.component.html
  46. 21 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/punish/punish.component.scss
  47. 62 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/punish/punish.component.ts
  48. 25 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/reward/reward.component.html
  49. 21 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/reward/reward.component.scss
  50. 62 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/reward/reward.component.ts
  51. 31 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/train/train.component.html
  52. 32 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/train/train.component.scss
  53. 61 0
      parth5/parth5/src/app/views/pages/party/party-user/detail/train/train.component.ts
  54. 36 0
      parth5/parth5/src/app/views/pages/party/party-user/party-user.component.html
  55. 0 0
      parth5/parth5/src/app/views/pages/party/party-user/party-user.component.scss
  56. 214 0
      parth5/parth5/src/app/views/pages/party/party-user/party-user.component.ts
  57. 13 0
      parth5/parth5/src/app/views/tapp/tab-main/tab-main-routes.ts
  58. 12 0
      parth5/parth5/src/app/views/tapp/tab-main/tab-main-routing.module.ts
  59. 27 0
      parth5/parth5/src/app/views/tapp/tab-main/tab-main.module.ts
  60. 43 0
      parth5/parth5/src/app/views/tapp/tab-main/tab-main.page.html
  61. 92 0
      parth5/parth5/src/app/views/tapp/tab-main/tab-main.page.scss
  62. 24 0
      parth5/parth5/src/app/views/tapp/tab-main/tab-main.page.spec.ts
  63. 66 0
      parth5/parth5/src/app/views/tapp/tab-main/tab-main.page.ts
  64. 17 0
      parth5/parth5/src/app/views/tapp/tab-user/tab-user-routing.module.ts
  65. 20 0
      parth5/parth5/src/app/views/tapp/tab-user/tab-user.module.ts
  66. 9 0
      parth5/parth5/src/app/views/tapp/tab-user/tab-user.page.html
  67. 0 0
      parth5/parth5/src/app/views/tapp/tab-user/tab-user.page.scss
  68. 24 0
      parth5/parth5/src/app/views/tapp/tab-user/tab-user.page.spec.ts
  69. 15 0
      parth5/parth5/src/app/views/tapp/tab-user/tab-user.page.ts
  70. 17 0
      parth5/parth5/src/app/views/tapp/tab-work/tab-work-routing.module.ts
  71. 20 0
      parth5/parth5/src/app/views/tapp/tab-work/tab-work.module.ts
  72. 9 0
      parth5/parth5/src/app/views/tapp/tab-work/tab-work.page.html
  73. 0 0
      parth5/parth5/src/app/views/tapp/tab-work/tab-work.page.scss
  74. 24 0
      parth5/parth5/src/app/views/tapp/tab-work/tab-work.page.spec.ts
  75. 15 0
      parth5/parth5/src/app/views/tapp/tab-work/tab-work.page.ts
  76. 39 0
      parth5/parth5/src/app/views/tapp/tabs/tabs-routing.module.ts
  77. 27 0
      parth5/parth5/src/app/views/tapp/tabs/tabs.module.ts
  78. 18 0
      parth5/parth5/src/app/views/tapp/tabs/tabs.page.html
  79. 39 0
      parth5/parth5/src/app/views/tapp/tabs/tabs.page.scss
  80. 24 0
      parth5/parth5/src/app/views/tapp/tabs/tabs.page.spec.ts
  81. 20 0
      parth5/parth5/src/app/views/tapp/tabs/tabs.page.ts
  82. BIN
      parth5/parth5/src/assets/icon/jrxx.png
  83. BIN
      parth5/parth5/src/assets/icon/liulan.png
  84. BIN
      parth5/parth5/src/assets/icon/main-bg.png
  85. 1 0
      parth5/parth5/src/assets/icon/tool_study.svg
  86. 1 0
      parth5/parth5/src/assets/icon/tool_video.svg
  87. 1 0
      parth5/parth5/src/assets/icon/xuexijifen.svg
  88. BIN
      parth5/parth5/src/assets/study/default.jpg

+ 19 - 0
parth5/parth5/src/app/api/meeting/index.ts

@@ -0,0 +1,19 @@
+import {ConfigService, RequsetData} from "../../service/config.service";
+import {Injectable} from "@angular/core";
+import {Observable} from "rxjs";
+
+@Injectable({providedIn: 'root'})
+export class MeetingApi {
+  constructor(private configService: ConfigService) {
+  }
+
+  getMeetingList(userId: String):Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/shyk/getMyMeetingList', {
+      pageIndex: 1,
+      pageSize: 5,
+      userId: userId
+    });
+  }
+
+}
+

+ 0 - 16
parth5/parth5/src/app/api/partycourse.service.spec.ts

@@ -1,16 +0,0 @@
-import { TestBed } from '@angular/core/testing';
-
-import { PartycourseService } from './partycourse.service';
-
-describe('PartycourseService', () => {
-  let service: PartycourseService;
-
-  beforeEach(() => {
-    TestBed.configureTestingModule({});
-    service = TestBed.inject(PartycourseService);
-  });
-
-  it('should be created', () => {
-    expect(service).toBeTruthy();
-  });
-});

+ 0 - 44
parth5/parth5/src/app/api/partycourse.service.ts

@@ -1,44 +0,0 @@
-import { Injectable } from '@angular/core';
-import {ConfigService, RequsetData} from "../service/config.service";
-import {Observable} from "rxjs";
-import {
-  debounceTime, distinctUntilChanged, switchMap,map
-} from 'rxjs/operators';
-
-
-export interface IFileParams {
-  pageIndex: number;
-  pageSize: number;
-  fileTypeId:string;
-  fileName:string,
-}
-
-@Injectable({
-  providedIn: 'root'
-})
-export class PartycourseService {
-
-  fileTypeRootUrl:string='/appApi/FileMgr/GetFileTypeRoot';
-  fileTypesByParentUrl:string='/appApi/FileMgr/GetFileTypesByParent';
-  fileListUrl:string='/appApi/FileMgr/getFileList';
-  fileKeyUrl:string='/appApi/FileMgr/GetFilesByKey';
-
-  constructor(private configService: ConfigService) {
-  }
-
-  GetFileListByType(datas:any):Observable<RequsetData>{
-     return this.configService.HttpGetRomote(this.fileListUrl,datas);
-  }
-
-  GetfileListByKey(datas:any):Observable<RequsetData>{
-    return this.configService.HttpGetRomote(this.fileKeyUrl,datas);
-  }
-
-  GetfileTypeRoot():Observable<RequsetData>{
-    return this.configService.HttpGetRomote(this.fileTypeRootUrl);
-  }
-
-  GetileTypesByParent(id:string):Observable<RequsetData>{
-    return this.configService.HttpGetRomote(this.fileTypesByParentUrl,{parentid:id});
-  }
-}

+ 35 - 0
parth5/parth5/src/app/api/partyinfo/index.ts

@@ -0,0 +1,35 @@
+import {ConfigService, RequsetData} from "../../service/config.service";
+import {Injectable} from "@angular/core";
+import {Observable} from "rxjs";
+
+@Injectable({providedIn: 'root'})
+export class PartyInfoApi {
+  constructor(private configService: ConfigService) {
+  }
+
+  getList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getPartyList', params);
+  }
+
+  getData(partyCode: string): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getPartyInfo', {dzzdm: partyCode});
+  }
+
+  getEvaluateList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getDjkpxxList', params);
+  }
+
+  getLeaderuserList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getMaxGradeUserList', params);
+  }
+
+  getManageuserList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getPartyZLYList', params);
+  }
+
+  getRewardList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getDnpxxxList', params);
+  }
+
+}
+

+ 39 - 0
parth5/parth5/src/app/api/partyuser/index.ts

@@ -0,0 +1,39 @@
+import {ConfigService, RequsetData} from "../../service/config.service";
+import {Injectable} from "@angular/core";
+import {Observable} from "rxjs";
+
+@Injectable({providedIn: 'root'})
+export class PartyUserApi {
+  constructor(private configService: ConfigService) {
+  }
+
+  getList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getPartyUserList', params);
+  }
+
+  getData(userCode: string): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getUserInfo', {rybm: userCode});
+  }
+
+  getDemocracyList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getMZPYList', params);
+  }
+
+  getPartyhelpList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getDnghbfDetailsList', params);
+  }
+
+  getPunishList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getJlcfxxList', params);
+  }
+
+  getRewardList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getDnpxxxList', params);
+  }
+
+  getTrainList(params: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote('/appApi/party/getPXQKList', params);
+  }
+
+}
+

+ 0 - 30
parth5/parth5/src/app/api/test-img-array.service.ts

@@ -1,30 +0,0 @@
-import { Injectable } from '@angular/core';
-import {ConfigService, RequsetData} from "../service/config.service";
-import {Observable} from "rxjs";
-
-@Injectable({
-  providedIn: 'root'
-})
-export class TestImgArrayService {
-
-  batchImgUrl:string='/appApi/home/buildImg';
-  clearImgUrl:string='/appApi/home/clearImgInArray';
-  findRusultUrl:string='/appApi/home/FindTestResult';
-
-  constructor(private configService: ConfigService) {
-  }
-
-  BatchImgArray(datas:any):Observable<RequsetData>{
-    return this.configService.HttpGetRomote(this.batchImgUrl,datas);
-  }
-
-  ClearImgArray():Observable<RequsetData>{
-    return this.configService.HttpGetRomote(this.clearImgUrl);
-  }
-
-  FindResult(refid:string):Observable<RequsetData>{
-
-     return this.configService.HttpGetRomote(this.findRusultUrl,{refid});
-  }
-
-}

+ 2 - 2
parth5/parth5/src/app/app-routing.module.ts

@@ -2,8 +2,8 @@ import { NgModule } from '@angular/core';
 import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
 
 const routes: Routes = [
-  { path: 'home', loadChildren: () => import('./home/home.module').then(m => m.HomePageModule)},
-  { path: '', loadChildren: () => import('./login/login.module').then(m => m.LoginPageModule) },
+  { path: 'tapp', loadChildren: () => import('./views/tapp/tabs/tabs.module').then(m => m.TabsPageModule)},
+  { path: '', loadChildren: () => import('./views/login/login.module').then(m => m.LoginPageModule) },
   {
     path: '**',
     redirectTo: ''

+ 11 - 2
parth5/parth5/src/app/app.module.ts

@@ -16,14 +16,23 @@ import { LocationStrategy, HashLocationStrategy } from '@angular/common';
 /*import {InterceptorA} from "./service/config.service";*/
 
 @NgModule({
-  declarations: [AppComponent],
+  /*declarations: [AppComponent],
   entryComponents: [],
   imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule,HttpClientModule,DragDropModule,
     QuillModule.forRoot()],
   providers: [
     DatePipe,
     { provide: LocationStrategy, useClass: HashLocationStrategy },
-/*    { provide: HTTP_INTERCEPTORS, useClass: InterceptorA, multi: true }*/
+/!*    { provide: HTTP_INTERCEPTORS, useClass: InterceptorA, multi: true }*!/
+  ],
+  bootstrap: [AppComponent]*/
+  declarations: [AppComponent],
+  entryComponents: [],
+  imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule,HttpClientModule,DragDropModule,ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }),
+    QuillModule.forRoot()],
+  providers: [
+    DatePipe,
+    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
   ],
   bootstrap: [AppComponent]
 })

+ 2 - 4
parth5/parth5/src/app/comm/modal/search/search.component.html

@@ -1,4 +1,3 @@
-<!--
 <ion-content>
   <ion-item class="item-filter">
     <div slot="end" (click)="close()">
@@ -14,9 +13,9 @@
     <ion-input *ngIf="item.type=='number'" type="number" [(ngModel)]="item.value" placeholder="{{item.placeholder}}"></ion-input>
     <ion-datetime *ngIf="item.type=='datetime'" displayFormat="YYYY-MM-DD" cancelText="取消" doneText="选择" [(ngModel)]="item.value" placeholder="{{item.placeholder}}"></ion-datetime>
     <div *ngIf="item.type=='group-datetime'" class="item-group">
-      &lt;!&ndash;<div *ngFor="let input of item.inputs">
+      <!--<div *ngFor="let input of item.inputs">
         <ion-datetime displayFormat="YYYY-MM-DD" [(ngModel)]="input.value"></ion-datetime>
-      </div>&ndash;&gt;
+      </div>-->
       <ion-datetime displayFormat="YYYY-MM-DD" cancelText="取消" doneText="选择" [(ngModel)]="item.inputs[0].value" placeholder="{{item.inputs[0].placeholder}}"></ion-datetime>
       <span class="line"></span>
       <ion-datetime displayFormat="YYYY-MM-DD" cancelText="取消" doneText="选择" [(ngModel)]="item.inputs[1].value" placeholder="{{item.inputs[1].placeholder}}" min="{{item.inputs[0].value}}"></ion-datetime>
@@ -47,4 +46,3 @@
   <ion-button color="light" (click)="reset()" mode="ios" style="margin-right: 15px;width: 100px;">重置</ion-button>
   <ion-button color="danger" (click)="confirm()" mode="ios" style="margin-left: 15px;width: 100px;">确定</ion-button>
 </ion-toolbar>
--->

+ 1 - 1
parth5/parth5/src/app/comm/modal/search/search.component.ts

@@ -33,7 +33,7 @@ export class SearchComponent implements OnInit {
     this.fieldList.filter(it => it.type == "select" || it.type == "select-down").forEach(it => {
       it.selected = !(it.value != null && it.value != undefined && it.value !== '');
       if (it.dicParams.getUrl) {
-        this.configService.HttpGetRomote(['/appApi/dictionary', it.dicParams.getUrl].join('/'), {dicTypeKey: it.dicParams.dicTypeKey}).subscribe((data: RequsetData) => {
+        this.configService.HttpGetRomote(['/appApi/dic', it.dicParams.getUrl].join('/'), {dicTypeKey: it.dicParams.dicTypeKey}).subscribe((data: RequsetData) => {
           if (data.success) {
             it.dicList = data.item;
             if (it.dicParams.filter) {

+ 18 - 0
parth5/parth5/src/app/routes/partyInfo.ts

@@ -0,0 +1,18 @@
+import {Routes} from "@angular/router";
+import {PartyInfoComponent} from "../views/pages/party/party-info/party-info.component";
+import {DetailComponent} from "../views/pages/party/party-info/detail/detail.component";
+import {EvaluateComponent} from "../views/pages/party/party-info/detail/evaluate/evaluate.component";
+import {LeaderuserComponent} from "../views/pages/party/party-info/detail/leaderuser/leaderuser.component";
+import {ManageuserComponent} from "../views/pages/party/party-info/detail/manageuser/manageuser.component";
+import {RewardComponent} from "../views/pages/party/party-info/detail/reward/reward.component";
+
+const routes: Routes = [
+  {path: 'partyInfo', component: PartyInfoComponent},
+  {path: 'partyInfo/detail', component: DetailComponent},
+  {path: 'partyInfo/detail/evaluate', component: EvaluateComponent},
+  {path: 'partyInfo/detail/manageuser', component: ManageuserComponent},
+  {path: 'partyInfo/detail/reward', component: RewardComponent},
+  {path: 'partyInfo/detail/leaderuser', component: LeaderuserComponent},
+];
+
+export default routes;

+ 20 - 0
parth5/parth5/src/app/routes/partyUser.ts

@@ -0,0 +1,20 @@
+import {Routes} from "@angular/router";
+import {PartyUserComponent} from "../views/pages/party/party-user/party-user.component";
+import {DetailComponent} from "../views/pages/party/party-user/detail/detail.component";
+import {DemocracyComponent} from "../views/pages/party/party-user/detail/democracy/democracy.component";
+import {PartyhelpComponent} from "../views/pages/party/party-user/detail/partyhelp/partyhelp.component";
+import {PunishComponent} from "../views/pages/party/party-user/detail/punish/punish.component";
+import {RewardComponent} from "../views/pages/party/party-user/detail/reward/reward.component";
+import {TrainComponent} from "../views/pages/party/party-user/detail/train/train.component";
+
+const routes: Routes = [
+  {path: 'partyUser', component: PartyUserComponent},
+  {path: 'partyUser/detail', component: DetailComponent},
+  {path: 'partyUser/detail/democracy', component: DemocracyComponent},
+  {path: 'partyUser/detail/partyhelp', component: PartyhelpComponent},
+  {path: 'partyUser/detail/punish', component: PunishComponent},
+  {path: 'partyUser/detail/reward', component: RewardComponent},
+  {path: 'partyUser/detail/train', component: TrainComponent}
+];
+
+export default routes;

+ 1 - 1
parth5/parth5/src/app/login/login.module.ts

@@ -6,7 +6,7 @@ import { Routes, RouterModule } from '@angular/router';
 import { IonicModule } from '@ionic/angular';
 
 import { LoginPage } from './login.page';
-import {ClickLogDirective} from '../service/click-log.directive'
+import {ClickLogDirective} from '../../service/click-log.directive'
 
 const routes: Routes = [
   {

parth5/parth5/src/app/login/login.page.html → parth5/parth5/src/app/views/login/login.page.html


+ 1 - 1
parth5/parth5/src/app/login/login.page.scss

@@ -1,7 +1,7 @@
 .lg-top {
   width: 100%;
   height: 200px;
-  background-image: url("../../assets/icon/newbg1.jpg");
+  background-image: url("../../../assets/icon/newbg1.jpg");
   background-size: cover;
   background-size: 100% 100%;
 }

parth5/parth5/src/app/login/login.page.spec.ts → parth5/parth5/src/app/views/login/login.page.spec.ts


+ 7 - 7
parth5/parth5/src/app/login/login.page.ts

@@ -1,13 +1,13 @@
 import {Component, OnInit} from '@angular/core';
-import {RequsetData, ConfigService} from '../service/config.service';
+import {RequsetData, ConfigService} from '../../service/config.service';
 import {ActivatedRoute, Router, ParamMap} from "@angular/router";
-import {UserService} from '../service/user.service';
+import {UserService} from '../../service/user.service';
 import {switchMap} from 'rxjs/operators';
-import {JsBridgeService} from '../service/js-bridge.service';
-import {DESModel, DesService} from '../service/des.service';
+import {JsBridgeService} from '../../service/js-bridge.service';
+import {DESModel, DesService} from '../../service/des.service';
 import {LoadingController} from '@ionic/angular';
-import {UsemodularService} from "../service/usemodular.service";
-import {WxpayService} from "../service/wxpay.service";
+import {UsemodularService} from "../../service/usemodular.service";
+import {WxpayService} from "../../service/wxpay.service";
 
 @Component({
   selector: 'app-login',
@@ -64,7 +64,7 @@ export class LoginPage implements OnInit {
         this.userService.ReadUserDataScope(req.item.curRoleId, this.configService);
         this.usemodularService.getButtonList();
         //this.configService.HttpPostRomote()
-        this.router.navigate(['/home']);
+        this.router.navigate(['/tapp/tabs/tabMain']);
       } else {
         this.errorShow = true;
         this.msg += req.msg;

+ 117 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/detail.component.html

@@ -0,0 +1,117 @@
+<ion-header>
+  <ion-toolbar>
+    <ion-label>{{dataModel.dzzmc}}</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content *ngIf="dataModel.zzlb==100 || dataModel.zzlb==200">
+  <ion-grid class="item-info">
+    <ion-row class="item-label">
+      <ion-col>组织类别</ion-col>
+      <ion-col>成立时间</ion-col>
+      <ion-col>委员数</ion-col>
+    </ion-row>
+    <ion-row class="item-value">
+      <ion-col>{{dataModel.zzlbmc}}</ion-col>
+      <ion-col>{{dataModel.jldzzrq}}</ion-col>
+      <ion-col>{{dataModel.leaderCount}}</ion-col>
+    </ion-row>
+    <ion-row class="item-label">
+      <ion-col>所属党组织数</ion-col>
+      <ion-col>从业人数</ion-col>
+      <ion-col>党员数</ion-col>
+    </ion-row>
+    <ion-row class="item-value">
+      <ion-col>{{dataModel.childCount}}</ion-col>
+      <ion-col>{{dataModel.zgrs}}</ion-col>
+      <ion-col>{{dataModel.dyzs}}</ion-col>
+    </ion-row>
+    <ion-row class="item-label">
+      <ion-col>在岗党员数</ion-col>
+      <ion-col>预备党员数</ion-col>
+      <ion-col>入党积极分子数</ion-col>
+    </ion-row>
+    <ion-row class="item-value">
+      <ion-col>{{dataModel.zgcount}}</ion-col>
+      <ion-col>{{dataModel.ybdy}}</ion-col>
+      <ion-col>{{dataModel.jjfz}}</ion-col>
+    </ion-row>
+    <ion-row class="item-label">
+      <ion-col>申请入党数</ion-col>
+      <ion-col>上次换届时间</ion-col>
+      <ion-col>到期换届时间</ion-col>
+    </ion-row>
+    <ion-row class="item-value">
+      <ion-col>{{dataModel.sqrd}}</ion-col>
+      <ion-col>{{dataModel.schjsj}}</ion-col>
+      <ion-col>{{dataModel.dqhjsj}}</ion-col>
+    </ion-row>
+  </ion-grid>
+  <ion-item *ngIf="dataModel.dzzdm.length>9" class="item-detail" [routerLink]="['./evaluate']" [queryParams]="{dzzdm:dataModel.dzzdm}" detail>
+    <div class="line-y"></div>
+    年度考评情况
+  </ion-item>
+  <ion-item *ngIf="dataModel.dzzdm.length>9" class="item-detail" [routerLink]="['./manageuser']" [queryParams]="{dzzdm:dataModel.dzzdm}" detail>
+    <div class="line-y"></div>
+    党群管理人员情况
+  </ion-item>
+  <ion-item class="item-detail" [routerLink]="['./reward']" [queryParams]="{dzzdm:dataModel.dzzdm}" detail>
+    <div class="line-y"></div>
+    荣誉情况
+  </ion-item>
+</ion-content>
+<ion-content *ngIf="dataModel.zzlb==300 || dataModel.zzlb==400 || dataModel.zzlb==500">
+  <ion-grid class="item-info">
+    <ion-row class="item-label">
+      <ion-col>组织类别</ion-col>
+      <ion-col>委员数</ion-col>
+      <ion-col>所属党组织数</ion-col>
+    </ion-row>
+    <ion-row class="item-value">
+      <ion-col>{{dataModel.zzlbmc}}</ion-col>
+      <ion-col>{{dataModel.leaderCount}}</ion-col>
+      <ion-col>{{dataModel.childCount}}</ion-col>
+    </ion-row>
+    <ion-row class="item-label">
+      <ion-col>从业人数</ion-col>
+      <ion-col>党员数</ion-col>
+      <ion-col>在岗党员数</ion-col>
+    </ion-row>
+    <ion-row class="item-value">
+      <ion-col>{{dataModel.zgrs}}</ion-col>
+      <ion-col>{{dataModel.dyzs}}</ion-col>
+      <ion-col>{{dataModel.zgcount}}</ion-col>
+    </ion-row>
+    <ion-row class="item-label">
+      <ion-col>预备党员数</ion-col>
+      <ion-col>入党积极分子数</ion-col>
+      <ion-col>申请入党数</ion-col>
+    </ion-row>
+    <ion-row class="item-value">
+      <ion-col>{{dataModel.ybdy}}</ion-col>
+      <ion-col>{{dataModel.jjfz}}</ion-col>
+      <ion-col>{{dataModel.sqrd}}</ion-col>
+    </ion-row>
+    <ion-row class="item-label">
+      <ion-col>年度分类定级</ion-col>
+      <ion-col>上次换届时间</ion-col>
+      <ion-col>到期换届时间</ion-col>
+    </ion-row>
+    <ion-row class="item-value">
+      <ion-col>{{dataModel.djkpLevel}}</ion-col>
+      <ion-col>{{dataModel.schjsj}}</ion-col>
+      <ion-col>{{dataModel.dqhjsj}}</ion-col>
+    </ion-row>
+  </ion-grid>
+  <ion-item class="item-detail" [routerLink]="['./leaderuser']" [queryParams]="{dzzdm:dataModel.dzzdm}"  detail>
+    <div class="line-y"></div>
+    支委委员情况
+  </ion-item>
+  <ion-item class="item-detail" [routerLink]="['./reward']" [queryParams]="{dzzdm:dataModel.dzzdm}"  detail>
+    <div class="line-y"></div>
+    荣誉情况
+  </ion-item>
+</ion-content>
+

+ 21 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/detail.component.scss

@@ -0,0 +1,21 @@
+ion-header{
+  --background:#DE4F3F;
+  ion-toolbar{
+    --background:#DE4F3F;
+  }
+}
+ion-content{
+  --background: linear-gradient(to bottom,#DE4F3F, #FFFFFF) !important;
+}
+
+.item-info{
+  color: white;
+  .item-label{
+    opacity: 0.75;
+    font-size: 14px;
+  }
+
+  .item-value{
+
+  }
+}

+ 38 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/detail.component.ts

@@ -0,0 +1,38 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {RequsetData} from "../../../../../service/config.service";
+import {UserService} from "../../../../../service/user.service";
+import {PartyInfoApi} from "../../../../../api/partyinfo";
+
+@Component({
+  selector: 'app-detail',
+  templateUrl: './detail.component.html',
+  styleUrls: ['./detail.component.scss'],
+})
+export class DetailComponent implements OnInit {
+
+  dataModel: any = {};
+  extdata: any = {};
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController,
+              private partyInfoApi: PartyInfoApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.dataModel.dzzdm = params['dzzdm'];
+      this.getData();
+    });
+  }
+
+  getData() {
+    this.partyInfoApi.getData(this.dataModel.dzzdm).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataModel = data.item;
+      }
+    });
+  }
+
+}

+ 52 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/evaluate/evaluate.component.html

@@ -0,0 +1,52 @@
+<ion-header class="header-theme2">
+  <ion-toolbar>
+    <ion-label class="title-center">年度考评情况</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back2" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList">
+      <div slot="start" class="item-left">
+        <h3>{{item.YEAR}}</h3>
+        <p>{{item.JUDGELEVELNAME}}</p>
+      </div>
+      <ion-row>
+        <ion-col>
+          <ion-label>
+            <h2>第一季度</h2>
+            <p>{{item.QUARTER1}}</p>
+          </ion-label>
+        </ion-col>
+        <ion-col>
+          <ion-label>
+            <h2>第二季度</h2>
+            <p>{{item.QUARTER2}}</p>
+          </ion-label>
+        </ion-col>
+      </ion-row>
+      <ion-row>
+        <ion-col>
+          <ion-label>
+            <h2>第三季度</h2>
+            <p>{{item.QUARTER3}}</p>
+          </ion-label>
+        </ion-col>
+        <ion-col>
+          <ion-label>
+            <h2>第四季度</h2>
+            <p>{{item.QUARTER4}}</p>
+          </ion-label>
+        </ion-col>
+      </ion-row>
+    </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>

+ 36 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/evaluate/evaluate.component.scss

@@ -0,0 +1,36 @@
+ion-content {
+  --background: #FAFAFA !important;
+}
+
+ion-list {
+  background: #FAFAFA !important;
+
+  ion-item {
+    --border-radius: 8px;
+    margin: 0 10px 10px 10px;
+    --padding-top: 10px;
+    --padding-bottom: 8px;
+
+    .item-left {
+      width: 80px;
+      text-align: center;
+    }
+
+    .item-left:after {
+      content: "";
+      width: 2px;
+      height: 85%;
+      background: #ddd;
+      position: absolute;
+      left: 115px;
+      z-index: 2;
+      top: 50%;
+      transform: translate(-50%, -50%);
+    }
+  }
+
+}
+
+ion-col{
+  text-align: center;
+}

+ 61 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/evaluate/evaluate.component.ts

@@ -0,0 +1,61 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {RequsetData} from "../../../../../../service/config.service";
+import {UserService} from "../../../../../../service/user.service";
+import {PartyInfoApi} from "../../../../../../api/partyinfo";
+
+@Component({
+  selector: 'app-evaluate',
+  templateUrl: './evaluate.component.html',
+  styleUrls: ['./evaluate.component.scss'],
+})
+export class EvaluateComponent implements OnInit {
+
+  dataList: any = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 10,
+    ssdzzdm: ''
+  };
+  total: number = 30;
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController,
+              private partyInfoApi: PartyInfoApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.searchParams.ssdzzdm = params['dzzdm'];
+      this.reload();
+    });
+  }
+
+  getList() {
+    this.partyInfoApi.getEvaluateList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataList = this.dataList.concat(data.item.list);
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+}

+ 24 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/leaderuser/leaderuser.component.html

@@ -0,0 +1,24 @@
+<ion-header class="header-theme2">
+  <ion-toolbar>
+    <ion-label class="title-center">支委委员情况</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back2" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList">
+      <ion-label>
+        <h2><div>{{item.XM}}</div></h2>
+        <p>{{item.DZZMC}}</p>
+      </ion-label>
+    </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>

+ 28 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/leaderuser/leaderuser.component.scss

@@ -0,0 +1,28 @@
+ion-content {
+  --background: #FAFAFA !important;
+}
+
+ion-list {
+  background: #FAFAFA !important;
+
+  ion-item {
+    --border-radius: 8px;
+    margin: 0 10px 10px 10px;
+    --padding-top: 3px;
+    /*--padding-bottom: 8px;*/
+    ion-label{
+      h2{
+        margin: 0 0 10px 0;
+        font-weight: bold;
+        display: -webkit-box;
+        div{
+          /*width: 60px;*/
+        }
+        span{
+          font-weight: initial;
+        }
+      }
+    }
+  }
+
+}

+ 61 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/leaderuser/leaderuser.component.ts

@@ -0,0 +1,61 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {RequsetData} from "../../../../../../service/config.service";
+import {UserService} from "../../../../../../service/user.service";
+import {PartyInfoApi} from "../../../../../../api/partyinfo";
+
+@Component({
+  selector: 'app-leaderuser',
+  templateUrl: './leaderuser.component.html',
+  styleUrls: ['./leaderuser.component.scss'],
+})
+export class LeaderuserComponent implements OnInit {
+
+  dataList: any = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 10,
+    ssdzzdm: ''
+  };
+  total: number = 30;
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController,
+              private partyInfoApi: PartyInfoApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.searchParams.ssdzzdm = params['dzzdm'];
+      this.reload();
+    });
+  }
+
+  getList() {
+    this.partyInfoApi.getLeaderuserList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataList = this.dataList.concat(data.item.list);
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+}

+ 24 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/manageuser/manageuser.component.html

@@ -0,0 +1,24 @@
+<ion-header class="header-theme2">
+  <ion-toolbar>
+    <ion-label class="title-center">党群管理人员情况</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back2" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList">
+      <ion-label>
+        <h2>{{item.XM}}</h2>
+        <p>{{item.SZDZBMC}}</p>
+      </ion-label>
+    </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>

+ 21 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/manageuser/manageuser.component.scss

@@ -0,0 +1,21 @@
+ion-content {
+  --background: #FAFAFA !important;
+}
+
+ion-list {
+  background: #FAFAFA !important;
+
+  ion-item {
+    --border-radius: 8px;
+    margin: 0 10px 10px 10px;
+    --padding-top: 3px;
+    /*--padding-bottom: 8px;*/
+    ion-label{
+      h2{
+        margin: 0 0 10px 0;
+        font-weight: bold;
+      }
+    }
+  }
+
+}

+ 70 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/manageuser/manageuser.component.ts

@@ -0,0 +1,70 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {ConfigService, RequsetData} from "../../../../../../service/config.service";
+import {UserService} from "../../../../../../service/user.service";
+import {PartyInfoApi} from "../../../../../../api/partyinfo";
+
+@Component({
+  selector: 'app-manageuser',
+  templateUrl: './manageuser.component.html',
+  styleUrls: ['./manageuser.component.scss'],
+})
+export class ManageuserComponent implements OnInit {
+
+  dataList: any = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 10,
+    dzzdm: ''
+  };
+  total: number = 30;
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private configService: ConfigService, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController,
+              private partyInfoApi: PartyInfoApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.searchParams.dzzdm = params['dzzdm'];
+      this.reload();
+    });
+  }
+
+  getList() {
+    this.partyInfoApi.getManageuserList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        data.item.list.forEach(item => {
+          if (this.dataList.filter(it => it.XM == item.XM).length <= 0) {
+            this.dataList.push({
+              XM: item.XM,
+              ZWMC: item.ZWMC,
+              SZDZBMC: item.SZDZBMC,
+              JSZWMC: item.JSZWMC
+            });
+          }
+        });
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+}

+ 25 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/reward/reward.component.html

@@ -0,0 +1,25 @@
+<ion-header class="header-theme2">
+  <ion-toolbar>
+    <ion-label class="title-center">荣誉情况</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back2" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList">
+      <ion-label>
+        <h2>{{item.HONOURNAME}}</h2>
+        <p>荣誉等级:{{item.LEVELNAME}}</p>
+        <p>荣誉时间:{{item.HONOURTIME | date:'yyyy-MM-dd'}}</p>
+      </ion-label>
+    </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>

+ 21 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/reward/reward.component.scss

@@ -0,0 +1,21 @@
+ion-content {
+  --background: #FAFAFA !important;
+}
+
+ion-list {
+  background: #FAFAFA !important;
+
+  ion-item {
+    --border-radius: 8px;
+    margin: 0 10px 10px 10px;
+    --padding-top: 10px;
+    --padding-bottom: 8px;
+    ion-label{
+      h2{
+        margin: 0 0 10px 0;
+        font-weight: bold;
+      }
+    }
+  }
+
+}

+ 62 - 0
parth5/parth5/src/app/views/pages/party/party-info/detail/reward/reward.component.ts

@@ -0,0 +1,62 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {ConfigService, RequsetData} from "../../../../../../service/config.service";
+import {UserService} from "../../../../../../service/user.service";
+import {PartyInfoApi} from "../../../../../../api/partyinfo";
+
+@Component({
+  selector: 'app-reward',
+  templateUrl: './reward.component.html',
+  styleUrls: ['./reward.component.scss'],
+})
+export class RewardComponent implements OnInit {
+
+  dataList: any = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 10,
+    ssdzzdm: '',
+    pxlx: 2
+  };
+  total: number = 30;
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private configService: ConfigService, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController
+    , private partyInfoApi: PartyInfoApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.searchParams.ssdzzdm = params['dzzdm'];
+      this.reload();
+    });
+  }
+
+  getList() {
+    this.partyInfoApi.getRewardList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataList = this.dataList.concat(data.item.list);
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+}

+ 34 - 0
parth5/parth5/src/app/views/pages/party/party-info/party-info.component.html

@@ -0,0 +1,34 @@
+<ion-header>
+  <ion-toolbar>
+    <ion-label>党组织管理</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+    <ion-searchbar slot="end" mode="ios" enterkeyhint="search" placeholder="搜索组织名称" showCancelButton="never" (ionChange)="searchChange($event)"></ion-searchbar>
+  </ion-toolbar>
+  <app-partysearch [(dzzdm)]="searchParams.parentCode"  [(dzzmc)]="searchParams.selectDzzmc" (dzzdmChange)="reload()"></app-partysearch>
+  <ion-item class="item-filter">
+    <div slot="end" (click)="search()">
+      <span>条件筛选</span>
+      <ion-icon name="dj-search"></ion-icon>
+    </div>
+  </ion-item>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList" [routerLink]="['./detail']" [queryParams]="{dzzdm:item.DZZDM}" detail>
+      <div class="party-flag background1" *ngIf="item.ZZLB=='100' || item.ZZLB=='200'">委</div>
+      <div class="party-flag background2" *ngIf="item.ZZLB=='300'">总</div>
+      <div class="party-flag background3" *ngIf="item.ZZLB=='400'">支</div>
+      <div class="party-flag background4" *ngIf="item.ZZLB=='500'">组</div>
+      <ion-label>{{item.DZZMC}}</ion-label>
+    </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>
+

+ 30 - 0
parth5/parth5/src/app/views/pages/party/party-info/party-info.component.scss

@@ -0,0 +1,30 @@
+.party-flag{
+  border-radius: 50%;
+  height: 30px;
+  width: 30px;
+  text-align: center;
+  line-height: 30px;
+  margin-right: 8px;
+  font-weight: 400;
+  font-size: 12px;
+  color: white;
+}
+
+.background1{
+  background-color: #DE4F3F;
+}
+.background2{
+  background-color: #007EFF;
+}
+.background3{
+  background-color: #FDA850;
+}
+.background4{
+  background-color: #B9B9CF;
+}
+
+ion-item{
+  ion-label{
+    white-space: normal;
+  }
+}

+ 149 - 0
parth5/parth5/src/app/views/pages/party/party-info/party-info.component.ts

@@ -0,0 +1,149 @@
+import {Component, OnInit, ViewChild} from '@angular/core';
+import {ConfigService, RequsetData} from "../../../../service/config.service";
+import {ActivatedRoute, Router} from "@angular/router";
+import {UserService} from "../../../../service/user.service";
+import {AlertController, IonInfiniteScroll, ModalController, NavController} from "@ionic/angular";
+import {SearchComponent} from '../../../../comm/modal/search/search.component';
+import {PartyInfoApi} from "../../../../api/partyinfo";
+
+@Component({
+  selector: 'app-party-info',
+  templateUrl: './party-info.component.html',
+  styleUrls: ['./party-info.component.scss'],
+})
+export class PartyInfoComponent implements OnInit {
+
+  @ViewChild(IonInfiniteScroll, {static: true}) infiniteScroll: IonInfiniteScroll;
+
+  dataList: any[] = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 30,
+    parentCode: '',
+    isContainParent: -1,
+    dzzmc: '',
+    zzlb: '',
+    jczzfl: '',
+    dwjb: '',
+    jmrq_begintime: '',
+    jmrq_endtime: '',
+    selectDzzmc: '',
+  };
+  total: number = 30;
+  fieldList: any[] = [{label: '党组织名称', name: 'dzzmc', type: 'text', value: '', placeholder: '输入党组织名称'},
+    {
+      label: '组织类别',
+      name: 'zzlb',
+      type: 'select',
+      value: '',
+      dicParams: {getUrl: 'getZzlbdmList', dicTypeKey: '', textField: 'hzmc', valueField: 'bm', ismulti: true}
+    },
+    {
+      label: '基层组织分类',
+      name: 'jczzfl',
+      type: 'select',
+      value: '',
+      dicParams: {getUrl: 'getJczzflList', dicTypeKey: '', textField: 'hzmc', valueField: 'bm', ismulti: true}
+    },
+    {
+      label: '建立党组织日期',
+      name: '',
+      type: 'group-datetime',
+      inputs: [{name: 'startDate', type: 'datetime', value: '', placeholder: '开始时间'}, {
+        name: 'endDate',
+        type: 'datetime',
+        value: '',
+        placeholder: '结束时间'
+      }]
+    },
+    {
+      label: '换届时间',
+      name: '',
+      type: 'group-datetime',
+      inputs: [{name: 'jmrq_begintime', type: 'datetime', value: '', placeholder: '开始时间'}, {
+        name: 'jmrq_endtime',
+        type: 'datetime',
+        value: '',
+        placeholder: '结束时间'
+      }]
+    }
+  ];
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private configService: ConfigService, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController
+  ,private partyInfoApi:PartyInfoApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.searchParams.parentCode = this.searchParams.parentCode || params['dzzdm'] || this.userService.GetUser().dataDzzdm;
+      this.searchParams.selectDzzmc = this.searchParams.selectDzzmc || params['dzzmc'] || this.userService.GetUser().dataDzzmc;
+      this.searchParams.zzlb = params['zzlb'] || '';
+      this.searchParams.jmrq_begintime = params['jmrq_begintime'] || '';
+      this.searchParams.jmrq_endtime = params['jmrq_endtime'] || '';
+      this.fieldList[1].value = this.searchParams.zzlb;
+      this.fieldList[4].inputs[0].value = this.searchParams.jmrq_begintime;
+      this.fieldList[4].inputs[1].value = this.searchParams.jmrq_endtime;
+    });
+
+    this.reload();
+  }
+
+  getList() {
+    this.partyInfoApi.getList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataList = this.dataList.concat(data.item.list);
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+  async search() {
+    const modal = await this.modalController.create({
+      component: SearchComponent,
+      componentProps: {
+        'fieldList': this.fieldList
+      },
+      cssClass: 'search-modal'
+    });
+
+    await modal.present();
+
+    const {data} = await modal.onWillDismiss();
+    if (data && data.success) {
+      this.searchParams.dzzmc = data.params.dzzmc;
+      this.searchParams.startDate = data.params.startDate;
+      this.searchParams.endDate = data.params.endDate;
+      this.searchParams.zzlb = data.params.zzlb;
+      this.searchParams.jczzfl = data.params.jczzfl;
+      this.searchParams.jmrq_begintime = data.params.jmrq_begintime;
+      this.searchParams.jmrq_endtime = data.params.jmrq_endtime;
+      /*this.searchParams.dwjb = data.params.dwjb;*/
+      this.reload();
+    }
+  }
+
+  searchChange(event) {
+    this.fieldList[0].value = event.detail.value;
+    this.searchParams.dzzmc = event.detail.value;
+    this.reload();
+  }
+
+}

+ 26 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/democracy/democracy.component.html

@@ -0,0 +1,26 @@
+<ion-header class="header-theme2">
+  <ion-toolbar>
+    <ion-label class="title-center">民主评议</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back2" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList">
+      <div slot="start">
+        <span>{{item.PYJGMC}}</span>
+      </div>
+      <ion-label>
+        <p>{{item.KZPYRQ}}至{{item.JSPYRQ}}</p>
+      </ion-label>
+    </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>

+ 30 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/democracy/democracy.component.scss

@@ -0,0 +1,30 @@
+ion-content {
+  --background: #FAFAFA !important;
+}
+
+ion-list {
+  background: #FAFAFA !important;
+
+  ion-item{
+    --border-radius: 8px;
+    margin: 0 10px 10px 10px;
+    border-bottom: 1px solid #F5F5F5;
+    --padding-top: 10px;
+    --padding-bottom: 8px;
+
+    div{
+      height: 50px;
+      text-align: center;
+      border: 1px solid #CDD2DE;
+      border-radius: 8px;
+      width: 60px;
+      color: #998989;
+      display:table;
+      span{
+        display: table-cell;
+        vertical-align: middle;
+      }
+    }
+  }
+
+}

+ 61 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/democracy/democracy.component.ts

@@ -0,0 +1,61 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {ConfigService, RequsetData} from "../../../../../../service/config.service";
+import {UserService} from "../../../../../../service/user.service";
+import {PartyUserApi} from "../../../../../../api/partyuser";
+
+@Component({
+  selector: 'app-democracy',
+  templateUrl: './democracy.component.html',
+  styleUrls: ['./democracy.component.scss'],
+})
+export class DemocracyComponent implements OnInit {
+
+  dataList: any = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 10,
+    rybm: ''
+  };
+  total: number = 30;
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private configService: ConfigService, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController
+    , private partyUserApi: PartyUserApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.searchParams.rybm = params['rybm'];
+      this.reload();
+    });
+  }
+
+  getList() {
+    this.partyUserApi.getDemocracyList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataList = this.dataList.concat(data.item.list);
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+}

+ 98 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/detail.component.html

@@ -0,0 +1,98 @@
+<ion-header>
+  <ion-toolbar>
+    <ion-label>党员基本情况</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <div class="user-top">
+    <div class="item-user-left">
+      <img class="img-party" src="assets/icon/party.png"/>
+      <ion-label class="user-name">
+        <h2 class="name">{{dataModel.xm}}</h2>
+        <p class="partyname">{{dataModel.dzzmc}}</p>
+      </ion-label>
+    </div>
+    <div class="item-user-img">
+      <img class="img-user" src="{{webServerHost}}/appApi/home/showDbImg/{{dataModel.rybm}}" onerror="this.src='assets/icon/user.png'"/>
+    </div>
+  </div>
+  <div class="user-info">
+    <ion-item class="item-detail" style="margin: 0px;">
+      <div class="line-y"></div>
+      基本信息
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">性别</ion-label>
+      <ion-text slot="end">{{dataModel.xbmc}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">年龄</ion-label>
+      <ion-text slot="end">{{dataModel.age}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">民族</ion-label>
+      <ion-text slot="end">{{dataModel.mzmc}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">籍贯</ion-label>
+      <ion-text slot="end">{{dataModel.jg}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">政治面貌</ion-label>
+      <ion-text slot="end">{{dataModel.ryztmc}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">入党时间</ion-label>
+      <ion-text slot="end">{{dataModel.rdsj}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">转正时间</ion-label>
+      <ion-text slot="end">{{dataModel.zzsj}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">是否流动党员</ion-label>
+      <ion-text slot="end">{{dataModel.sflddy==1?"是":"否"}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">是否失联党员</ion-label>
+      <ion-text slot="end">{{dataModel.sfsldy==1?"是":"否"}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">所属党委</ion-label>
+      <ion-text slot="end">{{dataModel.dwname}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">所属党支部</ion-label>
+      <ion-text slot="end">{{dataModel.dzzmc}}</ion-text>
+    </ion-item>
+    <ion-item>
+      <ion-label slot="start">领导班子成员联系点</ion-label>
+      <ion-text slot="end">{{dataModel.contactpoint}}</ion-text>
+    </ion-item>
+  </div>
+  <ion-item class="item-detail" [routerLink]="['./democracy']" [queryParams]="{rybm:dataModel.rybm}"  detail>
+    <div class="line-y"></div>
+    民主评议党员
+  </ion-item>
+  <ion-item class="item-detail" [routerLink]="['./train']" [queryParams]="{rybm:dataModel.rybm}" detail>
+    <div class="line-y"></div>
+    培训情况
+  </ion-item>
+  <ion-item class="item-detail" [routerLink]="['./reward']" [queryParams]="{rybm:dataModel.rybm}" detail>
+    <div class="line-y"></div>
+    评先情况
+  </ion-item>
+  <ion-item class="item-detail" [routerLink]="['./punish']" [queryParams]="{rybm:dataModel.rybm}" detail>
+    <div class="line-y"></div>
+    纪律处分情况
+  </ion-item>
+  <ion-item class="item-detail" [routerLink]="['./partyhelp']" [queryParams]="{rybm:dataModel.rybm}" detail>
+    <div class="line-y"></div>
+    党内关怀帮扶情况
+  </ion-item>
+</ion-content>
+
+

+ 99 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/detail.component.scss

@@ -0,0 +1,99 @@
+ion-header {
+  background: rgb(222, 79, 63);
+
+  ion-toolbar {
+    --background: rgb(222, 79, 63);
+    color: white;
+  }
+}
+
+/*.user-top{
+  background-image: url("../../../../assets/icon/icon-bg.png");
+  width: 100%;
+  height: 40%;
+  top: -50px;
+  position: absolute;
+  !*background-size: cover;*!
+  background-size:100% 100%;
+}*/
+
+.user-top {
+  position: relative;
+  width: 100%;
+  height: 130px;
+  line-height: 130px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.user-top:after {
+  width: 140%;
+  height: 130px;
+  position: absolute;
+  left: -20%;
+  top: 0;
+  z-index: -1;
+  content: '';
+  border-radius: 0 0 50% 50%;
+  background: linear-gradient(#DE4F3F, #DE4F3F);
+}
+
+.img-party {
+  opacity: 0.2;
+}
+
+.item-user-left {
+  .user-name {
+    position: absolute;
+    top: 20px;
+    color: white;
+    left: 20px;
+    width: 75%;
+
+    .name {
+
+    }
+
+    .partyname {
+      opacity: 0.5;
+      color: white !important;
+    }
+  }
+}
+
+.item-user-img {
+  text-align: center;
+  margin-right: 10px;
+  flex: 0 0 16%;
+
+  .img-user {
+    border-radius: 8px;
+    height: 80px;
+  }
+}
+
+.user-info {
+  border-radius: 8px;
+  background-color: white;
+  margin: -40px 10px 10px 10px;
+  padding: 10px 0px;
+
+  ion-label{
+    color: #998989;
+    white-space:normal;
+    margin-right: 2px;
+  }
+
+  ion-item{
+    ion-text{
+      --margin-inner-start:15px;
+      text-align: right;
+      margin-left: 5px;
+    }
+  }
+}
+
+::slotted([slot="end"]) {
+  margin-inline-start: 2px;
+}
+

+ 42 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/detail.component.ts

@@ -0,0 +1,42 @@
+import { Component, OnInit } from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {ConfigService, RequsetData} from "../../../../../service/config.service";
+import {UserService} from "../../../../../service/user.service";
+import {PartyUserApi} from "../../../../../api/partyuser";
+
+@Component({
+  selector: 'app-detail',
+  templateUrl: './detail.component.html',
+  styleUrls: ['./detail.component.scss'],
+})
+export class DetailComponent implements OnInit {
+
+  webServerHost: string = '';
+  dataModel: any = {};
+  extdata: any = {};
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private configService: ConfigService, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController
+    , private partyUserApi: PartyUserApi) {
+
+  }
+
+  ngOnInit() {
+    this.configService.GetConfig().subscribe((config) => {
+      this.webServerHost = config.webServerHost;
+    });
+    this.routeInfo.queryParams.subscribe(params => {
+      this.dataModel.rybm = params['rybm'];
+      this.getData();
+    });
+  }
+
+  getData() {
+    this.partyUserApi.getData(this.dataModel.rybm).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataModel = data.item;
+      }
+    });
+  }
+
+}

+ 28 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/partyhelp/partyhelp.component.html

@@ -0,0 +1,28 @@
+<ion-header class="header-theme2">
+  <ion-toolbar>
+    <ion-label class="title-center">党内关怀帮扶信息</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back2" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList">
+      <div slot="start" class="item-left">
+        <h3>{{item.HELPFORMTYPENAME}}</h3>
+        <p>{{item.CAREDATE | date:'yyyy-MM-dd'}}</p>
+      </div>
+      <ion-label>
+        <h2>帮扶内容</h2>
+        <p>{{item.CARECONTENT}}</p>
+      </ion-label>
+    </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>

+ 38 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/partyhelp/partyhelp.component.scss

@@ -0,0 +1,38 @@
+ion-content {
+  --background: #FAFAFA !important;
+}
+
+ion-list {
+  background: #FAFAFA !important;
+
+  ion-item {
+    --border-radius: 8px;
+    margin: 0 10px 10px 10px;
+    --padding-top: 10px;
+    --padding-bottom: 8px;
+
+    .item-left {
+      width: 140px;
+      text-align: center;
+    }
+
+    .item-left:after {
+      content: "";
+      width: 2px;
+      height: 85%;
+      background: #ddd;
+      position: absolute;
+      left: 170px;
+      z-index: 2;
+      top: 50%;
+      transform: translate(-50%, -50%);
+    }
+
+    ion-label{
+      p{
+        white-space: normal;
+      }
+    }
+  }
+
+}

+ 61 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/partyhelp/partyhelp.component.ts

@@ -0,0 +1,61 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {ConfigService, RequsetData} from "../../../../../../service/config.service";
+import {UserService} from "../../../../../../service/user.service";
+import {PartyUserApi} from "../../../../../../api/partyuser";
+
+@Component({
+  selector: 'app-partyhelp',
+  templateUrl: './partyhelp.component.html',
+  styleUrls: ['./partyhelp.component.scss'],
+})
+export class PartyhelpComponent implements OnInit {
+
+  dataList: any = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 10,
+    rybm: ''
+  };
+  total: number = 30;
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private configService: ConfigService, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController
+    , private partyUserApi: PartyUserApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.searchParams.rybm = params['rybm'];
+      this.reload();
+    });
+  }
+
+  getList() {
+    this.partyUserApi.getPartyhelpList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataList = this.dataList.concat(data.item.list);
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+}

+ 25 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/punish/punish.component.html

@@ -0,0 +1,25 @@
+<ion-header class="header-theme2">
+  <ion-toolbar>
+    <ion-label class="title-center">纪律处分情况</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back2" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList">
+      <ion-label>
+        <h2>{{item.offence}}</h2>
+        <p>处分种类:{{item.punishtypename}}</p>
+        <p>处分时间:{{item.yxksrq | date:'yyyy-MM-dd'}}至{{item.yxjsrq | date:'yyyy-MM-dd'}}</p>
+      </ion-label>
+    </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>

+ 21 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/punish/punish.component.scss

@@ -0,0 +1,21 @@
+ion-content {
+  --background: #FAFAFA !important;
+}
+
+ion-list {
+  background: #FAFAFA !important;
+
+  ion-item {
+    --border-radius: 8px;
+    margin: 0 10px 10px 10px;
+    --padding-top: 10px;
+    --padding-bottom: 8px;
+    ion-label{
+      h2{
+        margin: 0 0 10px 0;
+        font-weight: bold;
+      }
+    }
+  }
+
+}

+ 62 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/punish/punish.component.ts

@@ -0,0 +1,62 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {ConfigService, RequsetData} from "../../../../../../service/config.service";
+import {UserService} from "../../../../../../service/user.service";
+import {PartyUserApi} from "../../../../../../api/partyuser";
+
+@Component({
+  selector: 'app-punish',
+  templateUrl: './punish.component.html',
+  styleUrls: ['./punish.component.scss'],
+})
+export class PunishComponent implements OnInit {
+
+  getListUrl: string = "/appApi/party/getJlcfxxList";
+  dataList: any = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 10,
+    rybm: ''
+  };
+  total: number = 30;
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private configService: ConfigService, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController
+    , private partyUserApi: PartyUserApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.searchParams.rybm = params['rybm'];
+      this.reload();
+    });
+  }
+
+  getList() {
+    this.partyUserApi.getPunishList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataList = this.dataList.concat(data.item.list);
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+}

+ 25 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/reward/reward.component.html

@@ -0,0 +1,25 @@
+<ion-header class="header-theme2">
+  <ion-toolbar>
+    <ion-label class="title-center">评先情况</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back2" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList">
+      <ion-label>
+        <h2>{{item.HONOURTYPENAME}}</h2>
+        <p>荣誉等级:{{item.LEVELNAME}}</p>
+        <p>荣誉时间:{{item.HONOURTIME | date:'yyyy-MM-dd'}}</p>
+      </ion-label>
+    </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>

+ 21 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/reward/reward.component.scss

@@ -0,0 +1,21 @@
+ion-content {
+  --background: #FAFAFA !important;
+}
+
+ion-list {
+  background: #FAFAFA !important;
+
+  ion-item {
+    --border-radius: 8px;
+    margin: 0 10px 10px 10px;
+    --padding-top: 10px;
+    --padding-bottom: 8px;
+    ion-label{
+      h2{
+        margin: 0 0 10px 0;
+        font-weight: bold;
+      }
+    }
+  }
+
+}

+ 62 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/reward/reward.component.ts

@@ -0,0 +1,62 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {ConfigService, RequsetData} from "../../../../../../service/config.service";
+import {UserService} from "../../../../../../service/user.service";
+import {PartyUserApi} from "../../../../../../api/partyuser";
+
+@Component({
+  selector: 'app-reward',
+  templateUrl: './reward.component.html',
+  styleUrls: ['./reward.component.scss'],
+})
+export class RewardComponent implements OnInit {
+
+  getListUrl: string = "/appApi/party/getDnpxxxList";
+  dataList: any = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 10,
+    rybm: ''
+  };
+  total: number = 30;
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private configService: ConfigService, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController
+    , private partyUserApi: PartyUserApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.searchParams.rybm = params['rybm'];
+      this.reload();
+    });
+  }
+
+  getList() {
+    this.partyUserApi.getRewardList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataList = this.dataList.concat(data.item.list);
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+}

+ 31 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/train/train.component.html

@@ -0,0 +1,31 @@
+<ion-header class="header-theme2">
+  <ion-toolbar>
+    <ion-label class="title-center">培训情况</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back2" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+  </ion-toolbar>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList">
+      <div slot="start" class="item-left">
+        <h3>{{item.PXXSMC}}</h3>
+        <p>{{item.PXJGMZ}}</p>
+      </div>
+      <ion-label>
+        <h2>培训时间</h2>
+        <p>{{item.PXKSSJ}}至{{item.PXJSSJ}}</p>
+        <p></p>
+        <h2>培训主办单位</h2>
+        <p>{{item.PXZBDW}}</p>
+      </ion-label>
+    </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>

+ 32 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/train/train.component.scss

@@ -0,0 +1,32 @@
+ion-content {
+  --background: #FAFAFA !important;
+}
+
+ion-list {
+  background: #FAFAFA !important;
+
+  ion-item {
+    --border-radius: 8px;
+    margin: 0 10px 10px 10px;
+    --padding-top: 10px;
+    --padding-bottom: 8px;
+
+    .item-left {
+      width: 110px;
+      text-align: center;
+    }
+
+    .item-left:after {
+      content: "";
+      width: 2px;
+      height: 85%;
+      background: #ddd;
+      position: absolute;
+      left: 135px;
+      z-index: 2;
+      top: 50%;
+      transform: translate(-50%, -50%);
+    }
+  }
+
+}

+ 61 - 0
parth5/parth5/src/app/views/pages/party/party-user/detail/train/train.component.ts

@@ -0,0 +1,61 @@
+import {Component, OnInit} from '@angular/core';
+import {ActivatedRoute, Router} from "@angular/router";
+import {AlertController, ModalController, NavController} from "@ionic/angular";
+import {ConfigService, RequsetData} from "../../../../../../service/config.service";
+import {UserService} from "../../../../../../service/user.service";
+import {PartyUserApi} from "../../../../../../api/partyuser";
+
+@Component({
+  selector: 'app-train',
+  templateUrl: './train.component.html',
+  styleUrls: ['./train.component.scss'],
+})
+export class TrainComponent implements OnInit {
+
+  dataList: any = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 10,
+    rybm: ''
+  };
+  total: number = 30;
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private configService: ConfigService, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController
+    , private partyUserApi: PartyUserApi) {
+
+  }
+
+  ngOnInit() {
+    this.routeInfo.queryParams.subscribe(params => {
+      this.searchParams.rybm = params['rybm'];
+      this.reload();
+    });
+  }
+
+  getList() {
+    this.partyUserApi.getTrainList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataList = this.dataList.concat(data.item.list);
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+}

+ 36 - 0
parth5/parth5/src/app/views/pages/party/party-user/party-user.component.html

@@ -0,0 +1,36 @@
+<ion-header>
+  <ion-toolbar>
+    <ion-label>党员信息</ion-label>
+    <ion-buttons slot="start">
+      <ion-back-button icon="ios-back" text="" mode="md"></ion-back-button>
+    </ion-buttons>
+    <ion-searchbar slot="end" mode="ios" enterkeyhint="search" placeholder="搜索党员名称" showCancelButton="never" (ionChange)="searchChange($event)"></ion-searchbar>
+  </ion-toolbar>
+  <app-partysearch [(dzzdm)]="searchParams.dzzdm" (dzzdmChange)="dzzdmChange()" [(partyGroupId)]="searchParams.partyGroupId" (partyGroupIdChange)="partyGroupIdChange()" [isSelectGroup]="true"></app-partysearch>
+  <ion-item class="item-filter">
+    <div slot="end" (click)="search()">
+      <span>条件筛选</span>
+      <ion-icon name="dj-search"></ion-icon>
+    </div>
+  </ion-item>
+</ion-header>
+<ion-content>
+  <ion-list>
+    <ion-item *ngFor="let item of dataList" (click)="detail(item)" detail>
+      <ion-avatar slot="start">
+        <img src="{{webServerHost}}/appApi/home/showDbImg/{{item.RYBM}}" onerror="this.src='assets/icon/icon-user-2x.png'" height="80" width="80"/>
+      </ion-avatar>
+      <ion-label>
+        <h2> {{item.XM}}</h2>
+        <p>{{item.DZZMC}}</p>
+      </ion-label>
+    </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>
+

+ 0 - 0
parth5/parth5/src/app/views/pages/party/party-user/party-user.component.scss


+ 214 - 0
parth5/parth5/src/app/views/pages/party/party-user/party-user.component.ts

@@ -0,0 +1,214 @@
+import {Component, OnInit, ViewChild} from '@angular/core';
+import {AlertController, IonInfiniteScroll, ModalController, NavController} from "@ionic/angular";
+import {ActivatedRoute, Router} from "@angular/router";
+import {ConfigService, RequsetData} from "../../../../service/config.service";
+import {UserService} from "../../../../service/user.service";
+import {SearchComponent} from "../../../../comm/modal/search/search.component";
+import {PartyUserApi} from "../../../../api/partyuser";
+
+@Component({
+  selector: 'app-party-user',
+  templateUrl: './party-user.component.html',
+  styleUrls: ['./party-user.component.scss'],
+})
+export class PartyUserComponent implements OnInit {
+
+  @ViewChild(IonInfiniteScroll, {static: true}) infiniteScroll: IonInfiniteScroll;
+
+  webServerHost: string = '';
+  dataList: any[] = [];
+  searchParams: any = {
+    pageIndex: 1,
+    pageSize: 30,
+    dzzdm: '',
+    szdzbdm: '',
+    userId: this.userService.GetUser().userid,
+    xm: '',
+    rybmList: '',
+    ryztList: '',
+    age_begin: '',
+    age_end: '',
+    partyGroupId: '',
+    sqrdrq_begin: '',
+    sqrdrq_end: ''
+  };
+  total: number = 30;
+  fieldList: any[] = [
+    {label: '姓名', name: 'xm', type: 'text', value: '', placeholder: '输入党员名称'},
+    {
+      label: '年龄',
+      name: '',
+      type: 'group-number',
+      inputs: [{name: 'age_begin', type: 'number', value: '', placeholder: '输入最小年龄'}, {
+        name: 'age_end',
+        type: 'number',
+        value: '',
+        placeholder: '输入最大年龄'
+      }]
+    },
+    {
+      label: '政治面貌',
+      name: 'ryztList',
+      type: 'select',
+      dicParams: {
+        getUrl: 'getRyztList',
+        dicTypeKey: '',
+        textField: 'hzmc',
+        valueField: 'bm',
+        ismulti: true,
+        filter: it => it.bm == "2" || it.bm == "3"
+      },
+      dicList: []
+    },
+    {
+      label: '性别',
+      name: 'xb',
+      type: 'select',
+      dicParams: {
+        getUrl: '',
+        dicTypeKey: '',
+        textField: 'hzmc',
+        valueField: 'bm',
+        ismulti: false
+      },
+      dicList: [{hzmc: '男', bm: 1}, {hzmc: '女', bm: 2}]
+    },
+    {
+      label: '学历',
+      name: 'xl',
+      type: 'select-down',
+      value: '',
+      dicParams: {
+        getUrl: 'getEducationList',
+        dicTypeKey: '',
+        textField: 'HZMC',
+        valueField: 'BM',
+        ismulti: false
+      },
+      dicList: []
+    },
+    {
+      label: '入党时间',
+      name: '',
+      type: 'group-datetime',
+      inputs: [{name: 'sqrdrq_begin', type: 'datetime', value: '', placeholder: '开始时间'}, {
+        name: 'sqrdrq_end',
+        type: 'datetime',
+        value: '',
+        placeholder: '结束时间'
+      }]
+    }
+  ];
+
+  constructor(private router: Router, private routeInfo: ActivatedRoute, private configService: ConfigService, private userService: UserService, public alertController: AlertController, public modalController: ModalController, private navCtrl: NavController
+    , private partyUserApi: PartyUserApi) {
+  }
+
+  ngOnInit() {
+    this.configService.GetConfig().subscribe((config) => {
+      this.webServerHost = config.webServerHost;
+    });
+    this.searchParams.dzzdm = this.searchParams.dzzdm || this.userService.GetUser().dataDzzdm;
+    this.reload();
+    //this.getRyztList();
+  }
+
+  getList() {
+    this.partyUserApi.getList(this.searchParams).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.dataList = this.dataList.concat(data.item.list);
+        this.total = data.item.total;
+      }
+    });
+  }
+
+  getRyztList() {
+    /*this.configService.HttpGetRomote(this.getRyztUrl).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.fieldList[2].dicList = data.item.filter(it => it.bm == "2" || it.bm == "3");
+      }
+    });*/
+  }
+
+
+  reload() {
+    this.dataList = [];
+    this.searchParams.pageIndex = 1;
+    this.total = 30;
+    this.getList();
+  }
+
+  scroll(event) {
+    setTimeout(() => {
+      event.target.complete();
+      if (this.total > this.searchParams.pageIndex * this.searchParams.pageSize) {
+        this.searchParams.pageIndex += 1;
+        this.getList();
+      }
+    }, 500);
+  }
+
+  async search() {
+    const modal = await this.modalController.create({
+      component: SearchComponent,
+      componentProps: {
+        'fieldList': this.fieldList
+      },
+      cssClass: 'search-modal'
+    });
+
+    await modal.present();
+
+    const {data} = await modal.onWillDismiss();
+    if (data && data.success) {
+      this.searchParams.xm = data.params.xm;
+      this.searchParams.age_begin = data.params.age_begin;
+      this.searchParams.age_end = data.params.age_end;
+      this.searchParams.ryztList = data.params.ryztList;
+      this.searchParams.xb = data.params.xb;
+      this.searchParams.xl = data.params.xl;
+      this.searchParams.sqrdrq_begin = data.params.sqrdrq_begin;
+      this.searchParams.sqrdrq_end = data.params.sqrdrq_end;
+
+      if (data.params.age_begin && data.params.age_end) {
+        if (data.params.age_end < data.params.age_begin) {
+          this.searchParams.age_begin = data.params.age_end;
+          this.searchParams.age_end = data.params.age_begin;
+
+          this.fieldList[1].inputs[0].value = data.params.age_end;
+          this.fieldList[1].inputs[1].value = data.params.age_begin;
+        }
+      }
+
+      this.reload();
+    }
+  }
+
+  searchChange(event) {
+    this.fieldList[0].value = event.detail.value;
+    this.searchParams.xm = event.detail.value;
+    this.reload();
+  }
+
+  dzzdmChange() {
+    if (this.searchParams.dzzdm) {
+      this.reload();
+    }
+  }
+
+  partyGroupIdChange() {
+    if (this.searchParams.partyGroupId) {
+      this.reload();
+    }
+  }
+
+  detail(user) {
+    if (user.LEADTYPE == 0 || (user.LEADTYPE == 1 && user.isAdmin)) {
+      this.router.navigate(['./detail'], {
+        relativeTo: this.routeInfo,
+        queryParams: {random: Math.random(), rybm: user.RYBM}
+      });
+    }
+  }
+
+}

+ 13 - 0
parth5/parth5/src/app/views/tapp/tab-main/tab-main-routes.ts

@@ -0,0 +1,13 @@
+import {Routes} from "@angular/router";
+import {TabMainPage} from "./tab-main.page";
+import partyInfoRoutes from "../../../routes/partyInfo";
+import partyUserRoutes from "../../../routes/partyUser";
+
+export const routes: Routes = [
+  {
+    path: '',
+    component: TabMainPage
+  },
+  ...partyInfoRoutes,
+  ...partyUserRoutes
+];

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

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

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

@@ -0,0 +1,27 @@
+import {NgModule} from '@angular/core';
+import {CommonModule} from '@angular/common';
+import {FormsModule} from '@angular/forms';
+import {IonicModule} from '@ionic/angular';
+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";
+
+const pubComponents = [
+  PartysearchComponent,
+  PartytreeComponent,
+  SearchComponent
+];
+
+@NgModule({
+  imports: [
+    CommonModule,
+    FormsModule,
+    IonicModule,
+    TabMainPageRoutingModule
+  ],
+  declarations: [...routes.map(e => e.component), ...pubComponents]
+})
+export class TabMainPageModule {
+}

+ 43 - 0
parth5/parth5/src/app/views/tapp/tab-main/tab-main.page.html

@@ -0,0 +1,43 @@
+<ion-content>
+  <img class="title-img" src="assets/icon/main-bg.png" alt=""/>
+  <div class="tool-box">
+    <a class="tool-item" *ngFor="let item of useModularList" (click)="modularClick(item.MODULARNO)">
+      <div class="tool-img">
+        <img src="assets/icon/{{item.ICON}}" style="width: 32px;height: 32px">
+      </div>
+      <div class="tool-title">{{item.MODULARNAME}}</div>
+    </a>
+    <a class="tool-item" (click)="more()">
+      <div class="tool-img">
+        <img src="assets/icon/tool_more.svg" style="width: 32px;height: 32px">
+      </div>
+      <div class="tool-title">更多</div>
+    </a>
+  </div>
+  <div class="panel">
+    <div class="panel-title">
+      我的会议
+    </div>
+    <div class="panel-content">
+      <ion-list class="msg-list">
+        <ion-item *ngFor="let it of myMeetingList" class="msg-list-item" [routerLink]="['shykdetail']"
+                  [queryParams]="{id: it.MEETINGID}">
+          <ion-label>
+            <h3 class="item-title">
+              <div class="item-date">
+                {{it.BEGINTIME|date:'yyyy-MM-dd HH:mm'}}
+              </div>
+            </h3>
+            <ion-text class="item-content" text-wrap>
+              <h3>{{it.PARTYNAME}}[{{it.SHYKTYPENAME}}]</h3>
+            </ion-text>
+          </ion-label>
+        </ion-item>
+        <div *ngIf="myMeetingList.length<=0" class="not-notify">
+          <img class="building-img" src="assets/icon/message-warn.svg">
+          <ion-text class="building-text">暂无</ion-text>
+        </div>
+      </ion-list>
+    </div>
+  </div>
+</ion-content>

+ 92 - 0
parth5/parth5/src/app/views/tapp/tab-main/tab-main.page.scss

@@ -0,0 +1,92 @@
+
+ion-content {
+  --background: #FAFAFA !important;
+}
+
+.tool-box {
+  display: flex;
+  /*justify-content: space-between;*/
+  text-align: center;
+  flex-direction: row;
+  flex-wrap: wrap;
+
+  .tool-box-item {
+    width: 25%;
+    margin-bottom: 5px;
+
+    .iconImg img {
+      width: 35px;
+      height: 43px;
+    }
+
+    a {
+      color: #4d4d4d;
+      font-size: 15px;
+    }
+  }
+
+}
+
+.notify-scroll {
+  background-color: white;
+  height: 30px;
+
+  ion-label {
+    color: #4d4d4d;
+    font-size: 13px;
+    text-align: center;
+  }
+}
+
+.not-notify {
+  display: flex;
+  flex-direction: column;
+  margin: 15px 0;
+
+  .building-img {
+    width: 20%;
+    display: flex;
+    align-self: center;
+  }
+
+  .building-text {
+    margin-top: 10px;
+    text-align: center;
+    font-size: 13px;
+    color: #cdcdcd;
+    font-family: 宋体;
+  }
+}
+
+.item-warn {
+  margin-bottom: 15px;
+  --background: #FAEDDB !important;
+
+  img {
+    margin-right: 10px;
+  }
+
+  ion-button {
+    --background: #DB4E3E;
+    --border-radius: 25px;
+    --padding-start: 15px;
+    --padding-end: 15px;
+    margin-inline-start: 2px;
+  }
+}
+
+
+@keyframes animation-box {
+  0%{
+    transform: translate3d(0,0,0);
+  }
+  100%{
+    transform: translate3d(-1164px,0,0);
+  }
+}
+
+.animation-box {
+  animation: animation-box 20s infinite linear;
+  animation-delay:3s;
+}
+

+ 24 - 0
parth5/parth5/src/app/views/tapp/tab-main/tab-main.page.spec.ts

@@ -0,0 +1,24 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+
+import { TabMainPage } from './tab-main.page';
+
+describe('TabMainPage', () => {
+  let component: TabMainPage;
+  let fixture: ComponentFixture<TabMainPage>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      declarations: [ TabMainPage ],
+      imports: [IonicModule.forRoot()]
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(TabMainPage);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 66 - 0
parth5/parth5/src/app/views/tapp/tab-main/tab-main.page.ts

@@ -0,0 +1,66 @@
+import {Component, OnInit} from '@angular/core';
+import {JsBridgeService,} from '../../../service/js-bridge.service';
+import {ActivatedRoute, Router} from "@angular/router";
+import {RequsetData} from "../../../service/config.service";
+import {UserService} from "../../../service/user.service";
+import {AlertController, ModalController} from "@ionic/angular";
+import {UsemodularService} from "../../../service/usemodular.service";
+import {MeetingApi} from "../../../api/meeting";
+
+@Component({
+  selector: 'app-tab-main',
+  templateUrl: './tab-main.page.html',
+  styleUrls: ['./tab-main.page.scss'],
+})
+export class TabMainPage implements OnInit {
+
+  useModularList = [];
+  myMeetingList: any = [];
+
+  constructor(private router: Router, private route: ActivatedRoute, private jsBridgeService: JsBridgeService,
+              private userService: UserService, public alertController: AlertController,
+              public modalController: ModalController, private usemodularService: UsemodularService
+    , private meetingApi: MeetingApi) {
+  }
+
+  ngOnInit() {
+    this.usemodularService.getUseModularData().subscribe((data) => {
+      this.useModularList = data;
+    });
+    this.usemodularService.getUseModularList();
+
+    this.getMymeetingList();
+  }
+
+  getMymeetingList() {
+    this.meetingApi.getMeetingList(this.userService.GetUser().userid).subscribe((data: RequsetData) => {
+      if (data.success) {
+        this.myMeetingList = data.item.list;
+      }
+    });
+  }
+
+  more() {
+    this.router.navigate(['/tapp/tabs/tabMain/setting'], {queryParams: {random: Math.random()}});
+  }
+
+  modularClick(url) {
+    if (url != '' && url != null) {
+      this.router.navigate([url], {queryParams: {random: Math.random()}});
+    } else {
+      this.presentAlert("正在建设中");
+    }
+  }
+
+  async presentAlert(msg: string) {
+    const alert = await this.alertController.create({
+      header: '提示',
+      subHeader: '',
+      message: msg,
+      buttons: ['确定']
+    });
+
+    await alert.present();
+  }
+
+}

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

@@ -0,0 +1,17 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { TabUserPage } from './tab-user.page';
+
+const routes: Routes = [
+  {
+    path: '',
+    component: TabUserPage
+  }
+];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule],
+})
+export class TabUserPageRoutingModule {}

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

@@ -0,0 +1,20 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule } from '@angular/forms';
+
+import { IonicModule } from '@ionic/angular';
+
+import { TabUserPageRoutingModule } from './tab-user-routing.module';
+
+import { TabUserPage } from './tab-user.page';
+
+@NgModule({
+  imports: [
+    CommonModule,
+    FormsModule,
+    IonicModule,
+    TabUserPageRoutingModule
+  ],
+  declarations: [TabUserPage]
+})
+export class TabUserPageModule {}

+ 9 - 0
parth5/parth5/src/app/views/tapp/tab-user/tab-user.page.html

@@ -0,0 +1,9 @@
+<ion-header>
+  <ion-toolbar>
+    <ion-title>tab_User</ion-title>
+  </ion-toolbar>
+</ion-header>
+
+<ion-content>
+
+</ion-content>

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


+ 24 - 0
parth5/parth5/src/app/views/tapp/tab-user/tab-user.page.spec.ts

@@ -0,0 +1,24 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+
+import { TabUserPage } from './tab-user.page';
+
+describe('TabUserPage', () => {
+  let component: TabUserPage;
+  let fixture: ComponentFixture<TabUserPage>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      declarations: [ TabUserPage ],
+      imports: [IonicModule.forRoot()]
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(TabUserPage);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

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

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

+ 17 - 0
parth5/parth5/src/app/views/tapp/tab-work/tab-work-routing.module.ts

@@ -0,0 +1,17 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { TabWorkPage } from './tab-work.page';
+
+const routes: Routes = [
+  {
+    path: '',
+    component: TabWorkPage
+  }
+];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule],
+})
+export class TabWorkPageRoutingModule {}

+ 20 - 0
parth5/parth5/src/app/views/tapp/tab-work/tab-work.module.ts

@@ -0,0 +1,20 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule } from '@angular/forms';
+
+import { IonicModule } from '@ionic/angular';
+
+import { TabWorkPageRoutingModule } from './tab-work-routing.module';
+
+import { TabWorkPage } from './tab-work.page';
+
+@NgModule({
+  imports: [
+    CommonModule,
+    FormsModule,
+    IonicModule,
+    TabWorkPageRoutingModule
+  ],
+  declarations: [TabWorkPage]
+})
+export class TabWorkPageModule {}

+ 9 - 0
parth5/parth5/src/app/views/tapp/tab-work/tab-work.page.html

@@ -0,0 +1,9 @@
+<ion-header>
+  <ion-toolbar>
+    <ion-title>tab_Work</ion-title>
+  </ion-toolbar>
+</ion-header>
+
+<ion-content>
+
+</ion-content>

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


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

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

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

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

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

@@ -0,0 +1,39 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+import { TabsPage } from './tabs.page';
+
+const routes: Routes = [
+  {
+    path: 'tabs',
+    component: TabsPage,
+    children: [
+      {
+        path: 'tabMain',
+        loadChildren: () => import('../tab-main/tab-main.module').then(m => m.TabMainPageModule)
+      },
+      {
+        path: 'tabWork',
+        loadChildren: () => import('../tab-work/tab-work.module').then(m => m.TabWorkPageModule)
+      },
+      {
+        path: 'tabUser',
+        loadChildren: () => import('../tab-user/tab-user.module').then(m => m.TabUserPageModule)
+      },
+      {
+        path: '',
+        redirectTo: '/tabs/tabMain',
+        pathMatch: 'full'
+      }
+    ]
+  },
+  {
+    path: '',
+    redirectTo: '/tabs/tabMain',
+    pathMatch: 'full'
+  }
+];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+})
+export class TabsPageRoutingModule {}

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

@@ -0,0 +1,27 @@
+import {NgModule} from '@angular/core';
+import {CommonModule} from '@angular/common';
+import {FormsModule} from '@angular/forms';
+
+import {IonicModule} from '@ionic/angular';
+
+import {TabsPageRoutingModule} from './tabs-routing.module';
+
+import {TabsPage} from './tabs.page';
+import {DragDropModule} from "@angular/cdk/drag-drop";
+import {RouterModule} from "@angular/router";
+import {QuillModule} from "ngx-quill";
+
+@NgModule({
+  imports: [
+    CommonModule,
+    FormsModule,
+    IonicModule,
+    DragDropModule,
+    RouterModule,
+    QuillModule,
+    TabsPageRoutingModule
+  ],
+  declarations: [TabsPage]
+})
+export class TabsPageModule {
+}

+ 18 - 0
parth5/parth5/src/app/views/tapp/tabs/tabs.page.html

@@ -0,0 +1,18 @@
+<ion-tabs (ionTabsWillChange)="changeTabs($event)">
+  <ion-tab-bar  slot="bottom">
+    <ion-tab-button class="tab-main" tab="tabMain">
+      <img src="assets/icon/tab_main.svg"/>
+      <ion-label >首页</ion-label>
+    </ion-tab-button>
+
+    <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-me" tab="tabUser">
+      <img src="assets/icon/tab_me.svg" />
+      <ion-label>我的</ion-label>
+    </ion-tab-button>
+  </ion-tab-bar>
+</ion-tabs>

+ 39 - 0
parth5/parth5/src/app/views/tapp/tabs/tabs.page.scss

@@ -0,0 +1,39 @@
+ion-tab-button img{
+  width: 18px;
+}
+ion-tab-button[aria-selected=false] ion-label {
+  color: white;
+}
+
+ion-tab-button[aria-selected=true] ion-label {
+  color: red;
+}
+
+.tab-main[aria-selected=false] img{
+  content: url("../../../../assets/icon/tab_main.svg");
+}
+.tab-main[aria-selected=true] img{
+  content: url("../../../../assets/icon/tab_main_s.svg");
+}
+
+.tab-zuzhi[aria-selected=false] img{
+  content: url("../../../../assets/icon/tab_work.svg");
+}
+.tab-zuzhi[aria-selected=true] img{
+  content: url("../../../../assets/icon/tab_work_s.svg");
+}
+
+.tab-xuexi[aria-selected=false] img{
+  content: url("../../../../assets/icon/tab_xuexi.svg");
+}
+.tab-xuexi[aria-selected=true] img{
+  content: url("../../../../assets/icon/tab_xuexi_s.svg");
+}
+
+.tab-me[aria-selected=false] img{
+  content: url("../../../../assets/icon/tab_me.svg");
+}
+.tab-me[aria-selected=true] img{
+  content: url("../../../../assets/icon/tab_me_s.svg");
+}
+

+ 24 - 0
parth5/parth5/src/app/views/tapp/tabs/tabs.page.spec.ts

@@ -0,0 +1,24 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+import { IonicModule } from '@ionic/angular';
+
+import { TabsPage } from './tabs.page';
+
+describe('TabsPage', () => {
+  let component: TabsPage;
+  let fixture: ComponentFixture<TabsPage>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      declarations: [ TabsPage ],
+      imports: [IonicModule.forRoot()]
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(TabsPage);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 20 - 0
parth5/parth5/src/app/views/tapp/tabs/tabs.page.ts

@@ -0,0 +1,20 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-tabs',
+  templateUrl: './tabs.page.html',
+  styleUrls: ['./tabs.page.scss'],
+})
+export class TabsPage implements OnInit {
+
+  constructor() { }
+
+  ngOnInit() {
+  }
+
+  changeTabs(e){
+
+
+  }
+
+}

BIN
parth5/parth5/src/assets/icon/jrxx.png


BIN
parth5/parth5/src/assets/icon/liulan.png


BIN
parth5/parth5/src/assets/icon/main-bg.png


File diff suppressed because it is too large
+ 1 - 0
parth5/parth5/src/assets/icon/tool_study.svg


File diff suppressed because it is too large
+ 1 - 0
parth5/parth5/src/assets/icon/tool_video.svg


File diff suppressed because it is too large
+ 1 - 0
parth5/parth5/src/assets/icon/xuexijifen.svg


BIN
parth5/parth5/src/assets/study/default.jpg