2.0.1 • Published 6 months ago

@blueking/bk-query-component v2.0.1

Weekly downloads
-
License
-
Repository
-
Last release
6 months ago

DataQuery 组件化

基于Omi框架,使用JSX语法快速开发的Web Component,用以支持计算平台查询组件化需求,能够跨平台,不依赖运行时框架的组件。

版本更新

V1.2.1-beta.0

feature:

  • 数据结果图表icon添加tooltips
  • 数据结果表图表 x轴和 y轴字段互斥
  • 折线图/面积图默认x轴选中 dtEventTime(如果有该字段的话)

fix:

  • 没有SQL问题的提示文案改为 一切正常

V1.2.0 正式版

feature:

  • 添加函数列表功能
  • 添加can-save-query参数,支持关闭sql保存和历史查询功能
  • 添加初始化上下栏比例配置 init-scale
  • 添加 addNewTab 回调
  • 添加 can-collapse 属性,默认为false,当为true时,支持面板的展开和收起
  • 添加 custom-title 属性,默认为'', 新建查询名称默认则为未命名, 当传入值时,新建查询的名称则为传入的值,注意自定义传入需要自己实现国际化
  • 添加 startQuery 方法,支持从外部直接调用执行查询方法
  • 激活tab时,触发 activeTab 事件
  • query-component-result组件添加 empty 插槽和 emptyslot属性,用于自定义空数据的UI

fix:

  • 优化和修复can-save-query为false的场景和体验
  • 修复下拉组件、collapse初始化无法展开的问题
  • 修复已知体验问题

V1.2.0-beta.38

feature:

  • 函数列表支持记忆,与tab实例绑定

V1.2.0-beta.35

fix:

  • 更新collapse方法,修复collapse的无法折叠的问题;

feature:

  • 激活tab时,触发 activeTab 事件

V1.2.0-beta.33

fix:

  • 修改调用面板折叠方法icon和文字不更新的问题

feature:

  • 添加 getResultData方法,用于获取查询结果之后的回调

V1.2.0-beta.31

fix:

  • 修改折叠面板的方式

V1.2.0-beta.30

fix:

  • 修复插入函数会清空原SQL的问题

V1.2.0-beta.29

fix:

  • 去掉表格的边框,防止在展示时有两个边框

V1.2.0-beta.27

feature:

  • 添加 can-collapse 属性,默认为false,当为true时,支持面板的展开和收起
  • 添加 custom-title 属性,默认为'', 新建查询名称默认则为未命名, 当传入值时,新建查询的名称则为传入的值,注意自定义传入需要自己实现国际化
  • 添加 startQuery 方法,支持从外部直接调用执行查询方法

V1.2.0-beta.26

feature:

  • 添加 show-border 属性,默认是 false,当为 true 时添加左右边框,以适应不同的应用场景;

fix:

  • 优化 can-save-query 为false的场景:
    • 修复新建tab时执行按钮为禁用但却可以执行的状态异常;
    • 删除Tab的小黄点以及tooltip;
    • 禁用 ctrl + s 保存查询的快捷键;
    • tab组件在点击时重新计算以消除漂移的问题;

V1.2.0-beta.24

feature:

  • query-component-result组件添加 empty 插槽和 emptyslot属性,用于自定义空数据的UI

V1.2.0-beta.17

feature:

  • 添加函数列表插入tooltip
  • 添加函数列表搜索为空的交互和提示
  • 添加初始化上下栏比例配置 init-scale
  • 添加 addNewTab 回调

fix:

  • 修复查询列表消失问题
  • 修复国际化问题,修复collapse组件的初始化无法展开的问题
  • 下拉列表组件优化
  • 优化函数列表显示问题 & 修复tooltip在全屏下的展示问题

V1.2.0-beta.7

feature:

  • 完善函数列表交互
  • 更新函数列表接口格式
  • 添加can-save-query参数,支持关闭sql保存和历史查询功能

V1.2.0-beta

feature:

  • 新增函数列表

1.1.4-beta.9 (数据详情功能稳定版)

feature:

  • 数据详情功能上线

fix:

  • 修复结果为0不跳转问题
  • 修复渲染两个结果表问题
  • 修复提前跳转结果引起数据为渲染问题
  • 修复结果数据在轮询时重新查询没有充值导致结果错乱的问题
  • 修复结果刷新导致表格滚动的问题

1.1.4-beta.0

fix:

  • 锁定omi等包版本,防止线上因依赖问题报错

v1.0.0 正式版

feature:

  • 数据查询组件完成功能

开始

安装依赖

npm install

运行项目

npm run start

项目打包

npm run build

打包产物在dist中,其中main.js是页面级入口,如果只需要组件本身,引入dist/assets下,除了main.xxx.js之外的所有文件,即可使用<data-query></data-query>组件。

打包产物

注意:OMI组件可跨框架使用,但是由于web-compoennt组件属性不能像框架props一样直接传递ArrayObject类型的参数。为此,需要在组件内使用static propTypes对其属性类型进行标记,在遇到ArrayObject时,WeElement类会自动进行一次JSON.parse转换。 这就要求,使用static propTypes定义的组件,在框架内使用进行参数传递时,必须使用JSON.stringify(xxx)对数据进行转换传入,而不能直接传入。

为了能灵活复用组件,采用模块化开发,内部的模块也同样进行了整合和拆分。整体来讲,目前打包产物包含两个可直接使用的高整合组件:

  • data-query.js 完整的查询组件
  • query-table 查询结果中的表格组件
  • query-result 查询结果组件

data-query 组件

属性

属性(Props)类型说明
ws-addressstringWebsocket 地址,用于建立查询页面与后台的实时通信,默认为 ''
project-idstring项目 ID,用于区分不同的项目,默认为 0
user-namestringbk-user用户名称,用于权限校验,默认为 ''
base-urlstringaxios基础 URL,设置请求的基础路径,默认为 ''
download-urlstring下载 URL,用于文件下载的接口,默认为 ''
get-collections-urlstring获取收藏集 URL,获取用户收藏集查询的接口,默认为 ''
collect-add-urlstring添加收藏 URL,用于新增收藏的接口,默认为 ''
collect-clone-urlstring克隆收藏 URL,用于克隆收藏的接口,默认为 ''
query-historystring查询历史 URL,用于获取用户历史查询的接口,默认为 ''
collect-update-urlstring更新收藏 URL,用于更新收藏的接口,默认为 ''
project-typestring项目类型,表示当前项目的类型,可以为commonpersonal,默认为 ''
result-liststring查询结果列表 URL,获取查询结果列表的接口,默认为 ''
query-urlstring查询 URL,用于提交SQL查询的API接口,默认为 ''
query-infostring查询信息 URL,获取查询执行信息的接口,默认为 ''
query-list-namestring按名称获取查询列表 URL,用于按名称获取查询的接口,默认为 ''
query-list-rtstring按最近使用获取查询列表 URL,用于按最近使用获取查询的接口,默认为 ''
query-list-userstring按用户获取查询列表 URL,用于按用户获取查询的接口,默认为 ''
get-querystring获取查询 URL,用于根据ID获取查询详情的接口,默认为 ''
tag-liststring获取标签列表 URL,获取标签列表的接口,默认为 ''
get-query-idstring获取查询 ID URL,获取新查询的 ID 的接口,默认为 ''
delete-collect-urlstring删除收藏 URL,删除收藏的接口,默认为 ''
stage-urlstring获取查询阶段 URL,获取查询执行阶段的接口,默认为 ''
min-widthnumber分隔布局最小宽度,默认为 null
lock-querystring锁定查询 URL,用于锁定对当前查询上锁,防止用户编辑冲突,默认为 ''
open-storageboolean是否开启本地存储,默认为 true,开启后刷新页面会进入上次打开的查询
init-sqlstring初始化 SQL,设置默认的初始化 SQL 语句,默认为 ''
save-tab-keystring保存 Tab 的 Key,保存 Tab 状态的键值,不同页面使用组件应使用不同的唯一值,默认为 ''
export-modestring导出模式,设置查询结果的导出方式,默认为 download
on-type-formatboolean输入时是否格式化,用于配置Monaco Editor的初始化配置,默认为 false
can-save-queryboolean是否可以开启保存查询的功能,可通过历史记录查看查询记录
function-liststring获取函数列表url,当填入url,右上角工具lan会有函数面板
help-urlstring帮助文档url,当填入时,右上角会有帮助文档的icon,点击会跳转;为空时不显示icon
resize-min-heightnumber上下分割布局上部SQL编辑框的最小高度,传入数字,单位为px,默认为300
resize-init-scalenumber上下分割布局初始化比例,传入数字,单位为百分比,默认为50(即55开)
can-collapseboolean是否支持面板折叠,默认为false
custom-titlestring自定义新建查询名称,不传入时默认为未命名
show-borderstring是否显示结果表右侧边框,默认为false不展示以在查询页面使用

方法

方法名称描述参数
reset重置组件状态并在200ms后重新初始化。
collapsePanel设置面板的折叠状态。action: 布尔值
startQuery开始执行查询。
setSQL设置查询编辑器中的SQL代码。sql: 字符串

reset

该方法通过销毁现有的组件状态并将 show、queries 和 querySets.queries 属性设置为初始状态来重置组件状态。

collapsePanel

该方法设置面板的折叠状态。它接受一个单一的布尔参数 action,如果 action 为true,则表示折叠面板,否则表示展开面板。

startQuery

该方法通过调用 topPanelRef 组件上的 queryClickHandle 方法来开始查询。这可能用于在数据库管理系统中启动查询。

setSQL

该方法设置查询编辑器中的SQL代码。它接受一个单一的字符串参数 sql,表示要设置在查询编辑器中的SQL代码。

query-table 组件说明

属性(Props)类型说明
maskstring[]表格title上需要添加mask图标的集合
dataobject[]表格数据,与查询组件结果集格式一致
watermark{text: string;fontSize: number}水印

query-result 组件

组件有个slot=left插槽, 可在其左测自定义组件

属性

属性(Props)类型说明
countsstring默认为空,如果传入字符串,则自定义右侧结果显示文字
watermark{text: string;fontSize: number}水印
preActiveIndexnumber默认激活的标签,默认为0
preOptionsJSON.stringify(object)默认的图表配置项,可不填
queryJSON.stringify(iobject)当前的query实例,不填默认为空
dataJSON.stringify(iobject[])表格数据
kdatastring表格数据绑定在window下的key值,其value的格式为{data: object}

function-list 函数列表组件说明

组件有个header插槽, 可在其搜索header的右侧添加自定义组件

属性(Props)类型说明
dataobject[]函数列表数据
placementstringtooltip的放置位置,可选值为leftright
show-storageboolean是否显示存储类型选择下拉框
storagestring存储下拉默认选中的值

如何开发

快速开发组件

组件的开发依赖omi框架,语法与JSX相同,一个较为标准的组件,并支持TS提示语法的,应该为

import { h, WeElement, tag } from 'omi';
import styles from './index.scss';
import iconStyles from '@/common/icon/style.css' // 如果要使用bk-icon,必须引入样式

interface IDemoProps {
  href?: string,
  disabled?: boolean,
  type?: 'default' | 'primary' | 'danger',
  onClick?: (e: any) => void
}

const tagName = 'demo'

/** 声明,用以支持TS的自动补全 */
declare global {
  namespace JSX {
    interface IntrinsicElements {
      [tagName]: Omi.Props & IDemoProps
    }
  }
}

@tag(tagName)
export default class oButton extends WeElement<ButtonProps> {
  /**
   * static css
   *  方法,将定义组件的CSS样式
   */
  static css = `
    ${styles}
    ${iconStyles}
  `

  /**
   * static defaultProps
   *  方法给定Props的默认值
   */
  static defaultProps = {
    href: 'demo',
    disabled: false,
    type: 'default'
  }

  /**
   * static propTypes
   * 如果要使props在原声HTML中支持,务必写propTypes,并注意类型定义是String 而非 string。
   * 如果在omi内使用的组件,则不需要定义此静态变量
   */
  static propTypes = {
    href: String,
    disabled: Boolean,
    type: String
  }

  render(props: IDemoProps) {
    return (...)
  }

组件通讯

父子通讯

父子组件通讯,可以使用fire自定义事件,并用onXX在父级监听

//子组件
...
this.fire('change')
...

// 父组件
...
render() {
  return(
    <div>
      <child-ele onChange={this.changeHandle.bind(this)}></child-ele>
    </div>
  )
}

祖孙组件通讯

跨域多个层级向下传递 props 有时非常麻烦,这个时候可以使用 provide 和 Inject 跨组件层级传递

define(
  'parent-el',
  class extends WeElement {
    provide = {
      name: 'omi',
    };

    render() {
      return <child-el></child-el>;
    }
  },
);

//不仅仅是子,在任意子孙曾孙节点都可以使用 inject 来消费祖先节点的注入
define(
  'child-el',
  class extends WeElement {
    inject = ['name'];

    render() {
      //output: <div>omi</div>
      return <div>{this.injection.name}</div>;
    }
  },
);

兄弟组件通讯

兄弟组件通讯,通过使用mitt进行全局通讯通过provide/inject,注册emitter,并在全局中使用

import mitt from 'mitt'
define('parent-el', class extends WeElement {

  const emitter = mitt()

  provide = {
    emitter: emitter
  }

  changeHandle() {
    ...
  }

  install() {
    emitter.on('change', this.changeHandle())
  }

  render() {
    return <child-el></child-el>
  }
})

define('child-el', class extends WeElement {

  inject = ['emitter']

  emit() {
    this.injection.emitter.emit('change')
  }
})

更新Update

update 方法是内置的重要核心方法,用于更新组件自身。比如:

this.update();

举个场景,比如点击弹出层的 mask 关闭弹出,在 react 中需要传递给父组件,让父组件更新,而 Omi 推崇自更新,这样 diff 的区域更小。

onMaskClick = ()=> {
  //修改 props
  this.props.show = false
  //防止父组件更新 diff 不出结果
  this.prevProps.show = false
  //更新,并且在 html 模式下忽略 attributes
  this.forceUpdate()
  //触发事件,可以通过这个更改外部的状态变量来保持一致性,但是外面的组件不用再更新
  this.fire('close')
}

也可以使用 updateProps 达到同样的效果:

onMaskClick = ()=> {
  //修改 props 并强制更新
  this.updateProps({
    show: false
  })
  //触发事件,可以通过这个更改外部的状态变量来保持一致性,但是外面的组件不用再更新
  this.fire('close')
}

如果不需要更新子组件,可以使用updateSelf方法

1.2.1-beta.22

1 year ago

1.2.1-beta.21

1 year ago

1.2.1-beta.24

1 year ago

1.2.1-beta.23

1 year ago

1.2.1-beta.26

1 year ago

1.2.1-beta.28

8 months ago

1.2.1-beta.27

12 months ago

1.2.2-beta.1

10 months ago

1.2.1-beta.20

1 year ago

1.2.1

10 months ago

1.2.1-beta.29

8 months ago

2.0.1

6 months ago

2.0.0

8 months ago

1.2.1-beta.19

1 year ago

1.2.1-beta.31

8 months ago

1.2.1-beta.30

8 months ago

1.2.1-beta.13

1 year ago

1.2.1-beta.12

1 year ago

1.2.1-beta.15

1 year ago

1.2.1-beta.14

1 year ago

1.2.1-beta.17

1 year ago

1.2.1-beta.16

1 year ago

1.2.1-beta.18

1 year ago

1.2.1-beta.11

1 year ago

1.2.1-beta.10

1 year ago

1.2.1-beta.9

1 year ago

1.2.1-beta.8

1 year ago

1.2.0-beta.42

1 year ago

1.1.4-beta.11

1 year ago

1.1.4-beta.12

1 year ago

1.1.4-beta.13

1 year ago

1.1.4-beta.14

1 year ago

1.2.2

1 year ago

1.2.1-beta.5

1 year ago

1.2.1-beta.6

1 year ago

1.2.1-beta.7

1 year ago

1.2.1-beta.3

2 years ago

1.2.1-beta.4

2 years ago

1.2.1-beta.2

2 years ago

1.2.1-beta.1

2 years ago

1.2.1-beta.0

2 years ago

1.2.0

2 years ago

1.2.0-beta.41

2 years ago

1.2.0-beta.40

2 years ago

1.2.0-beta.39

2 years ago

1.2.0-beta.38

2 years ago

1.2.0-beta.37

2 years ago

1.2.0-beta.36

2 years ago

1.2.0-beta.35

2 years ago

1.2.0-beta.34

2 years ago

1.2.0-beta.33

2 years ago

1.2.0-beta.30

2 years ago

1.2.0-beta.32

2 years ago

1.2.0-beta.31

2 years ago

1.2.0-beta.27

2 years ago

1.2.0-beta.29

2 years ago

1.2.0-beta.28

2 years ago

1.1.4-beta.1

2 years ago

1.1.4-beta.2

2 years ago

0.3.8-beta.1

2 years ago

0.3.0

2 years ago

1.1.4-beta.0

2 years ago

0.3.7-beta.1

2 years ago

1.1.4-beta.9

2 years ago

0.3.6

2 years ago

0.3.5

2 years ago

1.1.4-beta.7

2 years ago

1.1.4-beta.8

2 years ago

0.3.7

2 years ago

1.1.4-beta.5

2 years ago

0.3.2

2 years ago

1.1.4-beta.6

2 years ago

0.3.1

2 years ago

1.1.4-beta.3

2 years ago

0.3.4

2 years ago

1.1.4-beta.4

2 years ago

0.3.3

2 years ago

1.1.1

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

0.3.5-beta.10

2 years ago

0.3.5-beta.13

2 years ago

0.3.5-beta.12

2 years ago

1.2.0-beta.9

2 years ago

1.2.0-beta.8

2 years ago

1.2.0-beta.1

2 years ago

1.2.0-beta.0

2 years ago

1.2.0-beta.3

2 years ago

1.2.0-beta.2

2 years ago

1.2.0-beta.5

2 years ago

1.2.0-beta.4

2 years ago

1.2.0-beta.7

2 years ago

1.2.0-beta.6

2 years ago

0.3.5-beta.1

2 years ago

0.3.5-beta.2

2 years ago

0.3.5-beta.3

2 years ago

0.3.5-beta.4

2 years ago

0.3.5-beta.0

2 years ago

0.3.5-beta.9

2 years ago

0.3.5-beta.5

2 years ago

0.3.5-beta.6

2 years ago

0.3.5-beta.7

2 years ago

0.3.5-beta.8

2 years ago

1.2.0-beta.26

2 years ago

1.2.0-beta.23

2 years ago

1.2.0-beta.22

2 years ago

1.2.0-beta.25

2 years ago

1.2.0-beta.24

2 years ago

1.2.0-beta.21

2 years ago

1.2.0-beta.20

2 years ago

1.1.3-beta0

2 years ago

0.3.4-beta1

2 years ago

1.2.0-beta.16

2 years ago

1.2.0-beta.15

2 years ago

1.2.0-beta.18

2 years ago

1.2.0-beta.17

2 years ago

1.2.0-beta.12

2 years ago

1.2.0-beta.11

2 years ago

1.2.0-beta.14

2 years ago

1.2.0-beta.13

2 years ago

1.2.0-beta.10

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.2.7

2 years ago

0.2.6

2 years ago

0.2.9

2 years ago

0.2.8

2 years ago

0.2.3

2 years ago

1.2.0-beta.19

2 years ago

0.2.2

2 years ago

0.2.5

2 years ago

0.2.4

2 years ago

0.1.20

2 years ago

0.1.10

2 years ago

0.1.11

2 years ago

0.1.12

2 years ago

0.1.13

2 years ago

0.1.14

2 years ago

0.1.15

2 years ago

0.1.0

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.8

2 years ago

0.1.7

2 years ago

0.1.9

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.1.6

2 years ago

0.1.5

2 years ago

0.0.53

2 years ago

0.1.16

2 years ago

0.1.17

2 years ago

0.1.18

2 years ago

0.1.19

2 years ago

0.0.40

2 years ago

0.0.41

2 years ago

0.0.42

2 years ago

0.0.43

2 years ago

0.0.44

2 years ago

0.0.45

2 years ago

0.0.46

2 years ago

0.0.47

2 years ago

0.0.37

2 years ago

0.0.38

2 years ago

0.0.39

2 years ago

0.0.51

2 years ago

0.0.52

2 years ago

0.0.30

3 years ago

0.0.31

3 years ago

0.0.32

3 years ago

0.0.33

3 years ago

0.0.34

3 years ago

0.0.35

3 years ago

0.0.36

2 years ago

0.0.50

2 years ago

0.0.48

2 years ago

0.0.49

2 years ago

0.0.28

3 years ago

0.0.29

3 years ago

0.0.21

3 years ago

0.0.22

3 years ago

0.0.23

3 years ago

0.0.24

3 years ago

0.0.25

3 years ago

0.0.26

3 years ago

0.0.27

3 years ago

0.0.20

3 years ago