【关联字段如何在字典中生成】添加车间功能页面中,显示关联的公司(company)字段

2024-01-01 15:18

本文主要是介绍【关联字段如何在字典中生成】添加车间功能页面中,显示关联的公司(company)字段,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

新增了一个新功能,隶属公司需要从另一张表中获取。

在这里插入图片描述
下拉框中需要展示的是 company_idcompany_name

前端改造

前端改造分为Vue页面和js文件

修改Vue页面

前端页面展示:

<el-form-item label="隶属公司" prop="companyId"><el-select v-model="form.companyId" placeholder="请选择隶属公司"><el-option label="请选择字典生成" value="" /></el-select></el-form-item>

修改为:

<el-form-item label="隶属公司"><el-select v-model="form.companyId" placeholder="请选择隶属公司"><el-optionv-for="item in companyOptions":key="item.companyId":label="item.companyName":value="item.companyId":disabled="item.status == 1"></el-option></el-select></el-form-item>

它有个 companyOptions的字段,因此要在添加页面进行数据初始化。

handleAdd()

找到添加按钮对应的方法:

/** 新增按钮操作 */handleAdd() {this.reset();this.open = true;this.title = "添加车间";},

修改为:

/** 新增按钮操作 */handleAdd() {this.reset();getWorkshop().then(response => {//this.companyOptions = response.companyOptions;this.open = true;this.title = "添加车间";});},

getWorkshop()

getWorkshop()的方法如下:

// 查询车间详细
export function getWorkshop(workshopId) {return request({url: '/digital/workshop/' + workshopId,method: 'get'})
}

可以看到,这个方法里有个参数 workshopId,这个参数只有在修改页面有,添加页面是没有的,

如果不传参数,进行调用,是会直接报错的。

因此,要先判断这个参数是否为空。

getWorkshop()修改如下:

import { praseStrEmpty } from "@/utils/ruoyi";
// 查询车间详细
export function getWorkshop(workshopId) {return request({url: '/digital/workshop/' + praseStrEmpty(workshopId),method: 'get'})
}

praseStrEmpty方法需要额外导入

前端改造就完成了,接下来进行后端改造

后端改造

后端改造需要添加对应的方法。

controller方法

原先的方法如下:

 /*** 获取车间详细信息*/@PreAuthorize(hasPermi = "digital:workshop:query")@GetMapping(value = "/{workshopId}")public AjaxResult getInfo(@PathVariable("workshopId") Long workshopId){return AjaxResult.success(workshopService.selectWorkshopById(workshopId));}

它这个方法直接返回根据workshopId查询的数据,因为是添加页面,没有workshopId,因此不返回任何数据,所以前台隶属公司的字段什么都不会显示。

改造后的代码如下:

    /*** 获取车间详细信息*/@PreAuthorize(hasPermi = "digital:workshop:query")@GetMapping(value = "/{workshopId}")public AjaxResult getInfo(@PathVariable("workshopId") Long workshopId){AjaxResult ajax = AjaxResult.success();ajax.put("companyOptions",companyService.selectCompanyAll());if (StringUtils.isNotNull(workshopId)){DigWorkshop workshop = workshopService.selectWorkshopById(workshopId);ajax.put("data",workshop);}return ajax;}

先说下 AjaxResult.success(workshopService.selectWorkshopById(workshopId));这个代码的逻辑。

/*** 返回成功数据* @return 成功消息*/public static AjaxResult success(Object data){return AjaxResult.success("操作成功", data);}public static AjaxResult success(String msg, Object data){return new AjaxResult(HttpStatus.SUCCESS, msg, data);}public AjaxResult(int code, String msg, Object data){super.put(CODE_TAG, code);super.put(MSG_TAG, msg);if (StringUtils.isNotNull(data)){super.put(DATA_TAG, data);}}

它等同于,改造后的代码:AjaxResult ajax = AjaxResult.success(); ajax.put("data",workshop);

public static AjaxResult success(){return AjaxResult.success("操作成功");}public static AjaxResult success(String msg){return AjaxResult.success(msg, null);}public static AjaxResult success(String msg, Object data){return new AjaxResult(HttpStatus.SUCCESS, msg, data);}public AjaxResult(int code, String msg, Object data){super.put(CODE_TAG, code);super.put(MSG_TAG, msg);if (StringUtils.isNotNull(data)){super.put(DATA_TAG, data);}}@Overridepublic AjaxResult put(String key, Object value){super.put(key, value);return this;}

可以看到,这两个方法的逻辑是一样的,区别在于,最后判断data是否为null,如果不为null,则put数据进去。

只不过我在中间增加了新的业务逻辑:ajax.put("companyOptions",companyService.selectCompanyAll());

service方法和mapper方法

代码如下:

	@Autowiredprivate IDigCompanyService companyService;service接口方法/*** 查询全部公司信息* @return*/List<DigCompany>  selectCompanyAll();service接口实现类的方法@Overridepublic List<DigCompany> selectCompanyAll() {return digCompanyMapper.selectCompanyAll();}mapper映射类中的方法/*** 查询全部公司信息* @return List<DigCompany>*/List<DigCompany> selectCompanyAll();

xml文件方法

最后找到对应的xml文件,SQL语句如下:

<sql id="selectDigCompanyVo">select company_id, company_name, company_shortname, belong, create_by, create_time, status, del_flag, update_by, update_time from dig_company</sql>
<select id="selectCompanyAll" resultMap="DigCompanyResult"><include refid="selectDigCompanyVo"/> where status = '0'</select>

而这个语句查询的页面,正是开头给的company页面。

在这里插入图片描述
到这里,这个功能就开发完成了。

部署测试

简单部署并启动,测试一下,结果报错了
在这里插入图片描述
Request method ‘Get’ not supported

修正BUG

这个报错信息是说,请求的方法无法匹配GET请求

这个原因是什么导致的呢?

首先看一下 controller 方法头的注解

@GetMapping(value = "/{workshopId}")

value = "/{workshopId}" 是说workshopId是可变参数(并非没有),例如 /3,/5,/567

并不说workshopId不需要.

而在新增页面,我们是不传workshopId的,也就是说我们的请求路径实际上是 /

这样的请求路径,肯定没有对应的方法去处理,自然就报错了。

那么我们让该方法可以匹配 / 请求,修改如下:

@GetMapping(value = { "/", "/{workshopId}" })

部署测试一下,结果再次报错:
在这里插入图片描述
Required URI template variable ‘workshopId’ for method parameter type Long is not present
(URL中需要传入方法参数为Long类型的workshopId,该参数不存在)

看下后台报错:

org.springframework.web.bind.MissingPathVariableException: Required URI template variable 'workshopId' for method parameter type Long is not present----以下略----

这个workshopId是必须的,但是我们不提供,因此无法匹配,那我们修改下参数变量,让它变成不是必须的,修改如下

    @PreAuthorize(hasPermi = "digital:workshop:query")@GetMapping(value = { "/", "/{workshopId}" })public AjaxResult getInfo(@PathVariable(value = "workshopId", required = false) Long workshopId){...代码略...}

总结

修改前的代码:

    @PreAuthorize(hasPermi = "digital:workshop:query")@GetMapping(value = "/{workshopId}")public AjaxResult getInfo(@PathVariable("workshopId") Long workshopId){AjaxResult ajax = AjaxResult.success();ajax.put("companyOptions",companyService.selectCompanyAll());if (StringUtils.isNotNull(workshopId)){DigWorkshop workshop = workshopService.selectWorkshopById(workshopId);ajax.put("data",workshop);}return ajax;}

总的修改过后的代码,如下:

    @PreAuthorize(hasPermi = "digital:workshop:query")@GetMapping(value = { "/", "/{workshopId}" })public AjaxResult getInfo(@PathVariable("workshopId", required = false) Long workshopId){AjaxResult ajax = AjaxResult.success();ajax.put("companyOptions",companyService.selectCompanyAll());if (StringUtils.isNotNull(workshopId)){DigWorkshop workshop = workshopService.selectWorkshopById(workshopId);ajax.put("data",workshop);}return ajax;}

测试部署

在这里插入图片描述
成功!

这篇关于【关联字段如何在字典中生成】添加车间功能页面中,显示关联的公司(company)字段的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/559673

相关文章

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

录音功能在哪里? 电脑手机等设备打开录音功能的技巧

《录音功能在哪里?电脑手机等设备打开录音功能的技巧》很多时候我们需要使用录音功能,电脑和手机这些常用设备怎么使用录音功能呢?下面我们就来看看详细的教程... 我们在会议讨论、采访记录、课堂学习、灵感创作、法律取证、重要对话时,都可能有录音需求,便于留存关键信息。下面分享一下如何在电脑端和手机端上找到录音功能