精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從零實現(xiàn)Dooring低代碼印章組件

開發(fā) 前端
我們都知道任何低代碼或者零代碼搭建產(chǎn)品都非常注重底層搭建協(xié)議(schema), 這些產(chǎn)品通常會設(shè)計一套向上兼容且可擴展的 ??DSL?? 結(jié)構(gòu), 來實現(xiàn)頁面元件的標準化配置,

今天繼續(xù)和大家分享一下比較有意思的可視化印章組件的實現(xiàn).

圖片

你將收獲

  • 低代碼組件的基本設(shè)計模式
  • 印章組件的設(shè)計原理(canvas相關(guān))
  • 如何快速將任意組件集成到低代碼平臺

低代碼組件的基本設(shè)計模式

我們都知道任何低代碼或者零代碼搭建產(chǎn)品都非常注重底層搭建協(xié)議(schema), 這些產(chǎn)品通常會設(shè)計一套向上兼容且可擴展的 DSL 結(jié)構(gòu), 來實現(xiàn)頁面元件的標準化配置, 并支持元件的向上擴展:

圖片

在設(shè)計 H5-Dooring? 可視化搭建平臺前, 我也參考了很多標準化軟件數(shù)據(jù)協(xié)議, 給我啟發(fā)最大的就是 ODATA 規(guī)范, 具體設(shè)計細節(jié)可以參考我之前的文章:

  • Dooring無代碼搭建平臺技術(shù)演進之路

之所以要介紹低代碼的 schema? 設(shè)計, 是因為低代碼組件的設(shè)計與開發(fā)需要依賴 schema 的定義, 為了滿足低代碼組件能被用戶實時編輯, 其基本的組成類似如下:

圖片

我們只需要在寫普通組件的基礎(chǔ)上加一個 schema 文件即可, 這里以Dooring組件來舉一個例子:

// 組件代碼tsx
import styles from './index.less';
import React, { memo, useState } from 'react';
import { IHeaderConfig } from './schema';

const Header = memo((props: IHeaderConfig) => {
const { cpName, bgColor, logo, height } = props;

return (
<header className={styles.header} style={{ backgroundColor: bgColor, height: height + 'px' }}>
<div className={styles.logo}>
H5-dooring
</div>
</header>
);
});

export default Header;


// 組件樣式
.header {
box-sizing: content-box;
padding: 3px 12px;
background-color: #000;
.logo {
max-width: 160px;
overflow: hidden;
img {
height: 100%;
object-fit: contain;
}
}
}

// 組件schema
const Header = {
editData: [
...baseConfig,
{
key: 'bgColor',
name: 背景色,
type: 'Color',
},
{
key: 'height',
name:,
type: 'Number',
},
{
key: 'logo',
name: 'logo',
type: 'Upload',
isCrop: false,
cropRate: 1000 / 618,
}
],
config: {
...baseDefault,
bgColor: 'rgba(245,245,245,1)',
logo: [
{
uid: '001',
name: 'image.png',
status: 'done',
url: 'http://cdn.dooring.cn/dr/logo.ff7fc6bb.png',
},
],
height: 50,
},
};

export default Header;

在初步了解了低代碼組件的設(shè)計模式之后, 我們接下來就來實現(xiàn)一下低代碼印章組件的實現(xiàn).

印章組件的設(shè)計原理

圖片

我們由上圖可以看出, 一個印章組件包含如下幾個部分:

圖片

對于印章的繪制, 我們可以采用 canvas? 或者 svg? 來實現(xiàn), 這里我采用 canvas 來實現(xiàn), 首先我們需要定義組件可以對外暴露的屬性, 以便在低代碼平臺中可以讓用戶來自定義, 這里我直接列出基本的配置:

圖片

接下來我們就來實現(xiàn)一下吧!

1. 繪制印章邊框

let canvas = dom; 
let context = canvas.getContext('2d') as any;

// 初始化
canvas.width= w0;
canvas.height = w0;

// 繪制印章邊框
let width=canvas.width/2;
let height=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 方法來創(chuàng)建一個圓形邊框.

2. 繪制五角星

創(chuàng)建一個五角星形狀. 該五角星的中心坐標為(x0, y0),中心到頂點的距離為 radius?, rotate=0 時一個頂點在對稱軸上

function create5star(context: any,sx: number,sy: number,radius: number,color: string,rotato: number){
context.save();
context.fillStyle=color;
//移動坐標原點
context.translate(sx,sy);
//旋轉(zhuǎn)
context.rotate(Math.PI+rotato);
//創(chuàng)建路徑
context.beginPath();
let x = Math.sin(0);
let y= Math.cos(0);
let dig = Math.PI/5 *4;
for(let i = 0;i< 5;i++){
//畫五角星的五條邊
let x = Math.sin(i*dig);
let y = Math.cos(i*dig);
context.lineTo(x*radius,y*radius);
}
context.closePath();
context.stroke();
context.fill();
context.restore();
}

3. 繪制印章名稱

context.font = `${fontSize}px Helvetica`;
//設(shè)置文本的垂直對齊方式
context.textBaseline = 'middle';
//設(shè)置文本的水平對對齊方式
context.textAlign = 'center';
context.lineWidth=1;
context.fillStyle = color;
context.fillText(name,width,height+60);

4. 繪制環(huán)形印章單位

// 平移到此位置
context.translate(width,height);
context.font = `${componySize}px Helvetica`
let count = company.length;// 字數(shù)
let angle = 4*Math.PI/(3*(count - 1));// 字間角度
let chars = company.split("");
let c;
for (let i = 0; i < count; i++){
// 需要繪制的字符
c = chars[i];
if(i==0)
context.rotate(5*Math.PI/6);
else
context.rotate(angle);
context.save();
// 平移到此位置,此時字和x軸垂直
context.translate(90, 0);
// 旋轉(zhuǎn)90度,讓字平行于x軸
context.rotate(Math.PI/2);
// 此點為字的中心點
context.fillText(c, 0, 20);
context.restore();
}

在基本的印章實現(xiàn)之后, 我們來接收屬性配置:

圖片

對于低代碼的 schema? 配置, 這里以 H5-Dooring 的組件為例, 給大家分享一下:

import {
IColorConfigType,
IDataListConfigType,
INumberConfigType,
ISelectConfigType,
TColorDefaultType,
ISwitchConfigType,
ITextConfigType,
TNumberDefaultType,
TTextDefaultType,
} from '@/core/FormComponents/types';
import { ICommonBaseType, baseConfig, baseDefault } from '../../common';
import intl from '@/utils/intl';

const t = intl();
export type TTextSelectKeyType = 'left' | 'right' | 'center';
export type TTextPosSelectKeyType = 'bottom' | 'top';
export type TTextFormatSelectKeyType = 'CODE128' | 'pharmacode'
export type TListEditData = Array<
IColorConfigType |
IDataListConfigType |
INumberConfigType |
ISelectConfigType<TTextSelectKeyType> |
ISelectConfigType<TTextPosSelectKeyType> |
ISelectConfigType<TTextFormatSelectKeyType> |
ISwitchConfigType |
ITextConfigType
>;
export interface IListConfig extends ICommonBaseType {
width: TNumberDefaultType;
compony: TTextDefaultType;
componySize: TNumberDefaultType;
text: TTextDefaultType;
fontSize: TNumberDefaultType;
color: TColorDefaultType;
lineWidth: TNumberDefaultType;
opacity: TNumberDefaultType;
}

export interface IListSchema {
editData: TListEditData;
config: IListConfig;
}

const List: 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
},
};

export default List;

快速將任意組件集成到低代碼平臺

在上面的分析實現(xiàn)中我們可以發(fā)現(xiàn), 只需要把普通組件按照屬性對外暴露出來, 并按照 Dooring? 的 schema 定義模式來描述出來, 普通組件就可以立馬變成低代碼組件, 并自動生成組件配置面板:

圖片

具體的 schema 描述我在文檔中做了詳細的介紹, 大家感興趣可以參考一下:

? 圖片 ?

責任編輯:武曉燕 來源: 趣談前端
相關(guān)推薦

2022-06-30 07:48:06

Dooring低代碼零代碼

2023-01-08 17:55:30

LowCodeDooring

2023-07-26 08:24:49

接口javapython

2021-06-22 14:47:19

electronDooring架構(gòu)

2021-10-28 08:42:31

Dooring表單設(shè)計器數(shù)據(jù)可視化

2023-02-08 00:46:44

Dooring低代碼復盤

2023-01-31 07:47:14

Dooring低代碼輔助設(shè)計

2022-08-31 08:32:22

數(shù)據(jù)可視化項目nocode

2023-06-07 07:23:09

Dooring專業(yè)版開發(fā)神器

2021-08-26 05:15:22

圖片編輯器 H5-DooringMitu-Doorin

2021-04-12 08:31:53

PC-Dooring項目PC端搭建

2025-05-15 01:00:00

2022-06-02 09:09:27

前端React低代碼編輯器

2020-06-05 14:48:11

零代碼低代碼開發(fā)

2025-03-13 11:09:47

2023-09-28 08:00:53

2023-01-05 07:39:28

2021-09-24 16:30:28

無代碼低代碼機器學習

2020-09-24 11:46:03

Promise

2020-11-11 08:04:34

低代碼
點贊
收藏

51CTO技術(shù)棧公眾號

欧美午夜精品久久久久久孕妇| 亚洲一区精品在线观看| 视频在线不卡| 亚洲成人a级片| 亚洲自啪免费| 精品国产91洋老外米糕| 在线观看成人av电影| 亚洲乱码国产乱码精品| 噜噜噜狠狠夜夜躁精品仙踪林| 中文字幕一区二区视频| 国产精品美女主播| 在线免费观看成年人视频| 欧美黑人猛交的在线视频| 精品无人区卡一卡二卡三乱码免费卡| 亚洲欧美国产视频| 一区二区传媒有限公司| 欧美视频在线观看一区二区三区| 亚洲欧美网站在线观看| 9191成人精品久久| 一本色道久久99精品综合| 亚洲国产av一区二区三区| 亚洲欧洲中文字幕| 亚洲免费福利视频| 精品国产午夜福利在线观看| 精品176二区| 麻豆国产一区二区| 日韩在线不卡视频| 99sesese| 国产福利在线播放麻豆| 国产自产2019最新不卡| 欧美成人免费播放| 亚洲av午夜精品一区二区三区| 香蕉久久aⅴ一区二区三区| 国产成人高清在线| 欧美日本黄视频| 中国特级黄色大片| 成人三级高清视频在线看| 9色porny自拍视频一区二区| 性欧美暴力猛交69hd| 精品国产av色一区二区深夜久久| 日韩深夜视频| 国产亚洲一区二区三区| 国产日韩欧美在线播放| 国产免费久久久久| 99ri日韩精品视频| 欧美日韩国产精品专区 | 日韩精品大片| 欧美高清69hd| 亚洲欧美在线专区| 色偷偷av一区二区三区乱| 亚洲综合123| 96av在线| 91蜜桃网址入口| 国产精品亚洲аv天堂网| 日韩精品一区二区三区在线视频| 在线免费观看亚洲| 亚洲大片免费看| 欧美亚洲另类久久综合| 国产精品女同一区二区| 亚洲视频一二| 一区二区三区视频在线| 精品国产午夜福利在线观看| 成人影院网站ww555久久精品| 亚洲自拍偷拍网站| 欧美中日韩免费视频| 国产精品美女一区| 精品亚洲免费视频| 成人写真福利网| 免费在线不卡视频| 婷婷丁香综合| 亚洲美腿欧美激情另类| 波多野结衣办公室33分钟| 图片婷婷一区| 日韩一区二区三区高清免费看看| 能在线观看的av| fc2ppv国产精品久久| 亚洲日本丝袜连裤袜办公室| 快播亚洲色图| 精品人妻伦一二三区久久| 丝袜诱惑制服诱惑色一区在线观看| 欧美xxxx18国产| 毛片a片免费观看| 日韩一区二区在线| 日韩电视剧在线观看免费网站| 亚洲欧美日本一区二区三区| 忘忧草在线日韩www影院| 亚洲激情av在线| 日韩免费av一区二区三区| 91视频在线观看| 日本在线观看视频| 亚洲精品乱码久久久久久不卡| 国产在线观看91| 亚洲色图第一区| 久久综合久久网| 欧美性videos| 久久精品亚洲乱码伦伦中文| 99久久自偷自偷国产精品不卡| 国产成人精品777777| 国产精品theporn| 51色欧美片视频在线观看| 欧美日韩精品在线观看视频 | 亚洲综合精品一区二区| 中文字幕一区二区人妻视频| 久久99精品久久久| 国产精品久久久久7777婷婷| 粉嫩aⅴ一区二区三区| 欧美三区美女| 美女少妇精品视频| 在线观看亚洲欧美| 免费人成在线不卡| 国产精品第8页| 性色av蜜臀av| 日韩高清国产一区在线| 欧美诱惑福利视频| 国产一区二区麻豆| 精品综合久久久久久8888| 精品欧美日韩在线| 色呦呦中文字幕| www.亚洲精品| 国产91av视频在线观看| 91网在线播放| 日韩欧美亚洲综合| 看av免费毛片手机播放 | 91青草视频久久| 亚洲综合精品在线| 99热在这里有精品免费| 人人妻人人澡人人爽精品欧美一区| 91色在线看| 欧美一区二区人人喊爽| aaaaaaaa毛片| 伊人久久大香线蕉av不卡| 亚洲精品一区中文| 亚洲自拍偷拍图| 久久精品播放| 欧美理论电影在线播放| 在线观看色网站| 久久久国产一区二区三区四区小说 | 日韩在线看片| 国产成人精品最新| 伊人22222| 国产在线日韩欧美| 小说区图片区图片区另类灬| 国产在线观看a视频| 欧美亚洲综合色| 精品少妇人妻一区二区黑料社区| 欧美系列电影免费观看| 成人97在线观看视频| 国产亚洲成人av| 久久亚洲国产精品一区二区| 精品国产乱码久久久久久蜜柚 | 亚洲免费av高清| 欧美少妇一区二区三区| 九色porny丨国产首页在线| 日韩欧美你懂的| 捆绑凌虐一区二区三区| 亚洲视频高清| 99久久99久久| sm在线观看| 亚洲黄页视频免费观看| 色www亚洲国产阿娇yao| 亚洲午夜在线| 国产精品 欧美在线| 黄色在线视频观看网站| 亚洲精品乱码久久久久久久久 | 日韩有码欧美| 精品国产一区av| 国产精品高潮呻吟av| 亚洲视频在线观看一区| 两女双腿交缠激烈磨豆腐| 欧美高清一区| 日韩免费av一区二区| 国产丝袜视频在线观看| 久久久www免费人成精品| 久久综合久久色| 成人h动漫免费观看网站| 久久久久久国产精品美女| 一区二区三区麻豆| 国产精品久久久久婷婷| 北条麻妃在线观看| 日韩中文字幕| 中文欧美日本在线资源| 免费在线观看黄网站| 久久综合九色综合97_久久久| 99精品一区二区三区的区别| 第四色男人最爱上成人网| 精品国产凹凸成av人网站| 日本在线观看视频网站| 国产成人免费在线观看| 亚洲一卡二卡区| 欧美经典一区| 久久久精品久久| 亚洲天堂自拍偷拍| 亚洲最色的网站| 9.1成人看片免费版| 精品一区二区在线免费观看| 18禁裸男晨勃露j毛免费观看| 欧美美乳视频| 日韩免费观看在线观看| 国产福利视频在线观看| 精品视频在线播放| 国产内射老熟女aaaa∵| 精品欧美激情精品一区| 精品少妇一区二区三区密爱| 日韩二区三区四区| 毛片av在线播放| 日韩亚洲精品在线观看| 日本精品久久久久久久| 91网址在线观看| 日韩一区二区三区四区| 国产伦精品一区二区三区视频网站| 自拍偷拍亚洲综合| 亚洲综合伊人久久| 亚洲一区二区三区高清| 久久国产精品一区二区三区四区| 国产精品一区hongkong| 亚洲成人av片在线观看| 男人的天堂一区| 亚洲欧美偷拍另类a∨色屁股| 中文精品在线观看| 国产91在线观看| 亚洲最大天堂网| 免费在线日韩av| 国产va亚洲va在线va| 久久在线视频| 日韩视频精品| 亚洲人成精品久久久| 国产成人成网站在线播放青青| 成人在线网址| 中文字幕成人在线| 三级无遮挡在线观看| 在线精品视频免费观看| 国产精品久久久免费看| 久久精品一二三| 国产亚洲色婷婷久久99精品91| 国产精品一二三四| 久久久久久免费看| 免费观看久久av| 精品久久久久久中文字幕动漫| 日韩区一区二| 亚洲在线视频观看| 在线播放成人| 成人黄色片在线| 日韩福利影视| 国产欧美精品va在线观看| 成人网ww555视频免费看| 久久精品电影网站| 婷婷视频在线| 久久精品一区中文字幕| 欧美日韩在线看片| 精品国偷自产在线| 麻豆影视国产在线观看| 俺去了亚洲欧美日韩| 日韩免费啪啪| 久久香蕉频线观| 在线三级中文| 久久久久久国产精品| 黄色污网站在线观看| 69国产精品成人在线播放| 欧美一级二级三级区| 按摩亚洲人久久| 中文字幕中文字幕在线十八区| 欧美理论片在线观看| 国产理论电影在线| 欧美制服第一页| 自拍亚洲图区| 久久久久久久久久久成人| 欧美日韩国产观看视频| 国产成人+综合亚洲+天堂| 高清在线一区| 日本亚洲欧洲色α| 欧美与亚洲与日本直播| 成人精品一区二区三区电影黑人| 日韩国产在线不卡视频| 久久99精品久久久久久三级| 色综合中文网| 最新视频 - x88av| 日韩视频一区| 韩国无码av片在线观看网站| 亚洲日本黄色| 久久福利一区二区| 国产欧美精品久久| 天天色综合社区| 视频一区在线播放| 国产亚洲视频一区| 不卡视频在线观看| 伊人av在线播放| 狠狠色狠狠色综合系列| 久久精品无码专区| 国产成人免费在线视频| 中日韩精品一区二区三区| 国产精品视频线看| 久草视频精品在线| 亚洲自拍偷拍九九九| 成人午夜视频在线播放| 亚洲已满18点击进入久久| www.av成人| 国产精品理论片| 日韩免费不卡视频| 欧美日韩精品一二三区| 中文字幕在线播放日韩| 欧美tk丨vk视频| www.五月婷| 亚洲免费精彩视频| 精品欧美色视频网站在线观看| 国产综合在线视频| 日韩av官网| 欧美黄色免费网站| 日韩另类在线| 日本sm极度另类视频| 亚洲精品aaa| caoporen国产精品| 国产一区二区三区四区二区| 精品国产一区二区三| 清纯唯美日韩| 黄页免费在线观看视频| 99视频在线精品国自产拍免费观看| 男人天堂成人在线| 日韩影院精彩在线| 无码任你躁久久久久久老妇| 欧美激情一二三区| 在线观看免费黄色网址| 亚洲网友自拍偷拍| 一级黄在线观看| 一本大道久久加勒比香蕉| 国产丝袜在线播放| 97av影视网在线观看| 欧美视频免费看| 成人国产精品日本在线| 精品久久视频| 免费h精品视频在线播放| 韩国av一区| 毛片毛片毛片毛| 国产精品系列在线观看| 少妇一级黄色片| 国产精品久久久久久福利一牛影视| 欧美丰满熟妇bbbbbb| 欧美高清一级片在线| 国产精品麻豆一区二区三区| 日韩一区二区久久久| 中文字幕21页在线看| 99国产高清| 婷婷激情综合| 日韩亚洲在线视频| 久久久久久97三级| 国产精品久免费的黄网站| 亚洲激情视频网站| 国产一线二线在线观看| 91中文字精品一区二区| 国产精品久久久久久久久妇女| 男人女人黄一级| 日本一区二区免费在线观看视频 | 久热这里只精品99re8久 | 精品中文字幕一区二区| 一区二区不卡免费视频| 亚洲国产一区二区视频| 成人毛片在线免费观看| 午夜精品美女自拍福到在线| 99re8这里有精品热视频免费 | 大又大又粗又硬又爽少妇毛片 | 日韩精品视频中文字幕| 成人手机视频在线| 国产麻豆精品视频| 天天看片中文字幕| 亚洲成人av在线播放| aa级大片免费在线观看| 久久青青草综合| 久久激情综合| 韩国日本在线视频| 国产日本亚洲高清| 亚洲大尺度在线观看| 亚洲第一页在线| 91美女主播在线视频| 成人免费视频网站| 性欧美videos另类喷潮| 新91视频在线观看| 欧美日韩精品高清| a级在线观看| 麻豆久久久9性大片| 久久亚洲欧洲| 天堂久久精品忘忧草| 91麻豆精品91久久久久同性| 青春草免费在线视频| 美女视频久久| 日本成人在线不卡视频| 亚洲国产欧美视频| 色偷偷久久一区二区三区| 超碰在线播放97| 秋霞午夜一区二区| 欧美日韩国产一区二区三区不卡| 欧美精品色视频| 午夜精品一区二区三区电影天堂 | 天天天综合网| 韩国黄色一级片| 欧美影院午夜播放| 久草资源在线观看| 欧美黑人3p| 久久精品999| 亚洲AV无码成人精品区东京热| 国产一区二区三区在线视频| 欧美另类中文字幕|