Browse Source

职务 项目立项 里程碑

chenc 4 years ago
parent
commit
f771240b56
26 changed files with 1054 additions and 45 deletions
  1. 12 0
      src/app/entity/basedata/base-archives-milestone.ts
  2. 6 0
      src/app/entity/basedata/base-archives-post.ts
  3. 13 0
      src/app/entity/basedata/base-archives-project-approval.ts
  4. 32 0
      src/app/routes/basedata/base-archives-milestone/add/add.component.html
  5. 24 0
      src/app/routes/basedata/base-archives-milestone/add/add.component.spec.ts
  6. 92 0
      src/app/routes/basedata/base-archives-milestone/add/add.component.ts
  7. 70 0
      src/app/routes/basedata/base-archives-milestone/base-archives-milestone.component.html
  8. 24 0
      src/app/routes/basedata/base-archives-milestone/base-archives-milestone.component.spec.ts
  9. 232 0
      src/app/routes/basedata/base-archives-milestone/base-archives-milestone.component.ts
  10. 4 1
      src/app/routes/basedata/basedata-routing.module.ts
  11. 11 3
      src/app/routes/basedata/basedata.module.ts
  12. 7 0
      src/app/routes/basedata/post/add/add.component.html
  13. 9 2
      src/app/routes/basedata/post/add/add.component.ts
  14. 12 2
      src/app/routes/basedata/post/post.component.html
  15. 21 33
      src/app/routes/basedata/post/post.component.ts
  16. 27 0
      src/app/routes/basedata/project-approval/add/add.component.html
  17. 24 0
      src/app/routes/basedata/project-approval/add/add.component.spec.ts
  18. 60 0
      src/app/routes/basedata/project-approval/add/add.component.ts
  19. 106 0
      src/app/routes/basedata/project-approval/project-approval.component.html
  20. 24 0
      src/app/routes/basedata/project-approval/project-approval.component.spec.ts
  21. 206 0
      src/app/routes/basedata/project-approval/project-approval.component.ts
  22. 1 1
      src/app/routes/system/menu/edit/edit.component.html
  23. 13 0
      src/app/services/basedata/base-archives-milestone.service.ts
  24. 9 1
      src/app/services/basedata/base-archives-post.service.ts
  25. 13 0
      src/app/services/basedata/base-archives-project-approval.service.ts
  26. 2 2
      src/app/services/dict.service.ts

+ 12 - 0
src/app/entity/basedata/base-archives-milestone.ts

@@ -0,0 +1,12 @@
+import { Page } from '../page';
+/**
+ * 里程碑档案
+ */
+export class BaseArchivesMilestone  extends Page{
+    key?:string;
+    id?:string;// 里程碑主键
+    code?:string;//里程碑编码
+    name?:string;//里程碑名称
+    parentId?:string;//父级id
+    type?:string;//类别-数据字典
+}

+ 6 - 0
src/app/entity/basedata/base-archives-post.ts

@@ -1,7 +1,13 @@
 import { Page } from '../page';
 
+/**
+ * 职务档案
+ */
 export class BaseArchivesPost extends Page{
+    key?:string;
     id?:string;// 职务主键
     code?:string;//职务编码
     name?:string;//职务名称
+    parentId?:string;//父级id
+    status?:string;//是否启用
 }

+ 13 - 0
src/app/entity/basedata/base-archives-project-approval.ts

@@ -0,0 +1,13 @@
+import { Page } from '../page';
+
+/**
+ * 项目立项档案
+ */
+export class BaseArchivesProjectApproval  extends Page{
+    key?:string;
+    id?:string;// 项目立项主键
+    code?:string;//项目立项编码
+    name?:string;//项目立项名称
+    parentId?:string;//父级id
+    status?:string;//是否启用
+}

+ 32 - 0
src/app/routes/basedata/base-archives-milestone/add/add.component.html

@@ -0,0 +1,32 @@
+<form nz-form [formGroup]="validateForm" (ngSubmit)="submitForm()">
+  <nz-form-item>
+    <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="code">编码</nz-form-label>
+    <nz-form-control [nzSm]="14" [nzXs]="24" >
+      <input nz-input formControlName="code" id="code" [(ngModel)]="baseArchivesMilestone.code"/>
+      <nz-form-explain *ngIf="validateForm.get('code')?.dirty && validateForm.get('code')?.errors">
+        请输入编码
+      </nz-form-explain>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item>
+    <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="name">名称</nz-form-label>
+    <nz-form-control [nzSm]="14" [nzXs]="24" >
+      <input nz-input formControlName="name" id="name" [(ngModel)]="baseArchivesMilestone.name"/>
+      <nz-form-explain *ngIf="validateForm.get('name')?.dirty && validateForm.get('name')?.errors">
+        请输入名称
+      </nz-form-explain>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item>
+    <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="name">类别</nz-form-label>
+    <nz-form-control [nzSm]="14" [nzXs]="24" >
+      <nz-select style="widows: 100%;" nzShowSearch nzAllowClear formControlName="type" name="type" [(ngModel)]="baseArchivesMilestone.type"
+              nzPlaceHolder="请选择">
+              <nz-option *ngFor="let i of typeList" [nzValue]="i.value" [nzLabel]="i.text"></nz-option>
+            </nz-select>
+      <nz-form-explain *ngIf="validateForm.get('type')?.dirty && validateForm.get('type')?.errors">
+        请选择类别
+      </nz-form-explain>
+    </nz-form-control>
+  </nz-form-item>
+</form>

+ 24 - 0
src/app/routes/basedata/base-archives-milestone/add/add.component.spec.ts

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

+ 92 - 0
src/app/routes/basedata/base-archives-milestone/add/add.component.ts

@@ -0,0 +1,92 @@
+import { Component, OnInit } from '@angular/core';
+import { NzModalRef, NzMessageService } from 'ng-zorro-antd';
+import { _HttpClient } from '@delon/theme';
+import { BaseArchivesMilestone } from 'app/entity/basedata/base-archives-milestone';
+import { FormBuilder, Validators, FormGroup } from '@angular/forms';
+import { DictService } from 'app/services/dict.service';
+
+@Component({
+  selector: 'app-basedata-base-archives-milestone-add',
+  templateUrl: './add.component.html',
+})
+export class BasedataBaseArchivesMilestoneAddComponent implements OnInit {
+  
+
+  constructor(
+    private modal: NzModalRef,
+    private fb: FormBuilder,
+    private dictService:DictService
+  ) { }
+
+  ngOnInit(): void {
+    this.validateForm = this.fb.group({
+      code: [null, [Validators.required]],
+      name: [null, [Validators.required]],
+      type:[null,[Validators.required]]
+    });
+    //获取类别数据字典
+    this.getTypeList();
+    //id不等于空则是修改,需要查询修改数据
+    if(this.id){
+      this.getById();
+    }
+  }
+
+  validateForm!: FormGroup;
+  parentId="";//父级id
+  id="";//主键
+  //里程碑档案实体
+  baseArchivesMilestone:BaseArchivesMilestone={};
+
+  /**
+   * 获取类别数据字典
+   */
+  typeList: any[] = [];
+  getTypeList() {
+    this.dictService.getByDictCode('base_archives_milestone_type').then(response => {
+      this.typeList = response.result;
+    });
+  }
+
+  /**
+   * 根据id查询里程碑对象
+   */
+  getById(){
+    this.baseArchivesMilestone={
+        key: `1-1`,
+        code: '001',
+        name: '启动1',
+        type: '1'
+    }
+  }
+
+  /**
+   * 保存提交按钮
+   */
+  submitForm(): void {
+    for (const i in this.validateForm.controls) {
+      this.validateForm.controls[i].markAsDirty();
+      this.validateForm.controls[i].updateValueAndValidity();
+    }
+    let valid = this.validateForm.valid;
+    if(valid){
+      if(!this.id){
+        //新增
+        alert(this.parentId)
+        alert("新增")
+      }else{
+        //修改
+        alert(this.parentId)
+        alert("修改")
+      }
+      
+    }
+  }
+
+  /**
+   * 关闭按钮
+   */
+  close() {
+    this.modal.destroy();
+  }
+}

+ 70 - 0
src/app/routes/basedata/base-archives-milestone/base-archives-milestone.component.html

@@ -0,0 +1,70 @@
+<page-header [action]="phActionTpl">
+  <ng-template #phActionTpl>
+    <button (click)="add()" nz-button nzType="primary">新增一级</button>
+  </ng-template>
+</page-header>
+<nz-card>
+  <!-- 查询条件 -->
+  <form nz-form>
+    <div nz-row [nzGutter]="{ xs: 8, sm: 16, md: 24, lg: 32 }">
+      <div nz-col [nzSpan]="8">
+        <nz-form-item>
+          <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired>类别</nz-form-label>
+          <nz-form-control [nzSm]="14" [nzXs]="24">
+            <nz-select style="widows: 100%;" nzShowSearch nzAllowClear name="type" [(ngModel)]="baseArchivesMilestone.type"
+              nzPlaceHolder="请选择">
+              <nz-option *ngFor="let i of typeList" [nzValue]="i.value" [nzLabel]="i.text"></nz-option>
+            </nz-select>
+          </nz-form-control>
+        </nz-form-item>
+      </div>
+      <div nz-col [nzSpan]="8">
+        <nz-form-item>
+          <nz-form-label [nzSm]="2" [nzXs]="24" [nzNoColon]=true></nz-form-label>
+          <nz-form-control [nzSm]="14" [nzXs]="24">
+            <button nzType="primary" (click)="query()" nz-button ><span>查询</span></button>
+          </nz-form-control>
+        </nz-form-item>
+      </div>
+    </div>
+  </form>
+  <!-- 数据表格 -->
+  <div nz-row [nzGutter]="{ xs: 8, sm: 16, md: 24, lg: 32 }">
+    <div nz-col [nzSpan]="24">
+      <nz-table nzSize="small" #expandTable [nzData]="listOfMapData" nzTableLayout="fixed" [nzShowPagination]="false"
+        [nzFrontPagination]="false">
+        <thead>
+          <tr>
+            <th>编码</th>
+            <th>名称</th>
+            <th>类别</th>
+            <th>操作</th>
+          </tr>
+        </thead>
+        <tbody>
+          <ng-container *ngFor="let data of expandTable.data">
+            <ng-container *ngFor="let item of mapOfExpandedData[data.key]">
+
+
+              <tr *ngIf="(item.parent && item.parent.expand) || !item.parent">
+                <td [nzIndentSize]="item.level! * 20" [nzShowExpand]="!!item.children" [(nzExpand)]="item.expand"
+                  (nzExpandChange)="collapse(mapOfExpandedData[data.key], item, $event)">
+                  {{ item.code }}
+                </td>
+                <td>{{ item.name }}</td>
+                <td>{{ item.type }}</td>
+                <td>
+                  <a (click)="addChild(item)">新增子级</a>
+                  <nz-divider nzType="vertical"></nz-divider>
+                  <a (click)="update(item)">修改</a>
+                  <nz-divider nzType="vertical"></nz-divider>
+                  <a (click)="delete(item.id)">删除</a>
+                </td>
+              </tr>
+            </ng-container>
+          </ng-container>
+        </tbody>
+      </nz-table>
+    </div>
+  </div>
+</nz-card>

+ 24 - 0
src/app/routes/basedata/base-archives-milestone/base-archives-milestone.component.spec.ts

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

+ 232 - 0
src/app/routes/basedata/base-archives-milestone/base-archives-milestone.component.ts

@@ -0,0 +1,232 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { _HttpClient, ModalHelper } from '@delon/theme';
+import { STColumn, STComponent } from '@delon/abc';
+import { SFSchema } from '@delon/form';
+import { BaseArchivesMilestone } from 'app/entity/basedata/base-archives-milestone';
+import { DictService } from 'app/services/dict.service';
+import { Dict } from 'app/entity/dict';
+import { NzNotificationService, NzModalService } from 'ng-zorro-antd';
+import { BasedataBaseArchivesMilestoneAddComponent } from './add/add.component';
+export interface TreeNodeInterface {
+  key: string;
+  code: string;
+  name?: string;
+  type?: string;
+  expand?: boolean;
+  children?: TreeNodeInterface[];
+  parent?: TreeNodeInterface;
+  level?: number;
+}
+@Component({
+  selector: 'app-basedata-base-archives-milestone',
+  templateUrl: './base-archives-milestone.component.html',
+})
+export class BasedataBaseArchivesMilestoneComponent implements OnInit {
+  constructor(private dictService: DictService, private nzNotificationService: NzNotificationService,
+    private modalService:NzModalService
+    ) {}
+
+  ngOnInit() {
+    this.getTypeList();
+  }
+  listOfMapData: TreeNodeInterface[] = [];
+  //里程碑档案实体
+  baseArchivesMilestone: BaseArchivesMilestone = {};
+
+  /**
+   * 获取类别数据字典
+   */
+  typeList: any[] = [];
+  getTypeList() {
+    this.dictService.getByDictCode('base_archives_milestone_type').then(response => {
+      this.typeList = response.result;
+    });
+  }
+
+  /**
+   * 查询按钮
+   */
+  query() {
+    if (this.baseArchivesMilestone.type) {
+      this.getTreeList();
+    } else {
+      this.nzNotificationService.warning('请选择类别', '');
+    }
+  }
+
+  /**
+   * 获取树形集合
+   */
+  getTreeList() {
+    this.listOfMapData = [
+      {
+        key: `1`,
+        code: '001',
+        name: '项目启动',
+        type: '开发',
+        children: [
+          {
+            key: `1-1`,
+            code: '001',
+            name: '启动1',
+            type: '开发',
+          },
+        ],
+      },
+      {
+        key: `2`,
+        code: '002',
+        name: '蓝图设计',
+        type: '实施',
+      },
+    ];
+    this.listOfMapData.forEach(item => {
+      this.mapOfExpandedData[item.key] = this.convertTreeToList(item);
+    });
+  }
+
+  /**
+   * 新增一级
+   */
+  add(){
+    const modalRef = this.modalService.create({
+      nzTitle: "新增",
+      nzContent: BasedataBaseArchivesMilestoneAddComponent,
+      nzWidth: 600,
+      nzComponentParams:{
+        // parentId:this.id
+      },
+      nzFooter: [
+        {
+          label: "关闭",
+          type: "default",
+          onClick: addModel => {
+            addModel.close()
+          }
+        },
+        {
+          label: "确定",
+          type: "primary",
+          // loading:this.modelSaveLoading,
+          onClick: addModel => {
+            addModel.submitForm()
+          }
+        }
+      ]
+    })
+  }
+
+  /**
+   * 新增子级
+   * @param item 里程碑对象
+   */
+  addChild(item){
+    const modalRef = this.modalService.create({
+      nzTitle: "新增",
+      nzContent: BasedataBaseArchivesMilestoneAddComponent,
+      nzWidth: 600,
+      nzComponentParams:{
+        parentId:item.key
+      },
+      nzFooter: [
+        {
+          label: "关闭",
+          type: "default",
+          onClick: addModel => {
+            addModel.close()
+          }
+        },
+        {
+          label: "确定",
+          type: "primary",
+          // loading:this.modelSaveLoading,
+          onClick: addModel => {
+            addModel.submitForm()
+          }
+        }
+      ]
+    })
+  }
+
+  /**
+   * 修改
+   * @param item 里程碑实体
+   */
+  update(item){
+    const modalRef = this.modalService.create({
+      nzTitle: "修改",
+      nzContent: BasedataBaseArchivesMilestoneAddComponent,
+      nzWidth: 600,
+      nzComponentParams:{
+        id:item.key
+      },
+      nzFooter: [
+        {
+          label: "关闭",
+          type: "default",
+          onClick: addModel => {
+            addModel.close()
+          }
+        },
+        {
+          label: "确定",
+          type: "primary",
+          // loading:this.modelSaveLoading,
+          onClick: addModel => {
+            addModel.submitForm()
+          }
+        }
+      ]
+    })
+  }
+
+  /**
+   * 删除按钮
+   */
+  delete(item){
+    alert("删除成功")
+  }
+
+  ///////////////////////////树形配置
+  mapOfExpandedData: { [key: string]: TreeNodeInterface[] } = {};
+
+  collapse(array: TreeNodeInterface[], data: TreeNodeInterface, $event: boolean): void {
+    if (!$event) {
+      if (data.children) {
+        data.children.forEach(d => {
+          const target = array.find(a => a.key === d.key)!;
+          target.expand = false;
+          this.collapse(array, target, false);
+        });
+      } else {
+        return;
+      }
+    }
+  }
+
+  convertTreeToList(root: TreeNodeInterface): TreeNodeInterface[] {
+    const stack: TreeNodeInterface[] = [];
+    const array: TreeNodeInterface[] = [];
+    const hashMap = {};
+    stack.push({ ...root, level: 0, expand: true });
+
+    while (stack.length !== 0) {
+      const node = stack.pop()!;
+      this.visitNode(node, hashMap, array);
+      if (node.children) {
+        for (let i = node.children.length - 1; i >= 0; i--) {
+          stack.push({ ...node.children[i], level: node.level! + 1, expand: true, parent: node });
+        }
+      }
+    }
+
+    return array;
+  }
+
+  visitNode(node: TreeNodeInterface, hashMap: { [key: string]: boolean }, array: TreeNodeInterface[]): void {
+    if (!hashMap[node.key]) {
+      hashMap[node.key] = true;
+      array.push(node);
+    }
+  }
+}

+ 4 - 1
src/app/routes/basedata/basedata-routing.module.ts

@@ -6,6 +6,8 @@ import { BasedataCustomerCustomerAddComponent } from './customer/customer-add/cu
 import { BasedataCustomerEditComponent } from './customer/edit/edit.component';
 import { BasedataCustomerDetailsComponent } from './customer/details/details.component';
 import { BasedataPostComponent } from './post/post.component';
+import { BasedataProjectApprovalComponent } from './project-approval/project-approval.component';
+import { BasedataBaseArchivesMilestoneComponent } from './base-archives-milestone/base-archives-milestone.component';
 
 const routes: Routes = [
   { path: 'customer', component: BasedataCustomerComponent },
@@ -13,7 +15,8 @@ const routes: Routes = [
   { path: "material", component: BasedataMaterialComponent },
   { path: 'details', component: BasedataCustomerDetailsComponent },
   { path: 'post', component: BasedataPostComponent },
-  ];
+  { path: 'project-approval', component: BasedataProjectApprovalComponent },
+  { path: 'base-archives-milestone', component: BasedataBaseArchivesMilestoneComponent }];
 @NgModule({
   imports: [RouterModule.forChild(routes)],
   exports: [RouterModule]

+ 11 - 3
src/app/routes/basedata/basedata.module.ts

@@ -10,7 +10,11 @@ import { BasedataCustomerEditComponent } from './customer/edit/edit.component';
 import { BasedataCustomerDetailsComponent } from './customer/details/details.component';
 import { BasedataCustomerIsAbbreviationComponent } from './customer/is-abbreviation/is-abbreviation.component';
 import { BasedataPostComponent } from './post/post.component';
-import { BasedataPostAddComponent } from './post/add/add.component';
+import { BasedataPostAddComponent } from './post/add/add.component';
+import { BasedataProjectApprovalComponent } from './project-approval/project-approval.component';
+import { BasedataProjectApprovalAddComponent } from './project-approval/add/add.component';
+import { BasedataBaseArchivesMilestoneComponent } from './base-archives-milestone/base-archives-milestone.component';
+import { BasedataBaseArchivesMilestoneAddComponent } from './base-archives-milestone/add/add.component';
 
 const COMPONENTS = [
   BasedataCustomerComponent,
@@ -18,10 +22,14 @@ const COMPONENTS = [
   BasedataMaterialComponent,
   BasedataCustomerDetailsComponent,
   BasedataPostComponent
-  ];
+  ,
+  BasedataProjectApprovalComponent,
+  BasedataBaseArchivesMilestoneComponent];
 const COMPONENTS_NOROUNT = [BasedataCustomerEditComponent,
   BasedataCustomerIsAbbreviationComponent,
-  BasedataPostAddComponent];
+  BasedataPostAddComponent,
+  BasedataProjectApprovalAddComponent,
+  BasedataBaseArchivesMilestoneAddComponent];
 
 @NgModule({
   imports: [

+ 7 - 0
src/app/routes/basedata/post/add/add.component.html

@@ -17,4 +17,11 @@
       </nz-form-explain>
     </nz-form-control>
   </nz-form-item>
+  <nz-form-item>
+    <nz-form-label nzRequired [nzSm]="6" [nzXs]="24">是否启用
+    </nz-form-label>
+    <nz-form-control [nzSm]="14" [nzXs]="24">
+      <nz-switch [ngModelOptions]="{standalone: true}" [(ngModel)]="status" name="status" nzCheckedChildren="是" nzUnCheckedChildren="否"></nz-switch>
+    </nz-form-control>
+  </nz-form-item>
 </form>

+ 9 - 2
src/app/routes/basedata/post/add/add.component.ts

@@ -18,13 +18,15 @@ export class BasedataPostAddComponent implements OnInit {
   ngOnInit(): void {
     this.validateForm = this.fb.group({
       code: [null, [Validators.required]],
-      name: [null, [Validators.required]]
+      name: [null, [Validators.required]],
+      status:[null]
     });
     
   }
 
   validateForm!: FormGroup;
   parentId="";//父级id
+  status=true;
 
   /**
    * 提交按钮
@@ -36,7 +38,12 @@ export class BasedataPostAddComponent implements OnInit {
     }
     let valid = this.validateForm.valid;
     if(valid){
-      this.baseArchivesPost
+      //格式化是否期用
+      if(this.status){
+        this.baseArchivesPost.status="1"
+      }else{
+        this.baseArchivesPost.status="0"
+      }
       alert(this.parentId)
     }
   }

+ 12 - 2
src/app/routes/basedata/post/post.component.html

@@ -85,14 +85,24 @@
               </nz-form-explain>
           </nz-form-control>
         </nz-form-item>
+        <nz-form-item>
+          <nz-form-label nzRequired [nzSm]="8" [nzXs]="24">是否启用
+          </nz-form-label>
+          <nz-form-control [nzSm]="14" [nzXs]="24">
+            <nz-switch [ngModelOptions]="{standalone: true}" [(ngModel)]="status" name="status" nzCheckedChildren="是" nzUnCheckedChildren="否"></nz-switch>
+          </nz-form-control>
+        </nz-form-item>
         <!-- <nz-form-item style="margin-bottom:8px;">
           <nz-form-control [nzSpan]="14" [nzOffset]="8">
             <button nzType="primary" (click)="reset()" nz-button ><span>{{ 'button.reset' | translate }}</span></button>
             <button nzType="primary" (click)="update()" nz-button acl [acl-ability]="'post:update'"><span>{{ 'button.save' | translate }}</span></button>
           </nz-form-control>
         </nz-form-item> -->
-        <nz-form-item nz-row >
-          <nz-form-control [nzSpan]="14" [nzOffset]="6">
+        <nz-form-item >
+          <nz-form-label [nzSm]="8" [nzXs]="24" [nzNoColon]=true>
+          </nz-form-label>
+          <nz-form-control [nzSm]="14" [nzXs]="24">
+            <button nzType="primary" (click)="reset()" nz-button ><span>{{ 'button.reset' | translate }}</span></button>
             <button nz-button nzType="primary">保存</button>
           </nz-form-control>
         </nz-form-item>

+ 21 - 33
src/app/routes/basedata/post/post.component.ts

@@ -6,6 +6,7 @@ import { NzTreeNode, NzFormatEmitEvent, NzDropdownService, NzDropdownContextComp
 import { BaseArchivesPost } from 'app/entity/basedata/base-archives-post';
 import { BasedataPostAddComponent } from './add/add.component';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { BaseArchivesPostService } from 'app/services/basedata/base-archives-post.service';
 
 @Component({
   selector: 'app-basedata-post',
@@ -17,13 +18,15 @@ export class BasedataPostComponent implements OnInit {
   constructor(
     private nzDropdownService: NzDropdownService,
     private modalService:NzModalService,
-    private fb: FormBuilder
+    private fb: FormBuilder,
+    private baseArchivesPostService:BaseArchivesPostService
   ) { }
 
   ngOnInit() {
     this.validateForm = this.fb.group({
       code: [null, [Validators.required]],
-      name: [null, [Validators.required]]
+      name: [null, [Validators.required]],
+      status:[null]
     });
     this.getListContractTree()
    }
@@ -31,39 +34,14 @@ export class BasedataPostComponent implements OnInit {
   dropdown: NzDropdownContextComponent;
   searchValue = "";//搜索框的值
   nodes: any=[];//合同分类tree集合
+  status=true;
 
   //查询tree合同类型
   getListContractTree() {
-    // this.contractClassService.getAllContractClass1().then((response) => {
-    //   this.nodes = response.result
-    // })
-    this.nodes=[
-      {
-        code: "001",
-      createBy: "admin",
-      createTime: "2019-05-17 12:01:32",
-      isLeaf: false,
-      key: "604d450067afc7b7f52a8987d60bd745",
-      parentId: "",
-      parentIds: null,
-      title: "销售经理",
-      value: "604d450067afc7b7f52a8987d60bd745",
-      children:[
-        {
-          code: "0001",
-          createBy: "admin",
-          createTime: "2019-05-17 12:01:32",
-          isLeaf: true,
-          key: "2",
-          parentId: "604d450067afc7b7f52a8987d60bd745",
-          parentIds: null,
-          title: "销售2",
-          value: "2",
-          children:null
-        }
-      ]
-      }
-    ]
+    this.baseArchivesPostService.getTreeList(null).then((response)=>{
+      this.nodes=response.result  ;
+    })
+    
   }
 
   //双击节点自动打开树分支
@@ -89,6 +67,11 @@ export class BasedataPostComponent implements OnInit {
   //树节点点击事件
   treeClick(event) {
     var getdDepart = event.node.origin;//当前点击的对象
+    if(getdDepart.status=="0"){//是否启用
+      this.status=false;
+    }else{
+      this.status=true;
+    }
     this.baseArchivesPost = {
       name: getdDepart.title,
       code: getdDepart.code,
@@ -181,7 +164,12 @@ export class BasedataPostComponent implements OnInit {
     }
     let valid = this.validateForm.valid;
     if(valid){
-      this.baseArchivesPost
+      //格式化是否期用
+      if(this.status){
+        this.baseArchivesPost.status="1"
+      }else{
+        this.baseArchivesPost.status="0"
+      }
       alert(this.baseArchivesPost.code)
     }
   }

+ 27 - 0
src/app/routes/basedata/project-approval/add/add.component.html

@@ -0,0 +1,27 @@
+<form nz-form [formGroup]="validateForm" (ngSubmit)="submitForm()">
+  <nz-form-item>
+    <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="code">项目编码</nz-form-label>
+    <nz-form-control [nzSm]="14" [nzXs]="24" >
+      <input nz-input formControlName="code" id="code" [(ngModel)]="baseArchivesProjectApproval.code"/>
+      <nz-form-explain *ngIf="validateForm.get('code')?.dirty && validateForm.get('code')?.errors">
+        请输入项目编码
+      </nz-form-explain>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item>
+    <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="name">项目名称</nz-form-label>
+    <nz-form-control [nzSm]="14" [nzXs]="24" >
+      <input nz-input formControlName="name" id="name" [(ngModel)]="baseArchivesProjectApproval.name"/>
+      <nz-form-explain *ngIf="validateForm.get('name')?.dirty && validateForm.get('name')?.errors">
+        请输入项目名称
+      </nz-form-explain>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item>
+    <nz-form-label nzRequired [nzSm]="6" [nzXs]="24">是否启用
+    </nz-form-label>
+    <nz-form-control [nzSm]="14" [nzXs]="24">
+      <nz-switch [ngModelOptions]="{standalone: true}" [(ngModel)]="status" name="status" nzCheckedChildren="是" nzUnCheckedChildren="否"></nz-switch>
+    </nz-form-control>
+  </nz-form-item>
+</form>

+ 24 - 0
src/app/routes/basedata/project-approval/add/add.component.spec.ts

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

+ 60 - 0
src/app/routes/basedata/project-approval/add/add.component.ts

@@ -0,0 +1,60 @@
+import { Component, OnInit } from '@angular/core';
+import { NzModalRef, NzMessageService } from 'ng-zorro-antd';
+import { _HttpClient } from '@delon/theme';
+import { FormBuilder, Validators, FormGroup } from '@angular/forms';
+import { BaseArchivesProjectApproval } from 'app/entity/basedata/base-archives-project-approval';
+
+@Component({
+  selector: 'app-basedata-project-approval-add',
+  templateUrl: './add.component.html',
+})
+export class BasedataProjectApprovalAddComponent implements OnInit {
+  
+  constructor(
+    private modal: NzModalRef,
+    private fb: FormBuilder
+  ) { }
+
+  ngOnInit(): void {
+    this.validateForm = this.fb.group({
+      code: [null, [Validators.required]],
+      name: [null, [Validators.required]],
+      status:[null]
+
+    });
+  }
+
+  validateForm!: FormGroup;
+  parentId="";//父级id
+  status=true;
+
+  /**
+   * 提交按钮
+   */
+  submitForm(): void {
+    for (const i in this.validateForm.controls) {
+      this.validateForm.controls[i].markAsDirty();
+      this.validateForm.controls[i].updateValueAndValidity();
+    }
+    let valid = this.validateForm.valid;
+    if(valid){
+      //格式化是否期用
+      if(this.status){
+        this.baseArchivesProjectApproval.status="1"
+      }else{
+        this.baseArchivesProjectApproval.status="0"
+      }
+      alert(this.parentId)
+    }
+  }
+
+  //实体
+  baseArchivesProjectApproval:BaseArchivesProjectApproval={};
+  
+  /**
+   * 关闭按钮
+   */
+  close() {
+    this.modal.destroy();
+  }
+}

+ 106 - 0
src/app/routes/basedata/project-approval/project-approval.component.html

@@ -0,0 +1,106 @@
+<page-header [action]="phActionTpl">
+  <ng-template #phActionTpl>
+  </ng-template>
+</page-header>
+<nz-card>
+  <div nz-row [nzGutter]="24">
+    <!--左边card -->
+    <div nz-col nzMd="24" nzLg="12">
+      <nz-card>
+        <!--按钮操作 -->
+        <div nz-row [nzGutter]="24" style="margin-bottom: 10px;">
+          <div nz-col nzMd="24" nzLg="24">
+            <button (click)="add()" nz-button acl [acl-ability]="'base-archives-project-approval:add'"
+              nzType="primary">添加一级</button>
+          </div>
+        </div>
+        <!-- 搜索框 -->
+        <div nz-row [nzGutter]="24">
+          <div nz-col nzMd="24" nzLg="24">
+            <nz-input-group [nzSuffix]="suffixIcon" style="width:100%">
+              <input type="text" nz-input
+                placeholder="请输入"
+                [(ngModel)]="searchValue" />
+            </nz-input-group>
+            <ng-template #suffixIcon>
+              <i nz-icon type="search"></i>
+            </ng-template>
+          </div>
+        </div>
+        <!-- tree -->
+        <div nz-row [nzGutter]="24">
+          <div nz-col nzMd="24" nzLg="24">
+            <nz-tree [nzData]="nodes" nzCheckable [nzSearchValue]="searchValue" (nzClick)="treeClick($event)"
+              (nzDblClick)="openFolder($event)">
+              <ng-template #contextTemplate>
+                <ul nz-menu nzInDropDown>
+                  <li nz-menu-item (click)="addChild()" acl [acl-ability]="'base-archives-project-approval:add'">
+                    {{ 'button.add' | translate }}</li>
+                  <li nz-menu-item (click)="delete()" acl [acl-ability]="'base-archives-project-approval:delete'">
+                    {{ 'table.delete' | translate }}</li>
+                  <li nz-menu-item (click)="cancel()">{{ 'button.cancel' | translate }}</li>
+                </ul>
+              </ng-template>
+              <ng-template #nzTreeTemplate let-node>
+                <span class="custom-node">
+                  <span *ngIf="!node.isLeaf" (contextmenu)="contextMenu(node.key,$event, contextTemplate)">
+                    <span class="folder-name">{{ node.title }}</span>
+                  </span>
+                  <span *ngIf="node.isLeaf" (contextmenu)="contextMenu(node.key,$event, contextTemplate)">
+                    <span class="file-name">{{ node.title }}</span>
+                  </span>
+                </span>
+              </ng-template>
+            </nz-tree>
+          </div>
+        </div>
+
+      </nz-card>
+    </div>
+
+
+    <!--右边card-->
+  <div nz-col nzMd="24" nzLg="12">
+    <nz-card>
+      <!-- form -->
+      <form nz-form [formGroup]="validateForm" (ngSubmit)="submitForm()">
+        <nz-form-item>
+          <nz-form-label nzRequired [nzSm]="8" [nzXs]="24">项目编码</nz-form-label>
+          <nz-form-control [nzSm]="14" [nzXs]="24">
+            <input formControlName="code" id="code" [(ngModel)]="baseArchivesProjectApproval.code" name="code" nz-input
+              placeholder="{{ 'placeholder' | translate }}项目编码" />
+              <nz-form-explain *ngIf="validateForm.get('code')?.dirty && validateForm.get('code')?.errors">
+                请输入项目编码
+              </nz-form-explain>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item>
+          <nz-form-label nzRequired [nzSm]="8" [nzXs]="24">项目名称</nz-form-label>
+          <nz-form-control [nzSm]="14" [nzXs]="24">
+            <input formControlName="name" id="name" [(ngModel)]="baseArchivesProjectApproval.name" name="name" nz-input
+              placeholder="{{ 'placeholder' | translate }}项目名称" />
+              <nz-form-explain *ngIf="validateForm.get('code')?.dirty && validateForm.get('code')?.errors">
+                请输入项目名称
+              </nz-form-explain>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item>
+          <nz-form-label nzRequired [nzSm]="8" [nzXs]="24">是否启用
+          </nz-form-label>
+          <nz-form-control [nzSm]="14" [nzXs]="24">
+            <nz-switch [ngModelOptions]="{standalone: true}" [(ngModel)]="status" name="status" nzCheckedChildren="是" nzUnCheckedChildren="否"></nz-switch>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item >
+          <nz-form-label [nzSm]="8" [nzXs]="24" [nzNoColon]=true>
+          </nz-form-label>
+          <nz-form-control [nzSm]="14" [nzXs]="24">
+            <button nzType="primary" (click)="reset()" nz-button ><span>{{ 'button.reset' | translate }}</span></button>
+            <button nz-button nzType="primary">保存</button>
+          </nz-form-control>
+        </nz-form-item>
+      </form>
+    </nz-card>
+  </div>
+  </div>
+</nz-card>

+ 24 - 0
src/app/routes/basedata/project-approval/project-approval.component.spec.ts

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

+ 206 - 0
src/app/routes/basedata/project-approval/project-approval.component.ts

@@ -0,0 +1,206 @@
+import { Component, OnInit, ViewChild, TemplateRef } from '@angular/core';
+import { _HttpClient, ModalHelper } from '@delon/theme';
+import { STColumn, STComponent } from '@delon/abc';
+import { SFSchema } from '@delon/form';
+import { NzDropdownService, NzModalService, NzDropdownContextComponent, NzTreeNode, NzFormatEmitEvent } from 'ng-zorro-antd';
+import { FormBuilder, Validators, FormGroup } from '@angular/forms';
+import { BaseArchivesProjectApproval } from 'app/entity/basedata/base-archives-project-approval';
+import { BasedataProjectApprovalAddComponent } from './add/add.component';
+
+@Component({
+  selector: 'app-basedata-project-approval',
+  templateUrl: './project-approval.component.html',
+})
+export class BasedataProjectApprovalComponent implements OnInit {
+  
+  constructor(
+    private nzDropdownService: NzDropdownService,
+    private modalService:NzModalService,
+    private fb: FormBuilder
+  ) { }
+
+  ngOnInit() {
+    this.validateForm = this.fb.group({
+      code: [null, [Validators.required]],
+      name: [null, [Validators.required]],
+      status:[null]
+    });
+    this.getListContractTree()
+   }
+
+   validateForm!: FormGroup;
+  dropdown: NzDropdownContextComponent;
+  searchValue = "";//搜索框的值
+  nodes: any=[];//tree集合
+  status=true;
+
+   //查询tree合同类型
+   getListContractTree() {
+    // this.contractClassService.getAllContractClass1().then((response) => {
+    //   this.nodes = response.result
+    // })
+    this.nodes=[
+      {
+        code: "001",
+      createBy: "admin",
+      createTime: "2019-05-17 12:01:32",
+      isLeaf: false,
+      key: "604d450067afc7b7f52a8987d60bd745",
+      parentId: "",
+      parentIds: null,
+      title: "产品",
+      value: "604d450067afc7b7f52a8987d60bd745",
+      status:"1",
+      children:[
+        {
+          code: "0001",
+          createBy: "admin",
+          createTime: "2019-05-17 12:01:32",
+          isLeaf: true,
+          key: "2",
+          parentId: "604d450067afc7b7f52a8987d60bd745",
+          parentIds: null,
+          title: "架构",
+          value: "2",
+          status:"0",
+          children:null
+        }
+      ]
+      }
+    ]
+  }
+
+  //双击节点自动打开树分支
+  openFolder(data: NzTreeNode | Required<NzFormatEmitEvent>): void {
+    if (data instanceof NzTreeNode) {
+      data.isExpanded = !data.isExpanded;
+    } else {
+      const node = data.node;
+      if (node) {
+        node.isExpanded = !node.isExpanded;
+      }
+    }
+  }
+
+  //右键树节点
+  id="";
+  contextMenu(Fid, $event: MouseEvent, template: TemplateRef<void>): void {
+    this.id = Fid;//获取id
+    this.dropdown = this.nzDropdownService.create($event, template);
+  }
+
+
+  //树节点点击事件
+  treeClick(event) {
+    var getdDepart = event.node.origin;//当前点击的对象
+    if(getdDepart.status=="0"){//是否启用
+      this.status=false;
+    }else{
+      this.status=true;
+    }
+    this.baseArchivesProjectApproval = {
+      name: getdDepart.title,
+      code: getdDepart.code,
+      id: getdDepart.key
+    }
+  }
+
+  //右键取消
+  cancel() {
+    this.dropdown.close()
+  }
+
+  //项目立项实体
+  baseArchivesProjectApproval:BaseArchivesProjectApproval={};
+
+
+
+  /**
+   * 新增一级按钮
+   */
+  add() {
+    const modalRef = this.modalService.create({
+      nzTitle: "新增",
+      nzContent: BasedataProjectApprovalAddComponent,
+      nzWidth: 600,
+      nzFooter: [
+        {
+          label: "关闭",
+          type: "default",
+          onClick: addModel => {
+            addModel.close()
+          }
+        },
+        {
+          label: "确定",
+          type: "primary",
+          // loading:this.modelSaveLoading,
+          onClick: addModel => {
+            addModel.submitForm()
+          }
+        }
+      ]
+    })
+  }
+
+  /**
+   * 右键新增子集按钮
+   */
+  addChild(){
+    const modalRef = this.modalService.create({
+      nzTitle: "新增",
+      nzContent: BasedataProjectApprovalAddComponent,
+      nzWidth: 600,
+      nzComponentParams:{
+        parentId:this.id
+      },
+      nzFooter: [
+        {
+          label: "关闭",
+          type: "default",
+          onClick: addModel => {
+            addModel.close()
+          }
+        },
+        {
+          label: "确定",
+          type: "primary",
+          // loading:this.modelSaveLoading,
+          onClick: addModel => {
+            addModel.submitForm()
+          }
+        }
+      ]
+    })
+  }
+
+  reset(){
+    this.baseArchivesProjectApproval={}
+  }
+
+  /**
+   * 删除
+   */
+  delete(){
+
+  }
+  /**
+   * 修改保存
+   */
+  submitForm(){
+    for (const i in this.validateForm.controls) {
+      this.validateForm.controls[i].markAsDirty();
+      this.validateForm.controls[i].updateValueAndValidity();
+    }
+    let valid = this.validateForm.valid;
+    if(valid){
+      //格式化是否期用
+      if(this.status){
+        this.baseArchivesProjectApproval.status="1"
+      }else{
+        this.baseArchivesProjectApproval.status="0"
+      }
+      alert(this.baseArchivesProjectApproval.code)
+    }
+  }
+}

+ 1 - 1
src/app/routes/system/menu/edit/edit.component.html

@@ -73,7 +73,7 @@
         </nz-form-explain> -->
       </nz-form-control>
     </nz-form-item>
-    <nz-form-item *ngIf="menuType != '2'">
+    <nz-form-item >
       <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="sortNo">{{'sort'|translate}}</nz-form-label>
       <nz-form-control [nzSm]="14" [nzXs]="24">
         <input nz-input [(ngModel)]="menu.sortNo" id="sortNo" name="sortNo" />

+ 13 - 0
src/app/services/basedata/base-archives-milestone.service.ts

@@ -0,0 +1,13 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+
+@Injectable({
+  providedIn: 'root'
+})
+/**
+ * 里程碑档案
+ */
+export class BaseArchivesMilestoneService {
+
+  constructor(private http:HttpClient) { }
+}

+ 9 - 1
src/app/services/basedata/base-archives-post.service.ts

@@ -6,12 +6,20 @@ import { Result } from 'app/entity/Result';
 @Injectable({
   providedIn: 'root'
 })
+/**
+ * 职务档案
+ */
 export class BaseArchivesPostService {
 
   constructor(private http:HttpClient) { }
 
   //查詢全部
   async getList(body:any): Promise<BaseResponse<Result<any>>> {
-    return await this.http.get<BaseResponse<Result<any>>>('basedata/post/list',{params:body}).toPromise();
+    return await this.http.get<BaseResponse<Result<any>>>('/base/archivesPost/list',{params:body}).toPromise();
+  }
+
+  //查詢Tree
+  async getTreeList(body:any): Promise<BaseResponse<Result<any>>> {
+    return await this.http.get<BaseResponse<Result<any>>>('/base/archivesPost/list',{params:body}).toPromise();
   }
 }

+ 13 - 0
src/app/services/basedata/base-archives-project-approval.service.ts

@@ -0,0 +1,13 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+
+@Injectable({
+  providedIn: 'root'
+})
+/**
+ * 项目立项档案
+ */
+export class BaseArchivesProjectApprovalService {
+
+  constructor(private http:HttpClient) { }
+}

+ 2 - 2
src/app/services/dict.service.ts

@@ -46,8 +46,8 @@ export class DictService {
   }
 
   //根据字典编码查询数据
-  async getByDictCode(code:string):Promise<BaseResponse<Dict>>{
-    return await this.http.get<BaseResponse<Dict>>('sys/dict/getDictItems/'+code).toPromise();
+  async getByDictCode(code:string):Promise<BaseResponse<Dict[]>>{
+    return await this.http.get<BaseResponse<Dict[]>>('sys/dict/getDictItems/'+code).toPromise();
   }
 
   //根据字典编码查询数据