瑞吉外卖项目学习笔记(八)修改菜品信息、批量启售/停售菜品
瑞吉外卖项目学习笔记(一)准备工作、员工登录功能实现
瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现
瑞吉外卖项目学习笔记(三)过滤器实现登录校验、添加员工、分页查询员工信息
瑞吉外卖项目学习笔记(四)@TableField(fill = FieldFill.INSERT)公共字段填充、启用/禁用/修改员工信息
瑞吉外卖项目学习笔记(五)菜品/套餐分类的增删改查
瑞吉外卖项目学习笔记(六)分页查询菜品列表、实现图片上传和下载
瑞吉外卖项目学习笔记(七)新增菜品、(批量)删除菜品
文章目录
- 9 菜品管理
- 9.7 修改菜品
- 9.7.1 菜品数据回显
- 9.7.2 修改菜品具体实现
- 9.8 (批量)启售/停售菜品
- 9.8.1 需求分析
- 9.8.2 具体实现
- 9.9 完善删除菜品分类功能
9 菜品管理
9.7 修改菜品
9.7.1 菜品数据回显
点击“修改”菜品按钮,进入修改页面,首先需要根据菜品ID查询菜品信息进行数据回显。不仅要返回菜品的基本信息,还要返回菜品的口味配置信息。
功能 | 请求方法 | 请求路径 | 请求参数 |
---|---|---|---|
根据ID查询菜品信息 | GET | /dish/get | ?id=1 |
- 1)在实体类
Dish
中添加flavors
属性,用于保存菜品对应的口味配置
// com.itweid.takeout.entity.Dish@ApiModelProperty(value = "菜品口味配置")
@TableField(exist = false)
private DishFlavor[] flavors;
- 2)在
DishController
类中添加get
方法
// com.itweid.takeout.controller.DishController@ApiOperation("根据ID查询菜品")
@GetMapping("/get")
public BaseResult<Dish> get(@NotNull(message = "菜品ID不能为空") Long id) {return dishService.getDishById(id);
}
- 3)在
DishServiceImpl
类中具体实现getDishById
方法
// com.itweid.takeout.service.impl.DishServiceImpl@Override
public BaseResult<Dish> getDishById(Long id) {// 查询菜品信息Dish dish = getById(id);if(dish != null) {// 查菜品口味配置List<DishFlavor> dishFlavorList = Db.lambdaQuery(DishFlavor.class).eq(DishFlavor::getDishId, dish.getId()).list();if(dishFlavorList != null && !dishFlavorList.isEmpty()) {dish.setFlavors(dishFlavorList.toArray(new DishFlavor[0]));}}return BaseResult.success(dish);
}
- 4)重启服务,测试数据回显
大部分数据成功回显,但菜品分类没有成功回显。原因还是Long
类型数据的精度丢失问题。(所以根本没必要把ID搞得这么大。。。)
- 5)给
Dish
实体类的categoryId
字段添加@JsonSerialize(using = ToStringSerializer.class)
注解,重启服务,再次测试数据回显
9.7.2 修改菜品具体实现
功能 | 请求方法 | 请求路径 |
---|---|---|
修改菜品 | PUT | /dish/edit |
该接口的入参也跟新增菜品一样,比新增菜品多了一个菜品ID,下面是一个示例:
{"id":"1397852391150759938", //菜品ID"name":"辣子鸡", //菜品名称"price":14.99, //菜品价格"image":"e7cff7e7-4f63-4e3a-8001-6866e27f82d6.png", //菜品图片"description":"辣子鸡真的好吃!!", //菜品描述"categoryId":"1397844263642378242", //菜品分类ID"flavors":[ //口味做法配置{"name":"甜味","value":"[\"无糖\",\"少糖\",\"半糖\"\"多糖\",\"全糖\"]","showOption":false},{"name":"温度","value":"[\"热饮\",\"常温\",\"去冰\",\"少冰\",\"多冰\"]","showOption":false},{"name":"忌口","value":"[\"不要葱\",\"不要蒜\",\"不要香菜\",\"不要辣\"]","showOption":false},{"name":"辣度","value":"[\"不辣\",\"微辣\",\"中辣\",\"重辣\"]","showOption":false}]
}
- 1)在
DishQuery
查询类中添加id
属性,并添加修改菜品的表单校验规则
- 2)在
DishController
类中添加edit
方法
// com.itweid.takeout.controller.DishController@ApiOperation("修改菜品")
@PutMapping("/edit")
public BaseResult edit(@RequestBody @Validated(Edit.class) DishQuery dishQuery) {return dishService.editDish(dishQuery);
}
- 3)在
DishServiceImpl
中具体实现editDish
方法
// com.itweid.takeout.service.impl.DishServiceImpl@Override
public BaseResult editDish(DishQuery dishQuery) {// 1 查询原菜品信息Dish exDish = getById(dishQuery.getId());if(exDish == null) {return BaseResult.error(ErrorCode.DISH_NOT_EXIST);}// 2 修改菜品基本信息Dish newDish = new Dish();newDish.setId(exDish.getId());if(!exDish.getName().equals(dishQuery.getName())) {newDish.setName(dishQuery.getName());}if(!exDish.getCategoryId().equals(Long.valueOf(dishQuery.getCategoryId()))) {newDish.setCategoryId(exDish.getCategoryId());}if(!exDish.getPrice().equals(dishQuery.getPrice())) {newDish.setPrice(dishQuery.getPrice());}if(!exDish.getImage().equals(dishQuery.getImage())) {newDish.setImage(dishQuery.getImage());}if(!exDish.getDescription().equals(dishQuery.getDescription())) {newDish.setDescription(dishQuery.getDescription());}updateById(newDish);// 3 修改菜品口味做法配置DishFlavor[] flavors = dishQuery.getFlavors();if(flavors != null && flavors.length > 0) {// 删除原有配置Db.lambdaUpdate(DishFlavor.class).eq(DishFlavor::getDishId, exDish.getId()).remove();// 增加新配置for(DishFlavor f : flavors) {f.setDishId(exDish.getId());Db.save(f);}}// 4 删除旧的菜品图片if(!exDish.getImage().equals(dishQuery.getImage())) {File file = new File(uploadDir + exDish.getImage());if(file.exists()) {log.info("delete file = {} => {}", file.getAbsolutePath(), file.delete());}}return BaseResult.success();
}
- 4)重启服务,测试修改菜品功能
9.8 (批量)启售/停售菜品
9.8.1 需求分析
功能 | 请求方法 | 请求路径 | 请求参数 |
---|---|---|---|
修改菜品 | PUT | /dish/status | {“id”: “1,2”, “status”: 0} |
参数id
指需要修改状态的菜品ID,多个菜品ID时使用英文逗号隔开;
参数status
指需要改到的状态,0表示停售,1表示启售。
9.8.2 具体实现
- 1)在
DishController
类中添加status
方法,并添加表单校验规格
// com.itweid.takeout.controller.DishController@ApiOperation("修改菜品状态")
@PutMapping("/status")
public BaseResult status(@RequestBody @Validated(EditStatus.class) DishQuery dishQuery) {return dishService.editDishStatus(dishQuery);
}
- 2)在
DishServiceImpl
中具体实现editDishStatus
方法
// com.itweid.takeout.service.impl.DishServiceImpl@Override
public BaseResult editDishStatus(DishQuery dishQuery) {String ids = dishQuery.getId();for (String id : ids.split(",")) {Dish dish = new Dish();dish.setId(Long.valueOf(id));dish.setStatus(dishQuery.getStatus());updateById(dish);}return BaseResult.success();
}
- 3)重启服务,测试功能
9.9 完善删除菜品分类功能
在“分类管理”菜单中,进行删除分类时,需要先判断改分类是否已被菜品使用。如果已被使用,则不能删除。
改造``类的deleteCategory
方法:
// com.itweid.takeout.service.impl.CategoryServiceImpl@Override
public BaseResult deleteCategory(Long id) {// 判断该分类是否已被菜品使用if(Db.lambdaQuery(Dish.class).eq(Dish::getCategoryId, id).exists()) {return BaseResult.error(ErrorCode.CATEGORY_IS_USED);}boolean remove = removeById(id);return remove ? BaseResult.success() : BaseResult.error(ErrorCode.CATEGORY_NOT_EXIST);
}
重启服务,测试功能:
…
本节完,更多内容查阅:瑞吉外卖项目实战
相关文章:
瑞吉外卖项目学习笔记(八)修改菜品信息、批量启售/停售菜品
瑞吉外卖项目学习笔记(一)准备工作、员工登录功能实现 瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现 瑞吉外卖项目学习笔记(三)过滤器实现登录校验、添加员工、分页查询员工信息 瑞吉外卖项目学习笔记(四)TableField(fill FieldFill.INSERT)公共字…...
Oracle 日常巡检
1. 检查服务器状态 1.1. CPU使用情况 1.1.1. top top 命令是 Linux 和 Unix 系统中用于显示实时系统状态的工具,特别是对于监控 CPU 和内存的使用非常有用。 在命令行中输入 top,top 会显示一个实时更新的界面,其中包含系统的关键指标&am…...
CS 144 check7: putting it all together
Exercises 经验:两边的TCP连接建立得尽快,如果服务器端启动了,客户端没有启动就连不上。。 服务器端: 客户端: 文件收发测试: 参考: CS 144CS144 | Winter 2024, Lab 0~7 记录࿰…...
springboot数据校验报错
目录 报错信息 原因 解决 报错信息 springboot在进行数据校验的时候ConfigurationProperties注解形式下Email报错 Caused by: javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint javax.validation.constraints.Email valid…...
mapbox基础,加载天地图矢量底图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象…...
SLAM/数字图象处理基础
概念 视差:相同特征的不同深度估计的偏差 BoW,DBoW,DBoW2的区别是什么 Bag of Words (BoW)、DBoW(Dynamic Bag of Words)和DBoW2是用于图像处理和计算机视觉中的不同特征表示和匹配方法。它们之间的主要区别如下&am…...
修改vue-element-admin,如何连接我们的后端
改哪几个文件就可以连接我们后端 主要就这四个 main.js,屏蔽这个或者删除 vue-config 最后两个文件改下端口即可 这样基本就能发了,但是还要改下 改成api 然后还要修改request.js 这里改成我们返回的状态码 我讲一个东西很容易就懂了&…...
基于PLC的采摘机械手系统(论文+源码)
1系统方案设计 本次设计围绕基于PLC的采摘机械手系统进行设计, PLC即可编程控制器其是一种常见的微处理器,本次拟采用西门子是S7-200 PLC,一方面对整个设计从器件选型到I/O分配,图纸绘制等进行设计,另一方面还通过组态…...
使用ArcGIS/ArcGIS pro绘制六边形/三角形/菱形渔网图
在做一些尺度分析时,经常会涉及到对研究区构建不同尺度的渔网进行分析,渔网的形状通常为规则四边形。构建渔网的方法也很简单,使用ArcGIS/ArcGIS Pro工具箱中的【创建渔网/CreateFishnet】工具来构建。但如果想构建其他形状渔网进行相关分析&…...
【5/6 面向应用相关的优化 网卡实现及评估 】
5 面向应用相关的优化 面对数据中心多样化的部署需求和应用场景,如分布式存储、多租户性能隔离等,构建高性能的RDMA系统需要仔细选择传输模式和通信原语以充分发挥其性能优势,并调整软硬件结构进行适配.整体手段:在软件层面结合R…...
如何识别钓鱼邮件和诈骗网站?(附网络安全意识培训PPT资料)
识别钓鱼邮件和诈骗网站是网络安全中的一个重要环节。以下是一些识别钓鱼邮件和诈骗网站的方法: 识别钓鱼邮件: 检查发件人地址: 仔细查看发件人的电子邮件地址,看是否与官方域名一致。 检查邮件内容: 留意邮件中是否…...
TOGAF之架构标准规范-业务架构
TOGAF标准规范中,业务架构阶段的主要工作是开发支持架构愿景的业务架构。 如上所示,业务架构(Business Architecture)在TOGAF标准规范中处于B阶段,该阶段的主要内容包括阶段目标、阶段输入、流程步骤、架构方法。 阶段…...
嵌入式轻量级开源操作系统:HeliOS的使用
嵌入式轻量级开源操作系统:HeliOS的使用 📍项目地址:https://github.com/heliosproj/HeliOS HeliOS项目是一个社区交付的开源项目,用于构建和维护HeliOS嵌入式操作系统(OS)。HeliOS是一个功能齐全的操作系统࿰…...
mysql 数据库迁移到达梦数据库
1.windows安装达梦数据库,去官网下载 dm8 进行安装,安装后,可以使用管理工具管理数据 使用迁移工具对数据进行迁移; 2.使用php 或者 thinkphp连接达梦数据库 2.1、先PHP开启DM扩展 从达梦数据库安装目录下drivers/php_pdo 复制对…...
Java中的异常处理机制
今天想和大家探讨Java中的异常处理机制。异常处理是任何编程语言中不可或缺的一部分,它帮助我们处理程序运行时可能出现的错误,确保程序的健壮性和稳定性。Java作为一种强类型、面向对象的编程语言,提供了一套完整的异常处理框架。 1. 异常的…...
iOS 苹果开发者账号: 查看和添加设备UUID 及设备数量
参考链接:苹果开发者账号下添加新设备UUID - 简书 如果要添加新设备到 Profiles 证书里: 1.登录开发者中心 Sign In - Apple 2.找到证书设置: Certificate,Identifiers&Profiles > Profiles > 选择对应证书 edit &g…...
数据仓库工具箱—读书笔记02(Kimball维度建模技术概述03、维度表技术基础)
Kimball维度建模技术概述 记录一下读《数据仓库工具箱》时的思考,摘录一些书中关于维度建模比较重要的思想与大家分享🤣🤣🤣 第二章前言部分作者提到:技术的介绍应该通过涵盖各种行业的熟悉的用例展开(赞同…...
Linux中常用的Shell脚本(运维+常用)汇总
废话不多说,直接上干货! 一、运维脚本 (1)监控CPU和内存的使用情况 #!/bin/bashcpu_threshold80 mem_threshold80# 获取CPU和内存使用率 cpu_usage$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.…...
Java 方法注释:规范、实用和高质量的写法
目录 为什么要注释方法? 方法注释的基本要求 Javadoc 注释格式 示例:一个计算圆面积的方法 代码示例 注释分析 如何写出高质量的 Java 方法注释? 1. 关注可读性 2. 使用 Javadoc 格式 3. 描述异常 4. 适当的解释复杂的算法 5. 避…...
解决JIRA、Confluence用户自动注销、反复登录的问题
一、问题描述:当工作从从confluence里面打开jira的时候,在回到confluence时候,就自动退出了,需要账号密码登录重复登录,使人十分厌恶。 二、原因分析: 访问 JIRA、Confluence 或任何其他具有相同域或 IP 上…...
Python9-作业2
记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化 python基础8-灵活运用顺序、选择、循环结构 作业2九九乘法表三种方式打印九九乘法表使用两个嵌套循环使用列表推导式和…...
基于c语言的union、字符串、格式化输入输出
结构体之共用体union 共用体也叫联合体,其关键词为union 与结构体不同的是,共用体所开辟的存储空间仅仅为其中最长类型变量的存储空间而不是全部变量的存储空间,由于同一内存单元在同一时间内只能存放其中一种的数据类型,因此在每…...
SpringCloudAlibaba实战入门之路由网关Gateway初体验(十)
Spring Cloud 原先整合 Zuul 作为网关组件,Zuul 由 Netflix 公司提供的,现在已经不维护了。后面 Netflix 公司又出来了一个 Zuul2.0 网关,但由于一直没有发布稳定版本,所以 Spring Cloud 等不及了就自己推出一个网关,已…...
活着就好20241227
亲爱的朋友们,大家早上好!🌞 今天是27号,星期五,2024年12月的第二十七天,同时也是第51周的第五天,农历甲辰[龙]年十一月初二十三日。在这晨光渐浓的美好时刻,愿那温暖而明媚的阳光洒…...
robotframework中的测试套件
一. 简介 本文简单来了解一下,robotframework中的测试套件。 二. robotframework中测试套件 1. 什么是测试套件? 测试套件(Test Suite) 是一组相关测试用例的集合。每个测试套件通常代表一个特定的功能模块、系统组件或业务流程…...
Echarts连接数据库,实时绘制图表详解
文章目录 Echarts连接数据库,实时绘制图表详解一、引言二、步骤一:环境准备与数据库连接1、环境搭建2、数据库连接 三、步骤二:数据获取与处理1、查询数据库2、数据处理 四、步骤三:ECharts图表配置与渲染1、配置ECharts选项2、动…...
【QED】爱丽丝与混沌的无尽海
文章目录 题目题目描述输入输出格式数据范围测试样例 思路代码复杂度分析时间复杂度空间复杂度 题目 题目链接🔗 题目描述 如图所示,爱丽丝在一个3x3的迷宫之中,每个方格中标有 1 − 9 1-9 1−9各不相同的数字,爱丽丝可以从一格…...
CHM助手 >> 如何安装CHM助手
1 如何安装CHM助手 下载CHM助手.ezip,下载地址打开EverEdit,选择主菜单“扩展 -> 扩展管理 -> 从本地文件安装扩展”,在弹出的文件浏览窗口中选择插件安装包,如下图所示: 🕮说明: …...
硬件设计:LVDS电平标准
什么是LVDS? LVDS(Low-Voltage Differential Signaling)是一种高速、低功耗的差分信号传输标准。它通过一对差分信号线(通常是两根互补信号线)来传输数据,广泛应用于高速数字通信领域。 LVDS 的核心特点 低…...
宝塔-firefox(Docker应用)-构建自己的Web浏览器
安装基础软件 宝塔中安装firefox(Docker应用) 。宝塔中需要先安装docker及docker-composefirefox配置安装 点击firefox应用,选择【安装配置】点击右边绿色按钮,进行安装,这一步等待docker-compose根据你的配置初始化docker应用 等待安装 …...
微信小程序-基于Vant Weapp UI 组件库的Area 省市区选择
Area 省市区选择,省市区选择组件通常与 弹出层 组件配合使用。 areaList 格式 areaList 为对象结构,包含 province_list、city_list、county_list 三个 key。 每项以地区码作为 key,省市区名字作为 value。地区码为 6 位数字,前两…...
宏转录组+HiFi宏基因组:揭示厌氧消化中的碳流和能量转换
厌氧消化是一种重要的工程生物技术,对有机废物的资源回收和可再生能源的生产起着关键作用。然而,由于对未培养的厌氧菌及其适应环境变化的能力了解有限,这限制了该技术的优化和生物气生产的可持续性。今天小编带大家看一篇发表在《Microbiome…...
【VSCode】工作区及设置
【VSCode】工作区及设置 VSCode介绍工作区设置 VSCode介绍 Visual Studio Code(简称VSCode)是一个由微软开发的免费、开源的代码编辑器,以下是VSCode的一些功能及特性: 编辑器核心: 多文档界面:VSCode允许…...
瀚高数据库
文章目录 瀚高数据库安装瀚高数据库快速入门遇到的问题总结 瀚高数据库 瀚高数据库(HanGaoDB)是一款在分布式存储、高并发处理和高可用性方面表现优异的数据库,特别适用于大数据、高吞吐量、高并发的应用场景。它结合了传统 SQL 数据库和分布…...
xterm遇到的问题及解决方案
xterm遇到的问题及解决方案 /r插入终端导致的之后插入的数据覆盖了改行头部的数据 问题说明 如图所示,当在一行输入的候,输入的l插入到了改行的头部。 查看ws返回数据 可见ws返回的信息存在\r字符,在xterm.js中\r是回车字符的意思&…...
嵌入式单片机温湿度模块控制与实现
温湿度模块的使用 温湿度模块的特点 温湿度模块的原理通信的开始(打电话) 通信的过程(交流中)...
表达式语句、复合语句和空语句
欢迎拜访:雾里看山-CSDN博客 本篇主题:表达式语句、复合语句和空语句 发布时间:2024.12.26 隶属专栏:C语言 目录 1. 表达式语句定义作用常见类型赋值语句函数调用语句 2. 复合语句定义作用变量作用域 3. 空语句定义作用 1. 表达式…...
Dilateformer实战:使用Dilateformer实现图像分类任务(二)
文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…...
Kubernetes 镜像拉取策略全解析:如何根据需求选择最佳配置?
在Kubernetes集群里,拉取容器镜像是一个非常关键的步骤。这些镜像包含了应用程序及其所有需要的依赖项,Kubernetes通过拉取这些镜像来启动Pod中的容器。为了提升集群的稳定性、速度和安全性,Kubernetes提供了几种不同的镜像拉取策略。这篇文章…...
上海AI中心记录
1、js事件循环 调用栈(Call Stack): JavaScript 是单线程的,所有的代码执行都是在调用栈中进行的。当函数被调用时,进入栈中;执行完毕后,从栈中弹出。 任务队列(Task Queueÿ…...
oscp学习之路,Kioptix Level2靶场通关教程
oscp学习之路,Kioptix Level2靶场通关教程 靶场下载:Kioptrix Level 2.zip 链接: https://pan.baidu.com/s/1gxVRhrzLW1oI_MhcfWPn0w?pwd1111 提取码: 1111 搭建好靶场之后输入ip a看一下攻击机的IP。 确定好本机IP后,使用nmap扫描网段&…...
基于SpringBoot的蜗牛兼职网的设计与实现
一、项目背景 随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中人们对蜗牛兼职网方面的要求也在不断提高,需要兼职工作的人数更是不断增加,使得蜗牛兼职网的开发成为必需而且紧迫的事情。蜗牛…...
C++软件设计模式之装饰器模式
装饰器模式(Decorator Pattern)是C软件设计模式中的一种结构型设计模式,主要用于解决在不改变现有对象结构的情况下动态地给对象添加新功能的问题。通过使用装饰器模式,可以在运行时为对象添加新的行为,而不需要修改其…...
Spring Boot项目接收前端参数的11种方式
大家好,我是袁庭新。在前后端项目交互中,前端传递的数据可以通过HTTP请求发送到后端, 后端在Spring Boot中如何接收各种复杂的前端数据呢?这篇文章总结了11种在Spring Boot中接收前端数据的方式。 1 搭建项目 1.通过Spring Init…...
通过GRE协议组建VPN网络
GRE(Generic Routing Encapsulation,通用路由封装协议)协议是一种简单而有效的封装协议,它在网络中的广泛应用,比如在构建VPN网络。 GRE是一种封装协议,它允许网络层协议(如IP)的…...
you-get使用cookies下载B站视频
B站视频更换BV号以后,使用you-get不能下载了。 首先更新你的you-get pip install --upgrade you-get 更新完成后再次使用you-get -u 命令会显示使用cookies才能下载更多清晰度的视频 使用Edge浏览器,添加插件 Cookie-Editor 点击上图的导出按钮&am…...
使用Excel制作通达信自定义“序列数据“
序列数据的视频教程演示 Excel制作通达信自定义序列数据 1.序列数据的制作方法:删掉没有用的数据(行与列)和股代码格式处理,是和外部数据的制作方法是相同,自己上面看历史博文。只需要判断一下,股代码跟随的…...
基于 Nginx 的网站服务器与 LNMP 平台搭建指南
一,Nginx概述 (一)Nginx的作用 Nginx在网络服务器架构中扮演着多面的角色。其初始设定专注于静态网络数据的处理,能高效地为用户提供诸如HTML,CSS,JavaScript等静态资源。当面对动态数据时,借助php - fpm模块,Nginx能够解析php源代码,实现动态页面的生成与展示。在处理…...
OpenCV计算机视觉 03 椒盐噪声的添加与常见的平滑处理方式(均值、方框、高斯、中值)
上一篇文章:OpenCV计算机视觉 02 图片修改 图像运算 边缘填充 阈值处理 添加椒盐噪声 def add_peppersalt_noise(image, n10000):result image.copy()h, w image.shape[:2] # 获取图片的高和宽for i in range(n): # 生成n个椒盐噪声x np.random.randint(…...
WPF自定义窗口 输入验证不生效
WPF自定义窗口 输入验证不生效 WPF ValidationRule 不生效 WPF ValidationRule 不生效 解决方案:在WindowStyle的Template中添加AdornerDecorator标签。 <Style x:Key"WindowStyle1" TargetType"{x:Type Window}"><Setter Property&…...