JeecgBoot 三级联动+后台获取数据

JeecgBoot 三级联动+后台获取数据
2020年03月02日
在这里插入图片描述
三级联动实例界面
找到前端VUE代码页

<template>
  <j-editable-table
    :columns="columns"
    :dataSource="dataSource"
    :rowNumber="true"
    :actionButton="true"
    :rowSelection="true"
    :maxHeight="400"
    @valueChange="handleValueChange"
  />
</template>

<script>
  import { FormTypes } from '@/utils/JEditableTableUtil'
  import JEditableTable from '@/components/jeecg/JEditableTable'
  import {getAction} from "../../../../api/manage";

  export default {
    name: 'ThreeLinkage',
    components: { JEditableTable },
    data() {
      return {
        columns: [
          {
            title: '省/直辖市/自治区',
            key: 's1',
            type: FormTypes.select,
            width: '240px',
            options: [],
            placeholder: '请选择${title}'
          },
          {
            title: '市',
            key: 's2',
            type: FormTypes.select,
            width: '240px',
            options: [],
            placeholder: '请选择${title}'
          },
          {
            title: '县/区',
            key: 's3',
            type: FormTypes.select,
            width: '240px',
            options: [],
            placeholder: '请选择${title}'
          }
        ],
        dataSource: [],

        mockData: [
          { label: '北京市', value: '110000', parent: null },
          { label: '天津市', value: '120000', parent: null },
          { label: '河北省', value: '130000', parent: null },
          { label: '上海市', value: '310000', parent: null },

          { label: '北京市', value: '110100', parent: '110000' },
          { label: '天津市市', value: '120100', parent: '120000' },
          { label: '石家庄市', value: '130100', parent: '130000' },
          { label: '唐山市', value: '130200', parent: '130000' },
          { label: '秦皇岛市', value: '130300', parent: '130000' },
          { label: '上海市', value: '310100', parent: '310000' },

          { label: '东城区', value: '110101', parent: '110100' },
          { label: '西城区', value: '110102', parent: '110100' },
          { label: '朝阳区', value: '110105', parent: '110100' },
          { label: '和平区', value: '120101', parent: '120000' },
          { label: '河东区', value: '120102', parent: '120000' },
          { label: '河西区', value: '120103', parent: '120000' },
          { label: '黄浦区', value: '310101', parent: '310100' },
          { label: '徐汇区', value: '310104', parent: '310100' },
          { label: '长宁区', value: '310105', parent: '310100' },
          { label: '长安区', value: '130102', parent: '130100' },
          { label: '桥西区', value: '130104', parent: '130100' },
          { label: '新华区', value: '130105', parent: '130100' },
          { label: '路南区', value: '130202', parent: '130200' },
          { label: '路北区', value: '130203', parent: '130200' },
          { label: '古冶区', value: '130204', parent: '130200' },
          { label: '海港区', value: '130302', parent: '130300' },
          { label: '山海关区', value: '130303', parent: '130300' },
          { label: '北戴河区', value: '130304', parent: '130300' },
        ]
      }
    },
    mounted() {
      // 初始化数据
      // 取到 parent 为null 的所有数据,调用下面的request(parentId)方法
      this.columns[0].options = this.request(null)
    },
    methods: {

      request(parentId) {
        return this.mockData.filter(i => i.parent === parentId)
      },

      /** 测试从后台获取数据 */
      getData(getvalue){
        return getAction("/person/person/getData",getvalue)
      },

      /** 当选项被改变时,联动其他组件 */
      handleValueChange(event) {
        const { type, row, column, value, target } = event

        if (type === FormTypes.select) {

          // 第一列
          if (column.key === 's1') {
            // 设置第二列的 options 调用request(parentId)方法,设置下一列的值
            this.columns[1].options = this.request(value)
            this.columns[1].options = [
              { "label": "唐山市", "value": "130200", "parent": "130000" }
            ]
            // 清空后两列的数据
            target.setValues([{
              rowKey: row.id,
              values: { s2: '', s3: '' }
            }])
            this.columns[2].options = []
          } else
          // 第二列
          if (column.key === 's2') {
            // this.columns[2].options = this.request(value)
            getAction("/person/person/getData").then(res=>{
            //使用Json串对象也是可以的 2020-03-02 Lilac
            //   res = "[{ \"label\": \"唐山市\", \"value\": \"130200\", \"parent\": \"130000\" }," +
            //     "{ \"label\": \"重庆市\", \"value\": \"130200\", \"parent\": \"130000\" }," +
            //     "{ \"label\": \"天津市\", \"value\": \"130200\", \"parent\": \"130000\" }]";

              //接口返回的结果是JSON对象
              alert(res);
              // 直接使用JSON对象
              this.columns[2].options = res;

            }

            )

            target.setValues([{
              rowKey: row.id,
              values: { s3: '' }
            }])
          }
        }

      },



    }
  }
</script>

<style scoped>

</style>

在这里插入图片描述
原有实例中有数据部分
三级联动选择代码如下:
在这里插入图片描述
看else部分代码
在这里插入图片描述
getAction语句是从后台的功能获取数据
后台代码
在这里插入图片描述
为前端提供数据,返回的数据是JSON对象
前端接收到后,需要进行处理
代码如下:
在这里插入图片描述
前端通过分析原有代码,发现不使用原有的数据格式,改为JSON对象直接使用也是可以的。这样就不用转换成MockData的格式了。
在这里插入图片描述
参考:
4.示例(js增强中发起后台请求)

4-1.后台定义请求方法
输入图片说明
4-2.定义js增强(此处是直接在created中发起了一个请求)
在这里插入图片描述
4-3.进入页面测试效果如下:
在这里插入图片描述
后台也接收到参数
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis自连接三级联动和resultMap三级映射是一种常见的数据询和映射方式。下面我来解释一下。 首先,自连接三级联动是指在数据库中,存在一个表,其中的某些字段关联到该表的自身字段。通常情况下,我们需要使用连续的JOIN语句来实现多级联动询。在MyBatis中,可以使用XML配置文件或注解来定义SQL语句,然后使用resultMap进行结果的映射。 在XML配置文件中,可以使用<resultMap>元素来定义映射关系。对于自连接的情况,可以使用嵌套的<association>或<collection>元素来表示关联关系。例如: ```xml <resultMap id="userMap" type="User"> <id property="id" column="id" /> <result property="name" column="name" /> <association property="manager" javaType="User"> <id property="id" column="manager_id" /> <result property="name" column="manager_name" /> <collection property="subordinates" ofType="User"> <id property="id" column="subordinate_id" /> <result property="name" column="subordinate_name" /> ... </collection> </association> </resultMap> ``` 上述代码中,定义了一个名为userMap的resultMap,映射了User对象及其关联的manager和subordinates字段。 在实际询时,可以使用嵌套的SELECT语句或连续的JOIN语句来实现自连接的多级联动询。例如: ```xml <select id="getUserWithManagerAndSubordinates" resultMap="userMap"> SELECT u.id, u.name, m.id AS manager_id, m.name AS manager_name, s.id AS subordinate_id, s.name AS subordinate_name FROM user u LEFT JOIN user m ON u.manager_id = m.id LEFT JOIN user s ON u.id = s.manager_id WHERE u.id = #{id} </select> ``` 上述代码中,使用了连续的LEFT JOIN语句来询用户及其关联的上级经理和下级员工信息。 通过以上的配置和询,就可以实现MyBatis中的自连接三级联动和resultMap三级映射。希望能对你有所帮助!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值