国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

可視化搭建平臺的地圖組件和日歷組件方案選型

開發(fā) 前端
可視化搭建平臺除了需要為用戶提供簡單便捷的操作方式之外, 還需要提供豐富的組件支持和組件擴展, 這樣才能滿足更多用戶的業(yè)務(wù)需求.

[[360742]]

可視化搭建平臺除了需要為用戶提供簡單便捷的操作方式之外, 還需要提供豐富的組件支持和組件擴展, 這樣才能滿足更多用戶的業(yè)務(wù)需求.

在 H5-dooring 創(chuàng)建的初期主要考慮的方向是用戶使用的便捷性, 即最大程度的降低用戶操作成本, 所以采用了智能布局, 也就是react-grid-layout這個庫, 之前考慮過完全的自由布局, 也實現(xiàn)了一套自由布局的方案(使用react-draggable和React-Resizable), 但是崇尚 less is more 的設(shè)計哲學, 還是堅定的走了智能布局的道路.

筆者接下來會介紹如何在 H5頁面編輯器 中自定義開發(fā)自己的組件, 以及如何開發(fā)可以使H5展現(xiàn)力更強的組件: 地圖和日歷組件.

如果大家對可視化拖拽搭建平臺的實現(xiàn)方案感興趣, 可以參考我之前的文章和 github. 后續(xù)會更新更多l(xiāng)owcode和nocode的技術(shù)實現(xiàn)和國內(nèi)外方案分析.

演示效果


實現(xiàn)自定義組件開發(fā)的流程

作為前端工程師, 我們對于開發(fā)vue組件或者react組件想必不會很陌生, 對于一個可擴展復用當然組件來說, 我們只需要做好以下幾點就好了:

  • 語義化 : 組件命名可讀性強, 比如antd, element的組件風格
  • 重用-發(fā)布等價原則(REP): 組件中的類要么都是可重用的,要么都不可重用
  • 共同重用原則(CRP): 組件中所有類應(yīng)該是共同重用的,如果重用了組件中的一個類就應(yīng)該重用組件中的所有類
  • 共同封閉原則(CCP): 組件的所有類對同一性質(zhì)的變化是共同封閉的, 同時不會影響到外部, 即對修改是封閉的,但對擴展應(yīng)該是開放的
  • 穩(wěn)定抽象原則(SAP): 組件的抽象程度應(yīng)該與其穩(wěn)定程度保持一致

基本上任何組件的設(shè)計都會或多或少的遵循以上原則, 所以說我們在實現(xiàn)自定義組件時, 往往也需要考慮內(nèi)外部的抽象.

我們定義Dooring的自定義組件時, 會分為以下幾個步驟:


組件的shape主要是組件對外暴露的屬性和方法, 可以實現(xiàn)用戶層面的配置, 也就是vue/react組件的props, 由于項目使用typescript編寫, 所以我們需要定義對應(yīng)的ts類型, 來實現(xiàn)組件的健壯性和可溯源. 最后我們會定義組件初始化的樣子(init shape), 然后才是實現(xiàn)組件, 這樣的步驟好處是我們可以明確組件的邊界, 自然貼合上面筆者說的組件設(shè)計原則.

以上流程我們會產(chǎn)生如下三個文件:

  • componet 組件的實現(xiàn)代碼
  • schema 組件的shape和type
  • template 組件的類型映射模版

開發(fā)一個日歷組件

我們接下來就來實現(xiàn)拖拽平臺的日歷組件. 日歷組件我們直接采用zarm的Calendar組件, 將其封裝成dooring的受控組件.

日歷組件我們可以暴露如下props給到用戶自行配置:

  • time 日歷顯示的時間
  • range 日歷被選中的時間范圍, 主要用來做日程管理
  • color 日歷默認的文本顏色
  • selectedColor 選中區(qū)域的顏色
  • round 日歷的圓角

對應(yīng)的view如下:


由于組件的實現(xiàn)只需要處理傳過來的數(shù)據(jù), 這里我們看看簡單的代碼實現(xiàn):

  1. import React, { useState, memo, useEffect, useRef } from 'react'
  2. import { Calendar } from 'zarm'
  3. import styles from './index.less'
  4. import { ICalendarConfig } from './schema'
  5.  
  6. const CalendarCp = memo((props: ICalendarConfig & { isTpl: boolean }) => { 
  7.   const { time, range, color, selectedColor, round, isTpl } = props; 
  8.   // ... 
  9.   return ( 
  10.     <div className={styles.calenderWrap} style={{borderRadius: round + 'px', pointerEvents: isEditorPage ? 'none' : 'initial'}} ref={boxRef}> 
  11.       <Calendar 
  12.         multiple={!!range} 
  13.         value={value} 
  14.         min={min
  15.         max={new Date(max)} 
  16.         disabledDate={(date:any) => /(0|6)/.test(date.getDay())} 
  17.         onChange={(value:Date[] | undefined) => { 
  18.           setValue(value); 
  19.         }} 
  20.       /> 
  21.     </div> 
  22. }); 
  23.  
  24. export default CalendarCp; 

 這是一個dooring組件的基本雛形, 其次我們看看 schema 部分. 這一部分主要包含了組件的shape的類型定義和基本的可編輯屬性(editable), 如下:

  1. export type TCalendarEditData = Array<INumberConfigType | ITextConfigType | IColorConfigType>; 
  2. export interface ICalendarConfig { 
  3.   time: TTextDefaultType; 
  4.   range: TTextDefaultType; 
  5.   color: TTextDefaultType; 
  6.   selectedColor: TTextDefaultType; 
  7.   round: TNumberDefaultType; 
  8.  
  9. export interface ICalendarSchema { 
  10.   editData: TCalendarEditData; 
  11.   config: ICalendarConfig; 
  12.  
  13. const Calendar: ICalendarSchema = { 
  14.   editData: [ 
  15.     { 
  16.       key'time'
  17.       name'日歷時間'
  18.       type: 'Text'
  19.       placeholder: '格式如2020-01或2020-11' 
  20.     }, 
  21.     { 
  22.       key'range'
  23.       name'日歷選中范圍'
  24.       type: 'Text'
  25.       placeholder: '格式如01-12(幾號到幾號)' 
  26.     }, 
  27.     { 
  28.       key'color'
  29.       name'文本顏色'
  30.       type: 'Color' 
  31.     }, 
  32.     { 
  33.       key'selectedColor'
  34.       name'選中顏色'
  35.       type: 'Color' 
  36.     }, 
  37.     { 
  38.       key'round'
  39.       name'圓角'
  40.       type: 'Number' 
  41.     }, 
  42.   ], 
  43.   config: { 
  44.     time'2020-12'
  45.     range: '05-08'
  46.     color: 'rgba(0,0,0,1)'
  47.     selectedColor: 'rgba(22,40,212,1)'
  48.     round: 0 
  49.   }, 
  50. }; 
  51.  
  52. export default Calendar; 

如果我們想增加屬性, 我們只需要在這個文件里添加對應(yīng)的屬性和類型即可.

template主要是定義了組件的分區(qū)和初始高度, 代碼如下:

  1. const template = { 
  2.   type: 'Calendar'
  3.   h: 185, 
  4.   displayName: '日歷組件'
  5. }; 
  6. export default template; 

有了以上三個部分, 我們要可以渲染出一個在畫布中可拖拽, 可編輯的組件了. 當然這塊還需要FormRender的幫助, 這塊筆者后期會介紹.

以上基本就實現(xiàn)了一個可拖拽可配置的日歷組件, 我們接下來繼續(xù)看看地圖組件.

開發(fā)地圖組件

有了以上的組件開發(fā)經(jīng)驗之后我們開發(fā)地圖組件就非常方便了. 地圖組件我們這里使用了@uiw/react-baidu-map, 也就是百度地圖的React版本, 大家也可以使用高德地圖.因為地圖組件react-baidu-map 需要提前閱讀對應(yīng)的文檔, 這里筆者就不一一介紹了, 我們直接來看如何實現(xiàn).同樣我們也需要定義好地圖對外暴露的props, 筆者這里簡單定義幾個可配置的屬性:

  • ak 百度地圖使用憑證, 建議大家在生產(chǎn)環(huán)境替換成自己的
  • location 地點的經(jīng)緯度, 方便快速定位
  • position 地點的地名, 我們可以自定義設(shè)置

如下圖:


基本的代碼實現(xiàn)如下:

  1. import React, { memo } from 'react'
  2. import { Map, Marker, Label, APILoader } from '@uiw/react-baidu-map'
  3. import styles from './index.less'
  4. import { IMapConfig } from './schema'
  5.  
  6. const Mapcomponent = memo((props: IMapConfig) => { 
  7.   const { ak, location, position } = props; 
  8.   return ( 
  9.         <div className={styles.mapWrap}> 
  10.           <APILoader akay={ak}> 
  11.             <Map widget={['NavigationControl']} zoom={13}> 
  12.               <Marker animation={2} position={{ lng: position[0], lat: position[1] }} /> 
  13.               <Label  
  14.                 content={location}  
  15.                 position={{ lng: position[0], lat: position[1] }}  
  16.                 style={{color: '#000', borderColor: '#06c', padding: '3px 10px', borderRadius: '6px'}}  
  17.               /> 
  18.             </Map> 
  19.           </APILoader> 
  20.         </div> 
  21.       ) 
  22. }); 
  23.  
  24. export default Mapcomponent; 

 最后

目前H5-Dooring可視化搭建平臺還在持續(xù)更新, 主要更新如下:

  • 列表組件添加搜索功能
  • 圖標組件添加鏈接交互功能, 自定義文本, 文本顏色, 文本大小配置
  • 圖表組件支持自定義第三方api接口, 一鍵導入第三方數(shù)據(jù)源

 

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

2021-07-27 08:29:33

可視化組件商店H5-Dooring

2021-11-19 08:30:39

H5-Dooring 可視化組件商店

2024-03-22 08:21:48

可視化搭建平臺組件商店H5-Dooring

2022-01-14 07:56:38

流布局設(shè)計拖拽

2021-01-09 09:48:10

可視化自然流布局 LowCode

2021-02-28 07:42:40

可視化網(wǎng)格線H5-Dooring

2021-06-16 07:05:03

安全

2021-06-16 08:30:36

Dooring可視化數(shù)據(jù)源設(shè)計剖析

2023-03-16 20:46:40

可視化平臺迭代

2020-03-11 14:39:26

數(shù)據(jù)可視化地圖可視化地理信息

2021-09-27 08:31:01

數(shù)據(jù)可視化柱狀圖折現(xiàn)圖

2010-08-12 13:52:38

Flex組件

2010-07-30 14:00:41

Flex組件

2024-02-05 13:40:00

Mathlive開源庫Web 組件

2023-11-16 11:34:05

BI大數(shù)據(jù)

2023-11-09 08:38:25

交叉表組件大數(shù)據(jù)

2022-03-01 10:29:44

Kubernetes容器

2014-01-17 10:36:39

2023-12-06 08:07:13

拖拽庫可視化

2022-10-14 16:25:50

數(shù)據(jù)可視化大屏搭建BI平臺
點贊
收藏

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

国产乱人伦真实精品视频| 欧美国产中文字幕| 日本中文字幕高清| 亚洲免费网站| 另类美女黄大片| 日本蜜桃在线观看| 国产偷国产偷亚洲高清人白洁| 日本一区二区三区精品视频| 清纯唯美日韩| 欧美第一黄色网| 成人勉费视频| 日韩一区二区三区四区| 色视频在线播放| av激情综合网| 亚洲欧美日韩另类精品一区二区三区 | 成人18在线| 国产精品久久精品日日| 久久久99精品视频| 亚洲免费高清| 国产精品亚洲激情| 日本福利一区| 欧美成人精品h版在线观看| 一个人www视频在线免费观看| 欧美图片一区二区三区| 亚洲高清成人影院| 亚洲国产精品视频| 黄页网站在线播放| 国产精品入口麻豆九色| 国产l精品国产亚洲区久久| 国产成人av网站| 国产成人精品免费看在线播放| 亚洲少妇诱惑| 精品久久蜜桃| 国产视频一区三区| 久久亚洲国产精品日日av夜夜| 午夜国产精品视频免费体验区| 国产日产久久高清欧美一区| 成人羞羞视频播放网站| 成人黄色片在线| 国产一区二区在线| 国产精品视频网址| 日韩伦理视频| 91亚洲精品在线观看| 欧美.www| 欧美高清性xxxxhd| 日韩精品一二三四| 一本色道婷婷久久欧美| 看片网站欧美日韩| 国产美女作爱全过程免费视频| 国产激情偷乱视频一区二区三区| 久久av喷吹av高潮av| 国产99一区视频免费| 国产美女三级视频| 亚洲色图丝袜美腿| 亚洲日本va中文字幕久久| 色乱码一区二区三区88| gogogogo高清视频在线| 日韩av在线免费观看| 欧美成人家庭影院| 欧美中文在线免费| 亚洲一区二区| 日本精品一区二区三区不卡无字幕| 捆绑紧缚一区二区三区视频| 成年女人18级毛片毛片免费| 国产调教视频一区| 亚洲日本高清| 欧美精品一区二区高清在线观看| 欧美黑粗硬大| 国产精品久久久久久搜索 | 日日噜噜噜夜夜爽亚洲精品| 亚洲精品a区| 91色在线视频| 蜜桃一区二区三区在线观看| 精品人妻一区二区三区四区在线 | 永久av在线| 日韩电影中文字幕在线| 亚洲成人1区| 国产精品美乳一区二区免费 | 亚洲一二在线观看| 超碰97久久国产精品牛牛| 国产一区二区在线免费视频| 久久婷婷av| 国产又猛又黄的视频| 在线视频国内自拍亚洲视频| 亚洲永久av| 国产精品成人v| 久久福利资源站| www.4438全国最大| 欧美精品一区二区三区在线播放 | 精品国产一区二区精华| 精品女人视频| 欧美另类高清视频在线| 久久综合色综合88| 日本一区高清| 中文字幕亚洲一区在线观看 | 日本免费久久| 国产精品高潮呻吟久久av野狼| 日韩黄色免费电影| 天天爽人人爽夜夜爽| 日韩亚洲欧美综合| 免费av一区| 老司机午夜网站| 午夜精品久久久久久不卡8050| 日韩大尺度黄色| 成人3d动漫一区二区三区91| 国产无人区一区二区三区| 好了av在线| 国产不卡视频在线| 高清不卡一区二区在线| 国产一级在线观看| 国语自产精品视频在免费| 日韩黄色免费网站| 丝袜视频国产在线播放| 欧美大片网站在线观看| 蜜桃精品在线观看| 国产在线观看免费| 欧美一区二区色| 成人av免费网站| 国产美女一区视频| 91免费在线观看网站| 国产精品久久久久永久免费观看 | 国产精品久久久久久久久久齐齐| 91在线高清免费观看| 国产婷婷色一区二区三区四区| 黑人玩欧美人三根一起进| 亚洲综合社区网| 亚洲男女一区二区三区| 最新亚洲国产| 五月天综合婷婷| 欧美一区二区日韩一区二区| 91精品精品| 丝袜国产免费观看| 九九久久久久99精品| 精品一区中文字幕| 91精品专区| 3d精品h动漫啪啪一区二区| 亚洲欧美一区二区三区国产精品 | a亚洲天堂av| 欧美人与性动交α欧美精品济南到| 国产精品偷伦免费视频观看的| 久久精品欧美日韩| 国产麻豆一区| 亚洲砖区区免费| 欧美成人a在线| 国产一区二区高清| 在线看黄色av| 国产精品果冻传媒潘| 欧美日韩综合视频| 超碰成人久久| 最新二区三区av| 国产精品18久久久久久首页狼| 国产欧美一区二区三区在线看蜜臀| 日本黄色成人| 日韩免费视频播放| 欧美成人午夜激情| 欧美韩国一区二区| 久久久久影视| 国产青青视频| 国产一区二区在线免费| 岛国av一区二区| 欧美久久久久| 久久亚洲天堂| 一本一生久久a久久精品综合蜜| 亚洲第一精品夜夜躁人人爽 | 日韩精品免费在线视频观看| 日韩av一二三| 欧美aa一级| 国产3p露脸普通话对白| 久久精品青青大伊人av| 国产女同性恋一区二区| 亚洲人成网www| 婷婷综合影院| 亚洲精品免费网站| 欧美老肥妇做.爰bbww| 日韩精品高清不卡| 成人在线黄色| 超碰超碰在线观看| 国产精品激情自拍| 欧美日韩中文在线观看| 亚洲网站视频| 99riav视频在线观看| 黄色一级片在线看| 午夜剧场成人观在线视频免费观看| 亚洲一区二区三区小说| 极品av少妇一区二区| 大黄网站在线观看| 欧洲黄色一级视频| 国产成人+综合亚洲+天堂| 欧美日韩国产乱码电影| 国产精品亚洲视频| 嫩草国产精品入口| 四虎久久免费| 99热亚洲精品| 国产福利精品av综合导导航| 91精品在线免费观看| 成人午夜精品在线| 精品亚洲成人| 青青青手机在线视频观看| 成人免费看片视频在线观看| 欧亚精品中文字幕|