【世界新视野】从零实现Dooring低代码印章组件
上一篇文章和大家分享了低代码平台组件间通信方案的几种实现:
(资料图片仅供参考)
低代码平台组件间通信方案复盘今天继续和大家分享一下比较有意思的可视化印章组件的实现.
你将收获低代码组件的基本设计模式印章组件的设计原理(canvas相关)如何快速将任意组件集成到低代码平台正文低代码组件的基本设计模式我们都知道任何低代码或者零代码搭建产品都非常注重底层搭建协议(schema), 这些产品通常会设计一套向上兼容且可扩展的 DSL结构, 来实现页面元件的标准化配置, 并支持元件的向上扩展:
在设计 H5-Dooring可视化搭建平台前, 我也参考了很多标准化软件数据协议, 给我启发最大的就是 ODATA规范, 具体设计细节可以参考我之前的文章:
Dooring无代码搭建平台技术演进之路之所以要介绍低代码的 schema设计, 是因为低代码组件的设计与开发需要依赖 schema的定义, 为了满足低代码组件能被用户实时编辑, 其基本的组成类似如下:
我们只需要在写普通组件的基础上加一个 schema文件即可, 这里以Dooring组件来举一个例子:
//组件代码tsximportstylesfrom"./index.less";importReact,{memo,useState}from"react";import{IHeaderConfig}from"./schema";constHeader=memo((props:IHeaderConfig)=>{const{cpName,bgColor,logo,height}=props;return(H5-dooring
在初步了解了低代码组件的设计模式之后, 我们接下来就来实现一下低代码印章组件的实现.
印章组件的设计原理我们由上图可以看出, 一个印章组件包含如下几个部分:
对于印章的绘制, 我们可以采用 canvas或者 svg来实现, 这里我采用 canvas来实现, 首先我们需要定义组件可以对外暴露的属性, 以便在低代码平台中可以让用户来自定义, 这里我直接列出基本的配置:
接下来我们就来实现一下吧!
1. 绘制印章边框letcanvas=dom;letcontext=canvas.getContext("2d")asany;//初始化canvas.width=w0;canvas.height=w0;//绘制印章边框letwidth=canvas.width/2;letheight=canvas.height/2;context.lineWidth=lineWidth;context.strokeStyle=color;context.beginPath();context.arc(width,height,width-lineWidth,0,Math.PI*2);context.stroke();
由上面代码可知我们用 canvas的 arc方法来创建一个圆形边框.
2. 绘制五角星创建一个五角星形状. 该五角星的中心坐标为(x0, y0),中心到顶点的距离为 radius, rotate=0时一个顶点在对称轴上
functioncreate5star(context:any,sx:number,sy:number,radius:number,color:string,rotato:number){context.save();context.fillStyle=color;//移动坐标原点context.translate(sx,sy);//旋转context.rotate(Math.PI+rotato);//创建路径context.beginPath();letx=Math.sin(0);lety=Math.cos(0);letdig=Math.PI/5*4;for(leti=0;i<5;i++){//画五角星的五条边letx=Math.sin(i*dig);lety=Math.cos(i*dig);context.lineTo(x*radius,y*radius);}context.closePath();context.stroke();context.fill();context.restore();}3. 绘制印章名称
context.font=`${fontSize}pxHelvetica`;//设置文本的垂直对齐方式context.textBaseline="middle";//设置文本的水平对对齐方式context.textAlign="center";context.lineWidth=1;context.fillStyle=color;context.fillText(name,width,height+60);4. 绘制环形印章单位
//平移到此位置context.translate(width,height);context.font=`${componySize}pxHelvetica`letcount=company.length;//字数letangle=4*Math.PI/(3*(count-1));//字间角度letchars=company.split("");letc;for(leti=0;i在基本的印章实现之后, 我们来接收属性配置:
对于低代码的 schema配置, 这里以 H5-Dooring的组件为例, 给大家分享一下:
import{IColorConfigType,IDataListConfigType,INumberConfigType,ISelectConfigType,TColorDefaultType,ISwitchConfigType,ITextConfigType,TNumberDefaultType,TTextDefaultType,}from"@/core/FormComponents/types";import{ICommonBaseType,baseConfig,baseDefault}from"../../common";importintlfrom"@/utils/intl";constt=intl();exporttypeTTextSelectKeyType="left"|"right"|"center";exporttypeTTextPosSelectKeyType="bottom"|"top";exporttypeTTextFormatSelectKeyType="CODE128"|"pharmacode"exporttypeTListEditData=Array快速将任意组件集成到低代码平台|ISelectConfigType |ISelectConfigType |ISwitchConfigType|ITextConfigType>;exportinterfaceIListConfigextendsICommonBaseType{width:TNumberDefaultType;compony:TTextDefaultType;componySize:TNumberDefaultType;text:TTextDefaultType;fontSize:TNumberDefaultType;color:TColorDefaultType;lineWidth:TNumberDefaultType;opacity:TNumberDefaultType;}exportinterfaceIListSchema{editData:TListEditData;config:IListConfig;}constList:IListSchema={editData:[...baseConfig,{key:"width",name:t("dr.attr.sealSize"),type:"Number",},{key:"compony",name:t("dr.attr.componyName"),type:"Text",},{key:"componySize",name:t("dr.attr.componySize"),type:"Number",},{key:"text",name:t("dr.attr.sealUnit"),type:"Text",},{key:"fontSize",name:t("dr.attr.fontSize"),type:"Number",},{key:"color",name:t("dr.attr.color"),type:"Color",},{key:"lineWidth",name:t("dr.attr.lineWidth"),type:"Number",},{key:"opacity",name:t("dr.attr.opacity"),type:"Number",},],config:{...baseDefault,cpName:"Seal",width:180,compony:"Dooring零代码搭建平台",componySize:18,text:"H5-Dooring",fontSize:14,color:"rgba(240,0,0,1)",lineWidth:6,opacity:100},};exportdefaultList; 在上面的分析实现中我们可以发现, 只需要把普通组件按照属性对外暴露出来, 并按照 Dooring的 schema定义模式来描述出来, 普通组件就可以立马变成低代码组件, 并自动生成组件配置面板:
具体的 schema描述我在文档中做了详细的介绍, 大家感兴趣可以参考一下:
总结后续我会继续和大家分享一下 H5-Dooring 低代码的更多实践和思考, 如果大家对可视化低代码感兴趣也可以参考我的低代码可视化专栏, 如果大家对图形学感兴趣, 也可以参考我的专栏100+前端几何学应用案例.
H5-dooring低代码
V6.Dooring可视化大屏搭建平台
标签: 基本设计
- 黄山提升政府采购透明度 助力实体经济持续健康稳定发展
- 1-2月黄山新签“双招双引”项目103个 总投资额139.7亿元
- 池州海关共签发RCEP原产地证书22份 签证金额92.7万美元
- 宿州泗县深入推进文旅融合发展 擦亮城市品牌
- 河北工业生产平稳开局 固定资产投资较快增长
- 昆明西山区深入实施人才强区战略 建立健全招商招才引资并轨新模式
- 2月唐山新建商品住宅销售价格与上月持平 同比下降0.8%
- 去年河北电子信息产业实现主营业务收入2367.7亿元 同比增长22.4%
- 绥化望奎以工业化思维为引领 推动肉类加工制造产业腾飞
- 绥化市监局推出多项举措 大力促进有机产品产业发展
- 半路出家无心插柳 杭州西湖区“菌菇宝宝”变废为宝
- 温州鹿城区藤桥主打藤桥熏鸡 近两年销售额年均增长20%以上
- 1-2月安徽限额以上消费品零售额1030.4亿元 同比增长10.4%
- 2021年合肥市茶园面积13.6万亩 产值176350万元
- 淡季不忘引流 京郊民宿市场将很快迎来回暖
- 郴州安仁文旅项目集中开工 总投资1000万元
- 江苏服务业继续保持发展强劲势头 为高质量发展提供有力支撑
- 黄山休宁经开区摸排基础设施项目17个 计划总投资29709万元
- 前两个月宣城出口31亿元 增长34.4%
- 滁州凤阳2021年共接待游客225万人次 旅游综合收入20.25亿元
- 1-2月宿州市民间投资同比增长19.2% 居全省第3位
- 宿州严格审核把关 抢抓发行地方政府专项债券政策机遇
- 1-2月亳州市进出口总值5.5亿元 同比下降17.4%
- 合肥:弘扬茶文化 初步形成一条生态发展之路
- 合肥:建成“数字中国”领先城市 推进城市数字化转型
- 甘肃再续“艾黎情”:探职业教育德技并修
- 【城市守望者】致敬抗“疫”一线的“拆弹专家”
- 浙江绍兴越城区核酸检测结果公布 除1例阳性外其余均为阴性
- 内地首例奥密克戎变异株感染者身体状况如何?来自哪里?专家解读→
- 对变异病毒已有准备!关于中国新冠药物,钟南山发声→
- 江苏睢宁小网格大担当 织就乡村振兴“幸福网”
- 改造老旧小区 共享幸福生活
- 天津静海:群众在哪里,文明实践就延伸到哪里
- 齐齐哈尔:初步判断疫情感染来源为接触新冠病毒污染环境和物品
- 重庆大竹林派出所副所长因对群众态度简单粗暴被停职
- 黑龙江讷河病例感染源初步判断为新冠病毒污染的环境和物品
- 致敬2021
- 浙江瑞安民警捐献造血干细胞:14年前的心愿终将如愿
- “考研房”涨价离谱 律师:借机宰客有违市场伦理
- 广州白云机场:14天内有东莞旅居史的旅客须凭48小时核酸阴性证明乘机
- 浙江绍兴本轮疫情已报告确诊病例145例 无症状感染者1例
- 福建龙岩一男子和前妻斗气 扛着126斤硬币到法院“还钱”
- 重庆这座立交酷似“悟空” 走红 设计师揭秘(图)
- 青海警方破获特大电诈案 涉案流水高达1.7亿
- 云南新增境外输入确诊病例3例
- 黑龙江讷河市5名核酸阳性人员流调溯源:接触被新冠病毒污染的环境和物品
- 男子爱上女主播 假扮女主播闺蜜教其他男粉丝刷单
- 广西三市警方联手破获毒品案 全链条摧毁跨境贩毒团伙
- 广东东莞发现2例无症状感染者,部分镇今起全员筛查
- 从百二秦关到闻道凯旋 一个殉职医生最后的朋友圈
- 浙江发补充说明:三地铁路出行政策随风险等级同步调整
- 内蒙古新增本土确诊病例5例 均在呼伦贝尔满洲里市
- 陕西新增本土确诊病例1例 系隔离酒店工作人员
- 31省份新增新冠肺炎确诊病例76例 其中本土51例
- 浙江新增新冠肺炎确诊病例45例 其中本土44例
- 技能就是财富 技工也是人才
- 黑龙江新增本土确诊病例1例、本土无症状感染者4例
- 冷空气“调休”!我国大部陆续迎回暖 中东部雨雪稀少
- 华北黄淮等地大气扩散条件转差 冷空气将影响中东部
- 别误读了野猪或将不再是“三有”动物
- 您的ETC已到期?当心这个诈骗短信!
- 对回家的“宝贝”少一些关注,也是一种帮助
- 升温!北京今日阳光在线 最高气温将升至8℃
- 那年今日 | 一张漫画涨知识之12月14日
- 40岁男子一觉醒来突然听不见了 原因是……
- 本年度星空压轴大赏上演 双子座流星雨观赏地图来了
- 广东东莞大朗镇报告2例新冠肺炎无症状感染者
- 商丘4885份被盗出生证去哪了?10年“悬案”引关注
- 浙江海宁警方通报国家公祭日女子穿和服逛街
- 厨艺不精调料凑?懒人调料:年轻人的“下厨神器”
- “您的ETC已到期?”警方提醒:当心这个诈骗短信
- “网红”局长的热度 自述:走红后我就没有周末了
- 寻回被拐10年的儿子后又送走 儿子:害我没家了
- 小城里的三张面孔和警号301137
- 倡导“就地过年”,需因地制宜科学防疫
- 别用“入乡随俗”为星巴克找借口
- 北京地铁14号线年底全线贯通运营
- 天津市从入境人员中检出奥密克戎变异株
- “外滩活地图”黄俊:一个不想出圈的段子手交警
- 寻找一双儿女的25年
- 无锡市场监管部门责成星巴克涉事门店停业整改
- 海岛警事:为了一座岛和2900平方公里的海
- 北京民警宏福苑抗疫26天:“今夜我和雪花一起出发”
- 星巴克的“金标准”缘何败给了“潜规则”
- 患者被低价药“惊呆”的场面应该更多些
- 影视剧“超前点评”不止是“低级错误”
- “南昌鹦鹉案”下发不起诉决定书 网店上架费氏牡丹鹦鹉被拒
- 河南商丘4885份出生医学证明被盗始末追踪
- 绍兴市病例62-109活动轨迹公布
- 12月7日以来,杭州累计报告新冠肺炎确诊病例19例
- 浙江绍兴新增确诊病例37例 上虞区占36例
- 河南高院对张成功案作出死刑判决
- 四川一滑雪场停电游客被困索道 官方回应
- 浙江绍兴越城区新增1例新冠肺炎确诊病例 当地对防控区域划分进行调整
- 中国内地首次检出新冠病毒奥密克戎变异株
- 知网除了涉及著作权纠纷,是否涉嫌违反《反垄断法》?
- 浙江绍兴越城区新增1例新冠肺炎确诊病例
- 四川眉山千箱柑橘送往呼和浩特市抗疫一线
- 两名青年男女探险三亚落笔洞遗址被困沼泽 消防成功救援
- 中国地理学大会在福州发布《中国地理学界碳中和科技行动福州宣言》
广告
广告
- 【世界新视野】从零实现Dooring低代码印章组件
- 简讯:懂怀旧:这台国产手机,开启了终结山寨机的时代
- 平安新一贷逾期四天是什么征信?:环球今日报
- 光伏电池技术加速向N型发展 老玩家青睐TOPCon新晋者押注HJT:最资讯
- 曝65岁赵本山将回归央视春晚,彩排照流出引热议,知情人发文澄清
- B 站出版网友共创诗集;麦当劳发布新年剪纸动画 | 甲方乙方
- 国铁西安局2023年春运方案出台 同比增长24.5% 世界聚焦
- 甲醇:预期先行 勿操之过急_世界快看点
- 南通中国银行兔年纪念币兑换安排_当前资讯
- 智洋创新: 第三届董事会第二十三次会议决议公告
- 当前热讯:美股异动 | Coinbase(COIN.US)涨超6% 与纽约监管机构达成1亿美元的和解协议
- 天天实时:李杰:未来三年希望一加成为行业里的一条“鲶鱼”
- 雅戈尔:公司不涉及医药相关业务-每日报道
- 天天精选!鱼翅和什么煲汤比较好 鱼翅和哪种食材煲汤好喝呢
- 华岭股份(430139)1月4日主力资金净卖出23.17万元
- 全虚拟场景+360°自由移动,2023年PICOVR演唱会长这样:世界看点
- 涨停雷达:景点及旅游个股异动 长白山触及涨停
- 天天快报!办法总比困难多
- 金晨桃粉连衣裙不见素日扁平感,气质冷艳,这是东方斯嘉丽
- 【天天新视野】2023年春节无锡龙寺生态园免门票预约流程