重构b2b页面为配置化、低代码化
04/25/2024
背景
用过数据分析平台的大概都知道,会有多个分析模型,大概都会有事件分析、留存分析、间隔分析、分布分析等等。
这些个分析模型,用起来也都感觉差不多,搭建要分析的数据条件,展示指定的图表。
数据条件呢,大概也就是,要分析的事件,条件筛选,数据按什么分组、分析的主体、时间段等等。
展示的图表又分为折线图、直方图、桑基图等等,以及按照不同的模型处理成不同的表格。
从上面也可以看出来,分析模型呐,基本上就是数据分析平台这类产品的卖点。而这部分的业务逻辑,有些都是五年前定下来的,可谓是一座x山。
最近又接了两个大活,要新上两个新的模型分析,样子长得跟其他的也都差不多,只是额外多几种新的条件选择器,图表也长得不太一样。
这可把我难住了。
难的不是做新的需求,难的是要适配、兼容模型通用逻辑。
哎,这我就脑子一热,干脆把分析模型都给他重构了。你们不是都长得差不多吗?那就干脆搞起配置化,后面也可以继续搞成低代码。
说干就干,具体怎么实现,请往下看。
理清逻辑
配置化,那就要有一定的配置规范。在前期,可以通过类型来约束配置。
区分不同配置项的字段,可以定义为 【type】。 比如,输入框的type为input,按钮的type为Button,按钮组的type为 ButtonList。
作为数据条件,在接口参数中也会有各自的key,那就可以用key来作为【key】。
大部分配置项都会有自己的【title】,少部分没有,但是报错提醒也让他们需要一个【errorTitle】。
配置项在页面的哪个位置呢,这也需要一个属性【location】
作为输入向的数据条件配置项,也要有是否必填的属性【required】,还有一些配置项的是否展示是依赖其他配置项的,就可以用【enabled】属性。
还有针对配置项的各种更多的配置,比如说 按钮的大小 这种,就可以封装在【props】里面。
配置项类型的属性差不多就这些。当然还有一些其他的,后面再讲到。
配置接口文件大概就如下
type TPageLocate =
| 'search'
| 'header'
| 'toolbar'
| 'chart';
type TConfigType =
| 'input'
| 'switch'
| 'select'
| 'header';
type TConfigBasic = {
type: TConfigType;
key?: string;
title?: string;
errorTitle?: string; // 隐藏的title,用于报错提示
props?: any;
enabled?: string;
keyDeps?: TTgaConfigKeyDep[];
pageLocate?: TTgaPageLocate;
required?: boolean;
};写组件
已经理清了配置项的内容,下面就开始完成一个配置化的组件。
下面是一个ConfiguableInput的例子
type TInputConfigProps = {
bordered?: boolean;
}
type TConfigComponentProps = {
config: TConfigBasic,
}
const ConfiguableInput:FC<TConfigComponentProps> = ({
}) => {
}