RuoYi 自定义字典列表页面编码翻译

“字典数据”单独维护,而不是使用系统自带的字典表,应该如何使用这样的字典信息呢?
在这里插入图片描述

系统字典的使用,请参考:
《RuoYi列表页面字典翻译的实现》
https://blog.csdn.net/lxyoucan/article/details/136877238

需求说明

有一个分类表是单独维护的,不是在系统的字典表中维护的。以下面的场景举例说明:

分类的数据维护如下:
在这里插入图片描述
在考试管理中,想实用这个分类数据,如何实现呢?加入分类之前的情况如下:
在这里插入图片描述

实操

这种场景非常的常见,我们先看一下RuoYi这个框架本身是如何实现的。
可以参考:用户管理与部门管理的关联。

在这里插入图片描述
代码文件:
/src/views/system/user/index.vue

<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />

从这里可以看出,部门的信息是直接从后台的接口中读取的。/dev-api/system/user/list?pageNum=1&pageSize=10接口返回的数据,去掉与当前业务不相关的后如下:

{
"userId": 1,
"deptId": 103,
"userName": "admin",
"nickName": "管理员",
"dept": {
    "deptId": 103,
    "deptName": "研发部门",
    "leader": "若依"
}
}

这种写法是很常见的,翻译的工作交给后端来实现了。后端开发人员要多写个sql。
那么假如后端人员不配合,不写咋办?

参考字典的方式实现

推荐上面一种方式,如果后端人员不配合,不在后端翻译好后传给前端呢?也不难只要后端提供查询分类的接口就可以了。

使用RuoYi当脚手架开发,大部分后端接口都会有代码生成器生成,比如上面的分类功能,生成的接口一般如下 :
http://localhost:1024/dev-api/business/examCategory/list?pageNum=1&pageSize=10

我把可以把pageSize(一页显示的数量)写大一点,比如100。

引入分类查询方法

import { listExamCategory} from "@/api/business/examCategory";
import DictData from "@/utils/dict/DictData";

这段在分类查询管理界面是可以找的到的,复制过来即可。

data增加分类属性

增加examCategoryDic: [],形如:

export default {
  name: "ExamManagement",
  data() {
    return {
      //++ 下面这行为新增
      examCategoryDic: [],
      ...
     }
  }
}

methods 增加方法

  /** 查询考试分类列表 */
    getExamCategoryList() {
      listExamCategory({
        pageNum: 1,
        pageSize: 100
      }).then(response => {
        for (const item of response.rows) {
          this.examCategoryDic.push(new DictData(item.categoryName, item.categoryId.toString(), {"listClass":"default"}));
        }
      });
    },

根据应用场景可能要修改的代码:

  • pageSize: 100 这里的100修改成业务中可能出现的最大值
  • examCategoryDic 这个与data中增加的属性一致
  • item.categoryNameitem.categoryId 这个根据业务字段做修改, 我的业务数据格式如下:
{
  "categoryId": 1,
  "categoryName": "教师"
}

当然如下你的ID也是数值型的不忘记加.toString() 不然会导致数据匹配不到的。

  • "listClass":"default": 可以修改成"listClass":"primary" 他们分别是两种不同的样式
    在这里插入图片描述
    在这里插入图片描述

created()增加调用

增加一行

this.getExamCategoryList();

形如:

 created() {
    this.getList();
    //++ 组件创建时加载分类数据
    this.getExamCategoryList();
  },

至此页面就可以正常获取到分类的数据了。

list表格列表

<el-table-column label="考试分类" align="center" prop="categoryId">
  <template slot-scope="scope">
    <dict-tag :options="examCategoryDic" :value="scope.row.categoryId"/>
  </template>
</el-table-column>

examCategoryDic与data中的属于一致。

新增/修改 表单

<el-form-item label="考试分类" prop="categoryId">
  <el-select v-model="form.categoryId" placeholder="考试分类">
    <el-option
      v-for="dict in examCategoryDic"
      :key="dict.value"
      :label="dict.label"
      :value="parseInt(dict.value)"
    ></el-option>
  </el-select>
</el-form-item>

这里有一个注意事项,:value="parseInt(dict.value)" 如果value 就是ID为数值型,这里要使用parseInt()转换一下。不然会导致匹配不上。

这个原因其实主要是因为系统字典默认全是字符串,没有考虑到value是int的情况,为了不影响系统整体的稳定性,我就没有直接修改系统已经封装好的组件了。

查询条件下拉框

 <el-form-item label="考试分类" prop="categoryId">
    <el-select v-model="queryParams.categoryId" placeholder="考试分类" clearable>
      <el-option
        v-for="dict in examCategoryDic"
        :key="dict.value"
        :label="dict.label"
        :value="dict.value"
      />
    </el-select>
  </el-form-item>

下拉框数据量较大,增加搜索条件

el-select添加filterable属性即可启用搜索功能。默认情况下,Select 会找出所有label属性包含输入值的选项。如果希望使用其他的搜索逻辑,可以通过传入一个filter-method来实现。filter-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。

参考:
https://element.eleme.cn/#/zh-CN/component/select

如何不转int 和string

不足之处,就是当分类的value是Int型的要手动转成string来使用,这样系统自带的<dict-tag>组件才可以正常使用。但是在新增和修改的界面,因为真实表单数据是int这时又跟dic中的值匹配不上了,所以还要在进行一次string 转 int 。

解决此问题的方法,就是修改系统自带的<dict-tag>组件,来实现。但是系统此组件可能会带来系统不稳定的风险。

下面的方法我并未在生产中使用,仅供参考。

如果无视这个风险可以尝试如下做法:
修改这个文件:src/components/DictTag/index.vue
在unmatch(){} 方法中增加以下一段代码:

//++ start 如果option中的value是数值型,自动转成string
for (const item of this.options){
  if(typeof item.value === 'number'){
    item.value = item.value.toString();
  }
}
//++ end 如果option中的value是数值型,自动转成string

修改后的代码如下:

unmatch() {
      this.unmatchArray = []
      // 没有value不显示
      if (this.value === null || typeof this.value === 'undefined' || this.value === '' || this.options.length === 0) return false
      // 传入值为数组
      let unmatch = false // 添加一个标志来判断是否有未匹配项

      //++ start 如果option中的value是数值型,自动转成string
      for (const item of this.options){
        if(typeof item.value === 'number'){
          item.value = item.value.toString();
        }
      }
      //++ end 如果option中的value是数值型,自动转成string

      this.values.forEach(item => {
        if (!this.options.some(v => v.value === item)) {
          this.unmatchArray.push(item)
          unmatch = true // 如果有未匹配项,将标志设置为true
        }
      })
      return unmatch // 返回标志的值
    },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/480406.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】1597. 买文具

问题&#xff1a;1597. 买文具 类型&#xff1a;基本运算、整数运算 题目描述&#xff1a; 花花去文具店买了 1 支笔和 1块橡皮&#xff0c;已知笔 x 元/ 支&#xff0c;橡皮 y元 / 块&#xff0c;花花付给了老板 n 元&#xff0c;请问老板应该找给花花多少钱&#xff1f; 输…

数字孪生底层技术框架

数字孪生是一种将现实世界中的物理实体、过程或系统数字化并映射到计算机模型中的方法。它在数学建模与仿真方面具有重要作用&#xff0c;为了实现数字孪生&#xff0c;以下是一些底层技术框架和方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业…

现代游戏引擎架构

一、并行编程 1.1 为什么需要并行编程 游戏的渲染计算对算力要求很高&#xff0c;所以我们需要把操作系统的资源利用到极致。 但是摩尔定律已经不在适用了&#xff0c;硬件的发展目前已经达到瓶颈。所以我们需要通过数量来提高计算效率。 1.2 并行编程基础 进程与线程&#…

关于在vue中有时候表格的位置不对是怎么个情况

今天在写代码的时候多了一个<div>标签&#xff0c;导致表格的位置大小不对 <template><div><tr><td><input type"checkbox" checked"true" /></td><td>xxxxx</td><td><button class"…

virtualBox虚拟机的Ubuntu系统下vscode 的标题栏无法显示,打开文件对话框显示不正常。

遇到问题&#xff1a;vscode 的标题栏无法显示&#xff0c;打开文件对话框显示不正常。打开文件对话框显示闪烁无法打开文件。如下图所示 解决办法&#xff1a; &#xff08;1&#xff09;Ctrl Shift P 输入 Preferences: Configure Runtime Arguments 搜“"disable-h…

AI智能分析网关V4在非煤矿山安全生产视频智能监管场景中的应用

近年来&#xff0c;全国非煤矿山&#xff08;&#xff08;含金属非金属矿山、尾矿库&#xff0c;以及矿泉水等其他矿山&#xff09;安全生产工作取得明显成效&#xff0c;但安全基础仍然薄弱&#xff0c;事故总量仍然较大&#xff0c;重特大事故尚未得到根本遏制&#xff0c;安…

基于ArcGIS的2015-2020辽宁省土地利用变化分析

数据准备 栅格转面 运行ArcToolbox&#xff0c;打开【转换工具】&#xff0c;选择【从栅格转出】里面的【栅格转面工具】&#xff0c;调出面板进行参数设置。输入栅格选择裁剪的2015年中国土地利用遥感监测数据&#xff08;…

JAVA 8 新特性 Lamdba表达式(二)

一、Lamdba的语法 (参数类型1 参数1,参数类型2 参数2,…) -> { 方法体 }; Lambda表达式就是一个匿名函数&#xff0c;不关注方法名&#xff0c;只关注参数和方法体。 Lambda表达式组成三要素&#xff1a;括号&#xff08;&#xff09;&#xff0c;箭头->&#xff0c;代码…

递归的个人总结

递归函数&#xff08;递去、回归&#xff09;是函数不断的调用自己&#xff1b; 可以按照如下来理解&#xff1a;func1中调用func2&#xff0c;func2中调用func3; func3函数返回了&#xff0c;继续执行func2中的语句&#xff1b;func2执行完了&#xff0c;继续执行func1之后的…

MySQL 中的索引

MySQL 中的索引 一、索引的创建和删除1.主键会自动添加索引2.unique 约束的字段自动添加索引3.给指定的字段添加索引4.删除指定索引5.查询表上的索引 二、索引的分类三、MySQL索引采用了B树数据结构1.B树的经典面试题 四、其他索引及相关调优1.Hash索引2.聚集索引和非聚集索引3…

专业130+总分410+西南交通大学924信号与系统考研经验西南交大电子信息通信工程,真题,大纲,参考书。

初试分数出来&#xff0c;专业课924信号与系统130&#xff0c;总分410&#xff0c;整体上发挥正常&#xff0c;但是还有遗憾&#xff0c;其实自己可以做的更好&#xff0c;总结一下经验&#xff0c;希望对大家有所帮助。专业课&#xff1a;&#xff08;130&#xff09; 西南交…

机器学习——决策树特征选择准则

机器学习——决策树特征选择准则 决策树是一种强大的机器学习模型&#xff0c;它可以用于分类和回归任务。决策树通过树状结构对数据进行分类&#xff0c;每个内部节点表示一个特征&#xff0c;每个叶节点表示一个类别或一个数值。在决策树构建的过程中&#xff0c;特征的选择…

JSqlParser的使用

简介 JSqlParse是一款很精简的sql解析工具&#xff0c;它可以将常用的sql文本解析成具有层级结构的语法树&#xff0c;我们可以针对解析后的节点进行处理(增加、移除、修改等操作),从而生成符合我们业务要求的sql&#xff0c;比如添加过滤条件等等 JSqlParse采用访问者模式 项…

随笔】Git -- 基本概念和使用方式(五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

鸿蒙Harmony应用开发—ArkTS(stateStyles:多态样式)

Styles和Extend仅仅应用于静态页面的样式复用&#xff0c;stateStyles可以依据组件的内部状态的不同&#xff0c;快速设置不同样式。这就是我们本章要介绍的内容stateStyles&#xff08;又称为&#xff1a;多态样式&#xff09;。 概述 stateStyles是属性方法&#xff0c;可以…

【工具使用】VScode如何设置中文环境

操作步骤 1.1 安装中文插件 1.2 设置为中文&#xff0c;然后重启 按照插件的使用方法介绍设置中文&#xff1a; 按下“CtrlShiftP”组合键以显示“命令面板”&#xff1a; 输入“dispaly”&#xff0c;选择“Configure Display Language”&#xff1a; 选择“中文简体” …

Python Flask 表单的使用

新建templ;ates/index.html 内容如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <form action"">账号&#xff1a;<input …

能耗采集与分析 用能计费与收费【产业园区综合计费——安科瑞解决方案】

背景 2022年《非电网直接供电电费收取公示暂行办法》的通知要求由商业综合体、产业园区、物业、写字楼等供电主体体应按照终端用户用电电压等级对应的目录电价收取电费&#xff0c;不得在电费中加收其他费用。&#xff0c;按照“终端用户用电电压等级目录平段电价上浮幅度”确…

Docker构建多平台(x86,arm64)构架镜像

这里写自定义目录标题 背景配置buildx开启experimental重启检查 打包 背景 docker镜像需要支持不同平台架构 配置buildx 开启experimental vi /etc/docker/daemon.json {"experimental": true }或者 重启检查 # 验证buildx版本 docker buildx version# 重启do…

MNN 执行推理(九)

系列文章目录 MNN createFromBuffer&#xff08;一&#xff09; MNN createRuntime&#xff08;二&#xff09; MNN createSession 之 Schedule&#xff08;三&#xff09; MNN createSession 之创建流水线后端&#xff08;四&#xff09; MNN Session 之维度计算&#xff08;五…