1. 简介

1.1 功能简介

使用天舟云生成的视图页面/表单列表页面/表单详情页面/资源页面。

1.2 使用场景

  • 二次开发表单:需要对天舟云生成的页面做一些额外的集成开发
  • 自定义展示:需要对天舟云生成的页面做展示方式的自定义
  • 业务系统挂载:需要在非CSB系统菜单中挂载天舟云生成的页面

2. 二次开发/自定义展示集成方式

2.1 安装依赖

npm包方式引入
在需要集成天舟云页面的工程下安装最新版本的@cvte/cir-lcp-sdk

npm i @cvte/cir-lcp-sdk
# 或
yarn add @cvte/cir-lcp-sdk

资源中心方式引入
在需要集成天舟云页面的业务系统工程下安装最新版本的@cvte/resource-center-sdk

rc i dp/tz-render

详细情况资源接入

2.2 使用页面渲染模版

模版根据页面类型会有不同的文件

高级列表页面:LCPPageTemplate
表单列表页面:LCPListTemplate
表单详情页面:LCPDetailTemplate
资源页面:LCPResourceTemplate

视图页面为例

方式一:npm包引入

import { LCPPageTemplate } from '@cvte/cir-lcp-sdk'

方式二:资源引入

import Loader, { ILoaderResourceEnv, ReactRemoteLoaderComponent } from '@cvte/resource-center-sdk';

const LCPPageTemplate = ReactRemoteLoaderComponent(
  new Loader({
    appName: '资源宿主对应在资源中心中的资源名称',
    name: 'tz-render',
    env: `${document.getElementById('ENV')?.getAttribute('value') as ILoaderResourceEnv}`,
  }),
  'LCPPageTemplate',
  {
    useShared: true,
    mode: 'page',
  }
);

调用方式

<LCPPageTemplate {...props} />

2.3 表单页面渲染模版通用服务

服务名称 使用方式 应用场景
Register import { Register } from '@cvte/cir-lcp-sdk'; 需要使用到全局注册器注入自定义事件自定义组件
Message import { Message } from '@cvte/cir-lcp-sdk'; 需要使用到消息通信模块完成事件触发和消息通信
Cache import { Cache } from '@cvte/cir-lcp-sdk'; 需要使用到页面的缓存进行操作管理;
const MemoryCache = new Cache({ storage: 'memory' }); 管理当前页面的内存缓存
const LocalCache = new Cache({ storage: 'localStorage' }); 管理浏览器本地缓存
const SessionCache = new Cache({ storage: 'sessionStorage' });管理当前页面的会话缓存

2.4 表单列表页面入参说明

参数 数据类型 说明
ref ICsbListRef GlobalContext 上下文对象
Context 上下文类
FormUtils 表单渲染器工具库
getRef() 获取当前表格参考对象
refresh 执行表格刷新
pageCode string 页面配置中的页面编码必填
动态菜单引入场景下antdFrame会传入该参数组件
静态模块引入场景下必须从外部传入
如果上层模块非动态模块,即没有该参数
则需要在系统管理的页面配置中新增菜单并将页面编码的值传入该参数
appId string 应用ID 必填
tenantId string 租户ID 必填
classId string 表单分类Id 必填
pageType string 页面类型枚举:WORK_BENCHLCP_VIEW
用于区分工作台模式和数据列表模式
metaConfig axios?: AxiosRequestConfig 全局axios参数,组件销毁后参数复原
serverApiConfig?: IMainMetaServerApiConfig node服务代理地址
apiConfig?: IMainMetaApiConfig 业务渲染器api自定义配置
viewConfig?: IListMetaConfigViewConfig 视图列表自定义参数配置
自定义参数配置
tzHeaders Record<string, string> 列表渲染模版中请求实例所使用的请求头配置,如果自定义会覆盖原有请求头中相同字段内容
inject components?: IRegisterComponent[] 需要注入的组件列表
events?: IRegisterEvent[] 需要注入的事件列表
初始注入项
onCreate () => void 行创建按钮回调
onEdit (record) => void 列编辑按钮回调
onDelete (record, params?: any) => void 列删除按钮回调
onInit () => void | Promise<void> 当列表组件第一次加载时回调
onTargetChanged (target?:{ classId: string; apiName: string; name: string; }, ref?: ICsbListRef) => void | Promise<void> target.classId 当前传入的表单分类id
target.apiName 当前传入的表单视图编码
target.name 当前传入的表单分类名称
ref 当前视图的参考对象
onSelect (selectedRecord: Record<string, any>[], selected: string[], isSelect: boolean, extra?: { originSelectedRecord?: Record<string, any>[]; }) => void 行选择的事件回调
selectedRecord 当前触发选择行数据
selected 当前列表所有选中行的key集合
isSelect 当前行是否为选中状态
extra?.originSelectedRecord 为当前被选择行的原始未翻译数据,如果在ES模式的简单列表下没有该参数

2.5 表单详情页入参说明

参数 数据类型 说明
ref any 参考对象
appId string 应用ID 必填
tenantId string 租户ID 必填
classId string 表单分类ID 必填
pageId string 表单详情ID
apiName string 表单视图编码
itemNumber string 变更编码
designId string 设计方案ID
designApi string 设计方案编码
versionId string 版本号
configs IConfigs 表单元数据
metaConfig axios?: AxiosRequestConfig 全局axios参数,组件销毁后参数复原
serverApiConfig?: IMainMetaServerApiConfig node服务代理地址
apiConfig?: IMainMetaApiConfig 业务渲染器api自定义配置
formDefaultData?: Record<string, any> 表单详情传入的默认表单数据
contextData?: Record<string, any> 表单详情在公式计算或其他渲染时需要的上下文数据对象
compParams?: Record<string, any> key为组件code,value为要传入的配置,底层cir-form-generator会用compParams接收入参
自定义参数配置
inject components?: IRegisterComponent[] 需要注入的组件列表
events?: IRegisterEvent[] 需要注入的事件列表
初始注入项
onInit (props: IMain) => Promise<IMain> | IMain 初始化渲染引擎,若无返回则使用默认流程
onLoadData (data: IMain) => Promise<IConfigs> | IConfigs 渲染引擎加载数据,若无返回则使用默认流程
onInitData (data: IConfigs) => Promise<IConfigs> | IConfigs 初始化渲染数据,若无返回则使用默认流程
onRenderMounted (data: IConfigs) => Promise<void> | void 渲染内核组件被挂载时
onRenderUpdated (data: IConfigs) => Promise<void> | void 渲染内核组件开始渲染或页面更新触发渲染时
onRenderStart (data: IConfigs) => Promise<void> | void 渲染内核组件开始工作;⚠️即将废弃,请在天舟云1.8及其以后版本中换用 onRenderUpdated 事件进行监听
onRenderEnd (data: IConfigs) => Promise<void> | void 渲染内核组件被销毁时
onDestroy (data: IConfigs) => Promise<any> | any 渲染引擎销毁
onError (error: IMainErrorDetailObject, ...args: any[]) => Promise<void> | void 错误异常捕获
onClick (globalConfig: IConfigs, globalRef: Record<string, any>, handler: any, initParams: any, ...args: any[]) => Promise<any> | any 全局点击事件
onSelect (globalConfig: IConfigs, globalRef: Record<string, any>, handler: any, initParams: any, ...args: any[]) => Promise<any> | any 全局选中事件
onChange (globalConfig: IConfigs, globalRef: Record<string, any>, handler: any, initParams: any, ...args: any[]) => Promise<any> | any 全局改变值事件
onFocus (globalConfig: IConfigs, globalRef: Record<string, any>, handler: any, initParams: any, ...args: any[]) => Promise<any> | any 全局获得焦点事件
onBlur (globalConfig: IConfigs, globalRef: Record<string, any>, handler: any, initParams: any, ...args: any[]) => Promise<any> | any 全局失去焦点事件

2.6 高级列表页面入参说明

参数 数据类型 说明
ref any 参考对象
appId string 应用ID 必填
tenantId string 租户ID 必填
pageCode string 高级列表配置中的视图页面编码 必填
动态菜单引入场景下antdFrame会传入该参数组件
静态模块引入场景下必须从外部传入
如果上层模块非动态模块,即没有该参数
则需要在系统管理的页面配置中新增菜单并将页面编码的值传入该参数
configs IConfigs 列表配置数据内容
metaConfig axios?: AxiosRequestConfig 全局axios参数,组件销毁后参数复原
serverApiConfig?: IMainMetaServerApiConfig node服务代理地址
apiConfig?: IMainMetaApiConfig 业务渲染器api自定义配置
formDefaultData?: Record<string, any> 表单详情传入的默认表单数据
contextData?: Record<string, any> 表单详情在公式计算或其他渲染时需要的上下文数据对象
compParams?: Record<string, any> key为组件code,value为要传入的配置,底层cir-form-generator会用compParams接收入参
自定义参数配置
inject components?: IRegisterComponent[] 需要注入的组件列表
events?: IRegisterEvent[] 需要注入的事件列表
初始注入项
onInit (props: IMain) => Promise<IMain> | IMain 初始化渲染引擎,若无返回则使用默认流程
onLoadData (data: IMain) => Promise<IConfigs> | IConfigs 渲染引擎加载数据,若无返回则使用默认流程
onInitData (data: IConfigs) => Promise<IConfigs> | IConfigs 初始化渲染数据,若无返回则使用默认流程
onRenderStart (data: IConfigs) => Promise<void> | void 渲染开始
onRenderEnd (data: IConfigs) => Promise<void> | void 渲染结束
onDestroy (data: IConfigs) => Promise<any> | any 渲染引擎销毁
onError (error: IMainErrorDetailObject, ...args: any[]) => Promise<void> | void 错误异常捕获

3. 业务系统挂载集成方式

3.1 安装依赖

npm包方式引入
在需要集成天舟云页面的工程下安装最新版本的@cvte/cir-lcp-sdk

npm i @cvte/cir-lcp-sdk
# 或
yarn add @cvte/cir-lcp-sdk

资源中心方式引入
在需要集成天舟云页面的业务系统工程下安装最新版本的@cvte/resource-center-sdk

rc i dp/tz-render

详细情况资源接入

3.2 目录结构及别名工程改造

如果业务系统是CSB工程,则创建目录/app/modules/FormTemplate
如果业务系统非CSB工程,请联系我们「黄允桢」、「袁子涵

同时需要确保该工程下的webpack版本>=5.0

增加webpack对该目录「FormTemplate」的别名指向

// webpack_override.js
if (!config.resolve.alias['~csbApp']) {
    config.resolve.alias['~csbApp'] = path.join(__dirname, './app');
}

3.3 工程接入资源中心

须需要按照资源接入-CSB工程接入的步骤说明去改造当前业务系统的CSB工程

3.4 集成渲染模版代码

3.4.1 表单详情渲染模版

文件路径
/app/modules/FormTemplate/Detail.tsx

文件内容

// 资源接入的方式
import Loader, { ReactRemoteLoaderComponent, ILoaderResourceEnv } from '@cvte/resource-center-sdk';

const CSBDetail = ReactRemoteLoaderComponent(
  new Loader({
    appName: '这里必须填写业务系统在资源中心上的资源名称',
    name: 'tz-render',
    env: `${document.getElementById('ENV')?.getAttribute('value') as ILoaderResourceEnv}`,
  }),
  'LCPDetailTemplate',
  {
    useShared: true,
    mode: 'page',
  }
);

export default CSBDetail;

// npm包接入的方式
import { LCPDetailTemplate } from '@cvte/cir-lcp-sdk'

export default LCPDetailTemplate;

3.4.2 表单列表渲染模版

文件路径
/app/modules/FormTemplate/List.tsx

文件内容

3.4.2.1 资源接入的方式
import Loader, { ReactRemoteLoaderComponent, ILoaderResourceEnv } from '@cvte/resource-center-sdk';

const CSBList = ReactRemoteLoaderComponent(
  new Loader({
    appName: '这里必须填写业务系统在资源中心上的资源名称',
    name: 'tz-render',
    env: `${document.getElementById('ENV')?.getAttribute('value') as ILoaderResourceEnv}`,
  }),
  'LCPListTemplate',
  {
    useShared: true,
    mode: 'page',
  }
);

export default CSBList;
3.4.2.2 npm包接入的方式
import { LCPListTemplate } from '@cvte/cir-lcp-sdk'

export default LCPListTemplate;

3.4.3 高级列表渲染模版

文件路径
/app/modules/FormTemplate/Page.tsx

文件内容

3.4.3.1 资源接入的方式
import Loader, { ILoaderResourceEnv, ReactRemoteLoaderComponent } from '@cvte/resource-center-sdk';

const List = ReactRemoteLoaderComponent(
  new Loader({
    appName: '这里必须填写业务系统在资源中心上的资源名称',
    name: 'tz-render',
    env: `${document.getElementById('ENV')?.getAttribute('value') as ILoaderResourceEnv}`,
  }),
  'LCPPageTemplate',
  {
    useShared: true,
    mode: 'page',
  }
);
export default List;
3.4.3.2 npm包接入的方式
import { LCPPageTemplate } from '@cvte/cir-lcp-sdk'

export default LCPPageTemplate;

3.4.4 远程资源渲染模版

文件路径
/app/modules/FormTemplate/Resource.tsx

文件内容

3.4.4.1 资源接入的方式
import Loader, { ReactRemoteLoaderComponent, ILoaderResourceEnv } from '@cvte/resource-center-sdk';

const Resource = ReactRemoteLoaderComponent(
  new Loader({
    appName: '这里必须填写业务系统在资源中心上的资源名称',
    name: 'tz-render',
    env: `${document.getElementById('ENV')?.getAttribute('value') as ILoaderResourceEnv}`,
  }),
  'LCPResourceTemplate',
  {
    useShared: true,
    mode: 'page',
  }
);

export default Resource;
3.4.4.2 npm包接入的方式
import { LCPResourceTemplate } from '@cvte/cir-lcp-sdk'

export default LCPResourceTemplate;

3.5 CSB系统配置渲染模版页面

3.5.1 通用渲染模版页面

进入CSB系统的「页面配置」模块

在页面的「基本信息」标签中,选择「动态组件」类型,并将「动态组件路径」填写为本地接入对应渲染模版的文件路径(后缀.tsx不需填写);

表单列表渲染模版
动态组件路径:modules/FormTemplate/List(须根据CSB系统下渲染模版在本地文件路径的实际地址填写)
路由参数:appId=表单所在天舟云的应用ID&tenantId=表单所在天舟云的租户ID&classId=表单分类ID&apiName=表单编码
路由参数示例:appId=6b7905752faa40518a1da1bc5c8931de&tenantId=c518f53d-b405-4111-afe1-5c082b284971&classId=c3515f85f3304a069c37fcd8044750ab&apiName=T_STOCK_LIST

表单详情渲染模版
动态组件路径:modules/FormTemplate/Detail(须根据CSB系统下渲染模版在本地文件路径的实际地址填写)
路由参数:appId=表单所在天舟云的应用ID&tenantId=表单所在天舟云的租户ID&classId=表单分类ID&apiName=表单编码
路由参数示例:appId=802b609c0e0a402398cbafe78e4e205d&tenantId=c518f53d-b405-4111-afe1-5c082b284971&classId=392f1867c929451380c5dafe87d37492&apiName=T_PROJECT

高级列表渲染模版
选择「动态组件开启视图配置」类型
动态组件路径:modules/FormTemplate/Page(须根据CSB系统下渲染模版在本地文件路径的实际地址填写)
路由参数:pageCode=页面资源的编码
路由参数示例:pageCode=bsm_resource_rc_manager_detail

3.5.2 远程资源渲染模版页面

在页面的「基本信息」标签中,同时选择「动态组件资源组件」类型,并将「动态组件路径」填写为modules/FormTemplate/Resource

表单详情渲染模版
动态组件路径:modules/FormTemplate/Resource(须根据CSB系统下渲染模版在本地文件路径的实际地址填写)
路由参数传入的信息全部会透传给资源组件作为入参

并填写「资源名导出键名」信息,资源版本默认为「latest」,以获取最新资源

作者:聂维  创建时间:2022-07-29 10:27
最后编辑:袁子涵  更新时间:2024-12-11 10:09