vue3拖拽布局+动态组件+自适应布局

02-27 1853阅读 0评论

1.拖拽布局插件

vue3拖拽布局+动态组件+自适应布局,vue3拖拽布局+动态组件+自适应布局,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,设置,插件,命令,第1张
(图片来源网络,侵删)

Vue Grid Layout -️ 适用Vue.js的栅格布局系统可拖动和可调整大小栅格布局的Vue组件。vue3拖拽布局+动态组件+自适应布局,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,设置,插件,命令,第2张https://jbaysolutions.github.io/vue-grid-layout/zh/

//在package.json中dependencies下添加下面插件库,并执行命令npm install

 "vue-grid-layout": "^3.0.0-beta1",

 2.拖拽页面代码

  
    
    
      
        
          
        
      
    
  


import { BarChart, FunnelChart, PieChart, RadarChart } from './components';
export default {
  components: {
    BarChart,
    FunnelChart,
    PieChart,
    RadarChart
  }
};


const layout = ref([
  { x: 0, y: 0, w: 2, h: 2, i: '0' },
  { x: 2, y: 0, w: 2, h: 4, i: '1' },
  { x: 4, y: 0, w: 2, h: 5, i: '2' },
  { x: 6, y: 0, w: 2, h: 3, i: '3' },
  { x: 8, y: 0, w: 2, h: 3, i: '4' },
  { x: 10, y: 0, w: 2, h: 3, i: '5' }
]);
const testLayout = [
  {
    x: 0,
    y: 0,
    w: 2,
    h: 8,
    i: '0',
    name: 'BarChart'
  },
  //   {
  //     x: 2,
  //     y: 0,
  //     w: 2,
  //     h: 8,
  //     i: '1',
  //     name: 'FunnelChart'
  //   },
  //   {
  //     x: 4,
  //     y: 0,
  //     w: 2,
  //     h: 8,
  //     i: '2',
  //     name: 'PieChart'
  //   },
  //   {
  //     x: 6,
  //     y: 0,
  //     w: 2,
  //     h: 8,
  //     i: '3',
  //     name: 'RadarChart'
  //   },
  {
    x: 8,
    y: 0,
    w: 2,
    h: 8,
    i: '4',
    name: 'BarChart'
  }
];
layout.value = testLayout;
//更新事件(布局更新或栅格元素的位置重新计算)
const layoutUpdatedEvent = (newLayout: any) => {
  console.log('布局更新了');
  console.log('Updated layout: ', newLayout);
  layout.value = newLayout;
  console.log(layout.value);
};
//移动时的事件
const moveEvent = (i: any, newX: any, newY: any) => {
  console.log('盒子移动了');
  console.log('MOVE i=' + i + ', X=' + newX + ', Y=' + newY);
};
//调整大小后的事件
/**
 *
 * @param i the item id/index
 * @param newH new height in grid rows
 * @param newW new width in grid columns
 * @param newHPx new height in pixels
 * @param newWPx new width in pixels
 *
 */
const resizedEvent = (
  i: any,
  newH: any,
  newW: any,
  newHPx: any,
  newWPx: any
) => {
  console.log('改变了尺寸');
  console.log(
    'RESIZED i=' +
      i +
      ', H=' +
      newH +
      ', W=' +
      newW +
      ', H(px)=' +
      newHPx +
      ', W(px)=' +
      newWPx
  );
  let newLayouts = layout.value.map(item => {
    console.log(item);
    console.log(item.i == i);
    if (item.i == i) {
      item.Wpx = newWPx + 'px';
      item.Hpx = newHPx + 'px';
    }
    return item;
  });
  layout.value = newLayouts;
};


3.图表子组件代码

  
    
  


import * as echarts from 'echarts';
const props = defineProps({
  id: {
    type: String,
    default: 'barChart'
  },
  className: {
    type: String,
    default: ''
  },
  width: {
    type: String,
    default: '100%',
    required: true
  },
  height: {
    type: String,
    default: '100%',
    required: true
  }
});
const options = {
  grid: {
    left: '2%',
    right: '2%',
    // top: '5%',
    bottom: '10%',
    containLabel: true
  },
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'cross',
      crossStyle: {
        color: '#999'
      }
    }
  },
  legend: {
    x: 'center',
    y: 'bottom',
    data: ['收入', '毛利润', '收入增长率', '利润增长率'],
    textStyle: {
      color: '#999'
    }
  },
  xAxis: [
    {
      type: 'category',
      data: ['浙江', '北京', '上海', '广东', '深圳'],
      axisPointer: {
        type: 'shadow'
      }
    }
  ],
  yAxis: [
    {
      type: 'value',
      min: 0,
      max: 10000,
      interval: 2000,
      axisLabel: {
        formatter: '{value} '
      }
    },
    {
      type: 'value',
      min: 0,
      max: 100,
      interval: 20,
      axisLabel: {
        formatter: '{value}%'
      }
    }
  ],
  series: [
    {
      name: '收入',
      type: 'bar',
      data: [7000, 7100, 7200, 7300, 7400],
      barWidth: 20,
      itemStyle: {
        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
          { offset: 0, color: '#83bff6' },
          { offset: 0.5, color: '#188df0' },
          { offset: 1, color: '#188df0' }
        ])
      }
    },
    {
      name: '毛利润',
      type: 'bar',
      data: [8000, 8200, 8400, 8600, 8800],
      barWidth: 20,
      itemStyle: {
        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
          { offset: 0, color: '#25d73c' },
          { offset: 0.5, color: '#1bc23d' },
          { offset: 1, color: '#179e61' }
        ])
      }
    },
    {
      name: '收入增长率',
      type: 'line',
      yAxisIndex: 1,
      data: [60, 65, 70, 75, 80],
      itemStyle: {
        color: '#67C23A'
      }
    },
    {
      name: '利润增长率',
      type: 'line',
      yAxisIndex: 1,
      data: [70, 75, 80, 85, 90],
      itemStyle: {
        color: '#409EFF'
      }
    }
  ]
};
const initEcharts = () => {
  console.log('123');
  echarts.init(document.getElementById(props.id) as HTMLDivElement).dispose(); //先销毁
  // 图表初始化
  var chart = echarts.init(document.getElementById(props.id) as HTMLDivElement);
  chart.setOption(options);
  // 大小自适应
  setTimeout(() => {
    //由于网格布局拖拽放大缩小图表不能自适应,这里设置一个定时器使得echart加载为一个异步过程
    console.log('111');
    chart.resize();
  }, 0);
};
watch(
  () => props,
  (newVal, oldVal) => {
    console.log('监听传值', newVal);
    initEcharts();
  },
  {
    deep: true
  }
);
onMounted(() => {
  console.log('图表初始化');
  initEcharts();
});


.box {
  width: 100%;
  height: 100%;
  background: #fff;
}
vue3拖拽布局+动态组件+自适应布局,vue3拖拽布局+动态组件+自适应布局,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,设置,插件,命令,第3张
(图片来源网络,侵删)
vue3拖拽布局+动态组件+自适应布局,vue3拖拽布局+动态组件+自适应布局,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,设置,插件,命令,第4张
(图片来源网络,侵删)

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1853人围观)

还没有评论,来说两句吧...

目录[+]