Browse Source

创建流程

main
kkerwin 12 months ago
parent
commit
0988c2cd7b
  1. 45
      web-admin-app/src/app/components/apply-asset-flow/apply-asset-flow.component.html
  2. 0
      web-admin-app/src/app/components/apply-asset-flow/apply-asset-flow.component.less
  3. 100
      web-admin-app/src/app/components/apply-asset-flow/apply-asset-flow.component.ts
  4. 3
      web-admin-app/src/app/components/component-basic-category-tree/component-basic-category-tree.component.ts
  5. 2
      web-admin-app/src/app/components/index.ts
  6. 3
      web-admin-app/src/app/pages/fixed-asset/basic/basic-category/basic-category.component.ts
  7. 9
      web-admin-app/src/app/pages/fixed-asset/basic/basic-maintainer/basic-maintainer.component.html
  8. 9
      web-admin-app/src/app/pages/fixed-asset/basic/basic-manufacturer/basic-manufacturer.component.html
  9. 9
      web-admin-app/src/app/pages/fixed-asset/basic/basic-supplier/basic-supplier.component.html
  10. 10
      web-admin-app/src/app/pages/fixed-asset/basic/basic-warehouse/basic-warehouse.component.html
  11. 9
      web-admin-app/src/app/pages/fixed-asset/basic/save-position/save-position.component.html
  12. 2
      web-admin-app/src/app/pages/fixed-asset/basic/save-position/save-position.component.ts
  13. 4
      web-admin-app/src/app/pages/fixed-asset/fixed-asset.component.html
  14. 16
      web-admin-app/src/app/pages/flow/flow-main/flow-main.component.html
  15. 32
      web-admin-app/src/app/pages/flow/flow-main/flow-main.component.ts
  16. 8
      web-admin-app/src/app/pages/org-setting/org-setting.component.html
  17. 3
      web-admin-app/src/app/services/api.service.ts

45
web-admin-app/src/app/components/apply-asset-flow/apply-asset-flow.component.html

@ -0,0 +1,45 @@
<div class="modal">
<form nz-form [formGroup]="formGroup" nzLayout="vertical">
<div class="overflow-hidden">
<div nz-row [nzGutter]="24">
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label nzRequired>流程标题</nz-form-label>
<nz-form-control [nzErrorTip]="errorTpl">
<input nz-input placeholder="请输入流程标题" formControlName="title" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label nzRequired>申请部门</nz-form-label>
<nz-form-control [nzErrorTip]="errorTpl">
<app-org-select formControlName="applyDepartmentId" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="6">
<nz-form-item>
<nz-form-label nzRequired>申请人</nz-form-label>
<nz-form-control [nzErrorTip]="errorTpl">
<input nz-input placeholder="请输入申请人" formControlName="applicant" />
</nz-form-control>
</nz-form-item>
</div>
<div nz-col [nzSpan]="24">
<nz-form-item>
<nz-form-label [nzRequired]="true">原因</nz-form-label>
<nz-form-control [nzErrorTip]="errorTpl">
<textarea nz-input placeholder="请输入原因" formControlName="notes"></textarea>
</nz-form-control>
</nz-form-item>
</div>
</div>
</div>
</form>
<ng-template #errorTpl let-control>
<form-error-tips [control]="control"></form-error-tips>
</ng-template>
</div>

0
web-admin-app/src/app/components/apply-asset-flow/apply-asset-flow.component.less

100
web-admin-app/src/app/components/apply-asset-flow/apply-asset-flow.component.ts

@ -0,0 +1,100 @@
import { Component, Input, OnInit, inject } from '@angular/core'
import { FormBuilder, FormGroup } from '@angular/forms'
import { ApiService } from 'app/services'
import { SharedModule } from 'app/shared/shared.module'
import { FormValidators, Utils } from 'app/utils'
import { NzMessageService } from 'ng-zorro-antd/message'
import { OrgSelectComponent } from '../org-select/org-select.component'
import { SelectUserByOrgComponent } from '../select-user-by-org/select-user-by-org.component'
import { PositionSelectComponent } from '../position-select/position-select.component'
import { NzSafeAny } from 'ng-zorro-antd/core/types'
import { NZ_MODAL_DATA } from 'ng-zorro-antd/modal'
import { SupplierSelectComponent } from '../supplier-select/supplier-select.component'
import { AssetSelectComponent } from '../asset-select/asset-select.component'
import { WarehouseSelectComponent } from '../warehouse-select/warehouse-select.component'
@Component({
selector: 'app-apply-asset-flow',
standalone: true,
imports: [
SharedModule,
SelectUserByOrgComponent,
SupplierSelectComponent,
AssetSelectComponent,
OrgSelectComponent,
PositionSelectComponent,
WarehouseSelectComponent,
],
templateUrl: './apply-asset-flow.component.html',
styleUrl: './apply-asset-flow.component.less',
})
export class ApplyAssetFlowComponent {
constructor(
private fb: FormBuilder,
private api: ApiService,
private msg: NzMessageService,
) {}
readonly data: NzSafeAny = inject(NZ_MODAL_DATA)
formGroup!: FormGroup
groupIndex = 0
uploadLoading = false
ngOnInit(): void {
this.formGroup = this.fb.group({
id: this.fb.control(null, []),
title: this.fb.control('', [FormValidators.required('请输入')]),
// useUserId: this.fb.control(null, [FormValidators.required('请选择')]),
applyDepartmentId: this.fb.control(null, [FormValidators.required('请选择')]),
applicant: this.fb.control({ value: this.api.authInfo?.userName, disabled: true }, [
FormValidators.required('请选择'),
]),
// businessGeneratedDate: this.fb.control(null, [FormValidators.required('请选择')]),
notes: this.fb.control(null, [FormValidators.required('请输入')]),
})
this.patchValues()
}
patchValues() {
const { value: data, preview } = this.data
if (data) {
this.formGroup.patchValue({
...data,
})
}
if (preview) {
this.formGroup.disable()
}
}
public getValues() {
let values = null
if (FormValidators.validateFormGroup(this.formGroup)) {
const v = this.formGroup.value
values = {
...v,
applyDepartmentId: Number(v.applyDepartmentId?.[0]),
}
}
return values
}
onFileChange(e: Event) {
const target = e.target as HTMLInputElement
const file = target.files![0]
target.value = ''
const formdata = new FormData()
formdata.append('file', file)
this.api.upload(formdata).subscribe((res) => {
this.formGroup.get('attach')?.setValue(res.body.fileName)
})
}
}

3
web-admin-app/src/app/components/component-basic-category-tree/component-basic-category-tree.component.ts

@ -84,10 +84,9 @@ export class ComponentBasicCategoryTreeComponent {
selectedKeys: string[] = [] selectedKeys: string[] = []
initTree() { initTree() {
this.api.getBasicCategoryTree().subscribe((res) => { this.api.getBasicCategoryTree(true).subscribe((res) => {
this.nodes = buildCateTree(res.body) this.nodes = buildCateTree(res.body)
this.expandedKeys = [...this.expandedKeys] this.expandedKeys = [...this.expandedKeys]
console.log('this.selectedKeys', this.selectedKeys)
if (this.selectedKeys.length === 0) { if (this.selectedKeys.length === 0) {
this.selectedKeys = [this.nodes[0].key] this.selectedKeys = [this.nodes[0].key]
} else { } else {

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

@ -26,3 +26,5 @@ export * from './repair-fault-form/repair-fault-form.component'
export * from './position-tree/position-tree.component' export * from './position-tree/position-tree.component'
export * from './stocktaking-detail-form/stocktaking-detail-form.component' export * from './stocktaking-detail-form/stocktaking-detail-form.component'
export * from './apply-asset-flow/apply-asset-flow.component'

3
web-admin-app/src/app/pages/fixed-asset/basic/basic-category/basic-category.component.ts

@ -43,6 +43,7 @@ export class BasicCategoryComponent {
initCreateForm() { initCreateForm() {
this.createForm = this.fb.group({ this.createForm = this.fb.group({
categoryId: [], categoryId: [],
parentId: ['', [FormValidators.required('请输入')]],
categoryName: ['', [FormValidators.required('请输入')]], categoryName: ['', [FormValidators.required('请输入')]],
safetyLimit: [0, []], safetyLimit: [0, []],
lowerLimit: [0, []], lowerLimit: [0, []],
@ -74,7 +75,7 @@ export class BasicCategoryComponent {
}) })
.subscribe((res) => { .subscribe((res) => {
this.msg.success(res.desc) this.msg.success(res.desc)
console.log('this.treeEl', this.treeEl)
this.treeEl.initTree() this.treeEl.initTree()
}) })
} }

9
web-admin-app/src/app/pages/fixed-asset/basic/basic-maintainer/basic-maintainer.component.html

@ -1,11 +1,16 @@
<app-page class="p-3" [actions]="actionsTpl"> <app-page class="p-3">
<ng-template #actionsTpl> <ng-template #actionsTpl>
<nz-space> <nz-space>
<button *nzSpaceItem nz-button nzType="primary" (click)="onCreate()">新建</button> <button *nzSpaceItem nz-button nzType="primary" (click)="onCreate()">新建</button>
</nz-space> </nz-space>
</ng-template> </ng-template>
<div class="flex-1 overflow-hidden"> <div class="flex-1 overflow-hidden">
<app-server-paginated-table [options]="table" [renderColumn]="renderColumnTpl" [formGroup]="queryForm"> <app-server-paginated-table
[options]="table"
[tableAction]="actionsTpl"
[renderColumn]="renderColumnTpl"
[formGroup]="queryForm"
>
<ng-template #renderColumnTpl let-data let-key="key" let-row="row"> <ng-template #renderColumnTpl let-data let-key="key" let-row="row">
@switch (key) { @switch (key) {
@case ('status') { @case ('status') {

9
web-admin-app/src/app/pages/fixed-asset/basic/basic-manufacturer/basic-manufacturer.component.html

@ -1,11 +1,16 @@
<app-page class="p-3" [actions]="actionsTpl"> <app-page class="p-3">
<ng-template #actionsTpl> <ng-template #actionsTpl>
<nz-space> <nz-space>
<button *nzSpaceItem nz-button nzType="primary" (click)="onCreate()">新建</button> <button *nzSpaceItem nz-button nzType="primary" (click)="onCreate()">新建</button>
</nz-space> </nz-space>
</ng-template> </ng-template>
<div class="overflow-hidden flex-1"> <div class="overflow-hidden flex-1">
<app-server-paginated-table [options]="table" [renderColumn]="renderColumnTpl" [formGroup]="queryForm"> <app-server-paginated-table
[options]="table"
[tableAction]="actionsTpl"
[renderColumn]="renderColumnTpl"
[formGroup]="queryForm"
>
<ng-template #renderColumnTpl let-data let-key="key" let-row="row"> <ng-template #renderColumnTpl let-data let-key="key" let-row="row">
@switch (key) { @switch (key) {
@case ('status') { @case ('status') {

9
web-admin-app/src/app/pages/fixed-asset/basic/basic-supplier/basic-supplier.component.html

@ -1,11 +1,16 @@
<app-page class="p-3" [actions]="actionsTpl"> <app-page class="p-3">
<ng-template #actionsTpl> <ng-template #actionsTpl>
<nz-space> <nz-space>
<button *nzSpaceItem nz-button nzType="primary" (click)="onCreate()">新建</button> <button *nzSpaceItem nz-button nzType="primary" (click)="onCreate()">新建</button>
</nz-space> </nz-space>
</ng-template> </ng-template>
<div class="flex-1 overflow-hidden"> <div class="flex-1 overflow-hidden">
<app-server-paginated-table [options]="table" [renderColumn]="renderColumnTpl" [formGroup]="queryForm"> <app-server-paginated-table
[tableAction]="actionsTpl"
[options]="table"
[renderColumn]="renderColumnTpl"
[formGroup]="queryForm"
>
<ng-template #renderColumnTpl let-data let-key="key" let-row="row"> <ng-template #renderColumnTpl let-data let-key="key" let-row="row">
@switch (key) { @switch (key) {
@case ('status') { @case ('status') {

10
web-admin-app/src/app/pages/fixed-asset/basic/basic-warehouse/basic-warehouse.component.html

@ -1,4 +1,4 @@
<app-page class="p-3" [actions]="actionsTpl"> <app-page class="p-3">
<ng-template #actionsTpl> <ng-template #actionsTpl>
<nz-space> <nz-space>
<button *nzSpaceItem nz-button nzType="primary" (click)="onCreate()">新建</button> <button *nzSpaceItem nz-button nzType="primary" (click)="onCreate()">新建</button>
@ -6,7 +6,12 @@
</ng-template> </ng-template>
<div class="flex flex-1"> <div class="flex flex-1">
<div class="flex-1"> <div class="flex-1">
<app-server-paginated-table [options]="table" [renderColumn]="renderColumnTpl" [formGroup]="queryForm"> <app-server-paginated-table
[tableAction]="actionsTpl"
[options]="table"
[renderColumn]="renderColumnTpl"
[formGroup]="queryForm"
>
<ng-template #renderColumnTpl let-data let-key="key" let-row="row"> <ng-template #renderColumnTpl let-data let-key="key" let-row="row">
@switch (key) { @switch (key) {
@case ('status') { @case ('status') {
@ -29,7 +34,6 @@
<app-query-item label="状态"> <app-query-item label="状态">
<nz-select <nz-select
nzPlacement="bottomRight" nzPlacement="bottomRight"
nzBorderless
class="!w-20" class="!w-20"
[nzDropdownMatchSelectWidth]="false" [nzDropdownMatchSelectWidth]="false"
formControlName="status" formControlName="status"

9
web-admin-app/src/app/pages/fixed-asset/basic/save-position/save-position.component.html

@ -1,4 +1,4 @@
<app-page class="p-3" [actions]="actionsTpl"> <app-page class="p-3">
<ng-template #actionsTpl> <ng-template #actionsTpl>
<nz-space> <nz-space>
<button *nzSpaceItem nz-button nzType="primary" (click)="onCreate()">新建</button> <button *nzSpaceItem nz-button nzType="primary" (click)="onCreate()">新建</button>
@ -6,7 +6,12 @@
</ng-template> </ng-template>
<div class="flex flex-1"> <div class="flex flex-1">
<div class="flex-1"> <div class="flex-1">
<app-server-paginated-table [options]="table" [renderColumn]="renderColumnTpl" [formGroup]="queryForm"> <app-server-paginated-table
[tableAction]="actionsTpl"
[options]="table"
[renderColumn]="renderColumnTpl"
[formGroup]="queryForm"
>
<ng-template #renderColumnTpl let-data let-key="key" let-row="row"> <ng-template #renderColumnTpl let-data let-key="key" let-row="row">
@switch (key) { @switch (key) {
@case ('status') { @case ('status') {

2
web-admin-app/src/app/pages/fixed-asset/basic/save-position/save-position.component.ts

@ -93,7 +93,7 @@ export class SavePositionComponent implements OnInit {
.saveBasicPosition({ .saveBasicPosition({
...value, ...value,
parentId: 0, parentId: 0,
positionId: value.positionId ?? 0, positionId: value.positionId,
}) })
.subscribe((res) => { .subscribe((res) => {
this.msg.success(res.desc) this.msg.success(res.desc)

4
web-admin-app/src/app/pages/fixed-asset/fixed-asset.component.html

@ -165,9 +165,9 @@
[nzOpen]="openedSubmenu.startsWith('/fixed-asset/basic/')" [nzOpen]="openedSubmenu.startsWith('/fixed-asset/basic/')"
> >
<ul> <ul>
<li nz-menu-item [nzPaddingLeft]="24" [routerLink]="['/fixed-asset/basic/goods-stock']" nzMatchRouter> <!-- <li nz-menu-item [nzPaddingLeft]="24" [routerLink]="['/fixed-asset/basic/goods-stock']" nzMatchRouter>
物品档案 物品档案
</li> </li> -->
<li nz-menu-item [nzPaddingLeft]="24" [routerLink]="['/fixed-asset/basic/category']" nzMatchRouter> <li nz-menu-item [nzPaddingLeft]="24" [routerLink]="['/fixed-asset/basic/category']" nzMatchRouter>
物品分类 物品分类
</li> </li>

16
web-admin-app/src/app/pages/flow/flow-main/flow-main.component.html

@ -2,21 +2,19 @@
<nz-spin [nzSpinning]="loading"> <nz-spin [nzSpinning]="loading">
<div nz-row [nzGutter]="[24, 24]"> <div nz-row [nzGutter]="[24, 24]">
@for (item of assetFlows; track $index) { @for (item of assetFlows; track $index) {
<div nz-col nzSpan="6"> <div nz-col nzSpan="8" [nzXl]="6">
<nz-card [nzBordered]="false" [nzActions]="[actionSetting]"> <nz-card [nzBordered]="false" [nzActions]="[actionSetting]">
<div class="h-22 flex"> <div class="h-22 flex overflow-hidden">
<div class="flex-shrink-0"> <div class="flex-shrink-0">
<div class="icon flex items-center justify-center"> <div class="icon flex items-center justify-center">
<span nz-icon nzType="node-index" nzTheme="outline"></span> <span nz-icon nzType="node-index" nzTheme="outline"></span>
</div> </div>
</div> </div>
<div class="flex-1 pl-3 text-base"> <div class="flex-1 pl-3 text-base overflow-hidden">
<p>
{{ item.name }}
</p>
<div> <div>
{{ item.formKey }} {{ item.name }}
</div> </div>
<div class="mt-2 break-words whitespace-pre-wrap">{{ item.formKey }}</div>
@if (item._assignee) { @if (item._assignee) {
<div class="mt-2"> <div class="mt-2">
<nz-tag> 审批人:{{ item._assignee.userName }} </nz-tag> <nz-tag> 审批人:{{ item._assignee.userName }} </nz-tag>
@ -24,7 +22,9 @@
} }
</div> </div>
</div> </div>
<ng-template #actionSetting> 发起流程 </ng-template> <ng-template #actionSetting>
<div (click)="onStart(item)">发起流程</div>
</ng-template>
</nz-card> </nz-card>
</div> </div>
} }

32
web-admin-app/src/app/pages/flow/flow-main/flow-main.component.ts

@ -1,10 +1,11 @@
import { Component, OnInit } from '@angular/core' import { Component, OnInit } from '@angular/core'
import { ApplyAssetFlowComponent } from 'app/components'
import { ApiService } from 'app/services' import { ApiService } from 'app/services'
import { SharedModule } from 'app/shared/shared.module' import { SharedModule } from 'app/shared/shared.module'
import { NzSafeAny } from 'ng-zorro-antd/core/types' import { NzSafeAny } from 'ng-zorro-antd/core/types'
import { NzMessageService } from 'ng-zorro-antd/message' import { NzMessageService } from 'ng-zorro-antd/message'
import { NzModalService } from 'ng-zorro-antd/modal' import { NzModalService } from 'ng-zorro-antd/modal'
import { finalize } from 'rxjs' import { finalize, lastValueFrom } from 'rxjs'
@Component({ @Component({
selector: 'app-flow-main', selector: 'app-flow-main',
@ -37,4 +38,33 @@ export class FlowMainComponent implements OnInit {
this.assetFlows = res.body this.assetFlows = res.body
}) })
} }
comsMap = {
eam_asset_employee_apply: ApplyAssetFlowComponent,
}
onStart(model: NzSafeAny) {
this.modal.create({
nzTitle: '开始流程',
nzContent: this.comsMap[model.formKey as keyof typeof this.comsMap],
nzWrapClassName: 'modal-lg',
nzWidth: '80vw',
nzData: {
value: model,
preview: false,
},
nzOnOk: async (e) => {
const vals = e.getValues()
if (vals) {
const res = await lastValueFrom(this.api.startFlow(vals, model.formKey))
this.msg.success(res.desc)
return true
}
return false
},
nzOnCancel: () => {
console.log('Cancel')
},
})
}
} }

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

@ -12,11 +12,11 @@
</button> </button>
</nz-space> </nz-space>
</ng-template> </ng-template>
<div class="flex flex-1"> <div class="flex flex-1 overflow-hidden">
<nz-card [nzBordered]="false" class="org shadow" nzSize="small"> <nz-card [nzBordered]="false" class="org shadow" nzSize="small">
<app-component-org-tree class="block w-60" (onOrgSelectedChange)="onOrgSelectedChange($event)" /> <app-component-org-tree class="block w-60" (onOrgSelectedChange)="onOrgSelectedChange($event)" />
</nz-card> </nz-card>
<div class="flex-1 pl-3"> <div class="flex-1 pl-3 overflow-hidden">
<app-server-paginated-table [options]="table" [renderColumn]="renderColumnTpl" [formGroup]="queryForm"> <app-server-paginated-table [options]="table" [renderColumn]="renderColumnTpl" [formGroup]="queryForm">
<ng-template #renderColumnTpl let-data let-key="key" let-row="row"> <ng-template #renderColumnTpl let-data let-key="key" let-row="row">
@switch (key) { @switch (key) {
@ -29,8 +29,8 @@
} }
@case ('status') { @case ('status') {
<nz-badge <nz-badge
[nzText]="data === 0 ? '在职' : '离职'" [nzText]="data === '0' ? '在职' : '离职'"
[nzStatus]="data === 0 ? 'processing' : 'error'" [nzStatus]="data === '0' ? 'processing' : 'error'"
/> />
} }
@case ('sex') { @case ('sex') {

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

@ -489,4 +489,7 @@ export class ApiService {
getMyFinishedAssetFlow(data: {}) { getMyFinishedAssetFlow(data: {}) {
return this.http.post<JwResponse>(`/api/flowable/task/finishedList`, data) return this.http.post<JwResponse>(`/api/flowable/task/finishedList`, data)
} }
startFlow(json: {}, form_key: string) {
return this.http.post<JwResponse>(`/api/flowable/definition/start/${form_key}`, json)
}
} }

Loading…
Cancel
Save