Commit 03d49b290fe22b8ddfb06bba9cbaa18f11bcf929

Authored by fengwotao
1 parent 8729a338

perf(src/packages): 信息控件下新增树形控件

  1 +import cloneDeep from 'lodash/cloneDeep'
  2 +import { PublicConfigClass } from '@/packages/public'
  3 +import { CreateComponentType } from '@/packages/index.d'
  4 +import { chartInitConfig } from '@/settings/designSetting'
  5 +import { COMPONENT_INTERACT_EVENT_KET } from '@/enums/eventEnum'
  6 +import { interactActions, ComponentInteractEventEnum } from './interact'
  7 +import { TreeConfig } from './index'
  8 +
  9 +export const option = {
  10 + // 时间组件展示类型,必须和 interactActions 中定义的数据一致
  11 + [COMPONENT_INTERACT_EVENT_KET]: ComponentInteractEventEnum.DATA,
  12 + // 暴露配置内容给用户
  13 + dataset: [
  14 + {
  15 + id: '1',
  16 + name: '根组织',
  17 + children: [
  18 + {
  19 + id: '11',
  20 + name: '第一级'
  21 + },
  22 + {
  23 + id: '12',
  24 + name: '第二级'
  25 + },
  26 + {
  27 + id: '13',
  28 + name: '第三级'
  29 + }
  30 + ]
  31 + }
  32 + ],
  33 + treeConfig: {
  34 + accordion: false,
  35 + checkable: false,
  36 + defaultExpandAll: false
  37 + }
  38 +}
  39 +
  40 +export default class Config extends PublicConfigClass implements CreateComponentType {
  41 + public key = TreeConfig.key
  42 + public attr = { ...chartInitConfig, w: 300, h: 40, zIndex: -1 }
  43 + public chartConfig = cloneDeep(TreeConfig)
  44 + public interactActions = interactActions
  45 + public option = cloneDeep(option)
  46 +}
  1 +<template>
  2 + <collapse-item name="树配置" :expanded="true">
  3 + <setting-item-box name="手风琴">
  4 + <setting-item name="是否开启">
  5 + <n-switch v-model:value="optionData.treeConfig.accordion" />
  6 + </setting-item>
  7 + </setting-item-box>
  8 + <setting-item-box name="选择框">
  9 + <setting-item name="是否开启">
  10 + <n-switch v-model:value="optionData.treeConfig.checkable" />
  11 + </setting-item>
  12 + </setting-item-box>
  13 + <setting-item-box name="展开">
  14 + <setting-item name="是否开启">
  15 + <n-switch v-model:value="optionData.treeConfig.defaultExpandAll" />
  16 + </setting-item>
  17 + </setting-item-box>
  18 + </collapse-item>
  19 +</template>
  20 +
  21 +<script lang="ts" setup>
  22 +import { PropType } from 'vue'
  23 +import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
  24 +import { option } from './config'
  25 +
  26 +defineProps({
  27 + optionData: {
  28 + type: Object as PropType<typeof option>,
  29 + required: true
  30 + }
  31 +})
  32 +</script>
  33 +<style lang="scss" scoped></style>
  1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
  2 +import { ChatCategoryEnum, ChatCategoryEnumName } from '@/packages/components/Informations/index.d'
  3 +import { useWidgetKey } from '@/packages/external/useWidgetKey'
  4 +
  5 +const { key, conKey, chartKey } = useWidgetKey('Tree', true)
  6 +
  7 +export const TreeConfig: ConfigType = {
  8 + key,
  9 + chartKey,
  10 + conKey,
  11 + title: '自定义树形控件',
  12 + category: ChatCategoryEnum.INPUTS,
  13 + categoryName: ChatCategoryEnumName.INPUTS,
  14 + package: PackagesCategoryEnum.INFORMATIONS,
  15 + chartFrame: ChartFrameEnum.STATIC,
  16 + image: 'button.png'
  17 +}
  1 +<template>
  2 + <div>
  3 + <n-tree
  4 + :accordion="treeConfig.accordion"
  5 + :checkable="treeConfig.checkable"
  6 + :default-expand-all="treeConfig.defaultExpandAll"
  7 + block-line
  8 + block-node
  9 + :data="dataset"
  10 + key-field="id"
  11 + label-field="name"
  12 + children-field="children"
  13 + @update:selected-keys="onClick"
  14 + />
  15 + </div>
  16 +</template>
  17 +
  18 +<script setup lang="ts">
  19 +import { PropType, toRefs } from 'vue'
  20 +import { CreateComponentType } from '@/packages/index.d'
  21 +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  22 +import { useChartInteract } from '@/hooks/external/useChartSelectInteract.hook'
  23 +import { InteractEventOn } from '@/enums/eventEnum'
  24 +import { ComponentInteractParamsEnum } from './interact'
  25 +
  26 +const props = defineProps({
  27 + chartConfig: {
  28 + type: Object as PropType<CreateComponentType>,
  29 + required: true
  30 + }
  31 +})
  32 +
  33 +const { dataset, treeConfig } = toRefs(props.chartConfig.option)
  34 +
  35 +const onClick = (v: string[]) => {
  36 + useChartInteract(
  37 + props.chartConfig,
  38 + useChartEditStore,
  39 + { [ComponentInteractParamsEnum.DATA]: v[0] },
  40 + InteractEventOn.CHANGE
  41 + )
  42 +}
  43 +</script>
  44 +
  45 +<style lang="scss" scoped></style>
  1 +import { InteractEventOn, InteractActionsType } from '@/enums/eventEnum'
  2 +
  3 +// 时间组件类型
  4 +export enum ComponentInteractEventEnum {
  5 + DATA = 'data'
  6 +}
  7 +
  8 +// 联动参数
  9 +export enum ComponentInteractParamsEnum {
  10 + DATA = 'data'
  11 +}
  12 +
  13 +// 定义组件触发回调事件
  14 +export const interactActions: InteractActionsType[] = [
  15 + {
  16 + interactType: InteractEventOn.CHANGE,
  17 + interactName: '选择完成',
  18 + componentEmitEvents: {
  19 + [ComponentInteractEventEnum.DATA]: [
  20 + {
  21 + value: ComponentInteractParamsEnum.DATA,
  22 + label: '选择项'
  23 + }
  24 + ]
  25 + }
  26 + }
  27 +]
@@ -70,7 +70,17 @@ const transitionDuration = computed(() => { @@ -70,7 +70,17 @@ const transitionDuration = computed(() => {
70 70
71 // 预览更新 71 // 预览更新
72 useChartDataFetch(props.chartConfig, useChartEditStore, (newData: string) => { 72 useChartDataFetch(props.chartConfig, useChartEditStore, (newData: string) => {
73 - option.dataset = newData 73 + const chartEditStore = useChartEditStore()
  74 + //判断只要是分组并且分组绑定了ws
  75 + let hasGroupWs = false
  76 + chartEditStore.componentList.some((item: CreateComponentType) => {
  77 + if (item.request.requestUrl?.includes('ws')) {
  78 + hasGroupWs = true
  79 + }
  80 + })
  81 + if (!hasGroupWs) {
  82 + option.dataset = newData
  83 + }
74 }) 84 })
75 </script> 85 </script>
76 86
@@ -57,7 +57,17 @@ watch( @@ -57,7 +57,17 @@ watch(
57 57
58 // 预览更新 58 // 预览更新
59 useChartDataFetch(props.chartConfig, useChartEditStore, (newData: string) => { 59 useChartDataFetch(props.chartConfig, useChartEditStore, (newData: string) => {
60 - option.dataset = newData 60 + const chartEditStore = useChartEditStore()
  61 + //判断只要是分组并且分组绑定了ws
  62 + let hasGroupWs = false
  63 + chartEditStore.componentList.some((item: CreateComponentType) => {
  64 + if (item.request.requestUrl?.includes('ws')) {
  65 + hasGroupWs = true
  66 + }
  67 + })
  68 + if (!hasGroupWs) {
  69 + option.dataset = newData
  70 + }
61 }) 71 })
62 72
63 //打开链接 73 //打开链接
@@ -38,7 +38,17 @@ watch( @@ -38,7 +38,17 @@ watch(
38 ) 38 )
39 39
40 useChartDataFetch(props.chartConfig, useChartEditStore, (newData: any) => { 40 useChartDataFetch(props.chartConfig, useChartEditStore, (newData: any) => {
41 - // option.dataset = newData 41 + const chartEditStore = useChartEditStore()
  42 + //判断只要是分组并且分组绑定了ws
  43 + let hasGroupWs = false
  44 + chartEditStore.componentList.some((item: CreateComponentType) => {
  45 + if (item.request.requestUrl?.includes('ws')) {
  46 + hasGroupWs = true
  47 + }
  48 + })
  49 + if (!hasGroupWs) {
  50 + option.dataset = newData
  51 + }
42 }) 52 })
43 </script> 53 </script>
44 54
@@ -11,6 +11,7 @@ import { OverrideInputsDateConfig } from '@/packages/components/external/Informa @@ -11,6 +11,7 @@ import { OverrideInputsDateConfig } from '@/packages/components/external/Informa
11 import { OverrideInputsTabConfig } from '@/packages/components/external/Informations/Inputs/OverrideInputsTab' 11 import { OverrideInputsTabConfig } from '@/packages/components/external/Informations/Inputs/OverrideInputsTab'
12 import { OverrideIframeConfig } from '@/packages/components/external/Informations/Mores/OverrideIframe' 12 import { OverrideIframeConfig } from '@/packages/components/external/Informations/Mores/OverrideIframe'
13 import { ButtonConfig } from '@/packages/components/external/Informations/Inputs/Button' 13 import { ButtonConfig } from '@/packages/components/external/Informations/Inputs/Button'
  14 +import { TreeConfig } from '@/packages/components/external/Informations/Inputs/Tree'
14 import { OverrideTextCommonConfig } from '@/packages/components/external/Informations/Texts/OverrideTextCommon' 15 import { OverrideTextCommonConfig } from '@/packages/components/external/Informations/Texts/OverrideTextCommon'
15 import { OverrideTextBarrageConfig } from '@/packages/components/external/Informations/Texts/OverrideTextBarrage' 16 import { OverrideTextBarrageConfig } from '@/packages/components/external/Informations/Texts/OverrideTextBarrage'
16 import { OverrideTextGradientConfig } from '@/packages/components/external/Informations/Texts/OverrideTextGradient' 17 import { OverrideTextGradientConfig } from '@/packages/components/external/Informations/Texts/OverrideTextGradient'
@@ -80,6 +81,7 @@ export function useInjectLib(packagesList: EPackagesType) { @@ -80,6 +81,7 @@ export function useInjectLib(packagesList: EPackagesType) {
80 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, OverrideCarouselConfig)//重写信息下的轮播图 81 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, OverrideCarouselConfig)//重写信息下的轮播图
81 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, OverrideSelectConfig)//重写信息下的select 82 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, OverrideSelectConfig)//重写信息下的select
82 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, ButtonConfig)//新增信息下的按钮 83 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, ButtonConfig)//新增信息下的按钮
  84 + addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, TreeConfig)//新增信息下的树形控件
83 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, OverrideIframeConfig)//重写信息下的远程加载网页 85 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, OverrideIframeConfig)//重写信息下的远程加载网页
84 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, OverrideInputsDateConfig)//重写信息下的日期 86 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, OverrideInputsDateConfig)//重写信息下的日期
85 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, OverrideInputsTabConfig)//重写信息下的tab 87 addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.INFORMATIONS, OverrideInputsTabConfig)//重写信息下的tab