Avue实现选择下拉框的多种方式

目录

  • 前言
  • [1. 实战Demo](#1. 实战Demo)
  • [2. 基本内容](#2. 基本内容)

前言

对应的拓展知识推荐阅读:【vue】avue-crud表单属性配置(表格以及列)

本文主要补充实战遇到的问题以及优化的方式

1. 实战Demo

了解基础知识先从Demo入手!

获取数据库的内容,最终显示在下拉框中

html 复制代码
<template>
  <avue-form :option="option"></avue-form>
</template>
<script>

let baseUrl = '/manongyanjiuseng';

export default {
  data () {
    return {
      option: {
        column: [{
              label: "设备编号",
              prop: "equipmentNo",
              width:90,
              search:true,
              rules: [{
                required: true,
                message: "请输入设备编号",
                trigger: "blur"
              }],
              dicUrl: `${baseUrl}/info/queryAllByTenantId?tenantId=`+website.tenantId,
              type: "tree",
              clearable:false,
              searchSpan: 4,
              props: {
                label: 'equipmentNo',
                value: 'equipmentNo'
              },
            },
      }
    }
  }
}
</script>

对应捕捉后端数据的内容

此处主要以Java为主,也展示下:

java 复制代码
/**
 * 根据租户查询
 * @param tenantId
 * @return
 */
@GetMapping("/queryAllByTenantId")
@ApiOperationSupport(order=15)
@ApiOperation(value = "全部" , notes = "传入租户")
public R<List<Info>> queryAllByTenantId(String tenantId){
	List<Info> list = infoService.list(new QueryWrapper<Info>().eq("tenant_id", tenantId).orderByAsc("equipment_no"));
	return  R.data(list);
}

对应的Java内容推荐阅读:java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)

如果数据库的内容比较少,可以通过前端的字典属性补充:

html 复制代码
<template>
  <avue-form :option="option"></avue-form>
</template>
<script>

const DIC= {
  LEVEL:[
    { label: "低", value: "低" },
    { label: "中", value: "中" },
    { label: "高", value: "高" }

  ],
}
export default {
  data () {
    return {
      option: {
        column: [{
           label: "报障等级",
           prop: "level",
           search:true,
           width:70,
           rules: [{
             required: true,
             message: "请输入报障等级",
             trigger: "blur"
           }],
           searchSpan: 4,
           type: "select", // 使用下拉框选择类型
           dicData: DIC.LEVEL // 数据字典
         },
      }
    }
  }
}
</script>

2. 基本内容

拉回正文,上述文章讲述

  • 通过将type属性的值指定为select,同时配置dicData为字典值
  • 配置dicUrl指定后台接口的地址

对应Select选择框还有其他的属性玩法:

最基本的Demo如下:

html 复制代码
<template>
  <avue-form :option="option"></avue-form>
</template>
<script>
export default {
  data () {
    return {
      option: {
        column: [
          {
            label: '下拉框',
            prop: 'select',
            type: 'select',
            dicData: [{
              label: '字典1',
              value: 0,
              desc: '字典描述' // 配置下拉数据中desc字段,主要是该数据的提示词
            }, {
              label: '字典2',
              value: 1,
              disabled: true // 单个数据字典进行禁用,本身默认为false
            }],
            value: 0 , // 增加默认值,去除的话,默认没有默认值
            disabled: true , //设置禁用状态,本身默认为false
            clearable: false, // 设置可以清空选项
          }
        ]
      }
    }
  }
}
</script>
  • :增加一个value属性
  • 禁用状态 :增加disabled: true,如果是单个字典禁用,则在字典数据中添加
  • 清空选项 :增加一个clearable: false
  • 数据提示词:配置下拉数据中desc字段

对应如果增加分组:

html 复制代码
<template>
  <avue-form :option="option"
             v-model="obj"></avue-form>
</template>
<script>
export default {
  data () {
    return {
      obj: {
        select: 'Shanghai'
      },
      option: {
        column: [
          {
            label: '分组',
            prop: 'select',
            type: 'select',
            group: true,
            dicData: [{
              label: '热门城市',
              groups: [{
                value: 'Shanghai',
                label: '上海',
                desc: '描述'
              }, {
                value: 'Beijing',
                label: '北京'
              }]
            }, {
              label: '城市名',
              groups: [{
                value: 'Chengdu',
                label: '成都'
              }, {
                value: 'Shenzhen',
                label: '深圳'
              }, {
                value: 'Guangzhou',
                label: '广州'
              }, {
                value: 'Dalian',
                label: '大连'
              }]
            }]
          }
        ]
      }
    }
  }
}
</script>

增加多级联动:

html 复制代码
<template>
  <avue-form :option="option"
             v-model="form"></avue-form>
</template>
<script>
var baseUrl = 'https://cli.avuejs.com/api/area'
export default {
  data () {
    return {
      form: {
        province: '110000',
        city: '110100',
        area: '110101'
      },
      option: {
        column: [{
          label: '省份',
          prop: 'province',
          type: 'select',
          props: {
            label: 'name',
            value: 'code'
          },
          cascader: ['city'],
          dicUrl: `${baseUrl}/getProvince`,
          rules: [
            {
              required: true,
              message: '请选择省份',
              trigger: 'blur'
            }
          ]
        },
        {
          label: '城市',
          prop: 'city',
          type: 'select',
          cascader: ['area'],
          props: {
            label: 'name',
            value: 'code'
          },
          row: true,
          dicUrl: `${baseUrl}/getCity/{{key}}?province={{province}}`,
          rules: [
            {
              required: true,
              message: '请选择城市',
              trigger: 'blur'
            }
          ]
        },
        {
          label: '地区',
          prop: 'area',
          type: 'select',
          props: {
            label: 'name',
            value: 'code'
          },
          dicUrl: `${baseUrl}/getArea/{{key}}?city={{city}}`,
          rules: [
            {
              required: true,
              message: '请选择地区',
              trigger: 'blur'
            }
          ]
        }]
      }
    }
  }
}
</script>
相关推荐
王小二(海阔天空)8 小时前
个人文章合集 - 前端相关
前端·css·vue·jquery
osnet16 小时前
showdoc二次开发
node.js·vue
前端张三2 天前
view deign 和 vue2 合并单元格的方法
vue
-心铭-3 天前
有关若依菜单管理的改造
学习·vue
Snailmi3 天前
Spring Boot+VUE《班级综合测评管理系统》
java·spring boot·后端·vue·毕业设计
潜心专研的小张同学3 天前
pnpm依赖安装失败解决|pnpm项目从一个文件夹复制到另一个文件夹运行失败问题解决-以vbenAdmin项目为例
前端·javascript·vscode·npm·vue·pnpm
夏与冰3 天前
vue3项目el-table表格行内编辑加输入框校验
vue
垂钓的小鱼13 天前
尚硅谷vue3+TypeScript笔记大全
javascript·typescript·vue
ncj3934379063 天前
vue3项目执行pnpm update后还原package.json文件后运行报错
vue
莫问alicia4 天前
Uniapp 微信小程序 最新 获取用户头像 和 昵称 方法 有效可用
前端·javascript·微信小程序·uni-app·vue