如何使用DataGear制作省/市二级联动下拉框看板表单

发布时间:2022-01-05 16:44:12 作者:小新
来源:亿速云 阅读:305
# 如何使用DataGear制作省/市二级联动下拉框看板表单

## 一、前言

在数据可视化领域,联动交互是提升用户体验的重要手段。省/市二级联动下拉框是典型的级联选择组件,广泛应用于各类数据填报和分析场景。DataGear作为一款开源的数据可视化分析平台,提供了强大的表单设计功能,能够轻松实现此类交互效果。

本文将详细介绍如何使用DataGear 4.5.0版本(当前最新稳定版)制作包含省/市二级联动下拉框的看板表单,涵盖从数据准备到最终实现的完整流程。

## 二、准备工作

### 2.1 环境准备
- 安装JDK 1.8+ 
- 下载DataGear 4.5.0(官网:https://www.datagear.tech)
- 准备MySQL 5.7+数据库(或其他DataGear支持的数据库)

### 2.2 数据准备
我们需要创建两张表存储省市数据:

```sql
-- 省份表
CREATE TABLE `t_region_province` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
);

-- 城市表
CREATE TABLE `t_region_city` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `province_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_province` (`province_id`)
);

-- 插入示例数据
INSERT INTO `t_region_province` VALUES 
(1,'北京市'),(2,'上海市'),(3,'江苏省'),(4,'浙江省');

INSERT INTO `t_region_city` VALUES
(1,'东城区',1),(2,'西城区',1),(3,'朝阳区',1),
(4,'黄浦区',2),(5,'徐汇区',2),(6,'静安区',2),
(7,'南京市',3),(8,'苏州市',3),(9,'无锡市',3),
(10,'杭州市',4),(11,'宁波市',4),(12,'温州市',4);

三、配置数据源

  1. 登录DataGear管理系统(默认地址:http://localhost:8080/datagear)
  2. 进入【数据源管理】→【添加数据源】
  3. 选择JDBC数据源类型,填写数据库连接信息
  4. 测试连接成功后保存

四、创建数据集

4.1 创建省份数据集

  1. 进入【数据集管理】→【添加数据集】→【SQL数据集】
  2. 输入SQL查询:
    
    SELECT id, name FROM t_region_province ORDER BY id
    
  3. 命名为”省份数据”,保存

4.2 创建城市数据集

  1. 同样方式创建SQL数据集
  2. 使用参数化SQL:
    
    SELECT id, name FROM t_region_city 
    WHERE province_id = ${provinceId}
    ORDER BY id
    
  3. 添加参数provinceId,设置默认值为1(北京市)
  4. 命名为”城市数据(按省份)”,保存

五、设计看板表单

5.1 创建新看板

  1. 进入【看板管理】→【添加看板】
  2. 选择”空白模板”,命名为”省市联动示例”

5.2 添加表单元素

在HTML编辑器中插入以下代码:

<div class="dg-dashboard-form">
  <div class="form-item">
    <label>省份:</label>
    <select id="provinceSelect" 
            data-dg-widget="select"
            data-dg-dataset="省份数据"
            data-option-value="id"
            data-option-text="name">
    </select>
  </div>
  
  <div class="form-item">
    <label>城市:</label>
    <select id="citySelect" 
            data-dg-widget="select"
            data-dg-dataset="城市数据(按省份)"
            data-option-value="id"
            data-option-text="name"
            data-dg-param-provinceId="">
    </select>
  </div>
</div>

5.3 添加联动JavaScript

在【看板资源】中添加JavaScript文件(如linkage.js):

dashboard.onRender(function(options){
    // 获取省份下拉框元素
    const provinceSelect = dashboard.widgetOf("provinceSelect");
    
    // 监听省份变化事件
    provinceSelect.on("change", function(event){
        const provinceId = event.value;
        
        // 更新城市下拉框的参数值
        const citySelect = dashboard.widgetOf("citySelect");
        citySelect.param("provinceId", provinceId);
        
        // 刷新城市数据
        citySelect.refreshData();
    });
    
    // 初始加载时触发一次省份变化
    provinceSelect.trigger("change");
});

六、高级配置

6.1 添加默认选中项

修改省份select元素,添加data-value属性:

<select id="provinceSelect" 
        data-dg-widget="select"
        data-dg-dataset="省份数据"
        data-option-value="id"
        data-option-text="name"
        data-value="3">
</select>

6.2 添加样式美化

添加CSS文件(如style.css):

.dg-dashboard-form {
  padding: 20px;
  background: #f5f5f5;
  border-radius: 4px;
}

.form-item {
  margin-bottom: 15px;
}

.form-item label {
  display: inline-block;
  width: 80px;
  font-weight: bold;
}

.form-item select {
  min-width: 200px;
  padding: 6px 12px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

6.3 添加数据展示图表

在表单下方添加一个图表,显示选中城市的相关数据:

<div id="cityChart" 
     data-dg-widget="chart"
     data-dg-chart-type="bar"
     data-dg-dataset="城市数据(按省份)"
     data-dg-param-provinceId=""
     data-dg-chart-options="{
       'xAxis': {'dataProperty': 'name'},
       'yAxis': {},
       'series': [{'name': '指标值', 'valueProperty': 'id'}]
     }">
</div>

更新JavaScript实现图表联动:

dashboard.onRender(function(options){
    const provinceSelect = dashboard.widgetOf("provinceSelect");
    const citySelect = dashboard.widgetOf("citySelect");
    const cityChart = dashboard.widgetOf("cityChart");
    
    provinceSelect.on("change", function(event){
        const provinceId = event.value;
        citySelect.param("provinceId", provinceId).refreshData();
        cityChart.param("provinceId", provinceId).refreshData();
    });
    
    // 城市选择变化时更新图表
    citySelect.on("change", function(event){
        // 可以添加特定城市的数据筛选逻辑
    });
    
    provinceSelect.trigger("change");
});

七、调试与优化

7.1 常见问题排查

  1. 下拉框不显示数据

    • 检查数据集是否配置正确
    • 查看浏览器控制台是否有请求错误
    • 验证SQL查询是否能返回正确结果
  2. 联动不生效

    • 确认参数名称拼写一致
    • 检查事件监听是否正确绑定
    • 验证参数值是否有效传递
  3. 性能优化

    • 对大数据量考虑添加缓存
    • 使用分页加载
    • 添加加载状态提示

7.2 响应式适配

添加媒体查询使表单适配移动端:

@media (max-width: 768px) {
  .form-item label {
    display: block;
    width: auto;
    margin-bottom: 5px;
  }
  
  .form-item select {
    width: 100%;
  }
}

八、完整示例代码

8.1 看板HTML

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>省市联动示例</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <div class="dg-dashboard-form">
    <div class="form-item">
      <label>省份:</label>
      <select id="provinceSelect" 
              data-dg-widget="select"
              data-dg-dataset="省份数据"
              data-option-value="id"
              data-option-text="name"
              data-value="3">
      </select>
    </div>
    
    <div class="form-item">
      <label>城市:</label>
      <select id="citySelect" 
              data-dg-widget="select"
              data-dg-dataset="城市数据(按省份)"
              data-option-value="id"
              data-option-text="name"
              data-dg-param-provinceId="">
      </select>
    </div>
  </div>
  
  <div id="cityChart" 
       data-dg-widget="chart"
       data-dg-chart-type="bar"
       data-dg-dataset="城市数据(按省份)"
       data-dg-param-provinceId=""
       data-dg-chart-options="{
         'xAxis': {'dataProperty': 'name'},
         'yAxis': {},
         'series': [{'name': '指标值', 'valueProperty': 'id'}]
       }">
  </div>
  
  <script src="linkage.js"></script>
</body>
</html>

8.2 完整JavaScript

dashboard.onRender(function(options){
    // 获取所有需要联动的组件
    const provinceSelect = dashboard.widgetOf("provinceSelect");
    const citySelect = dashboard.widgetOf("citySelect");
    const cityChart = dashboard.widgetOf("cityChart");
    
    // 设置城市下拉框加载状态
    citySelect.loadingText("加载中...");
    
    // 省份变化处理函数
    const handleProvinceChange = function(provinceId){
        // 更新城市下拉框参数并刷新
        citySelect.param("provinceId", provinceId)
                 .refreshData()
                 .loading(true);
                 
        // 更新图表参数并刷新
        cityChart.param("provinceId", provinceId)
                .refreshData();
    };
    
    // 监听省份变化
    provinceSelect.on("change", function(event){
        handleProvinceChange(event.value);
    });
    
    // 城市变化处理
    citySelect.on("change", function(event){
        console.log("当前选择城市ID:", event.value);
    });
    
    // 初始加载
    handleProvinceChange(provinceSelect.value());
});

九、总结

通过本文的步骤,我们完成了以下工作: 1. 准备了省市层级数据 2. 配置了参数化数据集 3. 设计了包含联动下拉框的表单 4. 实现了JavaScript交互逻辑 5. 添加了图表联动展示 6. 进行了响应式优化

这种二级联动模式可以扩展应用到更多场景: - 产品分类与子分类联动 - 部门与员工联动选择 - 时间范围分级选择等

DataGear的灵活性和扩展性使得这类交互式看板的开发变得非常简单高效。读者可以根据实际需求,进一步探索更复杂的多级联动和业务逻辑集成。

十、参考资料

  1. DataGear官方文档:https://www.datagear.tech/docs/
  2. DataGear GitHub仓库:https://github.com/datageartech/datagear
  3. jQuery API文档(DataGear使用jQuery作为基础库)

”`

推荐阅读:
  1. nagios配置文件
  2. Build 9926怎么解决大小写及数字键盘指示灯错乱问题

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

datagear

上一篇:.net core 多版本该怎么选择

下一篇:如何使用DataGear制作按行滚动的轮播表格数据可视化看板

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》