Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/resources/generatorConfig.xml
xiaoqiao 9 mesi fa
parent
commit
5187ab11da
91 ha cambiato i file con 4506 aggiunte e 2212 eliminazioni
  1. 379 1031
      parth5/parth5/package-lock.json
  2. 2 1
      parth5/parth5/package.json
  3. 44 0
      parth5/parth5/src/app/api/partycourse/index.ts
  4. 2 0
      parth5/parth5/src/app/views/pages/study/partycourse/fileshower/fileshower.component.html
  5. 0 0
      parth5/parth5/src/app/comm/modal/showpdf/showpdf.component.scss
  6. 67 0
      parth5/parth5/src/app/comm/modal/showpdf/showpdf.component.ts
  7. 0 6
      parth5/parth5/src/app/views/pages/study/againt/againt.component.html
  8. 0 13
      parth5/parth5/src/app/views/pages/study/againt/againt.component.scss
  9. 0 27
      parth5/parth5/src/app/views/pages/study/againt/againt.component.spec.ts
  10. 0 14
      parth5/parth5/src/app/views/pages/study/againt/againt.component.ts
  11. 0 7
      parth5/parth5/src/app/views/pages/study/education/education.component.html
  12. 0 13
      parth5/parth5/src/app/views/pages/study/education/education.component.scss
  13. 0 27
      parth5/parth5/src/app/views/pages/study/education/education.component.spec.ts
  14. 0 14
      parth5/parth5/src/app/views/pages/study/education/education.component.ts
  15. 0 24
      parth5/parth5/src/app/views/pages/study/partycourse/fileshower/fileshower.component.spec.ts
  16. 0 38
      parth5/parth5/src/app/views/pages/study/partycourse/fileshower/fileshower.component.ts
  17. 0 62
      parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.html
  18. 0 160
      parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.scss
  19. 0 27
      parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.spec.ts
  20. 0 301
      parth5/parth5/src/app/views/pages/study/partycourse/partycourse.component.ts
  21. 0 6
      parth5/parth5/src/app/views/pages/study/rule/rule.component.html
  22. 0 13
      parth5/parth5/src/app/views/pages/study/rule/rule.component.scss
  23. 0 27
      parth5/parth5/src/app/views/pages/study/rule/rule.component.spec.ts
  24. 0 14
      parth5/parth5/src/app/views/pages/study/rule/rule.component.ts
  25. 16 11
      parth5/parth5/src/app/views/tapp/tab-study/tab-study.module.ts
  26. 58 21
      parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.html
  27. 156 10
      parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.scss
  28. 288 2
      parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.ts
  29. 2 1
      parth5/parth5/tsconfig.json
  30. 0 116
      src/main/java/com/ghsc/partybuild/controller/AppFileMgrController.java
  31. 2 2
      src/main/java/com/ghsc/partybuild/controller/FileMgrController.java
  32. 10 10
      src/main/java/com/ghsc/partybuild/controller/PublicityController.java
  33. 160 0
      src/main/java/com/ghsc/partybuild/controller/app/AppFileMgrController.java
  34. 1 1
      src/main/java/com/ghsc/partybuild/controller/app/AppPartyController.java
  35. 48 1
      src/main/java/com/ghsc/partybuild/controller/partyLife/MeetingController.java
  36. 187 0
      src/main/java/com/ghsc/partybuild/controller/partyLife/ReportSystemController.java
  37. 1 1
      src/main/java/com/ghsc/partybuild/mapper/CfFileCQuery.java
  38. 3 3
      src/main/java/com/ghsc/partybuild/mapper/PartyLifeMeetingCQuery.java
  39. 30 0
      src/main/java/com/ghsc/partybuild/mapper/PfReportsystemMapper.java
  40. 1 1
      src/main/java/com/ghsc/partybuild/mapper/PublicityCQuery.java
  41. 14 0
      src/main/java/com/ghsc/partybuild/mapper/ReportSystemCQuery.java
  42. 125 0
      src/main/java/com/ghsc/partybuild/model/PfReportsystem.java
  43. 1038 0
      src/main/java/com/ghsc/partybuild/model/PfReportsystemExample.java
  44. 1 1
      src/main/java/com/ghsc/partybuild/service/FileMgrService.java
  45. 2 2
      src/main/java/com/ghsc/partybuild/service/PublicityService.java
  46. 5 5
      src/main/java/com/ghsc/partybuild/service/impl/FileMgrServiceImpl.java
  47. 42 4
      src/main/java/com/ghsc/partybuild/service/impl/PublicityServiceImpl.java
  48. 5 3
      src/main/java/com/ghsc/partybuild/service/impl/partyLife/MeetingServiceImpl.java
  49. 85 0
      src/main/java/com/ghsc/partybuild/service/impl/partyLife/ReportSystemServiceImpl.java
  50. 1 1
      src/main/java/com/ghsc/partybuild/service/partyLife/MeetingService.java
  51. 18 0
      src/main/java/com/ghsc/partybuild/service/partyLife/ReportSystemService.java
  52. 1 0
      src/main/java/com/ghsc/partybuild/shiro/ShiroConfiguration.java
  53. 28 1
      src/main/java/com/ghsc/partybuild/util/ExcelHelper.java
  54. 1 1
      src/main/java/com/ghsc/partybuild/vo/PartyLifeMeetingPersonnelVo.java
  55. 1 1
      src/main/java/com/ghsc/partybuild/vo/PartyLifeMeetingScydlVo.java
  56. 1 1
      src/main/java/com/ghsc/partybuild/vo/PartyLifeMeetingVo.java
  57. 11 0
      src/main/java/com/ghsc/partybuild/vo/partyLife/ReportSystemVo.java
  58. 1 1
      src/main/resources/application.yml
  59. 15 3
      src/main/resources/mapping/CfFileCQuery.xml
  60. 7 4
      src/main/resources/mapping/PartyLifeMeetingCQuery.xml
  61. 320 0
      src/main/resources/mapping/PfReportsystemMapper.xml
  62. 46 43
      src/main/resources/mapping/PublicityCQuery.xml
  63. 35 0
      src/main/resources/mapping/ReportSystemCQuery.xml
  64. 45 9
      src/main/resources/static/app/main/app.js
  65. 1 1
      src/main/resources/static/app/main/partylife/meeting/detail.html
  66. 1 1
      src/main/resources/static/app/main/partylife/meeting/edit.html
  67. 4 0
      src/main/resources/static/app/main/partylife/meeting/edit.js
  68. 1 1
      src/main/resources/static/app/main/partylife/meeting/list.html
  69. 0 1
      src/main/resources/static/app/main/partylife/meeting/list.js
  70. 34 0
      src/main/resources/static/app/main/partylife/reportSystem/detail.html
  71. 37 0
      src/main/resources/static/app/main/partylife/reportSystem/detail.js
  72. 80 0
      src/main/resources/static/app/main/partylife/reportSystem/edit.html
  73. 89 0
      src/main/resources/static/app/main/partylife/reportSystem/edit.js
  74. 216 0
      src/main/resources/static/app/main/partylife/reportSystem/list.html
  75. 173 0
      src/main/resources/static/app/main/partylife/reportSystem/list.js
  76. 1 1
      src/main/resources/static/app/main/partylife/scyd/detail.html
  77. 1 1
      src/main/resources/static/app/main/partylife/scyd/edit.html
  78. 4 0
      src/main/resources/static/app/main/partylife/scyd/edit.js
  79. 1 1
      src/main/resources/static/app/main/partylife/scyd/list.html
  80. 68 0
      src/main/resources/static/app/main/partylife/txth/edit.html
  81. 87 0
      src/main/resources/static/app/main/partylife/txth/edit.js
  82. 172 0
      src/main/resources/static/app/main/partylife/txth/list.html
  83. 165 0
      src/main/resources/static/app/main/partylife/txth/list.js
  84. 6 6
      src/main/resources/static/app/main/publicity/partyDues/duesMulti.html
  85. 23 47
      src/main/resources/static/app/main/publicity/partyDues/duesMulti.js
  86. 1 1
      src/main/resources/static/app/main/publicity/partyDues/edit.html
  87. 1 1
      src/main/resources/static/app/main/publicity/partyDues/edit.js
  88. 13 33
      src/main/resources/static/app/main/publicity/partyDues/editDues.html
  89. 14 24
      src/main/resources/static/app/main/publicity/partyDues/editDues.js
  90. 6 6
      src/main/resources/static/app/main/publicity/partyDues/list.html
  91. 2 2
      src/main/resources/static/app/main/publicity/partyDues/list.js

File diff suppressed because it is too large
+ 379 - 1031
parth5/parth5/package-lock.json


+ 2 - 1
parth5/parth5/package.json

@@ -32,10 +32,11 @@
     "echarts": "^5.1.2",
     "eventemitter3": "^4.0.7",
     "moment": "^2.29.1",
-    "ng2-pdf-viewer": "^6.4.1",
+    "ng2-pdf-viewer": "^5.1.3",
     "ngx-order-pipe": "^2.1.1",
     "ngx-pinch-zoom": "^2.5.5",
     "ngx-quill": "^14.0.0",
+    "pdfjs-dist": "^2.5.207",
     "photoswipe": "^4.1.3",
     "quill": "^1.3.7",
     "rxjs": "~6.6.0",

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

@@ -0,0 +1,44 @@
+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 PartyCourseApi {
+
+  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(datas: any): Observable<RequsetData> {
+    return this.configService.HttpGetRomote(this.fileTypeRootUrl, datas);
+  }
+
+  GetileTypesByParent(id: string): Observable<RequsetData> {
+    return this.configService.HttpGetRomote(this.fileTypesByParentUrl, {parentid: id});
+  }
+}

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

@@ -14,3 +14,5 @@
                 [original-size]="false" [autoresize]="true" class="pdf-viewer"></pdf-viewer>
   </pinch-zoom>
 </ion-content>
+
+

parth5/parth5/src/app/views/pages/study/partycourse/fileshower/fileshower.component.scss → parth5/parth5/src/app/comm/modal/showpdf/showpdf.component.scss


+ 67 - 0
parth5/parth5/src/app/comm/modal/showpdf/showpdf.component.ts

@@ -0,0 +1,67 @@
+import {Component, Input, NgModule, OnInit} from '@angular/core';
+import {ConfigService, RequsetData} from "../../../service/config.service";
+import {ModalController} from "@ionic/angular";
+import {DomSanitizer} from "@angular/platform-browser";
+import {UserService} from "../../../service/user.service";
+
+@Component({
+  selector: 'app-showpdf',
+  templateUrl: './showpdf.component.html',
+  styleUrls: ['./showpdf.component.scss'],
+})
+export class ShowpdfComponent implements OnInit {
+
+  /*pdfSrc = "https://vadimdez.github.io/ng2-pdf-viewer/assets/pdf-test.pdf";*/
+  @Input()
+  pdfUrl: string = '';
+
+  @Input()
+  fileid: string = '';
+
+  @Input()
+  pdfTitle: string = '';
+
+  @Input()
+  pointType: number;
+
+  @Input()
+  duration: number;
+
+  timer: any = {};
+  safeUrl: string = "";
+
+  constructor(private configService: ConfigService, private userService: UserService, public modalController: ModalController, private sanitizer: DomSanitizer) {
+  }
+
+  ngOnInit() {
+    this.configService.GetConfig().subscribe(config => {
+      //this.sanitizer.bypassSecurityTrustResourceUrl(
+      this.safeUrl = config.webServerHost + this.pdfUrl;
+    });
+    let parent = this;
+    this.timer = setTimeout(function () {
+      parent.insertCoursePoint(parent);
+    }, this.duration == null ? 180000 : this.duration * 1000);
+  }
+
+  close() {
+    clearTimeout(this.timer);
+    this.modalController.dismiss({});
+  }
+
+  insertCoursePoint(parent) {
+    /*parent.configService.HttpGetRomote('/appApi/onlineCourse/insertCoursePoint', {
+      courseId: parent.fileid,
+      studentUserId: parent.userService.GetUser().userid, pointType: parent.pointType, title: parent.pdfTitle,
+      userName: parent.userService.GetUser().username
+    }).subscribe((data: RequsetData) => {
+      if (data.success) {
+      }
+    });*/
+  }
+
+  onError(error: any) {
+    console.log('PDF error', error);
+  }
+
+}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 16 - 11
parth5/parth5/src/app/views/tapp/tab-study/tab-study.module.ts

@@ -1,24 +1,29 @@
-import { NgModule } from '@angular/core';
-import { CommonModule } from '@angular/common';
-import { FormsModule } from '@angular/forms';
+import {NgModule} from '@angular/core';
+import {CommonModule} from '@angular/common';
+import {FormsModule} from '@angular/forms';
 
-import { IonicModule } from '@ionic/angular';
+import {IonicModule} from '@ionic/angular';
 
-import { TabStudyPageRoutingModule } from './tab-study-routing.module';
+import {TabStudyPageRoutingModule} from './tab-study-routing.module';
 
-import { routes } from "./tab-study.route";
+import {routes} from "./tab-study.route";
+import {PinchZoomModule} from "ngx-pinch-zoom";
+import {PdfViewerModule} from "ng2-pdf-viewer";
+import {ShowpdfComponent} from "../../../comm/modal/showpdf/showpdf.component";
 
-const pubComponents = [
 
-];
+const pubComponents = [];
 
 @NgModule({
   imports: [
     CommonModule,
     FormsModule,
     IonicModule,
-    TabStudyPageRoutingModule
+    PinchZoomModule,
+    PdfViewerModule,
+    TabStudyPageRoutingModule,
   ],
-  declarations: [...routes.map(e => e.component), ...pubComponents]
+  declarations: [...routes.map(e => e.component), ...pubComponents,ShowpdfComponent]
 })
-export class TabStudyPageModule {}
+export class TabStudyPageModule {
+}

+ 58 - 21
parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.html

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

+ 156 - 10
parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.scss

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

+ 288 - 2
parth5/parth5/src/app/views/tapp/tab-study/tab-study.page.ts

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

+ 2 - 1
parth5/parth5/tsconfig.json

@@ -12,7 +12,8 @@
     "importHelpers": true,
     "target": "es2015",
     "module": "es2020",
-    "lib": ["es2018", "dom"]
+    "lib": ["es2018", "dom"],
+    "types": ["ng2-pdf-viewer"]
   },
   "angularCompilerOptions": {
     "enableI18nLegacyMessageIdFormat": false,

+ 0 - 116
src/main/java/com/ghsc/partybuild/controller/AppFileMgrController.java

@@ -1,116 +0,0 @@
-package com.ghsc.partybuild.controller;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.github.pagehelper.PageInfo;
-import com.ghsc.partybuild.AppConfig;
-import com.ghsc.partybuild.controller.jsonmodel.RequsetData;
-import com.ghsc.partybuild.model.DsjFilemrg;
-import com.ghsc.partybuild.service.FileMgrService;
-import com.ghsc.partybuild.util.Word2PdfUtil;
-import com.ghsc.partybuild.vo.DsjTreeFiletype;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Base64;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@RestController
-@RequestMapping(value = "/appApi/fileMgr")
-public class AppFileMgrController {
-
-    @Autowired
-    private FileMgrService fileMgrService;
-
-    @Autowired
-    private Word2PdfUtil word2PdfUtil;
-
-    @Autowired
-    private AppConfig appConfig;
-
-    @GetMapping("/GetFileTypeRoot")
-    @ResponseBody
-    public RequsetData<List<DsjTreeFiletype>> GetFileTypeRoot() {
-        RequsetData<List<DsjTreeFiletype>> res = new RequsetData<>();
-        //res.setItem(fileMgrService.getFileTypeRoot());
-        res.setItem(fileMgrService.getFileTreeByParent(""));
-        return res;
-    }
-
-    @PostMapping("/GetFileTypesByParent")
-    @ResponseBody
-    public RequsetData<List<DsjTreeFiletype>> GetFileTypesByParent(@RequestBody JsonNode reqMap) {
-
-        String parentId=reqMap.get("parentid").asText();
-        RequsetData<List<DsjTreeFiletype>> res = new RequsetData<>();
-        //@RequestParam("parentid") String parentId
-        List<DsjTreeFiletype> parents = fileMgrService.getFileTreeByParent(parentId);
-        res.setItem(parents);
-        return res;
-    }
-
-    @PostMapping("/GetFilesByKey")
-    @ResponseBody
-    public RequsetData<PageInfo<DsjFilemrg>> GetFilesByKey(@RequestBody JsonNode reqMap) {
-        RequsetData<PageInfo<DsjFilemrg>> res = new RequsetData<>();
-        String fileName=reqMap.get("fileName").asText();
-        int pageIndex=reqMap.get("pageIndex").asInt();
-        int pageSize=reqMap.get("pageSize").asInt();
-
-        res.setItem(fileMgrService.getFilesByKey(fileName, pageIndex, pageSize));
-
-        return res;
-    }
-
-    /**
-     * @Description //TODO 查询cf_file表附件
-     * @Date 17:32 2019/7/31
-     * @Param [fileRefID, fileTypeId, pageIndex, pageSize]
-     **/
-    @PostMapping("/getFileList")
-    @ResponseBody
-    public RequsetData<PageInfo<Map<String,Object>>> GetFileList(@RequestBody JsonNode reqMap) {
-        RequsetData<PageInfo<Map<String,Object>>> res = new RequsetData<>();
-
-        String fileName=reqMap.get("fileName")!=null?reqMap.get("fileName").asText():"";
-        String fileTypeId=reqMap.get("fileTypeId")!=null?reqMap.get("fileTypeId").asText():"";
-        int pageIndex=reqMap.get("pageIndex").asInt();
-        int pageSize=reqMap.get("pageSize").asInt();
-
-        res.setItem(fileMgrService.FindFilesApp(fileName,fileTypeId,pageIndex, pageSize));
-
-        return res;
-    }
-
-    @PostMapping({"/getFilePDF"})
-    @ResponseBody
-    public RequsetData<String> getFilePDF(@RequestBody JsonNode reqMap){
-        RequsetData<String> res=new RequsetData<>();
-        String fileId=reqMap.get("fileId").asText();
-        DsjFilemrg file = fileMgrService.getFileInfo(fileId);
-        Path pFileName = Paths.get(appConfig.fileMgrUrl, file.getFileurl() + file.getExtendedname());
-        if (Files.exists(pFileName)) {
-            ByteArrayOutputStream bout=new ByteArrayOutputStream();
-            try {
-                Files.copy(pFileName, bout);
-                String img= Base64.getEncoder().encodeToString(bout.toByteArray());
-                res.setItem(img);
-            }catch (Exception ex){
-                log.error("getFilePDF:",ex);
-                res.setSuccess(false);
-                res.setMsg(ex.getMessage());
-            }
-        }
-
-
-        return res;
-    }
-}

+ 2 - 2
src/main/java/com/ghsc/partybuild/controller/FileMgrController.java

@@ -115,7 +115,7 @@ public class FileMgrController {
     public RequsetData<List<DsjTreeFiletype>> GetFileTypeRoot() {
         RequsetData<List<DsjTreeFiletype>> res = new RequsetData<>();
         //res.setItem(fileMgrService.getFileTypeRoot());
-        res.setItem(fileMgrService.getFileTreeByParent(""));
+        res.setItem(fileMgrService.getFileTreeByParent("",null,null));
         return res;
     }
 
@@ -124,7 +124,7 @@ public class FileMgrController {
     public RequsetData<List<DsjTreeFiletype>> GetFileTypesByParent(@RequestParam("parentid") String parentId) {
         RequsetData<List<DsjTreeFiletype>> res = new RequsetData<>();
         //List<DsjFiletype> parents = fileMgrService.getFileTypeByParent(parentId);
-        List<DsjTreeFiletype> parents = fileMgrService.getFileTreeByParent(parentId);
+        List<DsjTreeFiletype> parents = fileMgrService.getFileTreeByParent(parentId,null,null);
         res.setItem(parents);
         return res;
     }

+ 10 - 10
src/main/java/com/ghsc/partybuild/controller/PublicityController.java

@@ -974,8 +974,8 @@ public class PublicityController {
             List<Object> row = new ArrayList();
             row.add(item.get("USERNAME"));
             row.add(item.get("DZZMC"));
-            row.add(item.get("YEAR"));
-            row.add(item.get("MONEY"));
+            row.add(stringUtils.valueOf(item.get("YEAR")));
+            row.add(stringUtils.valueOf(item.get("MONEY")));
             row.add(item.get("ISSTUDENTNAME"));
             row.add(item.get("Jan"));
             row.add(item.get("Feb"));
@@ -1051,10 +1051,11 @@ public class PublicityController {
         try {
 
             UsPartydues dataModel = mapper.readValue(mapper.writeValueAsString(reqMap.get("dataModel")).toString(), UsPartydues.class);
-            /*List<UsPartyduesDetail> monthList = JsonMapper.jsonToObject(reqMap.get("monthList").toString(), new TypeReference<List<UsPartyduesDetail>>() {
-            });*/
+            List<UsPartyduesDetail> monthList = JsonMapper.jsonToObject(reqMap.get("monthList").toString(), new TypeReference<List<UsPartyduesDetail>>() {
+            });
 
-            count = publicityService.savePartyDuesUser(dataModel, userService.getLoginUser().getUserid(), userService.getUserInfobyId(userService.getLoginUser().getUserid()).getName());
+            count = publicityService.savePartyDuesUser(dataModel, userService.getLoginUser().getUserid(), userService.getUserInfobyId(userService.getLoginUser().getUserid()).getName(),
+                    monthList);
 
         } catch (Exception e) {
 
@@ -1175,10 +1176,9 @@ public class PublicityController {
     @ResponseBody
     @GetMapping("/getPartyDuesUserListOfAddfee")
     public RequsetData<PageInfo<HashMap<String, Object>>> getPartyDuesUserListOfAddfee(@RequestParam("pageindex") int pageIndex, @RequestParam("pagesize") int pageSize,
-                                                                                       @RequestParam("year") Integer year, @RequestParam("month") Integer month, @RequestParam("partyCode") String partyCode, @RequestParam(required = false) String userIds,
-                                                                                       @RequestParam(required = false) String removeUserId, @RequestParam(required = false) String userName) {
+                                                                                       @RequestParam("year") Integer year, @RequestParam("month") Integer month, @RequestParam("partyCode") String partyCode, @RequestParam(required = false) String userName) {
 
-        List<String> userIdList = new ArrayList<>();
+        /*List<String> userIdList = new ArrayList<>();
         if (!stringUtils.IsNullOrEmpty(userIds)) {
             userIdList = Arrays.asList(userIds.split(","));
         }
@@ -1187,10 +1187,10 @@ public class PublicityController {
         List<String> removeUserList = new ArrayList<>();
         if (!stringUtils.IsNullOrEmpty(removeUserId)) {
             removeUserList = Arrays.asList(removeUserId.split(","));
-        }
+        }*/
 
         RequsetData<PageInfo<HashMap<String, Object>>> result = new RequsetData<>();
-        result.setItem(publicityService.getPartyDuesUserListOfAddfee(pageIndex, pageSize, year, month, partyCode, userIdList, removeUserList, userName));
+        result.setItem(publicityService.getPartyDuesUserListOfAddfee(pageIndex, pageSize, year, month, partyCode, userName));
         return result;
     }
 

+ 160 - 0
src/main/java/com/ghsc/partybuild/controller/app/AppFileMgrController.java

@@ -0,0 +1,160 @@
+package com.ghsc.partybuild.controller.app;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.github.pagehelper.PageInfo;
+import com.ghsc.partybuild.AppConfig;
+import com.ghsc.partybuild.controller.jsonmodel.RequsetData;
+import com.ghsc.partybuild.model.DsjFilemrg;
+import com.ghsc.partybuild.service.FileMgrService;
+import com.ghsc.partybuild.util.Word2PdfUtil;
+import com.ghsc.partybuild.vo.DsjTreeFiletype;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
+
+@Slf4j
+@RestController
+@RequestMapping(value = "/appApi/fileMgr")
+public class AppFileMgrController {
+
+    @Autowired
+    private FileMgrService fileMgrService;
+
+    @Autowired
+    private Word2PdfUtil word2PdfUtil;
+
+    @Autowired
+    private AppConfig appConfig;
+
+    @GetMapping("/GetFileTypeRoot")
+    @ResponseBody
+    public RequsetData<List<DsjTreeFiletype>> GetFileTypeRoot(@RequestParam(required = false) String sourceType) {
+        RequsetData<List<DsjTreeFiletype>> res = new RequsetData<>();
+        List<String> typeIds = new ArrayList<>();
+        List<String> passtypeIds = new ArrayList<>();
+        if (sourceType != null && !"null".equals(sourceType)) {
+            switch (Integer.parseInt(sourceType)) {
+                case 1:
+                    //党委工作手册
+                    typeIds.add("21");
+                    break;
+                case 2:
+                    //党支部工作手册
+                    typeIds.add("22");
+                    break;
+                case 3:
+                    typeIds.add("43");
+                    typeIds.add("44");
+                    typeIds.add("19");
+                    //线上课程打开制度文件
+                    passtypeIds.add("21");
+                    passtypeIds.add("22");
+                    break;
+                case 4:
+                    //党建工作制度拔萃
+                    typeIds.add("20");
+                    break;
+                default:
+                    break;
+            }
+        }
+        res.setItem(fileMgrService.getFileTreeByParent("", typeIds, passtypeIds));
+        return res;
+    }
+
+    @PostMapping("/GetFileTypesByParent")
+    @ResponseBody
+    public RequsetData<List<DsjTreeFiletype>> GetFileTypesByParent(@RequestParam(required = false) String parentId) {
+
+        RequsetData<List<DsjTreeFiletype>> res = new RequsetData<>();
+        //@RequestParam("parentid") String parentId
+        List<DsjTreeFiletype> parents = fileMgrService.getFileTreeByParent(parentId, null, null);
+        res.setItem(parents);
+        return res;
+    }
+
+    @PostMapping("/GetFilesByKey")
+    @ResponseBody
+    public RequsetData<PageInfo<DsjFilemrg>> GetFilesByKey(@RequestParam("pageIndex") Integer pageIndex, @RequestParam("pageSize") Integer pageSize, @RequestParam(required = false) String fileName) {
+        RequsetData<PageInfo<DsjFilemrg>> res = new RequsetData<>();
+
+        res.setItem(fileMgrService.getFilesByKey(fileName, pageIndex, pageSize));
+
+        return res;
+    }
+
+    /**
+     * @Description //TODO 查询cf_file表附件
+     * @Date 17:32 2019/7/31
+     * @Param [fileRefID, fileTypeId, pageIndex, pageSize]
+     **/
+    @GetMapping("/getFileList")
+    public RequsetData<PageInfo<Map<String, Object>>> GetFileList(@RequestParam("pageIndex") Integer pageIndex, @RequestParam("pageSize") Integer pageSize, @RequestParam(required = false) String fileName, @RequestParam(required = false) String fileTypeId) {
+        RequsetData<PageInfo<Map<String, Object>>> res = new RequsetData<>();
+
+        res.setItem(fileMgrService.FindFilesApp(fileName, fileTypeId, pageIndex, pageSize));
+
+        return res;
+    }
+
+    @PostMapping({"/getFilePDF"})
+    @ResponseBody
+    public RequsetData<String> getFilePDF(@RequestParam("fileId") String fileId) {
+        RequsetData<String> res = new RequsetData<>();
+        DsjFilemrg file = fileMgrService.getFileInfo(fileId);
+
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        try {
+            Path pFileName = Paths.get(appConfig.fileMgrUrl, file.getFileurl() + file.getExtendedname());
+            if (Files.exists(pFileName)) {
+                Files.copy(pFileName, bout);
+            } else {
+                pFileName = Paths.get(appConfig.fileMgrUrl, file.getFileid() + file.getExtendedname());
+                if (Files.exists(pFileName)) {
+                    Files.copy(pFileName, bout);
+                }
+            }
+            String img = Base64.getEncoder().encodeToString(bout.toByteArray());
+            res.setItem(img);
+        } catch (Exception ex) {
+            log.error("getFilePDF:", ex);
+            res.setSuccess(false);
+            res.setMsg(ex.getMessage());
+        }
+
+        return res;
+    }
+
+    @RequestMapping({"/showDoc/{fileId}"})
+    public void showDoc(HttpServletResponse response, @PathVariable("fileId") String fileId) throws IOException {
+        response.setContentType("application/pdf");
+        DsjFilemrg file = fileMgrService.getFileInfo(fileId);
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+
+        Path pFileName = Paths.get(appConfig.fileMgrUrl, file.getFileurl() + file.getExtendedname());
+
+        if (Files.exists(pFileName)) {
+            Files.copy(pFileName, bout);
+        } else {
+            pFileName = Paths.get(appConfig.fileMgrUrl, file.getFileid() + file.getExtendedname());
+            if (Files.exists(pFileName)) {
+                Files.copy(pFileName, bout);
+            }
+        }
+
+        OutputStream os = response.getOutputStream();
+
+        os.write(bout.toByteArray());
+
+        os.flush();
+    }
+}

+ 1 - 1
src/main/java/com/ghsc/partybuild/controller/app/AppPartyController.java

@@ -350,7 +350,7 @@ public class AppPartyController {
                                                                                        @RequestParam(required = false) List<String> userIdList,
                                                                                        @RequestParam(required = false) List<String> removeUserIdList, @RequestParam(required = false) String xm) {
         RequsetData<PageInfo<HashMap<String, Object>>> result = new RequsetData<>();
-        result.setItem(publicityService.getPartyDuesUserListOfAddfee(pageIndex, pageSize, year, month, dzzdm, userIdList, removeUserIdList, xm));
+        result.setItem(publicityService.getPartyDuesUserListOfAddfee(pageIndex, pageSize, year, month, dzzdm, xm));
         return result;
     }
 

+ 48 - 1
src/main/java/com/ghsc/partybuild/controller/partyLife/MeetingController.java

@@ -11,7 +11,7 @@ import com.ghsc.partybuild.util.DateUtils;
 import com.ghsc.partybuild.util.ExcelHelper;
 import com.ghsc.partybuild.util.JsonMapper;
 import com.ghsc.partybuild.util.StringUtils;
-import com.ghsc.partybuild.vo.PartyLifeMeetingVo;
+import com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingVo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -221,4 +221,51 @@ public class MeetingController {
 
         excelHelper.exportExcel(response, excelTitle + "导出.xlsx", data);
     }
+
+    @RequestMapping(value = "/exportTxth", method = RequestMethod.GET)
+    public void exportTxth(HttpServletResponse response, int partyLifeMeetingType, @RequestParam(required = false) String dzzdm, @RequestParam(required = false) String title, @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date startDate, @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date endDate) throws Exception {
+        /**查询数据**/
+        List<PartyLifeMeetingVo> dataList = meetingService.getList(1, 10000, partyLifeMeetingType, null, dzzdm, title, startDate,endDate).getList();
+        List<CfDictionary> typeList = dictionaryService.getDictionaryListByDicTypeKey("PartyLifeMeetingType");
+
+        ExcelHelper excelHelper = new ExcelHelper();
+        ExcelHelper.ExcelData data = excelHelper.new ExcelData();
+
+        String excelTitle = typeList.stream().filter(it->it.getDickey().equals(partyLifeMeetingType)).findFirst().get().getDicvalue();
+
+
+        //列名
+        data.setName(excelTitle);
+        List<String> titles = new ArrayList();
+        titles.add("序号");
+        titles.add("所属党组织");
+        titles.add("会议主题");
+        titles.add("会议时间");
+        titles.add("会议参加人数");
+        titles.add("会议地点");
+        titles.add("创建人");
+        titles.add("创建时间");
+
+        data.setTitles(titles);
+
+        //数据
+        List<List<Object>> rows = new ArrayList();
+        int i = 0;
+        for (PartyLifeMeetingVo item : dataList) {
+            List<Object> row = new ArrayList();
+            row.add(++i);
+            row.add(item.getPartyname());
+            row.add(item.getTitle());
+            row.add(dateUtils.dateToStrFormat(item.getMeetingdate(), "yyyy-MM-dd"));
+            row.add(item.getUsercount());
+            row.add(item.getAddress());
+            row.add(item.getCreateusername());
+            row.add(dateUtils.dateToStrFormat(item.getCreatetime(), "yyyy-MM-dd HH:mm:ss"));
+            rows.add(row);
+        }
+        data.setRows(rows);
+
+        excelHelper.exportExcel(response, excelTitle + "导出.xlsx", data);
+    }
+
 }

+ 187 - 0
src/main/java/com/ghsc/partybuild/controller/partyLife/ReportSystemController.java

@@ -0,0 +1,187 @@
+package com.ghsc.partybuild.controller.partyLife;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.ghsc.partybuild.controller.jsonmodel.RequsetData;
+import com.ghsc.partybuild.service.UserService;
+import com.ghsc.partybuild.service.partyLife.ReportSystemService;
+import com.ghsc.partybuild.util.DateUtils;
+import com.ghsc.partybuild.util.ExcelHelper;
+import com.ghsc.partybuild.util.JsonMapper;
+import com.ghsc.partybuild.vo.partyLife.ReportSystemVo;
+import com.github.pagehelper.PageInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+@Slf4j
+@RestController
+@RequestMapping(value = "/api/partylife/reportsystem")
+public class ReportSystemController {
+    @Autowired
+    private ReportSystemService reportSystemService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private DateUtils dateUtils;
+    private static final String dateTimeFormat = "yyyy-MM-dd";
+
+    @ResponseBody
+    @GetMapping("/getList")
+    public RequsetData<PageInfo<ReportSystemVo>> getList(int pageindex, int pagesize, @RequestParam(required = false) String dzzdm, 
+                                                             @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date startDate, 
+                                                             @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date endDate,
+                                                             @RequestParam(required = false) String zt, @RequestParam(required = false) String dx,
+                                                             @RequestParam(required = false) String sx) {
+        RequsetData<PageInfo<ReportSystemVo>> result = new RequsetData<>();
+        result.setItem(reportSystemService.getList(pageindex, pagesize, null, dzzdm, startDate, endDate, zt, dx, sx));
+        return result;
+    }
+
+    @ResponseBody
+    @GetMapping("/get")
+    public RequsetData<ReportSystemVo> get(@RequestParam(required = false) String id) {
+        RequsetData<ReportSystemVo> res = new RequsetData<>();
+
+        ReportSystemVo model = reportSystemService.getReportSystemById(id);
+        if (model == null) {
+            model = new ReportSystemVo();
+            model.setId(UUID.randomUUID().toString());
+        }
+
+        res.setItem(model);
+        return res;
+    }
+
+    @ResponseBody
+    @PostMapping("/save")
+    public RequsetData<String> save(@RequestBody ReportSystemVo data) {
+        RequsetData<String> result = new RequsetData<String>();
+        int count = 0;
+        String message = "";
+
+        try {
+            count = reportSystemService.save(data, userService.getLoginUser().getUserid());
+        } catch (Exception e) {
+            e.printStackTrace();
+            message = e.toString();
+        }
+
+        if (count > 0) {
+            result.setSuccess(true);
+            result.setMsg("保存成功!");
+        } else {
+            result.setSuccess(false);
+            result.setMsg("保存失败!" + message);
+        }
+        return result;
+    }
+
+    @ResponseBody
+    @PostMapping("/delete")
+    public RequsetData<Integer> delete(@RequestBody Map<String, Object> reqMap) {
+        RequsetData<Integer> result = new RequsetData<>();
+        int count = 0;
+        String message = "";
+
+        try {
+            List<String> idList = JsonMapper.jsonToObject(reqMap.get("ids").toString(), new TypeReference<List<String>>() {
+            });
+            count = reportSystemService.delete(idList);
+        } catch (Exception e) {
+            e.printStackTrace();
+            message = e.toString();
+        }
+
+        if (count > 0) {
+            result.setItem(count);
+            result.setSuccess(true);
+            result.setMsg("删除成功!");
+        } else {
+            result.setSuccess(false);
+            result.setMsg("删除失败!" + message);
+        }
+        return result;
+    }
+
+    @RequestMapping(value = "/export", method = RequestMethod.GET)
+    public void exportLeaderTeam(HttpServletResponse response, @RequestParam(required = false) String dzzdm,
+                                 @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date startDate,
+                                 @RequestParam(required = false) @DateTimeFormat(pattern = dateTimeFormat) Date endDate,
+                                 @RequestParam(required = false) String zt, @RequestParam(required = false) String dx,
+                                 @RequestParam(required = false) String sx) throws Exception {
+        /**查询数据**/
+        List<ReportSystemVo> dataList = reportSystemService.getList(1, 100000, null, dzzdm, startDate, endDate, zt, dx, sx).getList();
+
+        ExcelHelper excelHelper = new ExcelHelper();
+        ExcelHelper.ExcelData data = excelHelper.new ExcelData();
+
+        XSSFWorkbook wb = new XSSFWorkbook();
+        XSSFSheet sheet = wb.createSheet("请示报告制度");
+        sheet.setColumnWidth(1, 256 * 30);
+        sheet.setColumnWidth(2, 256 * 12);
+        sheet.setColumnWidth(3, 256 * 20);
+        sheet.setColumnWidth(4, 256 * 20);
+        sheet.setColumnWidth(5, 256 * 25);
+        sheet.setColumnWidth(6, 256 * 25);
+        sheet.setColumnWidth(7, 256 * 40);
+        sheet.setColumnWidth(9, 256 * 20);
+
+        try{
+
+            //列名
+            List<String> titles = new ArrayList();
+            titles.add("序号");
+            titles.add("所属党组织");
+            titles.add("请示时间");
+            titles.add("请示报告主体");
+            titles.add("请示报告对象");
+            titles.add("请示报告事项");
+            titles.add("请示报告方式");
+            titles.add("请示报告反馈情况");
+            titles.add("创建人");
+            titles.add("创建时间");
+            data.setTitles(titles);
+
+            //数据
+            List<List<Object>> rows = new ArrayList();
+            List<List<XSSFCellStyle>> cellStyles = new ArrayList();
+            XSSFCellStyle defaultStyle = excelHelper.setDefaultBorder(wb);
+
+            int i = 0;
+            for (ReportSystemVo item : dataList) {
+                List<Object> row = new ArrayList();
+                row.add(++i);
+                row.add(item.getDzzmc());
+                row.add(dateUtils.dateToStrFormat(item.getQssj(), "yyyy-MM-dd"));
+                row.add(item.getZt());
+                row.add(item.getDx());
+                row.add(item.getSx());
+                row.add(item.getFs());
+                row.add(item.getFkqk());
+                row.add(item.getCreateusername());
+                row.add(dateUtils.dateToStrFormat(item.getCreatetime(), "yyyy-MM-dd HH:mm:ss"));
+                rows.add(row);
+
+                List<XSSFCellStyle> styles= new ArrayList<>();
+                for(int j=0;j<10;j++){
+                    styles.add(defaultStyle);
+                }
+                cellStyles.add(styles);
+            }
+
+            data.setRows(rows);
+            data.setStyleList(cellStyles);
+        } catch (Exception ex) {
+            wb.close();
+        }
+
+        excelHelper.exportExcelNew(wb , response,  "请示报告制度导出.xlsx", data);
+    }
+}

+ 1 - 1
src/main/java/com/ghsc/partybuild/mapper/CfFileCQuery.java

@@ -10,7 +10,7 @@ import java.util.Map;
 
 @Repository
 public interface CfFileCQuery {
-    List<DsjTreeFiletype> selectTreeFiles(@Param("pFileId") String pFileId,@Param("typename") String typename);
+    List<DsjTreeFiletype> selectTreeFiles(@Param("pFileId") String pFileId,@Param("typename") String typename,@Param("typeIds") List<String> typeIds,@Param("passTypeIds") List<String> passTypeIds);
 
     List<Map<String,Object>> FindDSJ_File(@Param("fileName") String fileName,@Param("typeIds") List<String> typeIds);
 

+ 3 - 3
src/main/java/com/ghsc/partybuild/mapper/PartyLifeMeetingCQuery.java

@@ -1,8 +1,8 @@
 package com.ghsc.partybuild.mapper;
 
-import com.ghsc.partybuild.vo.PartyLifeMeetingPersonnelVo;
-import com.ghsc.partybuild.vo.PartyLifeMeetingScydlVo;
-import com.ghsc.partybuild.vo.PartyLifeMeetingVo;
+import com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingPersonnelVo;
+import com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingScydlVo;
+import com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;

+ 30 - 0
src/main/java/com/ghsc/partybuild/mapper/PfReportsystemMapper.java

@@ -0,0 +1,30 @@
+package com.ghsc.partybuild.mapper;
+
+import com.ghsc.partybuild.model.PfReportsystem;
+import com.ghsc.partybuild.model.PfReportsystemExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface PfReportsystemMapper {
+    long countByExample(PfReportsystemExample example);
+
+    int deleteByExample(PfReportsystemExample example);
+
+    int deleteByPrimaryKey(String id);
+
+    int insert(PfReportsystem record);
+
+    int insertSelective(PfReportsystem record);
+
+    List<PfReportsystem> selectByExample(PfReportsystemExample example);
+
+    PfReportsystem selectByPrimaryKey(String id);
+
+    int updateByExampleSelective(@Param("record") PfReportsystem record, @Param("example") PfReportsystemExample example);
+
+    int updateByExample(@Param("record") PfReportsystem record, @Param("example") PfReportsystemExample example);
+
+    int updateByPrimaryKeySelective(PfReportsystem record);
+
+    int updateByPrimaryKey(PfReportsystem record);
+}

+ 1 - 1
src/main/java/com/ghsc/partybuild/mapper/PublicityCQuery.java

@@ -231,7 +231,7 @@ public interface PublicityCQuery {
      * @param userName
      * @return
      */
-    List<HashMap<String, Object>> selectPartyDuesUserListOfAddfee(@Param("year") Integer year, @Param("month") Integer month, @Param("partyCode") String partyCode, @Param("userIdList") List<String> userIdList, @Param("removeUserList") List<String> removeUserList, @Param("userName") String userName);
+    List<HashMap<String, Object>> selectPartyDuesUserListOfAddfee(@Param("year") Integer year, @Param("month") Integer month, @Param("partyCode") String partyCode, @Param("userName") String userName,@Param("yearMonth") Integer yearMonth);
 
 
     List<HashMap<String, Object>> selectUserDuesList(@Param("ssdzzdm") String ssdzzdm, @Param("xm") String xm, @Param("year") Integer year, @Param("month") Integer month);

+ 14 - 0
src/main/java/com/ghsc/partybuild/mapper/ReportSystemCQuery.java

@@ -0,0 +1,14 @@
+package com.ghsc.partybuild.mapper;
+
+import com.ghsc.partybuild.vo.partyLife.ReportSystemVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+public interface ReportSystemCQuery {
+    List<ReportSystemVo> selectReportSystemList(@Param("id") String id, @Param("dzzdm") String dzzdm,
+                                                @Param("startDate") Date startDate, @Param("endDate") Date endDate,
+                                                @Param("zt") String zt, @Param("dx") String dx, @Param("sx") String sx);
+
+}

+ 125 - 0
src/main/java/com/ghsc/partybuild/model/PfReportsystem.java

@@ -0,0 +1,125 @@
+package com.ghsc.partybuild.model;
+
+import java.util.Date;
+
+public class PfReportsystem {
+    private String id;
+
+    private String zt;
+
+    private String dx;
+
+    private String dzzdm;
+
+    private Date qssj;
+
+    private String sx;
+
+    private String fs;
+
+    private String fkqk;
+
+    private Date createtime;
+
+    private String createuserid;
+
+    private Date updatetime;
+
+    private String updateuserid;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id == null ? null : id.trim();
+    }
+
+    public String getZt() {
+        return zt;
+    }
+
+    public void setZt(String zt) {
+        this.zt = zt == null ? null : zt.trim();
+    }
+
+    public String getDx() {
+        return dx;
+    }
+
+    public void setDx(String dx) {
+        this.dx = dx == null ? null : dx.trim();
+    }
+
+    public String getDzzdm() {
+        return dzzdm;
+    }
+
+    public void setDzzdm(String dzzdm) {
+        this.dzzdm = dzzdm == null ? null : dzzdm.trim();
+    }
+
+    public Date getQssj() {
+        return qssj;
+    }
+
+    public void setQssj(Date qssj) {
+        this.qssj = qssj;
+    }
+
+    public String getSx() {
+        return sx;
+    }
+
+    public void setSx(String sx) {
+        this.sx = sx == null ? null : sx.trim();
+    }
+
+    public String getFs() {
+        return fs;
+    }
+
+    public void setFs(String fs) {
+        this.fs = fs == null ? null : fs.trim();
+    }
+
+    public String getFkqk() {
+        return fkqk;
+    }
+
+    public void setFkqk(String fkqk) {
+        this.fkqk = fkqk == null ? null : fkqk.trim();
+    }
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    public String getCreateuserid() {
+        return createuserid;
+    }
+
+    public void setCreateuserid(String createuserid) {
+        this.createuserid = createuserid == null ? null : createuserid.trim();
+    }
+
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    public String getUpdateuserid() {
+        return updateuserid;
+    }
+
+    public void setUpdateuserid(String updateuserid) {
+        this.updateuserid = updateuserid == null ? null : updateuserid.trim();
+    }
+}

File diff suppressed because it is too large
+ 1038 - 0
src/main/java/com/ghsc/partybuild/model/PfReportsystemExample.java


+ 1 - 1
src/main/java/com/ghsc/partybuild/service/FileMgrService.java

@@ -50,7 +50,7 @@ public interface FileMgrService {
      * @param parentId 父id
      * @return 文件
      */
-    List<DsjTreeFiletype> getFileTreeByParent(String parentId);
+    List<DsjTreeFiletype> getFileTreeByParent(String parentId,List<String> typeIds,List<String> passTypeIds);
 
     /**
      * 获取文件树

+ 2 - 2
src/main/java/com/ghsc/partybuild/service/PublicityService.java

@@ -347,7 +347,7 @@ public interface PublicityService {
      * @param userName
      * @return
      */
-    int savePartyDuesUser(UsPartydues model, String userId, String userName);
+    int savePartyDuesUser(UsPartydues model, String userId, String userName,List<UsPartyduesDetail> monthList);
 
     /**
      * 批量保存党费基数
@@ -378,7 +378,7 @@ public interface PublicityService {
      * @param userName
      * @return
      */
-    PageInfo<HashMap<String, Object>> getPartyDuesUserListOfAddfee(int page, int rows, Integer year, Integer month, String partyCode, List<String> userIdList, List<String> removeUserList,String userName);
+    PageInfo<HashMap<String, Object>> getPartyDuesUserListOfAddfee(int page, int rows, Integer year, Integer month, String partyCode,String userName);
 
     /**
      * 保存

+ 5 - 5
src/main/java/com/ghsc/partybuild/service/impl/FileMgrServiceImpl.java

@@ -139,16 +139,16 @@ public class FileMgrServiceImpl implements FileMgrService {
     }
 
     @Override
-    public List<DsjTreeFiletype> getFileTreeByParent(String parentId) {
-        
-        return cfFileCQuery.selectTreeFiles(parentId,null);
+    public List<DsjTreeFiletype> getFileTreeByParent(String parentId, List<String> typeIds, List<String> passTypeIds) {
+
+        return cfFileCQuery.selectTreeFiles(parentId, null, typeIds, passTypeIds);
     }
     @Override
     public PageInfo<Map<String, Object>> selectFiletypeList(String typename,String parentId ,int pageIndex, int pageSize) {
         PageHelper.startPage(pageIndex, pageSize);
-        List<DsjTreeFiletype> list= cfFileCQuery.selectTreeFiles(parentId,typename);
+        List<DsjTreeFiletype> list = cfFileCQuery.selectTreeFiles(parentId, typename, null, null);
         PageInfo<Map<String, Object>> pList = new PageInfo(list);
-        return  pList;
+        return pList;
     }
     @Override
     public DsjFiletype getFiletype(String typeid) {

+ 42 - 4
src/main/java/com/ghsc/partybuild/service/impl/PublicityServiceImpl.java

@@ -1143,7 +1143,7 @@ public class PublicityServiceImpl implements PublicityService {
      * @return
      */
     @Override
-    public int savePartyDuesUser(UsPartydues model, String userId, String userName) {
+    public int savePartyDuesUser(UsPartydues model, String userId, String userName, List<UsPartyduesDetail> monthList) {
         int result = 0;
         String dzzdm = partyUserService.getUserDzzdm(model.getUsercode());
 
@@ -1173,7 +1173,37 @@ public class PublicityServiceImpl implements PublicityService {
             result += usPartyduesMapper.updateByPrimaryKey(dbModel);
         }
 
-        this.batchInsertPartyDuesDetail(dbModel.getYear(), Arrays.asList(dbModel.getUsercode()));
+        /*this.batchInsertPartyDuesDetail(dbModel.getYear(), Arrays.asList(dbModel.getUsercode()));*/
+
+        for (UsPartyduesDetail item : monthList) {
+            UsPartyduesDetail mModel = getPartyduesDetailByUserId(dbModel.getPartyduesid(), item.getMonth());
+            if (mModel == null || (mModel != null && stringUtils.IsNullOrEmpty(mModel.getDetailid()))) {
+                item.setDetailid(UUID.randomUUID().toString());
+                item.setPartyduesid(dbModel.getPartyduesid());
+                item.setPartycode(dzzdm);
+                item.setCreateuserid(userId);
+                item.setCreateusername(userName);
+                item.setCreatetime(new Date());
+                //同步数据
+                item.setOperatetime(new Date());
+                item.setOperatestate("A");
+                item.setSyncstate("N");
+                usPartyduesDetailMapper.insert(item);
+            } else {
+                mModel.setMoney(item.getMoney());
+                mModel.setSpecialexpenses(item.getSpecialexpenses());
+                mModel.setRemarks(item.getRemarks());
+                mModel.setUpdateuserid(userId);
+                mModel.setUpdateusername(userName);
+                mModel.setUpdatetime(new Date());
+
+                mModel.setOperatetime(new Date());
+                mModel.setOperatestate("M");
+                mModel.setSyncstate("N");
+                mModel.setPaystate(item.getPaystate());
+                usPartyduesDetailMapper.updateByPrimaryKey(mModel);
+            }
+        }
 
         return result;
     }
@@ -1244,9 +1274,11 @@ public class PublicityServiceImpl implements PublicityService {
      * @return
      */
     @Override
-    public PageInfo<HashMap<String, Object>> getPartyDuesUserListOfAddfee(int page, int rows, Integer year, Integer month, String partyCode, List<String> userIdList, List<String> removeUserList, String userName) {
+    public PageInfo<HashMap<String, Object>> getPartyDuesUserListOfAddfee(int page, int rows, Integer year, Integer month, String partyCode, String userName) {
+        Integer yearMonth = Integer.parseInt(year + String.format("%02d", month));
+
         PageHelper.startPage(page, rows);
-        List<HashMap<String, Object>> list = publicityCQuery.selectPartyDuesUserListOfAddfee(year, month, partyCode, userIdList, removeUserList, userName);
+        List<HashMap<String, Object>> list = publicityCQuery.selectPartyDuesUserListOfAddfee(year, month, partyCode, userName, yearMonth);
 
         PageInfo<HashMap<String, Object>> result = new PageInfo(list);
 
@@ -1274,6 +1306,7 @@ public class PublicityServiceImpl implements PublicityService {
                 item.setOperatetime(new Date());
                 item.setOperatestate("A");
                 item.setSyncstate("N");
+                item.setPaystate(1);
                 result += usPartyduesDetailMapper.insert(item);
             } else {
                 mModel.setMoney(item.getMoney());
@@ -1285,6 +1318,7 @@ public class PublicityServiceImpl implements PublicityService {
                 mModel.setOperatetime(new Date());
                 mModel.setOperatestate("M");
                 mModel.setSyncstate("N");
+                mModel.setPaystate(1);
                 result += usPartyduesDetailMapper.updateByPrimaryKey(mModel);
             }
         }
@@ -1456,7 +1490,11 @@ public class PublicityServiceImpl implements PublicityService {
                     dbModel.setSyncstate("N");
                     usPartyduesMapper.updateByPrimaryKey(dbModel);
                 }
+
+                this.batchInsertPartyDuesDetail(item.getYear(), Arrays.asList(item.getUsercode()));
             });
+
+
         }
 
         return errorList;

+ 5 - 3
src/main/java/com/ghsc/partybuild/service/impl/partyLife/MeetingServiceImpl.java

@@ -3,7 +3,7 @@ package com.ghsc.partybuild.service.impl.partyLife;
 import com.ghsc.partybuild.mapper.PfPartylifemeetingPersonnelMapper;
 import com.ghsc.partybuild.mapper.PfPartylifemeetingScydMapper;
 import com.ghsc.partybuild.model.*;
-import com.ghsc.partybuild.vo.PartyLifeMeetingScydlVo;
+import com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingScydlVo;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.ghsc.partybuild.mapper.PartyLifeMeetingCQuery;
@@ -12,7 +12,7 @@ import com.ghsc.partybuild.service.DictionaryService;
 import com.ghsc.partybuild.service.partyLife.MeetingService;
 import com.ghsc.partybuild.util.DateUtils;
 import com.ghsc.partybuild.util.StringUtils;
-import com.ghsc.partybuild.vo.PartyLifeMeetingVo;
+import com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -41,7 +41,7 @@ public class MeetingServiceImpl implements MeetingService {
     @Override
     public PageInfo<PartyLifeMeetingVo> getList(int pageIndex, int pageSize, Integer partyLifeMeetingType, String id, String dzzdm, String title, Date startDate, Date endDate){
         PageHelper.startPage(pageIndex, pageSize);
-        List<PartyLifeMeetingVo> list = partyLifeMeetingCQuery.selectMeetingList(partyLifeMeetingType, null, dzzdm, title, startDate, endDate);
+        List<PartyLifeMeetingVo> list = partyLifeMeetingCQuery.selectMeetingList(partyLifeMeetingType, id, dzzdm, title, startDate, endDate);
 
         list.forEach(item -> {
             //'“三重一大”制度'
@@ -85,6 +85,7 @@ public class MeetingServiceImpl implements MeetingService {
             dbModel.setPartycode(data.getPartycode());
             dbModel.setPartylifemeetingtype(data.getPartylifemeetingtype());
             dbModel.setMeetingdate(data.getMeetingdate());
+            dbModel.setUsercount(data.getUsercount());
             dbModel.setAddress(data.getAddress());
             dbModel.setPersonnel(data.getPersonnel());
             dbModel.setResult(data.getResult());
@@ -98,6 +99,7 @@ public class MeetingServiceImpl implements MeetingService {
             dbModel.setPartycode(data.getPartycode());
             dbModel.setPartylifemeetingtype(data.getPartylifemeetingtype());
             dbModel.setMeetingdate(data.getMeetingdate());
+            dbModel.setUsercount(data.getUsercount());
             dbModel.setAddress(data.getAddress());
             dbModel.setPersonnel(data.getPersonnel());
             dbModel.setResult(data.getResult());

+ 85 - 0
src/main/java/com/ghsc/partybuild/service/impl/partyLife/ReportSystemServiceImpl.java

@@ -0,0 +1,85 @@
+package com.ghsc.partybuild.service.impl.partyLife;
+
+import com.ghsc.partybuild.mapper.*;
+import com.ghsc.partybuild.model.*;
+import com.ghsc.partybuild.service.partyLife.ReportSystemService;
+import com.ghsc.partybuild.util.StringUtils;
+import com.ghsc.partybuild.vo.partyLife.ReportSystemVo;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service("pfReportSystemService")
+public class ReportSystemServiceImpl implements ReportSystemService {
+    @Autowired
+    private PfReportsystemMapper pfReportsystemMapper;
+    @Autowired
+    private ReportSystemCQuery reportSystemCQuery;
+    @Autowired
+    private StringUtils stringUtils;
+
+    @Override
+    public PageInfo<ReportSystemVo> getList(int pageIndex, int pageSize, String id, String dzzdm, Date startDate, Date endDate, String zt, String dx, String sx){
+        PageHelper.startPage(pageIndex, pageSize);
+        List<ReportSystemVo> list = reportSystemCQuery.selectReportSystemList(id, dzzdm, startDate, endDate, zt, dx, sx);
+
+        PageInfo<ReportSystemVo> result = new PageInfo(list);
+        return result;
+    }
+
+    @Override
+    public ReportSystemVo getReportSystemById(String id) {
+        if (stringUtils.IsNullOrEmpty(id))
+            return null;
+
+        List<ReportSystemVo> list = getList(1,999999, id, null, null, null, null, null, null).getList();
+        return list.size() > 0 ? list.get(0) : null;
+    }
+
+    @Override
+    public int save(ReportSystemVo data, String userId) {
+        int result = 0;
+        PfReportsystem dbModel = pfReportsystemMapper.selectByPrimaryKey(data.getId());
+        if (dbModel == null) {
+            dbModel = new ReportSystemVo();
+            dbModel.setId(data.getId());
+            dbModel.setZt(data.getZt());
+            dbModel.setDx(data.getDx());
+            dbModel.setDzzdm(data.getDzzdm());
+            dbModel.setQssj(data.getQssj());
+            dbModel.setSx(data.getSx());
+            dbModel.setFs(data.getFs());
+            dbModel.setFkqk(data.getFkqk());
+            dbModel.setCreatetime(new Date());
+            dbModel.setCreateuserid(userId);
+
+            result = pfReportsystemMapper.insert(dbModel);
+        } else {
+            dbModel.setZt(data.getZt());
+            dbModel.setDx(data.getDx());
+            dbModel.setDzzdm(data.getDzzdm());
+            dbModel.setQssj(data.getQssj());
+            dbModel.setSx(data.getSx());
+            dbModel.setFs(data.getFs());
+            dbModel.setFkqk(data.getFkqk());
+            data.setUpdatetime(new Date());
+            data.setUpdateuserid(userId);
+
+            result = pfReportsystemMapper.updateByPrimaryKey(data);
+        }
+        
+        return result;
+    }
+
+    @Override
+    public int delete(List<String> meetingIdList) {
+        PfReportsystemExample exp = new PfReportsystemExample();
+        exp.or().andIdIn(meetingIdList);
+
+        return pfReportsystemMapper.deleteByExample(exp);
+    }
+}

+ 1 - 1
src/main/java/com/ghsc/partybuild/service/partyLife/MeetingService.java

@@ -1,7 +1,7 @@
 package com.ghsc.partybuild.service.partyLife;
 
 import com.github.pagehelper.PageInfo;
-import com.ghsc.partybuild.vo.PartyLifeMeetingVo;
+import com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingVo;
 
 import java.util.Date;
 import java.util.List;

+ 18 - 0
src/main/java/com/ghsc/partybuild/service/partyLife/ReportSystemService.java

@@ -0,0 +1,18 @@
+package com.ghsc.partybuild.service.partyLife;
+
+import com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingVo;
+import com.ghsc.partybuild.vo.partyLife.ReportSystemVo;
+import com.github.pagehelper.PageInfo;
+
+import java.util.Date;
+import java.util.List;
+
+public interface ReportSystemService {
+    PageInfo<ReportSystemVo> getList(int pageIndex, int pageSize, String id, String dzzdm, Date startDate, Date endDate, String zt, String dx, String sx);
+
+    ReportSystemVo getReportSystemById(String id);
+
+    int save(ReportSystemVo data, String userId);
+
+    int delete(List<String> meetingIdList);
+}

+ 1 - 0
src/main/java/com/ghsc/partybuild/shiro/ShiroConfiguration.java

@@ -118,6 +118,7 @@ public class ShiroConfiguration {
         filterChainDefinitionMap.put("/wxapi/pay/order/notify", "anon");
         filterChainDefinitionMap.put("/wxapi/pay/OAuth", "anon");
         filterChainDefinitionMap.put("/wxapi/pay/getOpenID", "anon");
+        filterChainDefinitionMap.put("/appApi/fileMgr/showDoc/**", "anon");
         filterChainDefinitionMap.put("/**", "authc");
 
         // 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面

+ 28 - 1
src/main/java/com/ghsc/partybuild/util/ExcelHelper.java

@@ -197,7 +197,7 @@ public class ExcelHelper {
             if (null == sheetName) {
                 sheetName = "Sheet1";
             }
-            XSSFSheet sheet = wb.createSheet(sheetName);
+            XSSFSheet sheet = wb.getSheetAt(0) != null ? wb.getSheetAt(0) : wb.createSheet(sheetName);
             writeExcel(wb, sheet, data);
 
             wb.write(out);
@@ -377,6 +377,33 @@ public class ExcelHelper {
         style.setVerticalAlignment(VerticalAlignment.CENTER);
     }
 
+    public XSSFCellStyle setDefaultBorder(XSSFWorkbook wb) {
+        Font dataFont = wb.createFont();
+        dataFont.setFontName("simsun");
+        dataFont.setColor(IndexedColors.BLACK.index);
+
+        XSSFCellStyle style = wb.createCellStyle();
+        style.setAlignment(HorizontalAlignment.LEFT);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        style.setFillForegroundColor(new XSSFColor(java.awt.Color.WHITE, new DefaultIndexedColorMap()));
+        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        style.setFont(dataFont);
+        style.setWrapText(true);
+
+        BorderStyle borderStyle = BorderStyle.THIN;
+        XSSFColor borderColor = new XSSFColor(java.awt.Color.BLACK, new DefaultIndexedColorMap());
+        style.setBorderTop(borderStyle);
+        style.setBorderLeft(borderStyle);
+        style.setBorderRight(borderStyle);
+        style.setBorderBottom(borderStyle);
+        style.setBorderColor(XSSFCellBorder.BorderSide.TOP, borderColor);
+        style.setBorderColor(XSSFCellBorder.BorderSide.LEFT, borderColor);
+        style.setBorderColor(XSSFCellBorder.BorderSide.RIGHT, borderColor);
+        style.setBorderColor(XSSFCellBorder.BorderSide.BOTTOM, borderColor);
+
+        return style;
+    }
+
     private void setCellRange(Sheet sheet, List<CellRangeAddress> cellRangeList) {
         for (CellRangeAddress item : cellRangeList) {
             sheet.addMergedRegion(item);

+ 1 - 1
src/main/java/com/ghsc/partybuild/vo/PartyLifeMeetingPersonnelVo.java

@@ -1,4 +1,4 @@
-package com.ghsc.partybuild.vo;
+package com.ghsc.partybuild.vo.partyLife;
 
 import com.ghsc.partybuild.model.PfPartylifemeetingPersonnel;
 import lombok.Data;

+ 1 - 1
src/main/java/com/ghsc/partybuild/vo/PartyLifeMeetingScydlVo.java

@@ -1,4 +1,4 @@
-package com.ghsc.partybuild.vo;
+package com.ghsc.partybuild.vo.partyLife;
 
 import com.ghsc.partybuild.model.PfPartylifemeetingScydKey;
 import lombok.Data;

+ 1 - 1
src/main/java/com/ghsc/partybuild/vo/PartyLifeMeetingVo.java

@@ -1,4 +1,4 @@
-package com.ghsc.partybuild.vo;
+package com.ghsc.partybuild.vo.partyLife;
 
 import com.ghsc.partybuild.model.PfPartylifemeeting;
 import lombok.Data;

+ 11 - 0
src/main/java/com/ghsc/partybuild/vo/partyLife/ReportSystemVo.java

@@ -0,0 +1,11 @@
+package com.ghsc.partybuild.vo.partyLife;
+
+import com.ghsc.partybuild.model.PfReportsystem;
+import lombok.Data;
+
+
+@Data
+public class ReportSystemVo extends PfReportsystem {
+    private String dzzmc;
+    private String createusername;
+}

+ 1 - 1
src/main/resources/application.yml

@@ -139,7 +139,7 @@ appconfig:
   sync-cron-usercount: '0/5 * * * 1 ?'
   sync-cron-userage: '0 0 23 1 1 ?'
   sync-cron-wechatpay: '0/30 * * * 1 ? '
-  sync-cron-partydues: '0 0/10 * * * ?'
+  sync-cron-partydues: '0 0 13,23 * * ?'
   sync-cron-updateUserparty: '0 0 13,23 * * ?'
   bowinLisencing: '/fGsysepxe1l+HNXO9M+LVGxyk7rdCqEAkBz4a2rU1s='
   #bowinLisencing: 'omkEhjdATMchNVk3e3j4C7FlRHKQJtQi'

+ 15 - 3
src/main/resources/mapping/CfFileCQuery.xml

@@ -18,13 +18,25 @@
             and f.PARENTTYPEID = #{ pFileId }
         </if>
         <if test="typename !='' and typename!=null">
-            and f.FILETYPENAME like concat('%',#{typename},'%')
-
+            and f.FILETYPENAME like '%'||#{typename}||'%'
         </if>
         <if test="pFileId == null or pFileId ==''">
             and f.PARENTTYPEID is null
         </if>
-
+        <if test="typeIds!=null and typeIds.size()!=0">
+            and f.FILETYPEID in
+            <foreach collection="typeIds" item="typeId"
+                     index="index" open="(" close=")" separator=",">
+                #{typeId}
+            </foreach>
+        </if>
+        <if test="passTypeIds!=null and passTypeIds.size()!=0">
+            and f.FILETYPEID not in
+            <foreach collection="passTypeIds" item="typeId"
+                     index="index" open="(" close=")" separator=",">
+                #{typeId}
+            </foreach>
+        </if>
         order by treelevel asc
 
     </select>

+ 7 - 4
src/main/resources/mapping/PartyLifeMeetingCQuery.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.ghsc.partybuild.mapper.PartyLifeMeetingCQuery">
-    <select id="selectMeetingList" resultType="com.ghsc.partybuild.vo.PartyLifeMeetingVo">
+    <select id="selectMeetingList" resultType="com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingVo">
         select pfm.partyLifeMeetingId, pfm.title, pfm.partyCode, pfm.partyLifeMeetingType, pfm.meetingDate,
         pfm.userCount, pfm.address, pfm.createTime, pfm.createUserId, pfm.updateTime, pfm.updateUserId,
         pfm.personnel, pfm.result, pfm.compere,
@@ -12,6 +12,9 @@
         left join (select partyLifeMeetingId,count(0) as attendance from pf_partylifemeeting_personnel where isAbsenteeism = 0 group by partyLifeMeetingId) p1 on pfm.partyLifeMeetingId = p1.partyLifeMeetingId
         left join (select partyLifeMeetingId,count(0) as absentCount from pf_partylifemeeting_personnel where isAbsenteeism = 1 group by partyLifeMeetingId) p2 on pfm.partyLifeMeetingId = p2.partyLifeMeetingId
         where 1=1
+        <if test="id != null and id != ''">
+            and pfm.partyLifeMeetingId = #{id}
+        </if>
         <if test="dzzdm != null and dzzdm != ''">
             and pfm.partyCode like concat('%',#{dzzdm},'%')
         </if>
@@ -40,16 +43,16 @@
         group by c.address
         order by max(c.CREATETIME) desc
     </select>
-    <select id="selectMeetingPersonnelList" resultType="com.ghsc.partybuild.vo.PartyLifeMeetingPersonnelVo">
+    <select id="selectMeetingPersonnelList" resultType="com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingPersonnelVo">
         select pp.id, pp.partyLifeMeetingId, pp.rybm, pp.isAbsenteeism, pp.absenteeismCause,
                pp.createTime, pp.createUserId, pp.updateTime, pp.updateUserId, u.XM, u.RYJBXXBS,
-               case when pp.isAbsenteeism=1 then '缺勤' else '出勤' end as isAbsenteeismName
+               case when pp.isAbsenteeism=1 then '是' else '否' end as isAbsenteeismName
         from pf_partylifemeeting_personnel pp
         left join VM_RYJBXX u on pp.rybm = u.rybm
         where pp.partyLifeMeetingId = #{partyLifeMeetingId}
         order by pp.createTime
     </select>
-    <select id="selectMeetingScydList" resultType="com.ghsc.partybuild.vo.PartyLifeMeetingScydlVo">
+    <select id="selectMeetingScydList" resultType="com.ghsc.partybuild.vo.partyLife.PartyLifeMeetingScydlVo">
         select a.partyLifeMeetingId,a.scydType,b.DICVALUE as scydTypeName
         from pf_partylifemeeting_scyd a
         inner join cf_dictionary b on b.DICTYPEKEY='scydType' and a.scydType = b.DICKEY

+ 320 - 0
src/main/resources/mapping/PfReportsystemMapper.xml

@@ -0,0 +1,320 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ghsc.partybuild.mapper.PfReportsystemMapper">
+  <resultMap id="BaseResultMap" type="com.ghsc.partybuild.model.PfReportsystem">
+    <id column="id" jdbcType="VARCHAR" property="id" />
+    <result column="zt" jdbcType="VARCHAR" property="zt" />
+    <result column="dx" jdbcType="VARCHAR" property="dx" />
+    <result column="dzzdm" jdbcType="VARCHAR" property="dzzdm" />
+    <result column="qssj" jdbcType="DATE" property="qssj" />
+    <result column="sx" jdbcType="VARCHAR" property="sx" />
+    <result column="fs" jdbcType="VARCHAR" property="fs" />
+    <result column="fkqk" jdbcType="VARCHAR" property="fkqk" />
+    <result column="createTime" jdbcType="TIMESTAMP" property="createtime" />
+    <result column="createUserId" jdbcType="VARCHAR" property="createuserid" />
+    <result column="updateTime" jdbcType="TIMESTAMP" property="updatetime" />
+    <result column="updateUserId" jdbcType="VARCHAR" property="updateuserid" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, zt, dx, dzzdm, qssj, sx, fs, fkqk, createTime, createUserId, updateTime, updateUserId
+  </sql>
+  <select id="selectByExample" parameterType="com.ghsc.partybuild.model.PfReportsystemExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from pf_reportsystem
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from pf_reportsystem
+    where id = #{id,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from pf_reportsystem
+    where id = #{id,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.ghsc.partybuild.model.PfReportsystemExample">
+    delete from pf_reportsystem
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.ghsc.partybuild.model.PfReportsystem">
+    insert into pf_reportsystem (id, zt, dx, dzzdm, 
+      qssj, sx, fs, fkqk, 
+      createTime, createUserId, updateTime, 
+      updateUserId)
+    values (#{id,jdbcType=VARCHAR}, #{zt,jdbcType=VARCHAR}, #{dx,jdbcType=VARCHAR}, #{dzzdm,jdbcType=VARCHAR}, 
+      #{qssj,jdbcType=DATE}, #{sx,jdbcType=VARCHAR}, #{fs,jdbcType=VARCHAR}, #{fkqk,jdbcType=VARCHAR}, 
+      #{createtime,jdbcType=TIMESTAMP}, #{createuserid,jdbcType=VARCHAR}, #{updatetime,jdbcType=TIMESTAMP}, 
+      #{updateuserid,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.ghsc.partybuild.model.PfReportsystem">
+    insert into pf_reportsystem
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="zt != null">
+        zt,
+      </if>
+      <if test="dx != null">
+        dx,
+      </if>
+      <if test="dzzdm != null">
+        dzzdm,
+      </if>
+      <if test="qssj != null">
+        qssj,
+      </if>
+      <if test="sx != null">
+        sx,
+      </if>
+      <if test="fs != null">
+        fs,
+      </if>
+      <if test="fkqk != null">
+        fkqk,
+      </if>
+      <if test="createtime != null">
+        createTime,
+      </if>
+      <if test="createuserid != null">
+        createUserId,
+      </if>
+      <if test="updatetime != null">
+        updateTime,
+      </if>
+      <if test="updateuserid != null">
+        updateUserId,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=VARCHAR},
+      </if>
+      <if test="zt != null">
+        #{zt,jdbcType=VARCHAR},
+      </if>
+      <if test="dx != null">
+        #{dx,jdbcType=VARCHAR},
+      </if>
+      <if test="dzzdm != null">
+        #{dzzdm,jdbcType=VARCHAR},
+      </if>
+      <if test="qssj != null">
+        #{qssj,jdbcType=DATE},
+      </if>
+      <if test="sx != null">
+        #{sx,jdbcType=VARCHAR},
+      </if>
+      <if test="fs != null">
+        #{fs,jdbcType=VARCHAR},
+      </if>
+      <if test="fkqk != null">
+        #{fkqk,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null">
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createuserid != null">
+        #{createuserid,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null">
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateuserid != null">
+        #{updateuserid,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.ghsc.partybuild.model.PfReportsystemExample" resultType="java.lang.Long">
+    select count(*) from pf_reportsystem
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update pf_reportsystem
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=VARCHAR},
+      </if>
+      <if test="record.zt != null">
+        zt = #{record.zt,jdbcType=VARCHAR},
+      </if>
+      <if test="record.dx != null">
+        dx = #{record.dx,jdbcType=VARCHAR},
+      </if>
+      <if test="record.dzzdm != null">
+        dzzdm = #{record.dzzdm,jdbcType=VARCHAR},
+      </if>
+      <if test="record.qssj != null">
+        qssj = #{record.qssj,jdbcType=DATE},
+      </if>
+      <if test="record.sx != null">
+        sx = #{record.sx,jdbcType=VARCHAR},
+      </if>
+      <if test="record.fs != null">
+        fs = #{record.fs,jdbcType=VARCHAR},
+      </if>
+      <if test="record.fkqk != null">
+        fkqk = #{record.fkqk,jdbcType=VARCHAR},
+      </if>
+      <if test="record.createtime != null">
+        createTime = #{record.createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.createuserid != null">
+        createUserId = #{record.createuserid,jdbcType=VARCHAR},
+      </if>
+      <if test="record.updatetime != null">
+        updateTime = #{record.updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.updateuserid != null">
+        updateUserId = #{record.updateuserid,jdbcType=VARCHAR},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update pf_reportsystem
+    set id = #{record.id,jdbcType=VARCHAR},
+      zt = #{record.zt,jdbcType=VARCHAR},
+      dx = #{record.dx,jdbcType=VARCHAR},
+      dzzdm = #{record.dzzdm,jdbcType=VARCHAR},
+      qssj = #{record.qssj,jdbcType=DATE},
+      sx = #{record.sx,jdbcType=VARCHAR},
+      fs = #{record.fs,jdbcType=VARCHAR},
+      fkqk = #{record.fkqk,jdbcType=VARCHAR},
+      createTime = #{record.createtime,jdbcType=TIMESTAMP},
+      createUserId = #{record.createuserid,jdbcType=VARCHAR},
+      updateTime = #{record.updatetime,jdbcType=TIMESTAMP},
+      updateUserId = #{record.updateuserid,jdbcType=VARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.ghsc.partybuild.model.PfReportsystem">
+    update pf_reportsystem
+    <set>
+      <if test="zt != null">
+        zt = #{zt,jdbcType=VARCHAR},
+      </if>
+      <if test="dx != null">
+        dx = #{dx,jdbcType=VARCHAR},
+      </if>
+      <if test="dzzdm != null">
+        dzzdm = #{dzzdm,jdbcType=VARCHAR},
+      </if>
+      <if test="qssj != null">
+        qssj = #{qssj,jdbcType=DATE},
+      </if>
+      <if test="sx != null">
+        sx = #{sx,jdbcType=VARCHAR},
+      </if>
+      <if test="fs != null">
+        fs = #{fs,jdbcType=VARCHAR},
+      </if>
+      <if test="fkqk != null">
+        fkqk = #{fkqk,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null">
+        createTime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createuserid != null">
+        createUserId = #{createuserid,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null">
+        updateTime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateuserid != null">
+        updateUserId = #{updateuserid,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.ghsc.partybuild.model.PfReportsystem">
+    update pf_reportsystem
+    set zt = #{zt,jdbcType=VARCHAR},
+      dx = #{dx,jdbcType=VARCHAR},
+      dzzdm = #{dzzdm,jdbcType=VARCHAR},
+      qssj = #{qssj,jdbcType=DATE},
+      sx = #{sx,jdbcType=VARCHAR},
+      fs = #{fs,jdbcType=VARCHAR},
+      fkqk = #{fkqk,jdbcType=VARCHAR},
+      createTime = #{createtime,jdbcType=TIMESTAMP},
+      createUserId = #{createuserid,jdbcType=VARCHAR},
+      updateTime = #{updatetime,jdbcType=TIMESTAMP},
+      updateUserId = #{updateuserid,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 46 - 43
src/main/resources/mapping/PublicityCQuery.xml

@@ -502,25 +502,36 @@
 
 
     <select id="selectPartyDuesUserMonthList" resultType="java.util.HashMap">
-        select #{year} as YEAR,#{userCode} as USERCODE,m.MONTH,case when us.payState=1 then 1 else 0 end as ISHAV,us.BASENUMBER,us.MONEY,us.DETAILID,us.SPECIALEXPENSES,us.REMARKS,us.PARTYCODE,
-        us.payState,us.userName
-        , case when (us.payState is null or us.payState = 0) and us.MONEY > 0 and us.yearMonth <![CDATA[ <= ]]> DATE_FORMAT(NOW(), '%Y%m') and us.yearMonth >= us.partyDuesStartMonth and us.yearMonth >= us.inPartyYearMonth then true else false end as isPay
-        from (select dic.DICKEY as MONTH from cf_dictionary dic where dic.DICTYPEKEY='monthType' and dic.DICKEY <![CDATA[ <= ]]> 12) m
-        inner join (
-              select d.MONTH,d.BASENUMBER,case when d.payState=1 then d.money else p.money end as MONEY,d.DETAILID,d.specialExpenses,d.remarks,d.PARTYCODE,d.payState,us.xm as userName,
-              fb.partyDuesStartMonth,CONCAT(p.year,LPAD(d.month,2,'0')) as yearMonth,substr(dj.JRZGZZRQ,1,6) inPartyYearMonth
-              from US_PartyDues p
-              inner join US_PARTYDUES_DETAIL d on p.PARTYDUESID = d.PARTYDUESID
-              inner join vm_ryjbxx us on p.USERCODE = us.rybm
-              left join rs_ryjbxxfb fb on us.rybm = fb.rybm
-              left join ZZ_DJXX dj on us.rybm = dj.rybm
-              where 1 = 1
-              and p.YEAR = #{year}
-              and p.USERCODE = #{userCode}
-              and d.OPERATESTATE <![CDATA[ <> ]]> 'D'
-        ) us on m.MONTH = us.MONTH
-        order by m.MONTH
-
+        select
+        #{year} as YEAR
+        , usm.MONTH
+        , #{userCode} as USERCODE
+        , usm.xm as userName
+        , pdd.MONEY
+        , pdd.REMARKS
+        , pdd.payState
+        , case when usm.yearMonth >= usm.startYearMonth and usm.yearMonth <![CDATA[ <= ]]> usm.endYearMonth then 1 else 0 end as isPay
+        from (
+              select us.rybm,us.xm ,m.month,(#{year}*100+m.month) as yearMonth
+              , ifnull(us.startYearMonth,0) as startYearMonth
+              , ifnull(us.endYearMonth,999999) as endYearMonth
+              from (select dic.DICKEY as MONTH from cf_dictionary dic where dic.DICTYPEKEY='monthType') m,(
+                          select us.rybm,us.xm,ifnull(fb.partyDuesStartMonth,(cast(substr(dj.JRZGZZRQ, 1, 6) as signed))) startYearMonth,
+                          cast(substr(DATE_FORMAT(fb.archiveDate, '%Y%m%d'), 1, 6) as signed)  as endYearMonth
+                          from  vm_ryjbxx_all us
+                          inner join rs_ryjbxxfb fb on us.rybm = fb.rybm
+                          inner join ZZ_DJXX dj on us.rybm = dj.rybm
+                          where 1 = 1 and us.rybm = #{userCode}) us
+        ) usm
+        left join (
+            select (p.year*100+d.month) as yearMonth,p.usercode,d.MONEY,d.remarks,d.payState
+            from US_PartyDues p
+            inner join US_PARTYDUES_DETAIL d on p.PARTYDUESID = d.PARTYDUESID
+            where 1 = 1
+            and p.YEAR = #{year}
+            and p.USERCODE = #{userCode}
+        ) pdd on usm.yearMonth = pdd.yearMonth
+        order by usm.yearMonth
     </select>
 
     <!--删除-->
@@ -531,33 +542,25 @@
 
     <!--选择年月份未缴的党员-->
     <select id="selectPartyDuesUserListOfAddfee" resultType="java.util.HashMap">
-        select p.USERCODE,p.USERNAME,us.SZDZBDM as PARTYCODE,p.YEAR,p.MONEY,p.BASENUMBER,p.PARTYDUESID,z.DZZMC
-        from US_PartyDues p
-        inner join VM_RYJBXX us on p.USERCODE=us.RYBM
-        inner join ZZ_ZZQKXX z on us.SZDZBDM = z.DZZDM
-        left join US_PARTYDUES_DETAIL d on p.PARTYDUESID=d.PARTYDUESID and d.MONTH=#{month} and d.OPERATESTATE
-        <![CDATA[ <> ]]> 'D'
+        select pd.USERCODE,pd.USERNAME,upm.PARTYCODE,pd.YEAR,pd.MONEY,pd.BASENUMBER,pd.PARTYDUESID
+        from us_partydues pd
+        inner join us_partydues_detail pdd on pd.PARTYDUESID = pdd.PARTYDUESID
+        inner join vm_ryjbxx_all us on pd.usercode = us.rybm
+        inner join rs_ryjbxxfb fb on us.RYBM = fb.RYBM
+        inner join zz_djxx zd on us.RYBM = zd.RYBM
+        inner join us_party_month upm on pd.userCode= upm.userCode and upm.yearMonth = (pd.YEAR*100+pdd.month)
         where 1=1
-        and p.YEAR=#{year}
-        and us.SZDZBDM like concat ('',#{partyCode},'%')
-        and d.MONTH is null
+        and pd.year = #{year}
+        and pdd.month = #{month}
+        and us.RYZT in ('2', '3')
+        and ifnull(fb.partyDuesStartMonth,(cast(substr(zd.JRZGZZRQ, 1, 6) as signed))) <![CDATA[ <= ]]> #{yearMonth}
+        and (pdd.payState is null or pdd.payState = 0)
+        and upm.partyCode like concat ('',#{partyCode},'%')
+        and pd.MONEY > 0
         <if test="userName!=null and userName !=''">
-            and p.USERNAME like concat('%',#{userName},'%')
-        </if>
-        <if test="userIdList != null and userIdList.size()>0">
-            and p.USERCODE in
-            <foreach collection="userIdList" item="userId" index="index" open="(" close=")" separator=",">
-                #{userId}
-            </foreach>
-        </if>
-        <if test="removeUserList != null and removeUserList.size()>0">
-            and p.USERCODE not in
-            <foreach collection="removeUserList" item="userId" index="index" open="(" close=")" separator=",">
-                #{userId}
-            </foreach>
+            and us.xm like concat('%',#{userName},'%')
         </if>
-        order by us.XMPY,us.RYJBXXBS
-
+        order by CONVERT(us.XM USING gbk),us.rybm
     </select>
 
     <!--党组织经费使用情况-->

+ 35 - 0
src/main/resources/mapping/ReportSystemCQuery.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ghsc.partybuild.mapper.ReportSystemCQuery">
+    <select id="selectReportSystemList" resultType="com.ghsc.partybuild.vo.partyLife.ReportSystemVo">
+        select pr.id, pr.zt, pr.dx, pr.dzzdm, pr.qssj, pr.sx, pr.fs, pr.fkqk,
+        pr.createTime, pr.createUserId, pr.updateTime, pr.updateUserId,
+        zz.dzzmc, cu.username as createusername
+        from pf_reportsystem pr
+        left join zz_zzqkxx zz on pr.dzzdm = zz.dzzdm
+        left join cf_users cu on pr.CREATEUSERID = cu.USERID
+        where 1=1
+        <if test="id != null and id != ''">
+            and pr.id = #{id}
+        </if>
+        <if test="dzzdm != null and dzzdm != ''">
+            and pr.dzzdm like concat('%',#{dzzdm},'%')
+        </if>
+        <if test="startDate != null">
+            and pr.qssj <![CDATA[ >= ]]> #{startDate}
+        </if>
+        <if test="endDate != null">
+            and pr.qssj <![CDATA[ < ]]> date_add(#{endDate}, interval 1 day)
+        </if>
+        <if test="zt != null and zt != ''">
+            and pr.zt like concat('%',#{zt},'%')
+        </if>
+        <if test="dx != null and dx != ''">
+            and pr.dx like concat('%',#{dx},'%')
+        </if>
+        <if test="sx != null and sx != ''">
+            and pr.sx like concat('%',#{sx},'%')
+        </if>
+        order by pr.createTime desc
+    </select>
+</mapper>

+ 45 - 9
src/main/resources/static/app/main/app.js

@@ -2142,12 +2142,12 @@
             }
         }).state("home.partyDuesAdd", {
             url: "partyDuesAdd?dzzdm&dzzmc",
-            templateUrl: "../main/publicity/partyDues/edit.html?" + window.sysVersion,
-            controller: "partyDuesAddCtrl",
+            templateUrl: "../main/publicity/partyDues/editBase.html?" + window.sysVersion,
+            controller: "partyDuesBaseCtrl",
             resolve: {
                 load: ['$ocLazyLoad', function ($ocLazyLoad) {
 
-                    return $ocLazyLoad.load(['../main/publicity/partyDues/edit.js?' + window.sysVersion]);
+                    return $ocLazyLoad.load(['../main/publicity/partyDues/editBase.js?' + window.sysVersion]);
                 }]
             }
         }).state("home.partyDuesEdit", {
@@ -3017,15 +3017,15 @@
                     return $ocLazyLoad.load('../main/partylife/meeting/list.js?' + window.sysVersion);
                 }]
             }
-        }).state("home.pf_meetingList3", {
-            url: "pf_meetingList3",
+        }).state("home.pf_meetingTxthList", {
+            url: "pf_meetingTxthList",
             params: { "partyLifeMeetingType": 3 },
-            templateUrl: "../main/partylife/meeting/list.html?" + window.sysVersion,
-            controller: "pf_meetingListCtrl",
+            templateUrl: "../main/partylife/txth/list.html?" + window.sysVersion,
+            controller: "pf_meetingTxthListCtrl",
             resolve: {
                 load: ['$ocLazyLoad', function ($ocLazyLoad) {
-                    $ocLazyLoad.load('../main/partylife/meeting/edit.js?' + window.sysVersion);
-                    return $ocLazyLoad.load('../main/partylife/meeting/list.js?' + window.sysVersion);
+                    $ocLazyLoad.load('../main/partylife/txth/edit.js?' + window.sysVersion);
+                    return $ocLazyLoad.load('../main/partylife/txth/list.js?' + window.sysVersion);
                 }]
             }
         }).state("home.pf_meetingList4", {
@@ -3145,6 +3145,42 @@
                     return $ocLazyLoad.load('../main/partylife/scyd/detail.js?' + window.sysVersion);
                 }]
             }
+        }).state("home.pf_reportsystemList", {
+            url: "pf_reportsystemList",
+            templateUrl: "../main/partylife/reportsystem/list.html?" + window.sysVersion,
+            controller: "pf_reportsystemListCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/partylife/reportsystem/list.js?' + window.sysVersion);
+                }]
+            }
+        }).state("home.pf_reportsystemEdit", {
+            url: "pf_reportsystemEdit",
+            templateUrl: "../main/partylife/reportsystem/edit.html?" + window.sysVersion,
+            controller: "pf_reportsystemEditCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/partylife/reportsystem/edit.js?' + window.sysVersion);
+                }]
+            }
+        }).state("home.pf_reportsystemAdd", {
+            url: "pf_reportsystemAdd",
+            templateUrl: "../main/partylife/reportsystem/edit.html?" + window.sysVersion,
+            controller: "pf_reportsystemEditCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/partylife/reportsystem/edit.js?' + window.sysVersion);
+                }]
+            }
+        }).state("home.pf_reportsystemDetail", {
+            url: "pf_reportsystemDetail",
+            templateUrl: "../main/partylife/reportsystem/detail.html?" + window.sysVersion,
+            controller: "pf_reportsystemDetailCtrl",
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                    return $ocLazyLoad.load('../main/partylife/reportsystem/detail.js?' + window.sysVersion);
+                }]
+            }
         }).state("register", {
             url: "/register",
             templateUrl: "../main/partyUser/admit/register/edit.html?" + window.sysVersion,

+ 1 - 1
src/main/resources/static/app/main/partylife/meeting/detail.html

@@ -16,7 +16,7 @@
                             <th>主持人</th>
                             <td>{{dataModel.compere}}</td>
                             <th>会议地址</th>
-                            <td>{{dataModel.address}}</td>
+                            <td colspan="3">{{dataModel.address}}</td>
                         </tr>
                     </table>
                 </div>

+ 1 - 1
src/main/resources/static/app/main/partylife/meeting/edit.html

@@ -103,7 +103,7 @@
                                                    class="filled-in chk-col-red" ng-checked="it.isabsenteeism==1"
                                                    ng-click="it.isabsenteeism==1?it.isabsenteeism=0:it.isabsenteeism=1"/>
                                             <label class="checkbox_lable" style="height: 10px;"
-                                                   for="{{pageId}}_checkbox_{{$index+1}}"></label>
+                                                   for="{{pageId}}_checkbox_{{$index+1}}">{{it.isabsenteeism == 1 ? "是" : "否"}}</label>
                                         </td>
                                         <td>
                                             <textarea name="absenteeismcause" ng-model="it.absenteeismcause"

+ 4 - 0
src/main/resources/static/app/main/partylife/meeting/edit.js

@@ -129,6 +129,10 @@
                 $scope.dataModel = result.data.item;
                 $scope.dataModel.partylifemeetingtype = $scope.editParams.partyLifeMeetingType;
                 $scope.reqFileModel.selectdata.FileRefID = $scope.dataModel.partylifemeetingid;
+                if(!$scope.dataModel.partycode){
+                    $scope.dataModel.partycode = AuthUser.getUser().DPCode;
+                    $scope.dataModel.partyname = AuthUser.getUser().DPName;
+                }
             }, function (resp) {
                 $scope.showMsg('错误', '服务器错误:' + resp.data);
             });

+ 1 - 1
src/main/resources/static/app/main/partylife/meeting/list.html

@@ -33,7 +33,7 @@
                                     <div class="col-lg-2 col-md-2">
                                         <div class="form-group">
                                             <div class="form-line">
-                                                <input name="name" class="form-control" type="text"
+                                                <input name="title" class="form-control" type="text"
                                                        ng-keypress="($event.which === 13)?search():0"
                                                        ng-model="selectparams.title"
                                                        placeholder=""/>

+ 0 - 1
src/main/resources/static/app/main/partylife/meeting/list.js

@@ -166,6 +166,5 @@
         };
 
         $scope.loadData();
-        // $scope.getPartyLifeMeetingTypeList();
     });
 })(angular);

+ 34 - 0
src/main/resources/static/app/main/partylife/reportSystem/detail.html

@@ -0,0 +1,34 @@
+<titlemenu></titlemenu>
+<div class="dj-card">
+    <div class="dj-body" activate-input activate-select>
+        <div class="card">
+                <div class="dj-formtable">
+                    <table class="dj-table dj-table3">
+                        <tr>
+                            <th>所属党组织</th>
+                            <td>{{dataModel.dzzmc}}</td>
+                            <th>请求主体</th>
+                            <td>{{dataModel.zt}}</td>
+                            <th>请求对象</th>
+                            <td>{{dataModel.dx}}</td>
+                        </tr>
+                        <tr>
+                            <th>请示时间</th>
+                            <td>{{dataModel.qssj | date:'yyyy-MM-dd'}}</td>
+                            <th>请示报告事项</th>
+                            <td>{{dataModel.sx}}</td>
+                            <th>请示报告方式</th>
+                            <td>{{dataModel.fs}}</td>
+                        </tr>
+                        <tr>
+                            <th>请示报告反馈情况</th>
+                            <td colspan="5">
+                                {{dataModel.fkqk}}
+                            </td>
+                        </tr>
+                    </table>
+                </div>
+            <bsfiles ng-model="reqFileModel"/>
+        </div>
+    </div>
+</div>

+ 37 - 0
src/main/resources/static/app/main/partylife/reportSystem/detail.js

@@ -0,0 +1,37 @@
+(function ($app) {
+    $app.module('gtPartyApp').controller('pf_reportsystemDetailCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $excel, $partySelect, $filter) {
+        $scope.editParams = $bsRouterState.$params($scope);
+        $scope.pageId = $bsRouterState.tabs.activeTab;
+        $scope.dataModel = {};
+
+        $scope.getData = function () {
+            $http
+            ({
+                method: 'get', url: "../../api/partylife/reportsystem/get",
+                params: {
+                    'id': $scope.editParams.id
+                }
+            }).then(function (result) {
+                $scope.dataModel = result.data.item;
+                $scope.reqFileModel.selectdata.FileRefID = $scope.dataModel.id;
+            }, function (resp) {
+                $scope.showMsg('错误', '服务器错误:' + resp.data);
+            });
+        };
+
+        $scope.getData();
+
+        $scope.reqFileModel = {
+            selectdata: {FileRefID: '', pageindex: 1, pagesize: 10, ptotal: 0},//查询参数:FileRefID为文件关联ID
+            filetype: 71,//文件类型
+            items: [],//列表数据地址
+            readonly: true,//是否只能查看
+            title: '附件',
+            addFileButton: '上传'
+        };
+
+        $scope.pagechange = function () {
+            $bsRouterState.$closeTab($scope);
+        };
+    });
+})(angular);

+ 80 - 0
src/main/resources/static/app/main/partylife/reportSystem/edit.html

@@ -0,0 +1,80 @@
+<titlemenu></titlemenu>
+<div class="dj-card">
+    <div class="dj-body" activate-input activate-select>
+        <div class="card">
+                <form class="form-horizontal" role="form" id="editForm"
+                      name="editForm" ng-submit="save(editForm.$valid)" novalidate>
+                    <div class="dj-formtable">
+                        <table class="dj-table dj-table3">
+                            <tr>
+                                <th>所属党组织</th>
+                                <td>
+                                    <div class="input-group input-group-search"
+                                         title="选择党组织" ng-click="selectParty()">
+                                        <input name="dzzmc" type="text" ng-model="dataModel.dzzmc"
+                                               class="form-control" ng-required="true"
+                                               ng-disabled="true"/>
+                                        <span class="input-group-addon"><i class="material-icons">search</i></span>
+                                    </div>
+                                    <span ng-show="this.editForm.dzzmc.$invalid &&  this.editForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                                <th>请求主体</th>
+                                <td ng-class="{ 'has-error' : this.editForm.zt.$invalid &&  this.editForm.$submitted}">
+                                    <input type="text" class="form-control" name="zt" autocomplete="off" autoclose="true"
+                                           ng-model="dataModel.zt" ng-required="true"/>
+                                    <span ng-show="this.editForm.zt.$invalid &&  this.editForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                                <th>请求对象</th>
+                                <td ng-class="{ 'has-error' : this.editForm.dx.$invalid &&  this.editForm.$submitted}">
+                                    <input type="text" class="form-control" name="dx" autocomplete="off" autoclose="true"
+                                           ng-model="dataModel.dx" ng-required="true"/>
+                                    <span ng-show="this.editForm.dx.$invalid &&  this.editForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>请示时间</th>
+                                <td ng-class="{ 'has-error' : this.editForm.qssj.$invalid &&  this.editForm.$submitted}">
+                                    <input name="qssj" class="form-control"
+                                           autocomplete="off" autoclose="true"
+                                           data-date-format="yyyy-MM-dd" data-date-type="date"
+                                           ng-model="dataModel.qssj"
+                                           placeholder="" bs-datepicker ng-required="true"/>
+                                    <span ng-show="this.editForm.qssj.$invalid &&  this.editForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                                <th>请示报告事项</th>
+                                <td ng-class="{ 'has-error' : this.editForm.sx.$invalid &&  this.editForm.$submitted}">
+                                    <input type="text" class="form-control" name="sx" ng-required="true"
+                                           autocomplete="off" autoclose="true" ng-model="dataModel.sx"/>
+                                    <span ng-show="this.editForm.sx.$invalid &&  this.editForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                                <th>请示报告方式</th>
+                                <td ng-class="{ 'has-error' : this.editForm.fs.$invalid &&  this.editForm.$submitted}">
+                                    <input type="text" class="form-control" name="fs" ng-required="true"
+                                           autocomplete="off" autoclose="true" ng-model="dataModel.fs"/>
+                                    <span ng-show="this.editForm.fs.$invalid &&  this.editForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th style="width: 5%;">请示报告反馈情况</th>
+                                <td colspan="5">
+                                   <textarea name="fkqk" ng-model="dataModel.fkqk"
+                                             class="form-control" rows="3"></textarea>
+                                </td>
+                            </tr>
+                        </table>
+                    </div>
+                    <bsfiles ng-model="reqFileModel"/>
+                    <div class="form_foot">
+                        <button type="button" class="btn btn-default" ng-click="pagechange()">取消</button>
+                        <button type="submit" class="btn btn-primary" form="editForm">保存</button>
+                    </div>
+                </form>
+        </div>
+    </div>
+</div>

+ 89 - 0
src/main/resources/static/app/main/partylife/reportSystem/edit.js

@@ -0,0 +1,89 @@
+(function ($app) {
+    $app.module('gtPartyApp').controller('pf_reportsystemEditCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $excel, $partySelect, $filter) {
+        $scope.editParams = $bsRouterState.$params($scope);
+        $scope.pageId = $bsRouterState.tabs.activeTab;
+        $scope.dataModel = {};
+
+        $scope.reqFileModel = {
+            selectdata: {FileRefID: '', pageindex: 1, pagesize: 10, ptotal: 0},//查询参数:FileRefID为文件关联ID
+            filetype: 71,//文件类型
+            items: [],//列表数据地址
+            readonly: false,//是否只能查看
+            title: '附件',
+            addFileButton: '上传'
+        };
+
+        //选择党支部
+        $scope.partyConfig = {
+            scope: $scope,
+            selectedKey: '',
+            selectedText: '',
+            selectedData: [],
+            isMulti: false,
+            isshowxz: 1
+        };
+        $partySelect.initServer($scope.partyConfig);
+        $scope.$watch("partyConfig.selectedKey", function (newVal, oldVal) {
+            if (newVal) {
+                $scope.dataModel.dzzdm = $scope.partyConfig.selectedKey;
+                $scope.dataModel.dzzmc = $scope.partyConfig.selectedText;
+
+                $scope.partyConfig.selectedText = "";
+                $scope.partyConfig.selectedKey = "";
+            }
+        }, true);
+        $scope.selectParty = function () {
+            $partySelect.showModal();
+        };
+
+        $scope.getData = function () {
+            $http
+            ({
+                method: 'get', url: "../../api/partylife/reportsystem/get",
+                params: {
+                    'id': $scope.editParams.id
+                }
+            }).then(function (result) {
+                $scope.dataModel = result.data.item;
+                $scope.reqFileModel.selectdata.FileRefID = $scope.dataModel.id;
+                if(!$scope.dataModel.dzzdm){
+                    $scope.dataModel.dzzdm = AuthUser.getUser().DPCode;
+                    $scope.dataModel.dzzmc = AuthUser.getUser().DPName;
+                }
+            }, function (resp) {
+                $scope.showMsg('错误', '服务器错误:' + resp.data);
+            });
+        };
+
+        $scope.save = function (isflag) {
+            if (isflag) {
+
+                $loading.show();
+                $http({
+                    method: "post",
+                    url: "../../api/partylife/reportsystem/save",
+                    data: $scope.dataModel
+                }).then(function (result) {
+                    $loading.hide();
+                    if (result.data.success) {
+                        $scope.showMsg('成功', "操作成功");
+                        $scope.pagechange();
+                        //重新刷新列表
+                        $scope.$emit("tabReloadData", {name: 'pf_reportsystemListCtrl', data: 1});
+                    } else {
+                        $scope.showMsg('失败', result.data.msg);
+                    }
+                }, function (resp) {
+                    $loading.hide();
+                    $scope.showMsg('错误', '服务器错误:' + resp.data);
+                });
+            }
+        };
+
+        $scope.pagechange = function () {
+            $bsRouterState.$closeTab($scope);
+        };
+
+        $scope.getData();
+    });
+})(angular);

+ 216 - 0
src/main/resources/static/app/main/partylife/reportSystem/list.html

@@ -0,0 +1,216 @@
+<titlemenu></titlemenu>
+<div class="dj-list">
+    <div class="dj-list-body">
+        <div party-tree data-selectdzzdm="treeparams.selectdzzdm" data-selectdzzmc="treeparams.selectdzzmc"
+             data-defaultselected="treeparams.defaultselected" data-isunfold="treeparams.isunfold"></div>
+        <div class="dj-list-content">
+            <div class="card">
+                <div activate-input activate-select class="header search-header">
+                    <div fold-partytree data-isunfold="treeparams.isunfold"></div>
+                    <div class="search-param-panel">
+                        <div class="search-input">
+                            <form class="form-horizontal">
+                                <div class="row clearfix form-inline">
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>当前选中组织</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <div class="input-group input-group-search">
+                                                    <input name="selectdzzmc" type="text" style="min-width: 90px"
+                                                           ng-model="treeparams.selectdzzmc" class="form-control"
+                                                           ng-disabled="true"/>
+                                                    <span class="input-group-addon"
+                                                          ng-click="setisunfold()">选择</span>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>请示时间</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <input name="startDate" class="form-control fm-ct-first"
+                                                       autocomplete="off"
+                                                       autoclose="true"
+                                                       data-date-format="yyyy-MM-dd" data-date-type="string"
+                                                       ng-model="selectparams.startDate"
+                                                       ng-change="search()"
+                                                       placeholder="" bs-datepicker/>
+                                                <input name="endDate" class="form-control fm-ct-last"
+                                                       autocomplete="off"
+                                                       autoclose="true"
+                                                       data-date-format="yyyy-MM-dd" data-date-type="string"
+                                                       ng-model="selectparams.endDate"
+                                                       ng-change="search()"
+                                                       placeholder="" bs-datepicker/>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>请示报告主体</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <input name="zt" class="form-control" type="text"
+                                                       ng-keypress="($event.which === 13)?search():0"
+                                                       ng-model="selectparams.zt"
+                                                       placeholder=""/>
+
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="row clearfix form-inline" ng-show="isShow">
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>请示报告对象</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <input name="dx" class="form-control" type="text"
+                                                       ng-keypress="($event.which === 13)?search():0"
+                                                       ng-model="selectparams.dx"
+                                                       placeholder=""/>
+
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>请示报告事项</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <input name="sx" class="form-control" type="text"
+                                                       ng-keypress="($event.which === 13)?search():0"
+                                                       ng-model="selectparams.sx"
+                                                       placeholder=""/>
+
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </form>
+                        </div>
+                        <div class="search-btn" style="margin-right: 20px;">
+                            <div style="min-width: 13em">
+                                <span class="moreSpan" ng-click="isShowClick()" style='padding-right:1em;cursor:pointer;'>
+                                    {{moreTxt}}<i class="material-icons" style="position: relative;top:7px;">{{isShow ? 'expand_less' : 'expand_more'}}</i></span>
+                                <button class="btn btn-default1"
+                                        ng-click="search()">查询
+                                </button>
+                                <button class="btn btn-default1"
+                                        ng-click="reset()">重置
+                                </button>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="search-btn" style="margin-right: 20px;">
+                        <div style="float: right">
+                            <button class="btn btn-default1"
+                                    ng-click="add()">新增
+                            </button>
+                            <button class="btn btn-default1"
+                                    ng-click="delete()">删除
+                            </button>
+                            <button class="btn btn-default1"
+                                    ng-click="export()">导出
+                            </button>
+                        </div>
+                    </div>
+                </div>
+                <div class="body">
+                    <div class="zero-list-table-panel">
+                        <div class="zero-source-table-div">
+                            <table class="table table-bordered table-striped table-hover js-basic-example dataTable text-nowrap">
+                                <thead>
+                                <tr>
+                                    <th>
+                                        <input type="checkbox" id="{{pageId}}_md_checkbox_all"
+                                               class="filled-in chk-col-red" ng-checked="isAll==true"
+                                               ng-click="selectAll()"/>
+                                        <label class="checkbox_lable" style="height: 10px;"
+                                               for="{{pageId}}_md_checkbox_all"></label></th>
+                                    <th>序号</th>
+                                    <th>所属党组织</th>
+                                    <th>请示时间</th>
+                                    <th>请示报告主体</th>
+                                    <th>请示报告对象</th>
+                                    <th>请示报告事项</th>
+                                    <th>请示报告方式</th>
+                                    <th>请示报告反馈情况</th>
+                                    <th>创建人</th>
+                                    <th>创建时间</th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                <tr ng-repeat="it in dataList">
+                                    <td class="text-center">
+                                        <input type="checkbox" id="{{pageId}}_md_checkbox_{{$index+1}}"
+                                               class="filled-in chk-col-red" ng-checked="it.checked==1"
+                                               ng-click="it.checked==1?it.checked=0:it.checked=1"/>
+                                        <label class="checkbox_lable" style="top:6px;"
+                                               for="{{pageId}}_md_checkbox_{{$index+1}}"></label>
+                                    </td>
+                                    <td scope="row" class="text-center">
+                                        {{selectparams.pagesize*(selectparams.pageindex-1)+$index+1}}
+                                    </td>
+                                    <td>{{it.dzzmc}}</td>
+                                    <td>{{it.qssj | date:'yyyy-MM-dd'}}</td>
+                                    <td>{{it.zt}}</td>
+                                    <td>{{it.dx}}</td>
+                                    <td>{{it.sx}}</td>
+                                    <td>{{it.fs}}</td>
+                                    <td style="min-width: 150px !important;word-wrap: break-word;word-break: break-all;white-space: normal;">{{it.fkqk}}</td>
+                                    <td>{{it.createusername}}</td>
+                                    <td>{{it.createtime | date:'yyyy-MM-dd HH:mm:ss'}}</td>
+                                </tr>
+                                <tr ng-if="dataList.length<=0">
+                                    <td colspan="15" style="text-align:center">暂无数据</td>
+                                </tr>
+                                </tbody>
+                            </table>
+                        </div>
+                        <div class="zero-target-table-div">
+                            <table class="table table-bordered table-striped table-hover js-basic-example dataTable text-nowrap">
+                                <thead>
+                                <tr>
+                                    <th>操作</th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                <tr ng-repeat="it in dataList" zero-table-height>
+                                    <td>
+                                        <button class="btn td-btn bg-light-green waves-effect"
+                                                ng-click="show(it.id)"
+                                                title="查看">
+                                            查看
+                                        </button>
+                                        <button
+                                                role-permission-code="brandMgList.btnEdit"
+                                                class="btn td-btn bg-light-green waves-effect"
+                                                ng-click="edit(it.id)"
+                                                title="修改">
+                                            修改
+                                        </button>
+                                    </td>
+                                </tr>
+                                <tr ng-if="pageInfo.ptotal==0">
+                                    <td colspan="1" style="text-align:center">无</td>
+                                </tr>
+                                </tbody>
+                            </table>
+                        </div>
+                    </div>
+                    <pagination data-pageindex="selectparams.pageindex" data-pagesize="selectparams.pagesize"
+                                data-ptotal="pageInfo.ptotal"></pagination>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 173 - 0
src/main/resources/static/app/main/partylife/reportSystem/list.js

@@ -0,0 +1,173 @@
+(function ($app) {
+    $app.module('gtPartyApp').controller('pf_reportsystemListCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $excel, $partySelect, $filter) {
+        $scope.loginUserId = AuthUser.getUser().Id;
+        $scope.isShow = false;
+        $scope.moreTxt = "更多";
+        $scope.isAll = false;
+        $scope.tabNameAdd = "home.pf_reportsystemAdd";
+        $scope.tabNameEdit = "home.pf_reportsystemEdit";
+        $scope.tabNameDetail = "home.pf_reportsystemDetail";
+
+        //定义数据集合
+        $scope.dataList = []; //列表数据
+        //组织树参数
+        $scope.treeparams = {
+            isunfold: false,//组织结构树展开收缩
+            selectdzzdm: "",
+            selectdzzmc: "",
+            defaultselected: $state.params.dzzdm
+        };
+        $scope.resetTreeparams = angular.copy($scope.treeparams);
+
+        //查询条件
+        $scope.selectparams = {
+            pageindex: 1,
+            pagesize: 10,
+            partyLifeMeetingType: $scope.partyLifeMeetingType,
+            dzzdm: '',
+            startDate: null,
+            endDate: null,
+            zt: '',
+            dx: '',
+            sx: ''
+        };
+        $scope.resetSelectparams = angular.copy($scope.selectparams);
+        $scope.pageInfo = {ptotal: 0};
+
+        $scope.$on('tabChildReloadData', function (event, data) {
+            if (data.name == 'pf_reportsystemListCtrl') {
+                $scope.loadData();
+            }
+        });
+
+        //加载列表数据
+        $scope.loadData = function () {
+            $http
+            ({
+                method: 'get', url: '../../api/partylife/reportsystem/getList', params: $scope.selectparams
+            }).then(function (result) {
+                $scope.dataList = result.data.item.list;
+                $scope.pageInfo.ptotal = result.data.item.total;
+            }, function (res) {
+                $scope.showMsg('错误', '服务器错误');
+            });
+        };
+
+        $scope.search = function () {
+            $scope.loadData();
+        };
+
+        $scope.selectAll = function () {
+            $scope.isAll = !$scope.isAll;
+            angular.forEach($scope.dataList, function (item) {
+                item.checked = $scope.isAll ? 1 : 0;
+            });
+        };
+
+        //查看
+        $scope.show = function (id) {
+            $bsRouterState.$closeTabName($scope.tabNameDetail);
+            $timeout(function () {
+                $bsRouterState.go($scope.tabNameDetail, {
+                    id: id
+                });
+            }, 100);
+        };
+
+        //新增
+        $scope.add = function () {
+            $bsRouterState.$closeTabName($scope.tabNameAdd);
+            $timeout(function () {
+                $bsRouterState.go($scope.tabNameAdd, {
+                    id: ''
+                });
+            }, 100);
+        };
+
+        //修改
+        $scope.edit = function (id) {
+            $bsRouterState.$closeTabName($scope.tabNameEdit);
+            $timeout(function () {
+                $bsRouterState.go($scope.tabNameEdit, {
+                    id: id
+                });
+            }, 100);
+        };
+
+        $scope.export = function () {
+            var params = "?1=1";
+            for (var p in $scope.selectparams) {
+                if ($scope.selectparams[p] !== '' && $scope.selectparams[p] !== null)
+                    params += ("&" + p + "=" + encodeURI($scope.selectparams[p]));
+            }
+            window.open('../../api/partylife/reportsystem/export' + params);
+        };
+
+        $scope.delete = function (id) {
+            var ids = [];
+            if (id)
+                ids.push(id);
+            else
+                ids = $scope.dataList.filter(it => it.checked == true).map(it => it.id);
+
+            if (ids.length == 0) {
+                $scope.showMsg('消息', "请选择需要删除的数据");
+                return false;
+            }
+
+            if (confirm("确定删除?")) {
+                $loading.show();
+                $http({
+                    method: "post",
+                    url: "../../api/partylife/reportsystem/delete",
+                    data: {
+                        ids: JSON.stringify(ids)
+                    }
+                }).then(function (result) {
+                    $loading.hide();
+                    if (result.data.success) {
+                        $scope.showMsg('成功', result.data.msg);
+                        //重新刷新列表
+                        $scope.loadData();
+                    } else {
+                        $scope.showMsg('失败', result.data.msg);
+                    }
+                }, function (resp) {
+                    $scope.showMsg('错误', '服务器错误');
+                });
+            }
+        };
+
+        $scope.$watch("selectparams.pageindex", function (newVal, oldVal) {
+            if ($scope.pageInfo.ptotal > 0) {
+                $scope.loadData();
+            }
+        });
+        $scope.$watch("treeparams.selectdzzdm", function (newVal, oldVal) {
+            if (newVal != "") {
+                if ($scope.treeparams.defaultselected != "" && $scope.treeparams.defaultselected != null &&
+                    $scope.treeparams.defaultselected != $scope.treeparams.selectdzzdm)
+                    return;
+
+                $scope.selectparams.dzzdm = $scope.treeparams.selectdzzdm;
+
+                $scope.loadData();
+            }
+        });
+        $scope.setisunfold = function () {
+            $scope.treeparams.isunfold = !$scope.treeparams.isunfold;
+            $scope.$emit('menudatas.toggle', !$scope.treeparams.isunfold);
+        };
+        $scope.isShowClick = function () {
+            $scope.isShow = !$scope.isShow;
+            $scope.moreTxt = $scope.isShow ? "收起" : "更多";
+        };
+        $scope.reset = function () {
+            $scope.selectparams = angular.copy($scope.resetSelectparams);
+            $scope.treeparams = angular.copy($scope.resetTreeparams);
+            $scope.loadData();
+        };
+
+        $scope.loadData();
+    });
+})(angular);

+ 1 - 1
src/main/resources/static/app/main/partylife/scyd/detail.html

@@ -16,7 +16,7 @@
                             <th>主持人</th>
                             <td>{{dataModel.compere}}</td>
                             <th>会议地址</th>
-                            <td>{{dataModel.address}}</td>
+                            <td colspan="3">{{dataModel.address}}</td>
                         </tr>
                         <tr>
                             <th>“三重一大”类别</th>

+ 1 - 1
src/main/resources/static/app/main/partylife/scyd/edit.html

@@ -114,7 +114,7 @@
                                                    class="filled-in chk-col-red" ng-checked="it.isabsenteeism==1"
                                                    ng-click="it.isabsenteeism==1?it.isabsenteeism=0:it.isabsenteeism=1"/>
                                             <label class="checkbox_lable" style="height: 10px;"
-                                                   for="{{pageId}}_checkbox_{{$index+1}}"></label>
+                                            for="{{pageId}}_checkbox_{{$index+1}}">{{it.isabsenteeism == 1 ? "是" : "否"}}</label>
                                         </td>
                                         <td>
                                             <textarea name="absenteeismcause" ng-model="it.absenteeismcause"

+ 4 - 0
src/main/resources/static/app/main/partylife/scyd/edit.js

@@ -143,6 +143,10 @@
                 $scope.dataModel = result.data.item;
                 $scope.dataModel.partylifemeetingtype = $scope.editParams.partyLifeMeetingType;
                 $scope.reqFileModel.selectdata.FileRefID = $scope.dataModel.partylifemeetingid;
+                if(!$scope.dataModel.partycode){
+                    $scope.dataModel.partycode = AuthUser.getUser().DPCode;
+                    $scope.dataModel.partyname = AuthUser.getUser().DPName;
+                }
 
                 $scope.getUserAddressList();
                 $scope.loadScydTypes();

+ 1 - 1
src/main/resources/static/app/main/partylife/scyd/list.html

@@ -33,7 +33,7 @@
                                     <div class="col-lg-2 col-md-2">
                                         <div class="form-group">
                                             <div class="form-line">
-                                                <input name="name" class="form-control" type="text"
+                                                <input name="title" class="form-control" type="text"
                                                        ng-keypress="($event.which === 13)?search():0"
                                                        ng-model="selectparams.title"
                                                        placeholder=""/>

+ 68 - 0
src/main/resources/static/app/main/partylife/txth/edit.html

@@ -0,0 +1,68 @@
+<div class="modal" tabindex="-1" role="dialog">
+    <div class="modal-dialog" style="width: 850px;">
+        <div class="card">
+            <div class="header" dragable-header>
+                <button type="button" class="close" ng-click="$hide()">&times;</button>
+                <h4 class="modal-title">{{editParams.title}}</h4>
+            </div>
+            <div activate-input activate-select class="body">
+                <form class="form-horizontal" role="form" id="editForm"
+                      name="editForm" ng-submit="save(editForm.$valid)" novalidate>
+                    <div class="dj-formtable">
+                        <table class="dj-table">
+                            <tr>
+                                <th>所属党组织</th>
+                                <td colspan="3">
+                                    <div class="input-group input-group-search"
+                                         title="选择党组织" ng-click="selectParty()">
+                                        <input name="partyname" type="text" ng-model="dataModel.partyname"
+                                               class="form-control" ng-required="true"
+                                               ng-disabled="true"/>
+                                        <span class="input-group-addon"><i class="material-icons">search</i></span>
+                                    </div>
+                                    <span ng-show="this.editForm.partyname.$invalid &&  this.editForm.$submitted"
+                                          class="error">必填.</span>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>会议主题</th>
+                                <td colspan="3" ng-class="{ 'has-error' : this.editForm.title.$invalid &&  this.editForm.$submitted}">
+                                    <input type="text" class="form-control" name="title"
+                                           ng-model="dataModel.title" ng-required="true"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>会议时间</th>
+                                <td ng-class="{ 'has-error' : this.editForm.meetingdate.$invalid &&  this.editForm.$submitted}">
+                                    <input name="meetingdate" class="form-control"
+                                           autocomplete="off"
+                                           autoclose="true"
+                                           data-date-format="yyyy-MM-dd" data-date-type="date"
+                                           ng-model="dataModel.meetingdate"
+                                           placeholder="" bs-datepicker ng-required="true"/>
+                                </td>
+                                <th>会议参加人数</th>
+                                <td ng-class="{ 'has-error' : this.editForm.usercount.$invalid &&  this.editForm.$submitted}">
+                                    <input type="number" class="form-control" name="usercount"
+                                           ng-model="dataModel.usercount" min="0" ng-required="true"/>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th>会议地址</th>
+                                <td colspan="3" ng-class="{ 'has-error' : this.editForm.address.$invalid &&  this.editForm.$submitted}">
+                                    <input type="text" class="form-control" name="address"
+                                           ng-model="dataModel.address" ng-required="true"/>
+                                </td>
+                            </tr>
+                        </table>
+                    </div>
+                    <bsfiles ng-model="reqFileModel"/>
+                    <div class="form_foot">
+                        <button type="button" class="btn btn-default" ng-click="$hide()">取消</button>
+                        <button type="submit" class="btn btn-primary" form="editForm">保存</button>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+</div>

+ 87 - 0
src/main/resources/static/app/main/partylife/txth/edit.js

@@ -0,0 +1,87 @@
+var pfMeetingTxth_editCtrl = function ($scope, $http, $alert, $loading,$partySelect,AuthUser) {
+    $scope.parentLoad = pfMeetingTxth_editModal.parentLoad;
+    $scope.editParams = pfMeetingTxth_editModal.params;
+    $scope.partyLifeMeetingType = $scope.editParams.partyLifeMeetingType;
+    $scope.dataModel = {};
+    //选择党支部
+    $scope.partyConfig = {
+        scope: $scope,
+        selectedKey: '',
+        selectedText: '',
+        selectedData: [],
+        isMulti: false,
+        isshowxz: 1
+    };
+    $partySelect.initServer($scope.partyConfig);
+    $scope.$watch("partyConfig.selectedKey", function (newVal, oldVal) {
+        if (newVal) {
+            $scope.dataModel.partycode = $scope.partyConfig.selectedKey;
+            $scope.dataModel.partyname = $scope.partyConfig.selectedText;
+
+            $scope.partyConfig.selectedText = "";
+            $scope.partyConfig.selectedKey = "";
+        }
+    }, true);
+    $scope.selectParty = function () {
+        $partySelect.showModal();
+    };
+
+    $scope.reqFileModel = {
+        selectdata: {FileRefID: '', pageindex: 1, pagesize: 10, ptotal: 0},//查询参数:FileRefID为文件关联ID
+        filetype: 71,//文件类型
+        items: [],//列表数据地址
+        readonly: false,//是否只能查看
+        title: '附件',
+        addFileButton: '上传'
+    };
+
+    $scope.getData = function () {
+        $http
+        ({
+            method: 'get', url: "../../api/partylife/meeting/get",
+            params: {
+                'id': $scope.editParams.id
+            }
+        }).then(function (result) {
+            $scope.dataModel = result.data.item;
+            $scope.dataModel.partylifemeetingtype = $scope.partyLifeMeetingType;
+            $scope.reqFileModel.selectdata.FileRefID = $scope.dataModel.partylifemeetingid;
+            if(!$scope.dataModel.partycode){
+                $scope.dataModel.partycode = AuthUser.getUser().DPCode;
+                $scope.dataModel.partyname = AuthUser.getUser().DPName;
+            }
+        }, function (resp) {
+            $scope.showMsg('错误', '服务器错误:' + resp.data);
+        });
+    };
+
+    $scope.save = function (isflag) {
+        if (isflag) {
+            $loading.show();
+            $http({
+                method: "post",
+                url: "../../api/partylife/meeting/save",
+                data: $scope.dataModel
+            }).then(function (result) {
+                $loading.hide();
+                if (result.data.success) {
+                    $scope.showMsg('成功', "操作成功");
+                    //重新刷新列表
+                    $scope.parentLoad();
+                    $scope.$hide();
+                } else {
+                    $scope.showMsg('失败', result.data.msg);
+                }
+            }, function (resp) {
+                $loading.hide();
+                $scope.showMsg('错误', '服务器错误:' + resp.data);
+            });
+        }
+    };
+
+    $scope.getData();
+
+};
+
+//定义模态框
+var pfMeetingTxth_editModal;

+ 172 - 0
src/main/resources/static/app/main/partylife/txth/list.html

@@ -0,0 +1,172 @@
+<titlemenu></titlemenu>
+<div class="dj-list">
+    <div class="dj-list-body">
+        <div party-tree data-selectdzzdm="treeparams.selectdzzdm" data-selectdzzmc="treeparams.selectdzzmc"
+             data-defaultselected="treeparams.defaultselected" data-isunfold="treeparams.isunfold"></div>
+        <div class="dj-list-content">
+            <div class="card">
+                <div activate-input activate-select class="header search-header">
+                    <div fold-partytree data-isunfold="treeparams.isunfold"></div>
+                    <div class="search-param-panel">
+                        <div class="search-input">
+                            <form class="form-horizontal">
+                                <div class="row clearfix form-inline">
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>当前选中组织</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <div class="input-group input-group-search">
+                                                    <input name="selectdzzmc" type="text" style="min-width: 90px"
+                                                           ng-model="treeparams.selectdzzmc" class="form-control"
+                                                           ng-disabled="true"/>
+                                                    <span class="input-group-addon"
+                                                          ng-click="setisunfold()">选择</span>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>会议时间</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <input name="startDate" class="form-control fm-ct-first"
+                                                       autocomplete="off"
+                                                       autoclose="true"
+                                                       data-date-format="yyyy-MM-dd" data-date-type="string"
+                                                       ng-model="selectparams.startDate"
+                                                       ng-change="search()"
+                                                       placeholder="" bs-datepicker/>
+                                                <input name="endDate" class="form-control fm-ct-last"
+                                                       autocomplete="off"
+                                                       autoclose="true"
+                                                       data-date-format="yyyy-MM-dd" data-date-type="string"
+                                                       ng-model="selectparams.endDate"
+                                                       ng-change="search()"
+                                                       placeholder="" bs-datepicker/>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2 dj-label">
+                                        <label>会议主题</label>
+                                    </div>
+                                    <div class="col-lg-2 col-md-2">
+                                        <div class="form-group">
+                                            <div class="form-line">
+                                                <input name="name" class="form-control" type="text"
+                                                       ng-keypress="($event.which === 13)?search():0"
+                                                       ng-model="selectparams.title"
+                                                       placeholder=""/>
+
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </form>
+                        </div>
+                        <div class="search-btn" style="margin-right: 20px;">
+                            <div style="min-width: 13em">
+                                <button class="btn btn-default1"
+                                        ng-click="search()">查询
+                                </button>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="search-btn" style="margin-right: 20px;">
+                        <div style="float: right">
+                            <button class="btn btn-default1"
+                                    ng-click="edit()">新增
+                            </button>
+                            <button class="btn btn-default1"
+                                    ng-click="export()">导出
+                            </button>
+                        </div>
+                    </div>
+                </div>
+                <div class="body">
+                    <div class="zero-list-table-panel">
+                        <div class="zero-source-table-div">
+                            <table class="table table-bordered table-striped table-hover js-basic-example dataTable text-nowrap">
+                                <thead>
+                                <tr>
+                                    <th>
+                                        <input type="checkbox" id="{{pageId}}_md_checkbox_all"
+                                               class="filled-in chk-col-red" ng-checked="isAll==true"
+                                               ng-click="selectAll()"/>
+                                        <label class="checkbox_lable" style="height: 10px;"
+                                               for="{{pageId}}_md_checkbox_all"></label>
+                                    </th>
+                                    <th>序号</th>
+                                    <th>所属党组织</th>
+                                    <th>会议主题</th>
+                                    <th>会议时间</th>
+                                    <th>会议参加人数</th>
+                                    <th>会议地点</th>
+                                    <th>创建人</th>
+                                    <th>创建时间</th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                <tr ng-repeat="it in dataList">
+                                    <td class="text-center">
+                                        <input type="checkbox" id="{{pageId}}_md_checkbox_{{$index+1}}"
+                                               class="filled-in chk-col-red" ng-checked="it.checked==1"
+                                               ng-click="it.checked==1?it.checked=0:it.checked=1"/>
+                                        <label class="checkbox_lable" style="top:6px;"
+                                               for="{{pageId}}_md_checkbox_{{$index+1}}"></label>
+                                    </td>
+                                    <td scope="row" class="text-center">
+                                        {{selectparams.pagesize*(selectparams.pageindex-1)+$index+1}}
+                                    </td>
+                                    <td>{{it.partyname}}</td>
+                                    <td>{{it.title}}</td>
+                                    <td>{{it.meetingdate | date:'yyyy-MM-dd'}}</td>
+                                    <td>{{it.usercount}}</td>
+                                    <td>{{it.address}}</td>
+                                    <td>{{it.createusername}}</td>
+                                    <td>{{it.createtime | date:'yyyy-MM-dd HH:mm:ss'}}</td>
+                                </tr>
+                                <tr ng-if="dataList.length<=0">
+                                    <td colspan="15" style="text-align:center">暂无数据</td>
+                                </tr>
+                                </tbody>
+                            </table>
+                        </div>
+                        <div class="zero-target-table-div">
+                            <table class="table table-bordered table-striped table-hover js-basic-example dataTable text-nowrap">
+                                <thead>
+                                <tr>
+                                    <th>操作</th>
+                                </tr>
+                                </thead>
+                                <tbody>
+                                <tr ng-repeat="it in dataList" zero-table-height>
+                                    <td>
+                                        <button class="btn td-btn bg-light-green waves-effect"
+                                                ng-click="edit(it.partylifemeetingid)"
+                                                title="修改">
+                                            修改
+                                        </button>
+                                        <button ng-if="!it.isProcess" class="btn td-btn bg-pink waves-effect"
+                                                ng-click="delete(it.partylifemeetingid)" title="删除">
+                                            删除
+                                        </button>
+                                    </td>
+                                </tr>
+                                <tr ng-if="pageInfo.ptotal==0">
+                                    <td colspan="1" style="text-align:center">无</td>
+                                </tr>
+                                </tbody>
+                            </table>
+                        </div>
+                    </div>
+                    <pagination data-pageindex="selectparams.pageindex" data-pagesize="selectparams.pagesize"
+                                data-ptotal="pageInfo.ptotal"></pagination>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 165 - 0
src/main/resources/static/app/main/partylife/txth/list.js

@@ -0,0 +1,165 @@
+(function ($app) {
+    $app.module('gtPartyApp').controller('pf_meetingTxthListCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $bsRouterState, AuthUser, $timeout, $excel, $partySelect, $filter) {
+        $state.params = $bsRouterState.$params($scope);
+        $scope.loginUserId = AuthUser.getUser().Id;
+        $scope.isShow = false;
+        $scope.moreTxt = "更多";
+        $scope.title = "";
+        $scope.partyLifeMeetingType = $state.params.partyLifeMeetingType;
+        $scope.isAll = false;
+        $scope.pageId = "pf_meetingTxthList";
+
+        $scope.dataList = []; //列表数据
+        $scope.treeparams = {
+            isunfold: false,//组织结构树展开收缩
+            selectdzzdm: "",
+            selectdzzmc: "",
+            defaultselected: $state.params.dzzdm
+        };
+        $scope.selectparams = {
+            pageindex: 1,
+            pagesize: 10,
+            partyLifeMeetingType: $scope.partyLifeMeetingType,
+            dzzdm: '',
+            title: '',
+            startDate: null,
+            endDate: null
+        };
+        $scope.pageInfo = {ptotal: 0};
+
+        $scope.getPartyLifeMeetingTypeList = function () {
+            $http({
+                method: 'get',
+                url: '../../api/dictionary/getDictionaryListByDicTypeKey',
+                params: {
+                    dicTypeKey: 'PartyLifeMeetingType'
+                }
+            }).then(function (result) {
+                $scope.title = result.data.filter(it => it.dickey == $scope.partyLifeMeetingType)[0].dicvalue;
+            });
+        };
+
+        //加载列表数据
+        $scope.loadData = function () {
+            $http
+            ({
+                method: 'get', url: '../../api/partylife/meeting/getList', params: $scope.selectparams
+            }).then(function (result) {
+                $scope.dataList = result.data.item.list;
+                $scope.pageInfo.ptotal = result.data.item.total;
+            }, function (res) {
+                $scope.showMsg('错误', '服务器错误');
+            });
+        };
+
+        $scope.search = function () {
+            $scope.loadData();
+        };
+
+        $scope.selectAll = function () {
+            $scope.isAll = !$scope.isAll;
+            angular.forEach($scope.dataList, function (item) {
+                item.checked = $scope.isAll ? 1 : 0;
+            });
+        };
+
+        //定义模态框
+        pfMeetingTxth_editCtrl.$inject = ['$scope', '$http', '$alert', '$loading','$partySelect','AuthUser'];
+        pfMeetingTxth_editModal = $modal({
+            resolve: {
+                load: ['$ocLazyLoad', function ($ocLazyLoad) {
+                }]
+            },
+            scope: $scope,
+            controller: pfMeetingTxth_editCtrl,
+            templateUrl: '../main/partylife/txth/edit.html',
+            show: false,
+            animation: 'am-fade-and-slide-top'
+        });
+        $scope.edit = function (id) {
+            pfMeetingTxth_editModal.params = {
+                id: id,
+                partyLifeMeetingType: $scope.partyLifeMeetingType,
+                title: (id ? "修改" : "新增") + $scope.title
+            };
+            pfMeetingTxth_editModal.parentLoad = $scope.loadData;
+            pfMeetingTxth_editModal.$promise.then(pfMeetingTxth_editModal.show);
+        };
+
+        $scope.export = function () {
+            var params = "?1=1";
+            for (var p in $scope.selectparams) {
+                if ($scope.selectparams[p] !== '' && $scope.selectparams[p] !== null)
+                    params += ("&" + p + "=" + encodeURI($scope.selectparams[p]));
+            }
+            window.open('../../api/partylife/meeting/exportTxth' + params);
+        };
+
+        $scope.delete = function (id) {
+            var ids = [];
+            if (id)
+                ids.push(id);
+            else
+                ids = $scope.dataList.filter(it => it.checked == true).map(it => it.partylifemeetingid);
+
+            if (ids.length == 0) {
+                $scope.showMsg('消息', "请选择需要删除的数据");
+                return false;
+            }
+
+            if (confirm("确定删除?")) {
+                $loading.show();
+                $http({
+                    method: "post",
+                    url: "../../api/partylife/meeting/delete",
+                    data: {
+                        ids: JSON.stringify(ids)
+                    }
+                }).then(function (result) {
+                    $loading.hide();
+                    if (result.data.success) {
+                        $scope.showMsg('成功', result.data.msg);
+                        //重新刷新列表
+                        $scope.loadData();
+                    } else {
+                        $scope.showMsg('失败', result.data.msg);
+                    }
+                }, function (resp) {
+                    $scope.showMsg('错误', '服务器错误');
+                });
+            }
+        };
+
+        $scope.$watch("selectparams.pageindex", function (newVal, oldVal) {
+            if ($scope.pageInfo.ptotal > 0) {
+                $scope.loadData();
+            }
+        });
+        $scope.$watch("treeparams.selectdzzdm", function (newVal, oldVal) {
+            if (newVal != "") {
+                if ($scope.treeparams.defaultselected != "" && $scope.treeparams.defaultselected != null &&
+                    $scope.treeparams.defaultselected != $scope.treeparams.selectdzzdm)
+                    return;
+
+                $scope.selectparams.dzzdm = $scope.treeparams.selectdzzdm;
+
+                $scope.loadData();
+            }
+        });
+        $scope.setisunfold = function () {
+            $scope.treeparams.isunfold = !$scope.treeparams.isunfold;
+            $scope.$emit('menudatas.toggle', !$scope.treeparams.isunfold);
+        };
+        $scope.isShowClick = function () {
+            $scope.isShow = !$scope.isShow;
+            if ($scope.moreTxt == "更多") {
+                $scope.moreTxt = "收起";
+            } else if ($scope.moreTxt == "收起") {
+                $scope.moreTxt = "更多";
+            }
+        };
+
+        $scope.loadData();
+        $scope.getPartyLifeMeetingTypeList();
+    });
+})(angular);

+ 6 - 6
src/main/resources/static/app/main/publicity/partyDues/duesMulti.html

@@ -58,9 +58,9 @@
                         <tr>
                             <th class="text-center" style="width: 80px;">序号</th>
                             <th style="width: 200px;">党员姓名</th>
-                            <th style="width: 200px;">计算基数</th>
+                            <!--<th style="width: 200px;">计算基数</th>-->
                             <th style="width: 200px;">交纳金额(元/月)</th>
-                            <th style="width: 200px;">特殊党费(元)</th>
+                            <!--<th style="width: 200px;">特殊党费(元)</th>-->
                             <th style="width: 100px;">操作</th>
                         </tr>
                         </thead>
@@ -70,19 +70,19 @@
                             <td class="text-center">
                                 {{it.USERNAME}}
                             </td>
-                            <td class="text-center">
+                            <!--<td class="text-center">
                                 {{it.BASENUMBER}}
-                            </td>
+                            </td>-->
                             <td class="text-center"
                                 ng-class="{ 'has-error' : invalidFee($index,editForm,'MONEY') &&  this.editForm.$submitted}">
                                 <input type="number" autocomplete="off" class="form-control" name="MONEY_{{$index}}"
                                        ng-model="it.MONEY" ng-required="true" style="width: 150px;display: inline;"/>
                             </td>
-                            <td class="text-center"
+                            <!--<td class="text-center"
                                 ng-class="{ 'has-error' : invalidFee($index,editForm,'SPECIALEXPENSES') &&  this.editForm.$submitted}">
                                 <input type="number" autocomplete="off" class="form-control" name="SPECIALEXPENSES_{{$index}}" ng-pattern="/^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/"
                                        ng-model="it.SPECIALEXPENSES" style="width: 150px;display: inline;"/>
-                            </td>
+                            </td>-->
                             <td class="text-center">
                                 <button class="btn td-btn bg-pink waves-effect"
                                         ng-click="delUser($index)" title="删除">

+ 23 - 47
src/main/resources/static/app/main/publicity/partyDues/duesMulti.js

@@ -19,7 +19,7 @@
             title: '人员选择',
             isMulti: true,
             selectData: {userName: '党员姓名'},
-            columns: {USERNAME: '党员姓名', BASENUMBER: '缴纳基数', MONEY: '缴纳金额(元/月)'},
+            columns: {USERNAME: '党员姓名', MONEY: '交纳金额(元/月)'},
             selectLabelKey: 'USERNAME',
             selectValuekey: 'USERCODE',
             selectedValueData: '',
@@ -28,52 +28,28 @@
             selectParams: {
                 year: $scope.dataModel.year,
                 partyCode: $scope.dataModel.partycode,
-                removeUserId: '',
                 month: $scope.dataModel.month
-            }
-        };
-        $scope.$watch('selectUserlist.selectedValueData', function (newVal) {
-            if (newVal != '' && newVal != undefined) {
-                $http({
-                    method: 'get',
-                    url: '../../api/publicity/getPartyDuesUserListOfAddfee',
-                    params: {
-                        userIds: newVal,
-                        pageindex: 1,
-                        pagesize: 10000,
-                        year: $scope.dataModel.year,
-                        partyCode: $scope.dataModel.partycode,
-                        month: $scope.dataModel.month
-                    }
-                }).then(function (result) {
-                    $loading.hide();
-                    angular.forEach(result.data.item.list, function (val, key) {
-                        $scope.userList.push({
-                            PARTYDUESID: val.PARTYDUESID,
-                            USERNAME: val.USERNAME,
-                            USERCODE: val.USERCODE,
-                            BASENUMBER: val.BASENUMBER,
-                            MONEY: val.MONEY,
-                            SPECIALEXPENSES: val.SPECIALEXPENSES,
-                            PARTYCODE: val.PARTYCODE
-                        });
+            },
+            onSelect: function (value, items) {
+                if (items && items.length > 0) {
+                    items.forEach(val => {
+                        if ($scope.userList.filter(it => it.USERCODE == val.USERCODE).length == 0) {
+                            $scope.userList.push({
+                                PARTYDUESID: val.PARTYDUESID,
+                                USERNAME: val.USERNAME,
+                                USERCODE: val.USERCODE,
+                                BASENUMBER: val.BASENUMBER,
+                                MONEY: val.MONEY,
+                                SPECIALEXPENSES: val.SPECIALEXPENSES
+                            });
+                        }
                     });
-                    $scope.selectUserlist.selectedValueData = "";
-                    $scope.selectUserlist.selectedLabeData = "";
-                }, function (resp) {
-                    $loading.hide();
-                    $scope.showMsg('错误', '服务器错误');
-                });
+
+                    $scope.selectUserlist.selectedJData = [];
+                    $scope.selectUserlist.selectedLabeData = '';
+                    $scope.selectUserlist.selectedValueData = '';
+                }
             }
-        });
-        $scope.$watch('userList', function (newVal) {
-            $scope.setRemoveUser();
-        }, true);
-        $scope.setRemoveUser = function () {
-            $scope.selectUserlist.selectParams.removeUserId = "";
-            angular.forEach($scope.userList, function (val, index) {
-                $scope.selectUserlist.selectParams.removeUserId += val.USERCODE + ','
-            });
         };
 
         //选择党支部
@@ -174,9 +150,10 @@
             $scope.userList = [];
             $http({
                 method: 'get', url: '../../api/publicity/getPartyDuesUserListOfAddfee', params: {
-                    year: $scope.dataModel.year, partyCode: $scope.dataModel.partycode,
                     pageindex: 1,
                     pagesize: 10000,
+                    year: $scope.dataModel.year,
+                    partyCode: $scope.dataModel.partycode,
                     month: $scope.dataModel.month
                 }
             }).then(function (result) {
@@ -187,8 +164,7 @@
                         USERNAME: val.USERNAME,
                         USERCODE: val.USERCODE,
                         BASENUMBER: val.BASENUMBER,
-                        MONEY: val.MONEY,
-                        PARTYCODE: val.PARTYCODE
+                        MONEY: val.MONEY
                     });
                 });
 

+ 1 - 1
src/main/resources/static/app/main/publicity/partyDues/edit.html

@@ -36,7 +36,7 @@
                 <div class="table-responsive list-table-panel">
                     <div class="list-table-title">
                         <div class="table-title">
-                            应缴党费明细
+                            应缴党费基准
                         </div>
                         <div class="table-tool">
                             <button type="button" class="btn btn-primary dropdown-toggle"

+ 1 - 1
src/main/resources/static/app/main/publicity/partyDues/edit.js

@@ -1,5 +1,5 @@
 (function ($app) {
-    $app.module('gtPartyApp').controller('partyDuesAddCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $partySelect, $stateParams, $bsRouterState, $excel) {
+    $app.module('gtPartyApp').controller('partyDuesBaseCtrl', function ($scope, $http, $modal, $ocLazyLoad, $alert, $loading, $state, $partySelect, $stateParams, $bsRouterState, $excel) {
         $stateParams = $bsRouterState.$params($scope);
 
         //定义数据集合

+ 13 - 33
src/main/resources/static/app/main/publicity/partyDues/editDues.html

@@ -27,32 +27,23 @@
                             <span ng-show="this.editForm.money.$invalid &&  this.editForm.$submitted"
                                   class="error">必填项,最小单位为1分</span>
                         </td>
-                        <!--<th>计算基数</th>
-                        <td ng-class="{ 'has-error' : this.editForm.basenumber.$invalid &&  this.editForm.$submitted}">
-                            <input type="text" name="basenumber" ng-model="dataModel.basenumber"
-                                   maxlength="200"
-                                   class="form-control" ng-required="true"/>
-                            <span ng-show="this.editForm.basenumber.$invalid &&  this.editForm.$submitted"
-                                  class="error">必填.</span>
-                        </td>-->
                     </tr>
                 </table>
             </div>
-            <!--<div class="dj-formtable">
+            <div class="dj-formtable">
                 <div class="table-responsive list-table-panel">
                     <div class="list-table-title">
                         <div class="table-title">
-                            费情况
+                            交费情况
                         </div>
                     </div>
                     <table class="table table-bordered">
                         <thead>
                         <tr>
-                            <th class="text-center" style="width: 80px;">选择已缴月份</th>
-                            <th class="text-center" style="width: 180px;">月份</th>
+                            <th class="text-center" style="width: 150px;">选择已缴月份</th>
+                            <th class="text-center" style="width: 150px;">月份</th>
                             <th style="width: 200px;">交纳金额(元/月)</th>
-                            <th style="width: 200px;">特殊党费(元)</th>
-                            <th style="width: 200px;">备注</th>
+                            <th>备注</th>
                         </tr>
                         </thead>
                         <tbody>
@@ -60,9 +51,9 @@
                             <td class="text-center" scope="row">
                                 <input type="checkbox" id="{{pageId}}_md_checkbox_{{$index+1}}"
                                        class="filled-in chk-col-red"
-                                       ng-checked="it.ISHAV>0"
+                                       ng-checked="it.payState===1"
                                        ng-click="checkMonth(it)"
-                                       ng-disabled="it.PARTYCODE!=null && it.PARTYCODE!='' && usdzzdm!=it.PARTYCODE"/>
+                                       ng-disabled="it.isPay===0"/>
                                 <label for="{{pageId}}_md_checkbox_{{$index+1}}"
                                        style="margin-top: 5px"></label>
                             </td>
@@ -72,32 +63,21 @@
                             <td class="text-center"
                                 ng-class="{ 'has-error' : invalidFee($index,editForm,'MONEY') &&  this.editForm.$submitted}">
                                 <input type="number" autocomplete="off" class="form-control" name="MONEY_{{$index}}"
-                                       ng-pattern="/^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/"
-                                       ng-model="it.MONEY" ng-required="it.ISHAV>0"
+                                       min="0" step="0.01"
+                                       ng-model="it.MONEY" ng-required="it.payState===1"
                                        style="width: 150px;display: inline;"
-                                       ng-disabled="false"/>
-                                       &lt;!&ndash;ng-disabled="it.PARTYCODE!=null && it.PARTYCODE!='' && usdzzdm!=it.PARTYCODE"/>&ndash;&gt;
-                            </td>
-                            <td class="text-center"
-                                ng-class="{ 'has-error' : invalidFee($index,editForm,'SPECIALEXPENSES') &&  this.editForm.$submitted}">
-                                <input type="number" autocomplete="off" class="form-control"
-                                       name="SPECIALEXPENSES_{{$index}}"
-                                       ng-pattern="/^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/"
-                                       ng-model="it.SPECIALEXPENSES" style="width: 150px;display: inline;"
-                                       ng-disabled="false"/>
-                                       &lt;!&ndash;ng-disabled="it.PARTYCODE!=null && it.PARTYCODE!='' && usdzzdm!=it.PARTYCODE"/>&ndash;&gt;
+                                       ng-disabled="it.isPay===0"/>
                             </td>
                             <td class="text-center">
                                 <input type="text" class="form-control" name="REMARKS_{{$index}}"
-                                       ng-model="it.REMARKS" style="width: 150px;display: inline;"
-                                       ng-disabled="false"/>
-                                       &lt;!&ndash;ng-disabled="it.PARTYCODE!=null && it.PARTYCODE!='' && usdzzdm!=it.PARTYCODE"/>&ndash;&gt;
+                                       ng-model="it.REMARKS" style="display: inline;"
+                                       ng-disabled="it.isPay===0"/>
                             </td>
                         </tr>
                         </tbody>
                     </table>
                 </div>
-            </div>-->
+            </div>
 
             <div class="form_foot">
                 <button type="button" class="btn btn-default" ng-click="pagechange();">取消</button>

+ 14 - 24
src/main/resources/static/app/main/publicity/partyDues/editDues.js

@@ -40,21 +40,17 @@
             }
 
             if (isflag) {
-                /*var monthList = $scope.userMonthList.filter(function (item) {
-                    return item.ISHAV == 1;
-                });*/
-                /*var monthList = [];
+                var monthList = [];
                 angular.forEach($scope.userMonthList, function (val, key) {
-                    if (val.ISHAV != null && val.ISHAV > 0) {
-                        monthList.push(
-                            {
-                                month: val.MONTH,
-                                money: val.MONEY,
-                                specialexpenses: val.SPECIALEXPENSES,
-                                remarks: val.REMARKS
-                            });
-                    }
-                });*/
+                    monthList.push(
+                        {
+                            month: val.MONTH,
+                            money: val.MONEY,
+                            specialexpenses: val.SPECIALEXPENSES,
+                            remarks: val.REMARKS,
+                            paystate: val.payState
+                        });
+                });
                 if (confirm("确认提交?")) {
                     $loading.show();
                     $http({
@@ -62,7 +58,7 @@
                         url: "../../api/publicity/savePartyDuesUser",
                         data: {
                             dataModel: $scope.dataModel,
-                            //monthList: JSON.stringify(monthList)
+                            monthList: JSON.stringify(monthList)
                         }
                     }).then(function (result) {
                         $loading.hide();
@@ -91,15 +87,9 @@
         };
 
         $scope.checkMonth = function (it) {
-            if (it.ISHAV > 0) {
-                it.ISHAV = 0;
-                it.MONEY = null;
-            } else {
-                it.ISHAV = 1;
-                if (it.MONEY == null) {
-                    it.MONEY = $scope.dataModel.money;
-                }
-            }
+            it.payState = Math.abs((it.payState || 0) - 1);
+
+            it.MONEY = it.payState === 1 ? $scope.dataModel.money : null;
         };
 
         //加载数据

+ 6 - 6
src/main/resources/static/app/main/publicity/partyDues/list.html

@@ -75,13 +75,13 @@
                              data-ptotal="pageInfo.ptotal" data-unit="'名'"></div>-->
                         <div style="float: right">
                             <button role-permission-code="partyDuesList.btnAdd" class="btn btn-default1"
-                                    ng-click="addData()">设置交费基准
+                                    ng-click="addBase()">设置交费基准
                             </button>
-                            <!--<button role-permission-code="partyDuesList.btnAdd" class="btn btn-default1"
+                            <button role-permission-code="partyDuesList.btnAdd" class="btn btn-default1"
                                     ng-click="multiAdd()">批量交费
-                            </button>-->
+                            </button>
                             <button role-permission-code="partyDuesList.btnImport" class="btn btn-primary dropdown-toggle"
-                                    title="导入交费基准" ng-click="import()">
+                                    title="导入交费基准" ng-click="importBase()">
                                 导入交费基准
                             </button>
                             <button role-permission-code="partyDuesList.btnExport" class="btn btn-default1"
@@ -159,8 +159,8 @@
                                                 role-permission-code="partyDuesList.btnUpdate"
                                                 class="btn td-btn bg-light-green waves-effect"
                                                 ng-click="editData(it.USERCODE,it.YEAR,it.SZDZBDM,it.USERNAME)"
-                                                title="修改基准">
-                                            修改基准
+                                                title="交费">
+                                            交费
                                         </button>
                                     </td>
                                 </tr>

+ 2 - 2
src/main/resources/static/app/main/publicity/partyDues/list.js

@@ -115,7 +115,7 @@
         };
 
         //新增
-        $scope.addData = function () {
+        $scope.addBase = function () {
             $bsRouterState.$closeTabName("home.partyDuesAdd");
             $timeout(function () {
                 $bsRouterState.go('home.partyDuesAdd', {
@@ -159,7 +159,7 @@
             }
         };
 
-        $scope.import = function () {
+        $scope.importBase = function () {
             $scope.excelConfig = {
                 filetype: 1,
                 columns: {