diff --git a/packages/designer/src/components/composition/command.service.tsx b/packages/designer/src/components/composition/command.service.tsx index 4fa5dc66715a2fd3616d407dd7f829cdc5312c85..757957d7db00e1564892d9ec338028524fc8cb43 100644 --- a/packages/designer/src/components/composition/command.service.tsx +++ b/packages/designer/src/components/composition/command.service.tsx @@ -157,10 +157,18 @@ export function useFormCommandService(formSchemaService: UseFormSchema, useFormS });; }); } + + function hasNoCustomCommands(): boolean { + return [DesignerMode.PC_NoCode, DesignerMode.Mobile_NoCode].includes(formSchemaService.designerMode); + } + /** * 将当前表单相关的自定义构件追加到webCmds中 */ function loadCommandsInCurrentPath(): Promise { + if (hasNoCustomCommands()) { + return Promise.resolve(); + } const commandsInfos = formSchemaService.getCommands(); const metadataInfo = formSchemaService.getFormMetadataBasicInfo(); const formCode = formSchemaService.designerMode === DesignerMode.PC_RTC ? metadataInfo.rtcCode : metadataInfo.code; diff --git a/packages/designer/src/components/composition/designer-context/use-designer-context.ts b/packages/designer/src/components/composition/designer-context/use-designer-context.ts index 2b204cdd421ae324a8e37684b321cb1194807e24..5dac78fdd7b4a0a84a98aa7dab52c0f7ead7c6ce 100644 --- a/packages/designer/src/components/composition/designer-context/use-designer-context.ts +++ b/packages/designer/src/components/composition/designer-context/use-designer-context.ts @@ -1,14 +1,15 @@ import { DesignerMode, UseDesignerContext } from "../../types/designer-context"; import { useLocation } from "../use-location"; -import { useMobileDesignerContext } from "./use-mobile-designer-context"; import { usePCDesignerContext } from "./use-pc-designer-context"; import { usePCRtcDesignerContext } from "./use-pc-rtc-designer-context"; +import { usePCNocodeDesignerContext } from "./use-pc-nocode-designer-context"; /** * 设计器上下文 * @returns */ export function useDesignerContext(): UseDesignerContext { + /** * 判断的当前设计器运行环境 */ @@ -20,6 +21,12 @@ export function useDesignerContext(): UseDesignerContext { if (designerEnvType === 'runtimeCustom') { return DesignerMode.PC_RTC; } + if (designerEnvType === 'noCode') { + return DesignerMode.PC_NoCode; + } + if (designerEnvType === 'mobileNoCode') { + return DesignerMode.Mobile_NoCode; + } if (metadataPath && metadataPath.includes('.mfrm')) { return DesignerMode.Mobile; } @@ -30,12 +37,14 @@ export function useDesignerContext(): UseDesignerContext { const designerMode = getDesignerMode(); switch (designerMode) { - case DesignerMode.PC: case DesignerMode.Mobile: { + case DesignerMode.PC: + case DesignerMode.Mobile: { return usePCDesignerContext(); } - // { - // return useMobileDesignerContext(); - // } + case DesignerMode.PC_NoCode: + case DesignerMode.Mobile_NoCode: { + return usePCNocodeDesignerContext(); + } case DesignerMode.PC_RTC: { return usePCRtcDesignerContext(); } diff --git a/packages/designer/src/components/composition/designer-context/use-pc-nocode-designer-context.ts b/packages/designer/src/components/composition/designer-context/use-pc-nocode-designer-context.ts new file mode 100644 index 0000000000000000000000000000000000000000..5ad976122018ef45b6d45336a64344763a208367 --- /dev/null +++ b/packages/designer/src/components/composition/designer-context/use-pc-nocode-designer-context.ts @@ -0,0 +1,60 @@ +import { DesignerMode, UseDesignerContext } from "../../types/designer-context"; +import ToolboxItems from '../../types/toolbox/pc-toolbox.json'; +import { usePCControlCreator } from "../control-creator/use-pc-control-creator.service"; +import SupportedControllers from '../../composition/command/supported-controllers/pc-supported-controller.json'; +import { FormComponent, UseFormSchema } from "../../../components/types"; +import ControllCategories from '../schema-repository/controller/pc-categories'; +import { useNocodeFormMetadata } from "../form-metadata-nocode.service"; +import { useCommandBuilderService as useCommandBuilder } from "../command-builder.service"; + +export function usePCNocodeDesignerContext(): UseDesignerContext { + + /** 设计器模式 */ + const designerMode: DesignerMode = DesignerMode.PC_NoCode; + + /** 工具箱的数据 */ + const toolboxItems: any[] = ToolboxItems; + + /** 要注册的UI组件 */ + const componentsToRegister: any = null; + + /** 支持的控制器 */ + const supportedControllers: any = SupportedControllers; + + /** 控制器分类 */ + const controllCategories: any = ControllCategories; + + /** 控件创建服务 */ + const useControlCreator = usePCControlCreator; + + /** 表单元数据服务 */ + const useFormMetadataService = useNocodeFormMetadata; + + /** 表单构件元数据服务 */ + const useCommandBuilderService = useCommandBuilder; + + /** + * 获取所有的页面组件 + * @returns + */ + function getPageComponents(useFormSchema: UseFormSchema): FormComponent[] { + const pageComponents: FormComponent[] = []; + const pageComponent = useFormSchema.getComponentById('root-component'); + if (pageComponent) { + pageComponents.push(pageComponent); + } + return pageComponents; + } + + return { + designerMode, + toolboxItems, + componentsToRegister, + supportedControllers, + controllCategories, + useControlCreator, + getPageComponents, + useFormMetadataService, + useCommandBuilderService + }; +} diff --git a/packages/designer/src/components/composition/form-metadata-nocode.service.ts b/packages/designer/src/components/composition/form-metadata-nocode.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..85a685ee0d1b3d1c150d0c8defd7641a7cdf32e8 --- /dev/null +++ b/packages/designer/src/components/composition/form-metadata-nocode.service.ts @@ -0,0 +1,47 @@ +import axios from 'axios'; +import { omit } from 'lodash-es'; +import { DesignerProps } from '../designer.props'; +import { FormMetadaDataDom, MetadataDto, UseFormSchema, UseFormMetadata, FormMetaDataModule } from '../types'; +import { useLocation } from './use-location'; +import { useFormMetadata } from './form-metadata.service'; + +export function useNocodeFormMetadata(props: DesignerProps, useFormSchemaComposition: UseFormSchema): UseFormMetadata { + + const nocodeMetadataUrl = '/api/dev/nocode/v1.0/micro-apps/metadatas'; + + function queryMetadata(): Promise { + const { getHrefParam } = useLocation(); + const metadataId = getHrefParam('metadataId'); + const url = `${nocodeMetadataUrl}/${metadataId}`; + return axios.get(url).then((response: any) => { + const formSchema = JSON.parse(response.data.content).Contents; + const formMetadataBasicInfo = omit(response.data, 'content') as MetadataDto; + + useFormSchemaComposition.setFormMetadataBasicInfo(formMetadataBasicInfo); + useFormSchemaComposition.setFormSchema(formSchema); + return formSchema; + }); + } + + function saveFormMetadata() { + return Promise.resolve(); + } + + function queryFormTemplateRule(formModule: FormMetaDataModule): Promise { + return useFormMetadata(props, useFormSchemaComposition).queryFormTemplateRule(formModule); + } + + function runForm(loadingService: any, messageBoxService: any) { + } + + function publishMenu(messageBoxService: any, notifyService: any) { + } + + return { + queryMetadata, + saveFormMetadata, + queryFormTemplateRule, + runForm, + publishMenu, + }; +} diff --git a/packages/designer/src/components/composition/metadata.service.ts b/packages/designer/src/components/composition/metadata.service.ts index 1047d6b16f9306ef2b5c4128d90b9de279ac7cc1..921e414e25ee9a86ba8a154d878624a2601473c9 100644 --- a/packages/designer/src/components/composition/metadata.service.ts +++ b/packages/designer/src/components/composition/metadata.service.ts @@ -40,7 +40,7 @@ export class MetadataService { */ public getMetadataListByType(relativePath: string, metadataType: string): Promise { let url; - if (this.designerMode === DesignerMode.PC_RTC) { + if (this.shouldUseRtcApi()) { url = `${this.rtcMetadataBasePath}?metadataTypes=${metadataType}`; } else { url = `${this.metadataBasePath}?path=${relativePath}&metadataTypeList=${metadataType}`; @@ -58,7 +58,7 @@ export class MetadataService { */ public getRefMetadata(relativePath: string, metadataId: string): Promise { let url; - if (this.designerMode === DesignerMode.PC_RTC) { + if (this.shouldUseRtcApi()) { url = `${this.rtcMetadataBasePath}/${metadataId}`; } else { url = `${this.metadataBasePath}/relied?metadataPath=${relativePath}&metadataID=${metadataId}`; @@ -103,7 +103,7 @@ export class MetadataService { public getAllMetadataList(relativePath: string, metadataType: string, pageSize = 1000) { let url = `${this.metadataServicePath}/unionmdlist?path=${relativePath}&`; - if (this.designerMode === DesignerMode.PC_RTC) { + if (this.shouldUseRtcApi()) { url = `${this.rtcMetadataBasePath}/rtmetadatalist?`; } return axios.get(`${url}pageIndex=1&pageSize=${pageSize}&metadataTypeList=${metadataType}`).then((res: any) => { @@ -116,7 +116,7 @@ export class MetadataService { } public getPickMetadata(relativePath: string, data: any) { - if (this.designerMode === DesignerMode.PC_RTC) { + if (this.shouldUseRtcApi()) { const url = `${this.rtcMetadataBasePath}/${data?.id}`; return axios.get(url, data).then((res: any) => { return { metadata: res.data }; @@ -130,7 +130,7 @@ export class MetadataService { } public saveMetadata(metadataDto: any, formBasicInfo?: any) { - if (this.designerMode === DesignerMode.PC_RTC) { + if (this.shouldUseRtcApi()) { const { dimension1, dimension2 } = formBasicInfo; return axios.post(this.rtcMetadataBasePath, { metadataDto, @@ -140,7 +140,6 @@ export class MetadataService { } else { return axios.put(this.metadataBasePath, metadataDto); } - } public validateRepeatName(path: string, fileName: string) { @@ -240,4 +239,9 @@ export class MetadataService { return { ok: res.status === 204 }; }); } + + private shouldUseRtcApi(): boolean { + const rtcModes = [DesignerMode.PC_RTC, DesignerMode.PC_NoCode, DesignerMode.Mobile_NoCode]; + return rtcModes.includes(this.designerMode); + } } diff --git a/packages/designer/src/components/types/designer-context.ts b/packages/designer/src/components/types/designer-context.ts index 0570a2552786e38f85930e5f1cf9b0786a1c1fec..8c4f6612dc5792ce533d98f73406cd5e6e9fc184 100644 --- a/packages/designer/src/components/types/designer-context.ts +++ b/packages/designer/src/components/types/designer-context.ts @@ -11,12 +11,18 @@ export enum DesignerMode { /** 移动设计器 */ Mobile = 'Mobile', - /** PC 运行时定制设计器 */ - PC_RTC = 'PC_RTC' + /** PC运行时定制设计器 */ + PC_RTC = 'PC_RTC', + + /** PC零代码设计器 */ + PC_NoCode = 'PC_NoCode', + + /** 移动端零代码设计器 */ + Mobile_NoCode = 'Mobile_NoCode', } export interface UseDesignerContext { - instances: Record; + instances?: Record; designerMode: DesignerMode; toolboxItems: any[]; componentsToRegister: any[];