下拉框公共组件

一、公共部分

1、定义的下拉框公共组件

<template>
  <div>
      <el-select v-model="values" placeholder="请选择" clearable size="medium" :style="widthStyle" @change="setOptions">
        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
        </el-option>
      </el-select>
  </div>
</template>
<script>
  import {
    getOptionsByType
  } from "@/api/commom/collection";
  export default {
    name: 'zynySelect',
    props: {
      type: String,
      code: String,
      value: String,
      width: String
    },
    data() {
      return {
        options: [],
        //页面回显的值
        values: '',
        data:{
          //下拉框类型
          type: this.$props.type,
          //查下拉框需要的值
          code: this.$props.code,
        },
        /* 宽度样式 */
        widthStyle:{
          width: this.$props.width
        },
      }
    },
    created() {
      this.initialize();
    },
    methods: {
      initialize() {
        this.values = this.$props.value,
        getOptionsByType(this.data).then(repsone => {
          this.options = repsone.data;
        })
      },
      setOptions() {
        this.$emit('setSelectValue',this.values);
        this.$emit('change',this.values);
      }
    },
  }
</script>

2、常量的定义,用去下拉框类型的区分

//前端常量定义
const DATA_TYPE_DETAIL = "dataTypeDetail";
const PROVINCE_CITY_AREA = "provinceCityArea";
const PROVINCE = "province";
const CITY = "city";
const AREA = "area";
const GARDEN = "garden";
const GREENHOUSE = "greenhouse";
const MANUFACTURER = "manufacturer";
const RETAILER = "retailer";
const COLLECTION_POINT = "collectionPoint";
const PLANTS = 'plants';
const PLANTING_SEASON = "plantingSeason";

export default {
  DATA_TYPE_DETAIL,
  PROVINCE_CITY_AREA,
  PROVINCE,
  CITY,
  AREA,
  GARDEN,
  GREENHOUSE,
  MANUFACTURER,
  RETAILER,
  COLLECTION_POINT,
  PLANTS,
  PLANTING_SEASON
};

二、引用

1、在页面上引入组件

              <zyny-select
                  :type="this.constants.COLLECTION_POINT"
                  :code="form.yqID"
                  :width="'100%'"
                  :value="form.greenHouseId"
                  @setSelectValue="form.greenHouseId=$event"
                  @change="onChange"
                  :key="timer" />
  • :type  下拉框的类型,用于区分组件查询后台调哪个接口
  • :code   调用接口传的值, 如 大棚的下拉框:根据园区ID查询大棚下拉框,这个code传的就是园区ID
  • :width   下拉框在页面上的显示宽度,  注意 “‘100%’”  双引号里还有个单引号
  • :value   下拉框回显的值,  如  大棚下拉框:跳转编辑页时,页面要回显大棚下拉框,这个值就是你跳转编辑页时从后台传入的大棚ID
  • @setSelectValue 与 $event, 将下拉框选中的值赋到当前表单, $event 就是 点击下拉框选中的大棚ID
  • @change  点击事件, 引号里面是自己定义的方法, 点击下拉框会触发自己定义的方法,目前组件之间的联动需要在自己定义的方法进行,待优化
  • :key  理论上来说是组件的唯一标识。这地方我用的时间戳。定义一个容器“timer”,当需要这个组件重新渲染或者是需要重新加载新内容时,给这个key一个新值即可
    this.timer = new Date().getTime();

    比如:园区与大棚的联动:当选择园区后,大棚的下拉框要相应的刷新成当前园区下的大棚,这时可以在园区的点击事件(@change点击方法)中,给this.timer一个新值,大棚的下拉框将会自动的重新加载出新的下拉列表。

       这里理论上来说可以通过监听的方式实现,但是我不会,这里待优化。

三、后端部分

1、后端常量定义,内容与前端常量对应起来

/**
*   下拉框类型常量定义
*/
public class OptionsConstant {
    public static final String DATA_TYPE_DETAIL = "dataTypeDetail";
    public static final String PROVINCE_CITY_AREA = "provinceCityArea";
    public static final String PROVINCE = "province";
    public static final String CITY = "city";
    public static final String AREA = "area";
    public static final String GARDEN = "garden";
    public static final String GREENHOUSE = "greenhouse";
    public static final String MANUFACTURER = "manufacturer";
    public static final String RETAILER = "retailer";
    public static final String COLLECTION_POINT = "collectionPoint";
    public static final String PLANTS = "plants";
    public static final String PLANTING_SEASON = "plantingSeason";
}

2、业务层

switch(type) {
    case OptionsConstant.PROVINCE:
        dataList = collectionMapper.selectProvinceList();
        break;
    case OptionsConstant.CITY:
        dataList = collectionMapper.selectCityList(code);
        break;
    case OptionsConstant.AREA:
        dataList = collectionMapper.selectAreaList(code);
        break;

业务层会根据前端传入后台的type进行判断查的是哪个下拉框,code就是查下拉框时传的值。

3、持久层,SQL部分

    <!--根据园区ID获取大棚列表  -->
    <select id="select" parameterType="java.lang.String" resultType="java.util.HashMap">
        select
            大棚名称 label,
            大棚ID value
        from 大棚
        where
            园区ID = #{code}
    </select>

下拉框查询的SQL,名称要起别名lable, ID要起别名value

当遇到新的下拉框时,只需要在前后端的常量类里新增type标识,然后SQL写出。并把标识和SQL写入到业务层即可。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值