From 2fb55d919b51120751a2051acbf55a8b8659221f Mon Sep 17 00:00:00 2001 From: jiangyang <1140938202@qq.com> Date: Fri, 1 Mar 2024 14:55:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=A2=9E=E5=8A=A0=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E4=B8=8B=E5=BB=BA=E8=A1=A8=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Config/Components/RootNode/index.tsx | 2 +- .../operate/entityForm/labelsForm.tsx | 9 ++- src/ts/base/schema.ts | 2 + src/ts/core/thing/standard/application.ts | 56 ++++++++++++++++--- src/ts/core/thing/standard/index.ts | 10 +++- 5 files changed, 65 insertions(+), 14 deletions(-) diff --git a/src/components/Common/FlowDesign/Config/Components/RootNode/index.tsx b/src/components/Common/FlowDesign/Config/Components/RootNode/index.tsx index 0b5c3eb00..425068d3d 100644 --- a/src/components/Common/FlowDesign/Config/Components/RootNode/index.tsx +++ b/src/components/Common/FlowDesign/Config/Components/RootNode/index.tsx @@ -194,7 +194,7 @@ const RootNode: React.FC = (props) => { i.id, diff --git a/src/executor/operate/entityForm/labelsForm.tsx b/src/executor/operate/entityForm/labelsForm.tsx index 58a74a5cc..9e176a5d7 100644 --- a/src/executor/operate/entityForm/labelsForm.tsx +++ b/src/executor/operate/entityForm/labelsForm.tsx @@ -7,6 +7,7 @@ import React, { useState } from 'react'; import UploadItem from '../../tools/uploadItem'; import { CollectionTable } from './collectionForm'; import { EntityColumns } from './entityColumns'; +import { IApplication } from '@/ts/core'; interface Iprops { formType: string; @@ -27,7 +28,7 @@ const LabelsForm = (props: Iprops) => { } const [center, setCenter] = useState(<>); let title = ''; - let directory: IDirectory; + let directory: IDirectory | IApplication; let form: IForm | undefined; const readonly = props.formType === 'remark'; let initialValue: any = props.current.metadata; @@ -169,7 +170,11 @@ const LabelsForm = (props: Iprops) => { await form!.update(values); break; case 'new': - await directory.standard.createForm(values); + if('standard' in directory){ + await directory.standard.createForm(values); + }else{ + directory.createForm(values); + } break; } props.finished(); diff --git a/src/ts/base/schema.ts b/src/ts/base/schema.ts index bc61643b0..ccbf06fa0 100644 --- a/src/ts/base/schema.ts +++ b/src/ts/base/schema.ts @@ -211,6 +211,8 @@ export type XForm = { reportDatas: string; // 存储的集合名称 collName: string | undefined; + // 父类目ID + parentId?:string } & XStandard; // 用户自定义集合 diff --git a/src/ts/core/thing/standard/application.ts b/src/ts/core/thing/standard/application.ts index 57640aa59..27c9734a7 100644 --- a/src/ts/core/thing/standard/application.ts +++ b/src/ts/core/thing/standard/application.ts @@ -7,6 +7,7 @@ import { XCollection } from '../../public/collection'; import { formatDate } from '@/utils'; import { deepClone } from '@/ts/base/common'; import { getUuid, isHasApprovalNode } from '@/utils/tools'; +import { Form, IForm } from './form'; /** 应用/模块接口类 */ export interface IApplication extends IStandardFileInfo { @@ -16,6 +17,8 @@ export interface IApplication extends IStandardFileInfo { children: IApplication[]; /** 流程定义 */ works: IWork[]; + /** 表单 */ + forms: IForm[]; /** 根据id查找办事 */ findWork(id: string, applicationId?: string): Promise; /** 加载办事 */ @@ -24,6 +27,10 @@ export interface IApplication extends IStandardFileInfo { loadAllWorks(reload?: boolean): Promise; /** 新建办事 */ createWork(data: model.WorkDefineModel): Promise; + /** 加载表单 */ + loadForm(reload?: boolean): Promise; + /**新建表单 */ + createForm(data: schema.XForm): Promise; /** 新建模块 */ createModule(data: schema.XApplication): Promise; /** 搜索文件 */ @@ -46,6 +53,7 @@ export class Application this.loadChildren(_applications); } works: IWork[] = []; + forms: IForm[] = []; children: IApplication[] = []; parent: IApplication | undefined; private _worksLoaded: boolean = false; @@ -73,7 +81,7 @@ export class Application return tags; } content(): IFile[] { - return [...this.children, ...this.works].sort((a, b) => + return [...this.children, ...this.works, ...this.forms].sort((a, b) => a.metadata.updateTime < b.metadata.updateTime ? 1 : -1, ); } @@ -301,6 +309,29 @@ export class Application return work; } } + async loadForm(reload?: boolean | undefined): Promise { + if (reload) { + const data = await this.directory.resource.formColl.loadSpace({ + options: { match: { directoryId: this.directory.id } }, + }); + this.forms = data + .filter((i) => i.parentId == this.id) + .map((i) => new Form(i, this.directory)); + } + return this.forms; + } + async createForm(data: schema.XForm): Promise { + data.parentId = this.id; + data.directoryId = this.directory.id; + const result = await this.directory.resource.formColl.insert({ + ...data, + attributes: [], + }); + if (result) { + this.receive('insertForm', result); + return result; + } + } async createModule( data: schema.XApplication, ): Promise { @@ -315,6 +346,7 @@ export class Application } async loadContent(reload: boolean = false): Promise { await this.loadWorks(reload); + await this.loadForm(true); return true; } override operates(): model.OperateModel[] { @@ -323,7 +355,11 @@ export class Application ...super.operates(), ]; if (this.directory.target.hasRelationAuth()) { - operates.push(directoryOperates.NewModule, directoryOperates.NewWork); + operates.push( + directoryOperates.NewModule, + directoryOperates.NewWork, + directoryOperates.NewForm, + ); if (this.directory.target.user.copyFiles.size > 0) { operates.push(fileOperates.Parse); } @@ -359,7 +395,7 @@ export class Application } } } - override receive(operate: string, data: schema.XApplication): boolean { + override receive(operate: string, data: schema.XApplication | schema.XForm): boolean { if (data.id === this.id) { this.coll.removeCache((i) => i.id != data.id); super.receive(operate, data); @@ -372,13 +408,15 @@ export class Application } else { switch (operate) { case 'insert': - { - this.coll.cache.push(data); - const children: schema.XApplication[] = []; - if ('children' in data) { - children.push(...(data.children as schema.XApplication[])); + if ('resource' in data) { + { + this.coll.cache.push(data); + const children: schema.XApplication[] = []; + if ('children' in data) { + children.push(...(data.children as schema.XApplication[])); + } + this.children.push(new Application(data, this.directory, this, children)); } - this.children.push(new Application(data, this.directory, this, children)); } break; case 'remove': diff --git a/src/ts/core/thing/standard/index.ts b/src/ts/core/thing/standard/index.ts index 1a060389b..275c5cabc 100644 --- a/src/ts/core/thing/standard/index.ts +++ b/src/ts/core/thing/standard/index.ts @@ -75,7 +75,9 @@ export class StandardFiles { const data = await this.resource.formColl.loadSpace({ options: { match: { directoryId: this.id } }, }); - this.forms = data.map((i) => new Form(i, this.directory)); + this.forms = data + .filter((i) => !('parentId' in i)) + .map((i) => new Form(i, this.directory)); } return this.forms; } @@ -341,7 +343,11 @@ function subscribeCallback( directory.standard.standardFiles .find((i) => i.id === entity.id) ?.receive(operate, entity); - if (entity.typeName === '模块' || entity.typeName === '办事') { + if ( + entity.typeName === '模块' || + entity.typeName === '办事' || + entity.typeName === '表单' + ) { directory.standard.applications.forEach((i) => i.receive(operate, entity)); } break; -- Gitee