电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

echarts實(shí)現(xiàn)3d柱狀圖的2種方式舉例

瀏覽:144日期:2022-06-01 13:59:39
目錄
  • echarts實(shí)現(xiàn)3d柱狀圖的兩種方式
  • 方法1: echarts.graphic.extendShape 自定義圖形
  • 方式2: 象型柱圖(type: “pictorialBar”)
  • 總結(jié)

echarts實(shí)現(xiàn)3d柱狀圖的兩種方式

看了不少關(guān)于3d柱狀圖的案例,發(fā)現(xiàn)做3d柱狀圖 常用的兩種方式就是 自定義圖形和象型柱圖, 兩種實(shí)現(xiàn)方式效果如下:

方法1: echarts.graphic.extendShape 自定義圖形

echarts自定義圖形的詳細(xì)用法點(diǎn)這里, 官網(wǎng)點(diǎn)這里, 圖中第一個(gè)3d柱狀圖我參考的案例在這里, 看了很多 echarts這種3d案例, 自定義圖形做3d柱狀圖,貌似只能有個(gè)柱子(可能 能做雙柱,但是 我真的不會(huì))

封裝成組件的完整代碼如下:

<template></template><script setup lang="ts">import { nextTick, watch } from "vue";import echarts from "@/assets/ts/echarts";import useResizeChart from "@/hooks/useResizeChart";function mergeConfig(defaultConfig: object, config: object) {    return Object.assign(defaultConfig, config);}function initOption(): echarts.EChartsCoreOption {    // 繪制左側(cè)面    const CubeLeft = echarts.graphic.extendShape({shape: {    x: 0,    y: 0,},buildPath: function (ctx, shape) {    // 會(huì)canvas的應(yīng)該都能看得懂,shape是從custom傳入的    const xAxisPoint = shape.xAxisPoint;    const c0 = [shape.x + 3.5, shape.y];    const c1 = [shape.x - 11.5, shape.y - 3];    const c2 = [xAxisPoint[0] - 11.5, xAxisPoint[1] - 6.5];    const c3 = [xAxisPoint[0] + 3.5, xAxisPoint[1]];    ctx.moveTo(c0[0], c0[1])// @ts-ignore.lineTo(c1[0], c1[1]).lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).closePath();},    });    // 繪制右側(cè)面    const CubeRight = echarts.graphic.extendShape({shape: {    x: 0,    y: 0,},buildPath: function (ctx, shape) {    const xAxisPoint = shape.xAxisPoint;    const c1 = [shape.x + 3, shape.y];    const c2 = [xAxisPoint[0] + 3, xAxisPoint[1]];    const c3 = [xAxisPoint[0] + 12, xAxisPoint[1] - 7];    const c4 = [shape.x + 12, shape.y - 7];    ctx.moveTo(c1[0], c1[1])// @ts-ignore.lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath();},    });    // 繪制頂面    const CubeTop = echarts.graphic.extendShape({shape: {    x: 0,    y: 0,},buildPath: function (ctx, shape) {    const c1 = [shape.x + 3.5, shape.y];    const c2 = [shape.x + 12.5, shape.y - 7.5]; //右點(diǎn)    const c3 = [shape.x - 2.5, shape.y - 10];    const c4 = [shape.x - 11.5, shape.y - 3];    ctx.moveTo(c1[0], c1[1])// @ts-ignore.lineTo(c2[0], c2[1]).lineTo(c3[0], c3[1]).lineTo(c4[0], c4[1]).closePath();},    });    // 注冊(cè)三個(gè)面圖形    echarts.graphic.registerShape("CubeLeft", CubeLeft);    echarts.graphic.registerShape("CubeRight", CubeRight);    echarts.graphic.registerShape("CubeTop", CubeTop);    const VALUE = props.value;    const series = [{    type: "custom",    renderItem: (params: any, api: any) => {let cubeLeftStyle = new echarts.graphic.LinearGradient(0, 0, 0, 1, [    {offset: 0,// @ts-ignorecolor: props.color[0],    },    {offset: 1,color: "rgba(7, 20, 52,0.7)",    },]);let cubeRightStyle = new echarts.graphic.LinearGradient(0, 0, 0, 1, [    {offset: 0,color: "rgba(7, 20, 52,1)",    },    {offset: 1,// @ts-ignorecolor: props.color[0],    },]);let cubeTopStyle = new echarts.graphic.LinearGradient(0, 0, 0, 1, [    {offset: 0,// @ts-ignorecolor: props.color[1] || props.color[0],    },]);const location = api.coord([api.value(0), api.value(1)]);return {    type: "group",    children: [{    type: "CubeLeft",    shape: {api,xValue: api.value(0),yValue: api.value(1),x: location[0],y: location[1],xAxisPoint: api.coord([api.value(0), 0]),    },    style: {fill: cubeLeftStyle,    },},{    type: "CubeRight",    shape: {api,xValue: api.value(0),yValue: api.value(1),x: location[0],y: location[1],xAxisPoint: api.coord([api.value(0), 0]),    },    style: {fill: cubeRightStyle,    },},{    type: "CubeTop",    shape: {api,xValue: api.value(0),yValue: api.value(1),x: location[0],y: location[1],xAxisPoint: api.coord([api.value(0), 0]),    },    style: {fill: cubeTopStyle,    },},    ],};    },    data: VALUE,},{    type: "bar",    label: {show: true,position: "top",fontSize: 14,color: props.color[0],offset: [2, -10],    },    itemStyle: {color: "transparent",    },    tooltip: {},    data: VALUE,},    ];    const title = mergeConfig({    text: "",    textStyle: {color: props.color[0],fontWeight: "800",fontSize: 12,    },    left: "18px",    top: "1%",},props.title,    );    const XAxisLine = mergeConfig({    show: false,    lineStyle: {type: "solid",width: 1,color: "#2c3954",    },},props.XAxisLine,    );    const YAxisLine = mergeConfig({    show: false,    lineStyle: {show: true,lineStyle: {    type: "solid",    width: 1,},    },},props.YAxisLine,    );    const legend = mergeConfig({    show: true,    left: "center",    top: "95%",    icon: "circle",    textStyle: {color: "#fff",    },},props.legend,    );    const grid = mergeConfig({    left: "5%",    right: "5%",    top: "12%",    bottom: "0%",    containLabel: true,},props.grid,    );    const XSplitLine = mergeConfig({    show: false,    lineStyle: {type: "dashed",width: 1,    },},props.XSplitLine,    );    // 縱坐標(biāo)分割線配置    const YSplitLine = mergeConfig({    // 是否顯示    // show: false,    show: true,    // 樣式    lineStyle: {color: "#13263e",type: "solid",width: 1,    },},props.YSplitLine,    );    const XAxisTick = mergeConfig({    show: false,    length: 5,    inside: true,    alignWithLabel: true,    lineStyle: {type: "solid",width: 1,    },},props.XAxisTick,    );    const YAxisTick = mergeConfig({    show: true,    length: 5,    inside: true,    alignWithLabel: true,    lineStyle: {color: "#13263e",type: "solid",width: 1,    },},props.YAxisTick,    );    let option: echarts.EChartsCoreOption = {title,tooltip: {    show: false,    // 指示器提示的坐標(biāo)軸    trigger: "axis",    // 陰影提示器    axisPointer: {type: "shadow",shadowStyle: {    shadowColor: "#2e3e51", // 設(shè)置陰影的顏色},    },    formatter: function (params: any) {const item = params[1];return item.name + " : " + item.value;    },    // 提示框背景顏色    backgroundColor: "#122843",    // 提示框邊框顏色    borderColor: "#42D1F1",    // 提示框文本樣式    textStyle: {color: "#fff",    },},legend: legend,grid: grid,xAxis: {    type: "category",    // boundaryGap: false,    data: props.xAxisData,    axisLine: XAxisLine,    splitLine: XSplitLine,    axisTick: XAxisTick,    axisLabel: {//x軸文字的配置show: true,color: "#fff",fontSize: 12,rotate: 30,    },},yAxis: {    type: "value",    name: props.yUnit,    nameTextStyle: {color: "#fff",fontSize: 16,    },    axisLine: YAxisLine,    splitLine: YSplitLine,    axisTick: YAxisTick,    axisLabel: {//y軸文字的配置color: "#fff",fontSize: 12,    },},series,    };    option = Object.assign(option, props.config);    return option;}const props = defineProps({    pid: {type: String,required: true,    },    title: {type: Object,default: {},    },    xAxisData: {type: Array,required: true,    },    legend: {type: Object,default: {},    },    grid: {type: Object,default: {},    },    XAxisLine: {type: Object,default: {},    },    YAxisLine: {type: Object,default: {},    },    yUnit: {type: String,default: "",    },    XSplitLine: {type: Object,default: {},    },    YSplitLine: {type: Object,default: {},    },    XAxisTick: {type: Object,default: {},    },    YAxisTick: {type: Object,default: {},    },    config: {type: Object as () => echarts.EChartsCoreOption,default: {},    },    value: {type: Array,required: true,    },    // 柱子的顏色    color: {type: Array,default: ["rgba(29, 230, 235,1)", "rgba(7, 235, 251,1)"],    },});let option = initOption();let container: HTMLElement | null = null;let myChart: echarts.ECharts | null = null;const renderChart = (notMerge: boolean = false) => {    if (!myChart) myChart = echarts.init(container as HTMLElement);    myChart.setOption(option, {notMerge,    });};nextTick(() => {    container = document.querySelector("#" + props.pid) as HTMLElement;    renderChart();    useResizeChart(container, myChart as echarts.ECharts);});watch(    () => props,    (newVal, oldVal) => {let notMerge = true;option = initOption();renderChart(notMerge);    },    {deep: true,    },);function exportImg() {    const src = (myChart as echarts.ECharts).getDataURL({pixelRatio: 2,backgroundColor: "#08172A",    });    const a = document.createElement("a");    a.href = src;    a.download = (option.title as { text: string }).text || "chart-img";    a.click();}defineExpose({    exportImg,});</script><style lang="scss" scoped></style>

方式2: 象型柱圖(type: “pictorialBar”)

echarts象型柱圖的官網(wǎng)配置項(xiàng)點(diǎn)這里, 參考的案例在這里, 象型柱圖可以單柱可以雙柱

封裝成組件的完整代碼如下:

<template></template><script setup lang="ts">import { nextTick, watch } from "vue";import echarts from "@/assets/ts/echarts";import { LegendComponent } from "echarts/components";echarts.use([LegendComponent]);// 合并配置方法function mergeConfig(defaultConfig: object, config: object) {  return Object.assign(defaultConfig, config);}function initOption(): echarts.EChartsCoreOption {  // 此時(shí) 使用組件只需要要將  zzx1的數(shù)據(jù)和 wgx1 的數(shù)據(jù)傳遞到子組件  // 第一個(gè)柱子的值  const zzx1 = props.series[0].data; // 實(shí)際值  // 第二個(gè)柱子的值  const wgx1 = props.series[1].data;  // 變量: 改變每個(gè)柱子的大小, 后期可將其設(shè)置為動(dòng)態(tài)的?  const barWidth = 30;  const series = [    // (0)第一個(gè)柱子 中間的正方形    {      type: "pictorialBar", // 象型柱狀      symbol: "diamond",      symbolSize: [barWidth, 5], // 調(diào)整大小      // symbolOffset: [-13, -3], // 圖形相對(duì)于原本位置的偏移      symbolOffset: ["-55%", -3], // 圖形相對(duì)于原本位置的偏移      symbolPosition: "end",      z: 12,      color: "#2584e0",      data: zzx1,    },    // (1)第二個(gè)柱子中間的正方形    {      type: "pictorialBar",      symbol: "diamond",      symbolSize: [barWidth, 8],      // symbolOffset: [13, -3],      symbolOffset: ["55%", -3],      symbolPosition: "end",      z: 12,      color: "#07fdd3",      data: wgx1,    },    //  (2)第一個(gè)柱子 底部的正方形    {      type: "pictorialBar",      symbol: "diamond",      symbolSize: [barWidth, 5],      // symbolOffset: [-13, 3],      symbolOffset: ["-55%", 3],      z: 12,      color: "#355ba8",      data: zzx1,    },    // (3)第二個(gè)柱子 底部的正方形    {      name: "",      type: "pictorialBar",      symbol: "diamond",      symbolSize: [barWidth, 5],      // symbolOffset: [13, 3],      symbolOffset: ["55%", 3],      color: "#2095a3",      z: 12,      data: wgx1,    },    // (4)一個(gè)柱子, 下方有顏色填充的的柱子    {      name: props.nameOne,      type: "bar",      barWidth: barWidth,      barGap: "10%",      // zlevel: 2,      stack: "1",      itemStyle: {opacity: 0.7,color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [  {    offset: 0.5,    color: "rgba(44, 97, 188,0.7)",    // color: "#2c61bc",  },  {    offset: 0.5,    color: "#2584e0",  },  {    offset: 1,    color: "#214a87",  },]),// barBorderRadius: 0,borderRadius: 0,      },      // 是否在每個(gè)柱子顯示 相應(yīng)的值      label: {show: true,position: ["0", "-25"],color: "#005dd9",fontSize: 14,fontWeight:"bold"      },      data: zzx1,    },    // (5)第二個(gè)柱子, 下方有顏色填充的的柱子    {      name: props.nameTow,      type: "bar",      stack: "2",      barWidth: barWidth,      itemStyle: {opacity: 0.7,color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [  {    offset: 0.5,    color: "rgba(15, 182, 182,0.7)",  },  {    offset: 0.5,    color: "#0ccec7",  },  {    offset: 1,    color: "#0bddd0",  },]),// barBorderRadius: 0,borderRadius: 0,      },      // 是否在每個(gè)柱子顯示 相應(yīng)的值      label: {show: true,position: ["0", "-25"],color: "#06e6f6",fontSize: 14,fontWeight:"bold"      },      data: wgx1,    },  ];  // title 配置  const title = mergeConfig(    {      // 是否顯示      show: true,      // title 文本      text: "",      top: 0,      left: "left",      // 文字樣式      textStyle: {color: "#fff",fontSize: 16,      },    },    props.title  );  // 橫坐標(biāo)軸線配置  const XAxisLine = mergeConfig(    {      // 是否顯示      show: true,      // show: false,      // 樣式      lineStyle: {// color: "rgba(46, 60, 87)",type: "solid",width: 1,      },    },    props.XAxisLine  );  // 縱坐標(biāo)軸線配置  const YAxisLine = mergeConfig(    {      // 是否顯示      // show: true,      show: false,      // 樣式      lineStyle: {// 是否顯示show: true,// 樣式lineStyle: {  color: "#fff",  type: "solid",  width: 1,},      },    },    props.YAxisLine  );  // 橫坐標(biāo)分割線配置  const XSplitLine = mergeConfig(    {      // 是否顯示      show: false,      // 樣式      lineStyle: {color: "#fff",type: "dotted",width: 1,      },    },    props.XSplitLine  );  // 縱坐標(biāo)分割線配置  const YSplitLine = mergeConfig(    {      // 是否顯示      show: true,      // 樣式      lineStyle: {color: "rgba(46, 59, 86)",type: "dashed",// type: "solid",width: 1,      },    },    props.YSplitLine  );  // 橫坐標(biāo)刻度配置  const XAxisTick = mergeConfig(    {      // 是否顯示      show: false,      // 刻度長(zhǎng)度      length: 5,      // 是否朝內(nèi)      inside: true,      // 刻度是否居中      alignWithLabel: true,      // 樣式      lineStyle: {color: "#fff",type: "solid",width: 1,      },    },    props.XAxisTick  );  // 縱坐標(biāo)刻度配置  const YAxisTick = mergeConfig(    {      // 是否顯示      show: false,      // 刻度長(zhǎng)度      length: 5,      // 是否朝內(nèi)      inside: true,      // 刻度是否居中      alignWithLabel: true,      color: "#fff",      // 樣式      lineStyle: {color: "#fff",type: "solid",width: 1,      },    },    props.YAxisTick  );  // 圖例標(biāo)記配置  const legend = mergeConfig(    {      show: true,      right: "0",      top: "0",      icon: "rect",      itemHeight: 10,      itemWidth: 10,      textStyle: {color: "#fff",      },      // 取消默認(rèn)點(diǎn)擊事件      selectedMode: false,      // 距離      itemGap: 50,    },    props.legend  );  // 指示器:  const tooltip = {    show: false,    trigger: "axis",    axisPointer: {      type: "shadow",    },    formatter: function (e: any) {      // console.log(e);      var str =e[4].axisValue +"<br>" +"<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:" +e[4].color.colorStops[0].color +";"></span>" +"" +e[4].seriesName +" : " +e[4].value +"<br>" +"<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:" +e[5].color.colorStops[0].color +";"></span>" +"" +e[5].seriesName +" : " +e[5].value;      return str;    },    // 提示框背景顏色    backgroundColor: "#122843",    // 提示框邊框顏色    borderColor: "#42D1F1",    // 提示框文本樣式    textStyle: {      color: "#fff",    },  };  // 匯總配置  let option: echarts.EChartsCoreOption = {    title,    tooltip,    legend,    grid: {      top: "12%",      left: "2%",      right: "2%",      bottom: "5%",      // height: "85%",      containLabel: true,    },    xAxis: {      type: "category",      boundaryGap: true,      data: props.xAxisData,      axisLine: XAxisLine,      splitLine: XSplitLine,      axisTick: XAxisTick,      axisLabel: {// textStyle: {color: "#fff",fontSize:16// },      },    },    yAxis: {      type: "value",      // 單位      name: props.yUnit,      axisLine: YAxisLine,      splitLine: YSplitLine,      axisTick: YAxisTick,      axisLabel: {// textStyle: {color: "#fff",fontSize:16// },      },            min: 0,      // max: props.max,    },    series,  };  // 合并配置生成最終配置  option = Object.assign(option, props.config);  return option;}// propsconst props = defineProps({  // 父容器ID  pid: {    type: String,    required: true,  },  title: {    type: Object,    default: {},  },  // 數(shù)據(jù)  series: {    // type: Array as () => Array<BarSeriesOption>,    type: Array as () => { data: number[] }[],    required: true,  },  // 橫坐標(biāo)  xAxisData: {    type: Array,    required: true,  },  // 圖例標(biāo)記  legend: {    type: Object,    default: {},  },  // 橫坐標(biāo)軸線  XAxisLine: {    type: Object,    default: {},  },  // 縱坐標(biāo)軸線  YAxisLine: {    type: Object,    default: {},  },  // y軸單位  yUnit: {    type: String,    default: "",  },  // 橫坐標(biāo)分割線  XSplitLine: {    type: Object,    default: {},  },  // 縱坐標(biāo)分割線  YSplitLine: {    type: Object,    default: {},  },  // 橫坐標(biāo)刻度  XAxisTick: {    type: Object,    default: {},  },  // 縱坐標(biāo)刻度  YAxisTick: {    type: Object,    default: {},  },  // 總配置,將與默認(rèn)配置與用戶傳入的配置合并  config: {    type: Object as () => echarts.EChartsCoreOption,    default: {},  },  // 最值  // max: {  //     type: Number,  //     // requird: true,  //     default: 5000,  // },  nameOne: {    type: String,    default: "昨日總量",  },  nameTow: {    type: String,    default: "今日總量",  },});// optionlet option = initOption();// chart 容器let container: HTMLElement | null = null;// chart 實(shí)例let myChart: echarts.ECharts | null = null;// 渲染方法const renderChart = () => {  if (!myChart) myChart = echarts.init(container as HTMLElement);  myChart.setOption(option);};// DOM加載后渲染 chartnextTick(() => {  // 獲取容器  container = document.querySelector("#" + props.pid) as HTMLElement;  // 渲染 chart  renderChart();  // 自適應(yīng) chart  // useResizeChart(container, myChart as echarts.ECharts);});// 監(jiān)聽 props 變化watch(  () => props,  () => {    // 更新 option    option = initOption();    // 重新渲染chart    renderChart();  },  {    deep: true,  });// 導(dǎo)出為圖片function exportImg() {  // 生成 base64 圖片  const src = (myChart as echarts.ECharts).getDataURL({    pixelRatio: 2,    backgroundColor: "#08172A",  });  // 下載  const a = document.createElement("a");  a.href = src;  a.download = (option.title as { text: string }).text || "chart-img";  a.click();}// 暴露出 chart 圖片導(dǎo)出方法,父組件可以通過(guò)實(shí)例調(diào)用defineExpose({  exportImg,});</script><style lang="scss" scoped></style>

總結(jié)

到此這篇關(guān)于echarts實(shí)現(xiàn)3d柱狀圖的2種方式舉例的文章就介紹到這了,更多相關(guān)echarts實(shí)現(xiàn)3d柱狀圖內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 耐热钢-耐磨钢-山东聚金合金钢铸造有限公司 | 十二星座查询(性格特点分析、星座运势解读) - 玄米星座网 | 旗杆生产厂家_不锈钢锥形旗杆价格_铝合金电动旗杆-上海锥升金属科技有限公司 | 361°官方网站| 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 铝合金重力铸造_铝合金翻砂铸造_铝铸件厂家-东莞市铝得旺五金制品有限公司 | 一体式钢筋扫描仪-楼板测厚仪-裂缝检测仪-泰仕特(北京) | 纸箱抗压机,拉力机,脂肪测定仪,定氮仪-山东德瑞克仪器有限公司 | 北京银联移动POS机办理_收银POS机_智能pos机_刷卡机_收银系统_个人POS机-谷骐科技【官网】 | 深圳善跑体育产业集团有限公司_塑胶跑道_人造草坪_运动木地板 | 橡胶接头_橡胶软接头_可曲挠橡胶接头-巩义市创伟机械制造有限公司 | 手持气象站_便携式气象站_农业气象站_负氧离子监测站-山东万象环境 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 高楼航空障碍灯厂家哪家好_航空障碍灯厂家_广州北斗星障碍灯有限公司 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 顺辉瓷砖-大国品牌-中国顺辉 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 甲级防雷检测仪-乙级防雷检测仪厂家-上海胜绪电气有限公司 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 网站seo优化_seo云优化_搜索引擎seo_启新网络服务中心 | 会议会展活动拍摄_年会庆典演出跟拍_摄影摄像直播-艾木传媒 | 谈股票-今日股票行情走势分析-牛股推荐排行榜 | led太阳能路灯厂家价格_风光互补庭院灯_农村市政工程路灯-中山华可路灯品牌 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 酒水灌装机-白酒灌装机-酒精果酒酱油醋灌装设备_青州惠联灌装机械 | 高压微雾加湿器_工业加湿器_温室喷雾-昌润空气净化设备 | 比士亚-专业恒温恒湿酒窖,酒柜,雪茄柜的设计定制 | 软膜天花_软膜灯箱_首选乐创品牌_一站式天花软膜材料供应商! | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 木材烘干机,木炭烘干机,纸管/佛香烘干设备-河南蓝天机械制造有限公司 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 快速卷帘门_硬质快速卷帘门-西朗门业| 正压送风机-多叶送风口-板式排烟口-德州志诺通风设备 |