Commit 3a8530bfb65f8a510e86277be9f17fd6b6149892

Authored by ww
1 parent 485ac3c3

perf: implement chart component render

  1 +<svg viewBox="0 0 79 86" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient-1-1" x1="38.8503086%" y1="0%" x2="61.1496914%" y2="100%"><stop stop-color="#FCFCFD" offset="0%"></stop><stop stop-color="#EEEFF3" offset="100%"></stop></linearGradient><linearGradient id="linearGradient-2-1" x1="0%" y1="9.5%" x2="100%" y2="90.5%"><stop stop-color="#FCFCFD" offset="0%"></stop><stop stop-color="#E9EBEF" offset="100%"></stop></linearGradient><rect id="path-3-1" x="0" y="0" width="17" height="36"></rect></defs><g id="Illustrations" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="B-type" transform="translate(-1268.000000, -535.000000)"><g id="Group-2" transform="translate(1268.000000, 535.000000)"><path id="Oval-Copy-2" d="M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z" fill="#F7F8FC"></path><polygon id="Rectangle-Copy-14" fill="#E5E7E9" transform="translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) " points="13 58 53 58 42 45 2 45"></polygon><g id="Group-Copy" transform="translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"><polygon id="Rectangle-Copy-10" fill="#E5E7E9" transform="translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) " points="2.84078316e-14 3 18 3 23 7 5 7"></polygon><polygon id="Rectangle-Copy-11" fill="#EDEEF2" points="-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"></polygon><rect id="Rectangle-Copy-12" fill="url(#linearGradient-1-1)" transform="translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) " x="38" y="7" width="17" height="36"></rect><polygon id="Rectangle-Copy-13" fill="#F8F9FB" transform="translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) " points="24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"></polygon></g><rect id="Rectangle-Copy-15" fill="url(#linearGradient-2-1)" x="13" y="45" width="40" height="36"></rect><g id="Rectangle-Copy-17" transform="translate(53.000000, 45.000000)"><mask id="mask-4-1" fill="white"><use xlink:href="#path-3-1"></use></mask><use id="Mask" fill="#E0E3E9" transform="translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) " xlink:href="#path-3-1"></use><polygon id="Rectangle-Copy" fill="#D5D7DE" mask="url(#mask-4-1)" transform="translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) " points="7 0 24 0 20 18 -1.70530257e-13 16"></polygon></g><polygon id="Rectangle-Copy-18" fill="#F8F9FB" transform="translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) " points="62 45 79 45 70 58 53 58"></polygon></g></g></g></svg>
... ...
... ... @@ -253,7 +253,9 @@
253 253 */
254 254 Sidebar.prototype.enumPermissionPanel = {
255 255 DATA_SOURCE: 'dataSource',
256   - DISPLAY_TYPE: 'displayType',
  256 + // DISPLAY_TYPE: 'displayType',
  257 + LINE_CHART_EXPAND: 'lineChartExpandDataSource',
  258 + BAR_CHART_EXPAND: 'barChartExpandDataSource',
257 259 INTERACTION: 'interaction',
258 260 DYNAMIC_EFFECT: 'dynamicEffect',
259 261 VAR_IMAGE: 'variableImage'
... ... @@ -610,7 +612,7 @@
610 612 //更多图形,显示出来的的标题跟id,同时包括图片
611 613
612 614 // TODO thingsKit 设置数据绑定展示面板
613   - const { DISPLAY_TYPE, DYNAMIC_EFFECT, DATA_SOURCE, VAR_IMAGE, INTERACTION } = this.enumPermissionPanel
  615 + const { LINE_CHART_EXPAND, BAR_CHART_EXPAND, DYNAMIC_EFFECT, DATA_SOURCE, VAR_IMAGE, INTERACTION } = this.enumPermissionPanel
614 616 const { LINE, LINE_CHART, REAL_TIME, TITLE, VARIABLE, DEFAULT, BAR_CHART } = this.enumComponentType
615 617 this.setComponentPermission(LINE, [DYNAMIC_EFFECT])
616 618 this.setComponentPermission(DEFAULT, [DYNAMIC_EFFECT])
... ... @@ -618,8 +620,8 @@
618 620 this.setComponentPermission(TITLE, [INTERACTION, DYNAMIC_EFFECT])
619 621 this.setComponentPermission(VAR_IMAGE, [DATA_SOURCE, INTERACTION, VAR_IMAGE])
620 622 this.setComponentPermission(VARIABLE, [DATA_SOURCE, INTERACTION, DYNAMIC_EFFECT])
621   - this.setComponentPermission(BAR_CHART, [DATA_SOURCE, DISPLAY_TYPE, DYNAMIC_EFFECT])
622   - this.setComponentPermission(LINE_CHART, [DATA_SOURCE, DISPLAY_TYPE, DYNAMIC_EFFECT])
  623 + this.setComponentPermission(BAR_CHART, [DATA_SOURCE, BAR_CHART_EXPAND, DYNAMIC_EFFECT])
  624 + this.setComponentPermission(LINE_CHART, [DATA_SOURCE, LINE_CHART_EXPAND, DYNAMIC_EFFECT])
623 625
624 626 var thingskitEntries = [
625 627 { title: "风机", id: 'fan', image: IMAGE_PATH + '/thingskit/风机.png' },
... ...
... ... @@ -194,6 +194,7 @@
194 194 const chartOptionMapping = this.chartOptionMapping
195 195 const chartsInstanceMapping = this.chartsInstanceMapping
196 196 const chartDom = document.getElementById(id);
  197 + if (!chartDom) return
197 198 chartDom.style.width = `${width}px`
198 199 chartDom.style.height = `${height}px`
199 200 const myChart = echarts.init(chartDom);
... ...
... ... @@ -5092,7 +5092,9 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5092 5092
5093 5093 const renderMapping = {
5094 5094 [permissionKey.DATA_SOURCE]: createDataSourcePanel,
5095   - [permissionKey.DISPLAY_TYPE]: createChartBindPanel,
  5095 + // [permissionKey.DISPLAY_TYPE]: createChartBindPanel,
  5096 + [permissionKey.LINE_CHART_EXPAND]: createLineChartPanel,
  5097 + [permissionKey.BAR_CHART_EXPAND]: createBarChartPanel,
5096 5098 [permissionKey.INTERACTION]: createInteractionPanel,
5097 5099 [permissionKey.DYNAMIC_EFFECT]: createDynamicEffectPanel,
5098 5100 [permissionKey.VAR_IMAGE]: createVarImagePanel,
... ... @@ -5208,14 +5210,18 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5208 5210 }
5209 5211
5210 5212 function createLineChartPanel() {
5211   -
  5213 + createChartBindPanel(true)
5212 5214 }
5213 5215
5214 5216 function createBarChartPanel() {
5215   -
  5217 + createChartBindPanel(false)
5216 5218 }
5217 5219
5218   - function createChartBindPanel() {
  5220 + /**
  5221 + * @description 是否是折线图
  5222 + * @param {boolean} isLineChart
  5223 + */
  5224 + function createChartBindPanel(isLineChart) {
5219 5225 const fragment = document.createDocumentFragment()
5220 5226 const chartBindContainer = document.createElement('div')
5221 5227 chartBindContainer.setAttribute('class', 'chart-panel__style')
... ... @@ -5485,22 +5491,21 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5485 5491 })
5486 5492
5487 5493 const aggergationOptions = [
  5494 + { id: 'AVG', name: '平均值' },
5488 5495 { id: 'MIN', name: '最小值' },
5489 5496 { id: 'MAX', name: '最大值' },
5490   - { id: 'AVG', name: '平均值' },
5491 5497 { id: 'SUM', name: '求和' },
5492 5498 { id: 'COUNT', name: '计数' },
5493 5499 { id: 'NONE', name: '空' },
5494 5500 ]
5495 5501
5496   -
5497   -
5498 5502 function createSwitchBindTypeRadio() {
  5503 + const realOption = `<input type="radio" name="${enumConst.DATA_TYPE}" value="${enumConst.REAL}" title="实时">`
5499 5504 return `
5500 5505 <div class="layui-form-item">
5501 5506 <label class="layui-form-label">数据类型</label>
5502 5507 <div class="layui-input-block">
5503   - <input type="radio" name="${enumConst.DATA_TYPE}" value="${enumConst.REAL}" title="实时">
  5508 + ${isLineChart ? realOption : ''}
5504 5509 <input type="radio" name="${enumConst.DATA_TYPE}" value="${enumConst.HISTORY}" title="历史" checked>
5505 5510 </div>
5506 5511 </div>`
... ... @@ -5573,7 +5578,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5573 5578 function echoData() {
5574 5579 const { dataSources = [] } = currentNodeData
5575 5580 const { additional = {} } = dataSources[0] || {}
5576   - const { [enumBindKey.EFFECT_SCOPE]: effectScope } = additional
  5581 + const { [enumBindKey.EFFECT_SCOPE]: effectScope = 1000 } = additional
  5582 + console.log(additional)
5577 5583 linkageIntervalSelect(effectScope)
5578 5584 form.val(CONTAINER_FILTER, additional)
5579 5585 }
... ... @@ -11816,7 +11822,6 @@ class EventCenter {
11816 11822 emit(eventName, ...args) {
11817 11823 if (this.eventStack.has(eventName))
11818 11824 this.eventStack.get(eventName).forEach(fn => fn(...args))
11819   -
11820 11825 }
11821 11826
11822 11827 /**
... ... @@ -12325,10 +12330,12 @@ class DispatchCenter {
12325 12330 * @description 分发事件
12326 12331 */
12327 12332 publishEvent(eventName, data, message, event, ws) {
12328   - data = data ? data : {}
12329   - Object.keys(data).forEach(() => {
12330   - this.eventBus.emit(eventName, message, event, ws)
12331   - })
  12333 + // data = data ? data : {}
  12334 + this.eventBus.emit(eventName, message, event, ws)
  12335 + // console.log(arguments)
  12336 + // Object.keys(data).forEach(() => {
  12337 + // this.eventBus.emit(eventName, message, event, ws)
  12338 + // })
12332 12339 }
12333 12340
12334 12341 /**
... ... @@ -12530,7 +12537,7 @@ class HandleDataSource {
12530 12537 }
12531 12538 else if (dataType === REAL) {
12532 12539 template[STARTTs] = Date.now() - scope
12533   - template['scope'] = 'LATEST_TELEMETRY'
  12540 + template['timeWindow'] = interval
12534 12541 realList.push(template)
12535 12542 this.subscribeEvent(cmdId, this.updateRealTimeDataSource.bind(this))
12536 12543 }
... ... @@ -12549,6 +12556,10 @@ class HandleDataSource {
12549 12556 this.DispatchInstance.eventBus.on(eventName, callback)
12550 12557 }
12551 12558
  12559 + /**
  12560 + * @description 更新变量值
  12561 + * @param {} message
  12562 + */
12552 12563 updateCommonDataSource(message) {
12553 12564 const { subscriptionId } = message
12554 12565 const node = this.getNodeByCmdId(subscriptionId)
... ... @@ -12560,27 +12571,12 @@ class HandleDataSource {
12560 12571 }, node)
12561 12572 }
12562 12573
12563   - updateChartDataSource(message) {
12564   - const { data = {}, subscriptionId } = message
12565   - const node = this.getNodeByCmdId(subscriptionId)
12566   - if (!node) return
12567   - const enumConst = Sidebar.prototype.enumCellBasicAttribute
12568   - const chartInstanceMap = Sidebar.prototype.chartsInstanceMapping
12569   - const chartInstanceId = node.getAttribute(enumConst.CHART_INSTANCE_ID)
12570   - const instance = chartInstanceMap.get(chartInstanceId)
12571   - const { attr = [[]] } = this.getBindData(subscriptionId)
12572   - const [timespan, value] = data[attr][0]
12573   - console.log('timespan', timespan)
12574   - console.log('value', value)
12575   - console.log(instance)
12576   - console.log('chart', arguments)
12577   - }
12578   -
12579 12574 /**
12580 12575 * @description 更新实时数据
12581 12576 * @param {} message
12582 12577 */
12583 12578 updateRealTimeDataSource(message) {
  12579 + console.log(message)
12584 12580 const { data = {}, subscriptionId } = message
12585 12581 const node = this.getNodeByCmdId(subscriptionId)
12586 12582 if (!node) return
... ... @@ -12590,8 +12586,12 @@ class HandleDataSource {
12590 12586 const chartInstanceType = node.getAttribute(enumConst.COMPONENT_TYPE)
12591 12587 const instance = chartInstanceMap.get(chartInstanceId)
12592 12588 const { attr = [[]] } = this.getBindData(subscriptionId)
12593   - const historyDataList = data[attr]
  12589 + const realDataList = data[attr] || []
12594 12590
  12591 + const chartWidth = node.getAttribute('width')
  12592 + const chartHeight = node.getAttribute('height')
  12593 + console.log(chartHeight)
  12594 + console.log(chartWidth)
12595 12595 // chart insstance 是否已经接受过一次消息推送
12596 12596 const isActive = instance.isActive
12597 12597 if (!isActive) {
... ... @@ -12599,6 +12599,29 @@ class HandleDataSource {
12599 12599 const xAxisData = []
12600 12600 const seriesValue = []
12601 12601 const chartOption = {
  12602 + title: {
  12603 + // text: '{a|}',
  12604 + subtext: '暂无数据',
  12605 + x: 'center',
  12606 + y: 'center',
  12607 + itemGap: -20,
  12608 + // textStyle: {
  12609 + // rich: {
  12610 + // a: {
  12611 + // color: '#000',
  12612 + // fontSize: '16',
  12613 + // height: 160,
  12614 + // width: 180,
  12615 + // backgroundColor: {
  12616 + // image: '/thingskit-drawio/images/thingskit/empty.svg'
  12617 + // }
  12618 + // }
  12619 + // }
  12620 + // },
  12621 + subtextStyle: {
  12622 + fontSize: 16
  12623 + }
  12624 + },
12602 12625 tooltip: {
12603 12626 trigger: 'axis',
12604 12627 axisPointer: {
... ... @@ -12638,7 +12661,7 @@ class HandleDataSource {
12638 12661 dataZoom: [
12639 12662 {
12640 12663 xAxisIndex: 0,
12641   - // show: false,
  12664 + show: realDataList.length ? true : false,
12642 12665 type: 'slider',
12643 12666 startValue: 0,
12644 12667 endValue: 4
... ... @@ -12646,12 +12669,12 @@ class HandleDataSource {
12646 12669 ]
12647 12670 }
12648 12671
12649   - for (let i = historyDataList.length - 1; i >= 0; i--) {
12650   - const [timespan, value] = historyDataList[i]
  12672 + for (let i = realDataList.length - 1; i >= 0; i--) {
  12673 + const [timespan, value] = realDataList[i]
12651 12674 xAxisData.push(new Date(Number(timespan)).toLocaleTimeString())
12652 12675 seriesValue.push(Number(value))
12653 12676 }
12654   -
  12677 + console.log(chartOption)
12655 12678 instance.setOption(chartOption)
12656 12679
12657 12680 } else {
... ... @@ -12661,8 +12684,8 @@ class HandleDataSource {
12661 12684 const oldEndValue = Number(oldOptions.dataZoom[0].endValue) || 0
12662 12685 const oldStartValue = Number(oldOptions.dataZoom[0].startValue) || 0
12663 12686
12664   - for (let i = historyDataList.length - 1; i >= 0; i--) {
12665   - const [timespan, value] = historyDataList[i]
  12687 + for (let i = realDataList.length - 1; i >= 0; i--) {
  12688 + const [timespan, value] = realDataList[i]
12666 12689 xAxisData.push(new Date(Number(timespan)).toLocaleTimeString())
12667 12690 seriesValue.push(Number(value))
12668 12691 }
... ... @@ -12716,7 +12739,7 @@ class HandleDataSource {
12716 12739 const chartInstanceType = node.getAttribute(enumConst.COMPONENT_TYPE)
12717 12740 const instance = chartInstanceMap.get(chartInstanceId)
12718 12741 const { attr = [[]] } = this.getBindData(subscriptionId)
12719   - const historyDataList = data[attr]
  12742 + const historyDataList = data[attr] || []
12720 12743
12721 12744 const xAxisData = []
12722 12745 const seriesValue = []
... ... @@ -13174,7 +13197,7 @@ class HandleDynamicEffect {
13174 13197
13175 13198 this.subscribeEvent(cmdId, this.dispatch(type))
13176 13199 })
13177   - this.sendMsg({ tsSubCmds })
  13200 + if (tsSubCmds.length) this.sendMsg({ tsSubCmds })
13178 13201 }
13179 13202
13180 13203 /**
... ...