当前位置:   article > 正文

spring boot 字典使用,使用element-ui + vue

spring boot 字典使用,使用element-ui + vue

数据库表设计

type为1则代表字典的类型

type为2则是下拉框显示的值

id是雪花算法自动生成的

前端设计

基于vue-fast2设计

使用element-ui

异步获取数据

  1. // 获取数据列表
  2. getDataList () {
  3. this.dataListLoading = true
  4. this.$http({
  5. url: this.$http.adornUrl('/sys/dict/list'),
  6. method: 'get',
  7. params: this.$http.adornParams({
  8. 'page': this.pageIndex,
  9. 'limit': this.pageSize,
  10. 'name': this.dataForm.name
  11. })
  12. }).then(({data}) => {
  13. if (data && data.code === 0) {
  14. this.dataList = data.page.list
  15. this.totalPage = data.page.totalCount
  16. } else {
  17. this.dataList = []
  18. this.totalPage = 0
  19. }
  20. this.dataListLoading = false
  21. })
  22. },
  23. getChildDataList (code) {
  24. this.childDataListLoading = true
  25. this.$http({
  26. url: this.$http.adornUrl('/sys/dict/childList'),
  27. method: 'get',
  28. params: this.$http.adornParams({
  29. 'page': this.childPageIndex,
  30. 'limit': this.childPageSize,
  31. 'code': code
  32. })
  33. }).then(({data}) => {
  34. if (data && data.code === 0) {
  35. this.childDataList = data.page.list
  36. this.childTotalPage = data.page.totalCount
  37. } else {
  38. this.childDataList = []
  39. this.childTotalPage = 0
  40. }
  41. this.childDataListLoading = false
  42. })
  43. },

具体使用某一个字典

以维修工为例,实现下拉获取字典项

后端方法

service层写方法

  1. @Override
  2. public List<SysDictEntity> maintenanceList(String code) {
  3. LambdaQueryWrapper<SysDictEntity> wrapper = new LambdaQueryWrapper();
  4. wrapper.eq(SysDictEntity::getType, "2")
  5. .eq(SysDictEntity::getCode, code) // 根据code查询,就是根据传进来的值查(维修工maintenance就是查维修工,性别sex就是查性别)
  6. .orderByAsc(SysDictEntity::getSort); // 排序
  7. return this.list(wrapper);
  8. }

controller层方法

  1. /**
  2. * maintenanceList列表
  3. */
  4. @RequestMapping("/maintenanceList")
  5. @RequiresPermissions("sys:dict:list")
  6. public R maintenanceList(String code) {
  7. List<SysDictEntity> list = sysDictService.maintenanceList(code);
  8. return R.ok().put("list", list);
  9. }

前端vue

js

  1. activated () { // 生命周期方法
  2. this.getDataList() // 获取数据列表
  3. this.getDicts('maintenance') // 获取维修工字典
  4. this.getDicts('falutCode') // 获取故障码字典
  5. },
  6. methods: {
  7. getDicts (code) {
  8. this.$http({
  9. url: this.$http.adornUrl('/sys/dict/maintenanceList'),
  10. method: 'get',
  11. params: this.$http.adornParams({
  12. 'code': code
  13. })
  14. }).then(({ data }) => {
  15. if (data && data.code === 0) {
  16. if (code === 'maintenance') {
  17. // 字典为maintenance维修工时
  18. this.users = data.list
  19. this.users.forEach(item => {
  20. this.$set(this.dictMap, item.value, item.name)
  21. })
  22. this.userSelect = data.list.map((item) => ({
  23. text: item.name,
  24. value: item.name
  25. }))
  26. console.log(this.dictMap)
  27. } else {
  28. this.users = []
  29. }
  30. if (code === 'faultCode') {
  31. // 字典为faultCode故障码时
  32. this.allguzhang = data.list.map((item) => ({
  33. name: item.name,
  34. value: item.value
  35. }))
  36. this.faultCodes = data.list.map((item) => ({
  37. text: item.name,
  38. value: item.value
  39. }))
  40. }
  41. } else {
  42. this.faultCodes = []
  43. }
  44. })
  45. },
  46. }

维修工字典简单绑定到页面下拉框显示

  1. <el-form-item>
  2. <el-select
  3. size="small"
  4. v-model="userId"
  5. placeholder="请选择维修工"
  6. clearable=""
  7. filterable
  8. >
  9. <el-option
  10. v-for="d in users"
  11. :key="d.value"
  12. :label="d.name"
  13. :value="d.value"
  14. ></el-option>
  15. </el-select>
  16. </el-form-item>

维修工字典和故障码字典data值

  1. export default {
  2. data () {
  3. return {
  4. users: [],
  5. dictMap: {},
  6. userSelect: [], // 维修人列表
  7. // 故障码字典项
  8. allguzhang: [],
  9. // 故障码筛选
  10. faultCodes: [],

故障码显示在table表格上

filters是element的筛选组件,不实现可不写,详情请参考element官网

  1. <el-table-column
  2. label="故障码"
  3. prop="faultCode"
  4. :filters="faultCodes"
  5. :filter-method="filterHandler"
  6. align="center"
  7. >
  8. <template slot-scope="scope">
  9. <!-- 从字典找到每一项的item,比较卡槽中的item.value 找到了显示item的name就是故障码 -->
  10. {{
  11. allguzhang.find((item) => item.value === scope.row.faultCode).name
  12. }}
  13. </template>
  14. </el-table-column>

遇到的问题

由于使用了element的隐藏table数据(默认显示一小部分,其他要点击箭头查看)

使用方法有所改变

创建计算周期

  1. computed: {
  2. // 对详情箭头的字典进行处理
  3. faultCodeName () {
  4. return function (faultCode) {
  5. const item = this.allguzhang.find(item => item.value === faultCode)
  6. return item ? item.name : ''
  7. }
  8. }
  9. },

vue代码

  1. <el-table-column type="expand">
  2. <template slot-scope="props">
  3. <el-form
  4. label-position="left"
  5. inline
  6. class="demo-table-expand"
  7. :default-sort="{prop: 'id', order: 'descending'}"
  8. >
  9. <el-form-item label="故障码">
  10. <span>{{ faultCodeName(props.row.faultCode) }}</span>
  11. </el-form-item>
  12. </el-table-column>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/165637
推荐阅读
相关标签
  

闽ICP备14008679号