以为是响应式对象丢失导致数据没有回显
背景:之前ruoyi生成的vue2代码,
<el-form ref=“form”,后面我改成vue3的写法,没有实例化form,
在vue3中是需要定义const form= ref();
导致点击了修改后,页面弹框显示出来,数据没有回显。
一直在怀疑是reactive的响应丢失了,还是toRefs的问题。
找了好久,终于排除出问题所在。
<!-- 添加或修改商品管理对话框 --><el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body><el-form ref="goodsFormRef" :model="form" :rules="rules" label-width="80px"><el-form-item label="商品名称" prop="name"><el-input v-model="form.name" placeholder="请输入商品名称" /></el-form-item><el-form-item label="商品图片地址" prop="image"><image-upload v-model="form.image"/></el-form-item><el-form-item label="商品编号" prop="number"><el-input v-model="form.goodsNum" placeholder="请输入商品编号" /></el-form-item><!-- <el-form-item label="单位名称" prop="unitName">--><!-- <el-input v-model="form.unitName" placeholder="请输入单位名称" />--><!-- </el-form-item>--><el-form-item label="商品分类" prop="categoryId"><!-- <el-input v-model="form.categoryId" placeholder="请输入商品分类ID" />--><treeselect :options="categoryTree" placeholder="请选择上级菜单" v-model="form.categoryId" style="width: 230px;"/></el-form-item><!-- <el-form-item label="条码" prop="barCode">--><!-- <el-input v-model="form.barCode" placeholder="请输入条码" />--><!-- </el-form-item>--><el-form-item label="备注" prop="remark"><el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /></el-form-item><!-- <el-form-item label="衣长/裙长/裤长" prop="length">--><!-- <el-input v-model="form.length" placeholder="请输入衣长/裙长/裤长" />--><!-- </el-form-item>--><!-- <el-form-item label="高度/袖长" prop="height">--><!-- <el-input v-model="form.height" placeholder="请输入高度/袖长" />--><!-- </el-form-item>--><!-- <el-form-item label="宽度/胸阔(围)" prop="width">--><!-- <el-input v-model="form.width" placeholder="请输入宽度/胸阔(围)" />--><!-- </el-form-item>--><!-- <el-form-item label="肩阔" prop="width1">--><!-- <el-input v-model="form.width1" placeholder="请输入肩阔" />--><!-- </el-form-item>--><!-- <el-form-item label="腰阔" prop="width2">--><!-- <el-input v-model="form.width2" placeholder="请输入腰阔" />--><!-- </el-form-item>--><!-- <el-form-item label="臀阔" prop="width3">--><!-- <el-input v-model="form.width3" placeholder="请输入臀阔" />--><!-- </el-form-item>--><!-- <el-form-item label="重量" prop="weight">--><!-- <el-input v-model="form.weight" placeholder="请输入重量" />--><!-- </el-form-item>--><!-- <el-form-item label="0启用 1禁用" prop="disable">--><!-- <el-input v-model="form.disable" placeholder="请输入0启用 1禁用" />--><!-- </el-form-item>--><!-- <el-form-item label="保质期" prop="period">--><!-- <el-input v-model="form.period" placeholder="请输入保质期" />--><!-- </el-form-item>--><el-form-item label="预计采购价格" prop="purPrice"><el-input v-model="form.purPrice" placeholder="请输入预计采购价格" /></el-form-item><el-form-item label="建议批发价" prop="wholePrice"><el-input v-model="form.wholePrice" placeholder="请输入建议批发价" /></el-form-item><el-form-item label="建议零售价" prop="retailPrice"><el-input v-model="form.retailPrice" placeholder="请输入建议零售价" /></el-form-item><!-- <el-form-item label="单位成本" prop="unitCost">--><!-- <el-input v-model="form.unitCost" placeholder="请输入单位成本" />--><!-- </el-form-item>--><el-form-item label="供应商" prop="supplierId"><!-- <el-input v-model="form.supplierId" placeholder="请输入供应商id" />--><el-select v-model="form.supplierId" filterable placeholder="请选择供应商名称"><el-option v-for="item in supplierList" :key="item.id" :label="item.name" :value="item.id"></el-option></el-select></el-form-item><el-form-item label="状态" prop="status"><el-select v-model="form.status" placeholder="状态"><el-option label="销售中" :value="1"></el-option><el-option label="已下架" :value="2"></el-option></el-select></el-form-item><!-- <el-form-item label="品牌" prop="brandId">--><!-- <el-input v-model="form.brandId" placeholder="请输入品牌id" />--><!-- </el-form-item>--><!-- <el-form-item label="属性1:季节" prop="attr1">--><!-- <el-input v-model="form.attr1" placeholder="请输入属性1:季节" />--><!-- </el-form-item>--><!-- <el-form-item label="属性2:分类" prop="attr2">--><!-- <el-input v-model="form.attr2" placeholder="请输入属性2:分类" />--><!-- </el-form-item>--><!-- <el-form-item label="属性3:风格" prop="attr3">--><!-- <el-input v-model="form.attr3" placeholder="请输入属性3:风格" />--><!-- </el-form-item>--><!-- <el-form-item label="属性4:年份" prop="attr4">--><!-- <el-input v-model="form.attr4" placeholder="请输入属性4:年份" />--><!-- </el-form-item>--><!-- <el-form-item label="属性5:面料" prop="attr5">--><!-- <el-input v-model="form.attr5" placeholder="请输入属性5:面料" />--><!-- </el-form-item>--><!-- <el-form-item label="外链url" prop="linkUrl">--><!-- <el-input v-model="form.linkUrl" type="textarea" placeholder="请输入内容" />--><!-- </el-form-item>--><!-- <el-form-item label="最低库存" prop="lowQty">--><!-- <el-input v-model="form.lowQty" placeholder="请输入最低库存" />--><!-- </el-form-item>--><!-- <el-form-item label="最高库存" prop="highQty">--><!-- <el-input v-model="form.highQty" placeholder="请输入最高库存" />--><!-- </el-form-item>--></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="cancel">取 消</el-button></div></el-dialog>
<script setup name="Goods" lang="ts">
import { ref, onMounted } from 'vue'
const goodsFormRef = ref<ElFormInstance>();
const initFormData: GoodsForm = {id: undefined,name: undefined,image: undefined,outerErpGoodsId: undefined,goodsNum: undefined,unitName: undefined,categoryId: undefined,barCode: undefined,remark: undefined,status: undefined,length: undefined,height: undefined,width: undefined,width1: undefined,width2: undefined,width3: undefined,weight: undefined,disable: undefined,period: undefined,purPrice: undefined,wholePrice: undefined,retailPrice: undefined,unitCost: undefined,supplierId: undefined,brandId: undefined,attr1: undefined,attr2: undefined,attr3: undefined,attr4: undefined,attr5: undefined,linkUrl: undefined,lowQty: undefined,highQty: undefined,province: undefined,city: undefined,town: undefined,synchronousId: undefined,declareCnName: undefined,declareEnName: undefined,declarePrice: undefined,declarePriceUnit: undefined,productBrand: undefined,manufacturer: undefined,customsCode: undefined,specificationModel: undefined,productAttribute: undefined,productLength: undefined,productWidth: undefined,productHeight: undefined,productWeight: undefined,purLink: undefined,purLink2: undefined,supplierId2: undefined,purPrice2: undefined
}
const data = reactive<PageData<GoodsForm, GoodsQuery>>({form: {...initFormData},queryParams: {pageNum: 1,pageSize: 10,name: undefined,image: undefined,outerErpGoodsId: undefined,goodsNum: undefined,unitName: undefined,categoryId: undefined,barCode: undefined,status: undefined,length: undefined,height: undefined,width: undefined,width1: undefined,width2: undefined,width3: undefined,weight: undefined,disable: undefined,period: undefined,purPrice: undefined,wholePrice: undefined,retailPrice: undefined,unitCost: undefined,supplierId: undefined,brandId: undefined,attr1: undefined,attr2: undefined,attr3: undefined,attr4: undefined,attr5: undefined,linkUrl: undefined,lowQty: undefined,highQty: undefined,province: undefined,city: undefined,town: undefined,synchronousId: undefined,declareCnName: undefined,declareEnName: undefined,declarePrice: undefined,declarePriceUnit: undefined,productBrand: undefined,manufacturer: undefined,customsCode: undefined,specificationModel: undefined,productAttribute: undefined,productLength: undefined,productWidth: undefined,productHeight: undefined,productWeight: undefined,purLink: undefined,purLink2: undefined,supplierId2: undefined,purPrice2: undefined,params: {}},rules: {id: [{ required: true, message: "主键id不能为空", trigger: "blur" }],name: [{ required: true, message: "商品名称不能为空", trigger: "blur" }],image: [{ required: true, message: "商品图片地址不能为空", trigger: "blur" }],outerErpGoodsId: [{ required: true, message: "商品唯一ID不能为空", trigger: "blur" }],goodsNum: [{ required: true, message: "商品编号不能为空", trigger: "blur" }],unitName: [{ required: true, message: "申报单位不能为空", trigger: "blur" }],categoryId: [{ required: true, message: "商品分类ID不能为空", trigger: "blur" }],barCode: [{ required: true, message: "条码不能为空", trigger: "blur" }],remark: [{ required: true, message: "备注不能为空", trigger: "blur" }],status: [{ required: true, message: "状态1销售中2已下架不能为空", trigger: "change" }],length: [{ required: true, message: "衣长/裙长/裤长不能为空", trigger: "blur" }],height: [{ required: true, message: "高度/袖长不能为空", trigger: "blur" }],width: [{ required: true, message: "宽度/胸阔(围)不能为空", trigger: "blur" }],width1: [{ required: true, message: "肩阔不能为空", trigger: "blur" }],width2: [{ required: true, message: "腰阔不能为空", trigger: "blur" }],width3: [{ required: true, message: "臀阔不能为空", trigger: "blur" }],weight: [{ required: true, message: "重量不能为空", trigger: "blur" }],disable: [{ required: true, message: "0启用 1禁用不能为空", trigger: "blur" }],period: [{ required: true, message: "保质期不能为空", trigger: "blur" }],purPrice: [{ required: true, message: "预计采购价格不能为空", trigger: "blur" }],wholePrice: [{ required: true, message: "建议批发价不能为空", trigger: "blur" }],retailPrice: [{ required: true, message: "建议零售价不能为空", trigger: "blur" }],unitCost: [{ required: true, message: "单位成本不能为空", trigger: "blur" }],supplierId: [{ required: true, message: "供应商id不能为空", trigger: "blur" }],brandId: [{ required: true, message: "品牌id不能为空", trigger: "blur" }],attr1: [{ required: true, message: "属性1:季节不能为空", trigger: "blur" }],attr2: [{ required: true, message: "属性2:分类不能为空", trigger: "blur" }],attr3: [{ required: true, message: "属性3:风格不能为空", trigger: "blur" }],attr4: [{ required: true, message: "属性4:年份不能为空", trigger: "blur" }],attr5: [{ required: true, message: "属性5:面料不能为空", trigger: "blur" }],linkUrl: [{ required: true, message: "外链url不能为空", trigger: "blur" }],lowQty: [{ required: true, message: "最低库存不能为空", trigger: "blur" }],highQty: [{ required: true, message: "最高库存不能为空", trigger: "blur" }],province: [{ required: true, message: "发货地省不能为空", trigger: "blur" }],city: [{ required: true, message: "发货地市不能为空", trigger: "blur" }],town: [{ required: true, message: "发货地区不能为空", trigger: "blur" }],synchronousId: [{ required: true, message: "同步编号不能为空", trigger: "blur" }],declareCnName: [{ required: true, message: "申报中文名不能为空", trigger: "blur" }],declareEnName: [{ required: true, message: "申报英文名不能为空", trigger: "blur" }],declarePrice: [{ required: true, message: "申报价格不能为空", trigger: "blur" }],declarePriceUnit: [{ required: true, message: "申报价格单位:日元,美元不能为空", trigger: "blur" }],productBrand: [{ required: true, message: "产品品牌不能为空", trigger: "blur" }],manufacturer: [{ required: true, message: "制造商不能为空", trigger: "blur" }],customsCode: [{ required: true, message: "海关编码不能为空", trigger: "blur" }],specificationModel: [{ required: true, message: "规格型号不能为空", trigger: "blur" }],productAttribute: [{ required: true, message: "产品属性:如普货,含电池不能为空", trigger: "blur" }],productLength: [{ required: true, message: "产品尺寸:长不能为空", trigger: "blur" }],productWidth: [{ required: true, message: "产品尺寸:宽不能为空", trigger: "blur" }],productHeight: [{ required: true, message: "产品尺寸:高不能为空", trigger: "blur" }],productWeight: [{ required: true, message: "产品重量不能为空", trigger: "blur" }],purLink: [{ required: true, message: "采购链接不能为空", trigger: "blur" }],purLink2: [{ required: true, message: "采购链接2不能为空", trigger: "blur" }],supplierId2: [{ required: true, message: "备选供应商不能为空", trigger: "blur" }],purPrice2: [{ required: true, message: "采购价2不能为空", trigger: "blur" }]}
});const { queryParams, form, rules } = toRefs(data);/** 表单重置 */
const reset = () => {form.value = {...initFormData};goodsFormRef.value?.resetFields();
}/** 修改按钮操作 */
const handleUpdate = async (row?: GoodsVO) => {reset();const _id = row?.id || ids.value[0]const res = await getGoods(_id);Object.assign(form.value, res.data);dialog.visible = true;dialog.title = "修改OMS商品";}
数据就回显出来了
相关文章:

以为是响应式对象丢失导致数据没有回显
背景:之前ruoyi生成的vue2代码, <el-form ref“form”,后面我改成vue3的写法,没有实例化form, 在vue3中是需要定义const form ref(); 导致点击了修改后,页面弹框显示出来,数据没有回显。 一直…...

来 Gitcode 免费体验 DeepSeek 蒸馏模型,开启 AI 探索新旅程
在 AI 技术飞速发展的时代,你是否也怀揣着对前沿科技的无限好奇与探索欲望?然而,昂贵的模型体验费用和复杂的操作流程,是不是让你一次次望而却步?现在,这些都不再是问题!DeepSeek 蒸馏模型现已强…...

2.Mkdocs配置说明(mkdocs.yml)【最新版】
官方文件:Changing the colors - Material for MkDocs 建议详细学习一下上面的官方网站↑↑↑ 我把我目前的配置文件mkdocs.yml代码写在下面👇🏻 #[Info] site_name: Mkdocs教程 #your site name 显示在左上角 site_url: http://wcowin.wo…...

云轴科技ZStack+海光DCU:率先推出DeepSeek私有化部署方案
针对日益强劲的AI推理需求和企业级AI应用私有化部署场景(Private AI),云轴科技ZStack联合海光信息,共同推动ZStack智塔全面支持DeepSeek V3/R1/Janus Pro系列模型,基于海光DCU实现高性能适配,为企业提供安全…...

扩增子分析|零模型2——基于βNTI的微生物随机性和确定性装配过程(箱线图和柱状图R中实现)
一、引言 我们之前发布的周集中老师团队零模型R中实战案例:扩增子分析|基于零模型的群落确定性和随机性构建过程——R实战_bmntd-CSDN博客。在文末只输出了一个.csv 表格。并没有提供绘图的方法,有小伙伴问如何在R中一键成图呢?还真可以&…...
专题:剑指offer
链表 JZ6 从尾到头打印链表 思路:先顺序输出到栈里面 然后再以此从栈顶弹出即可 /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ #include …...

DeepSeek 部署过程中的问题
文章目录 DeepSeek 部署过程中的问题一、部署扩展:docker 部署 DS1.1 部署1.2 可视化 二、问题三、GPU 设置3.1 ollama GPU 的支持情况3.2 更新 GPU 驱动3.3 安装 cuda3.4 下载 cuDNN3.5 配置环境变量 四、测试 DeepSeek 部署过程中的问题 Windows 中 利用 ollama 来…...

DeepSeek R1本地化部署 Ollama + Chatbox 打造最强 AI 工具
🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 Ollama 🦋 下载 Ollama🦋 选择模型🦋 运行模型🦋 使用 && 测试 二:🔥 Chat…...
应急场景中的数据融合与对齐
1. 概述 在应急管理中,快速、准确地掌握现场状况、实时监控灾情并进行决策至关重要。各类数据(如卫星影像、无人机图像、激光雷达点云、地理信息系统(GIS)数据、传感器数据、社交媒体信息、移动终端数据等)具有来源广泛、格式多样、时空特性不同等特点。如何将这些异构数…...

手机上运行AI大模型(Deepseek等)
最近deepseek的大火,让大家掀起新一波的本地部署运行大模型的热潮,特别是deepseek有蒸馏的小参数量版本,电脑上就相当方便了,直接ollamaopen-webui这种类似的组合就可以轻松地实现,只要硬件,如显存…...
Mellanox网卡信息查看
1、查看Mellanox网卡的SN(序列号)和PN mstvpd 04:00.0或者lspci -s 04:00.0 -vvv来自https://enterprise-support.nvidia.com/s/article/MLNX2-117-2532kn 2、查看Mellanox网卡驱动、固件版本 ethtool -i ens6np0...
【漫画机器学习】083.安斯库姆四重奏(Anscombe‘s quartet)
安斯库姆四重奏(Anscombes Quartet) 1. 什么是安斯库姆四重奏? 安斯库姆四重奏(Anscombes Quartet)是一组由统计学家弗朗西斯安斯库姆(Francis Anscombe) 在 1973 年 提出的 四组数据集。它们…...

TCP | RFC793
注:本文为 “ RFC793” 相关文章合辑。 RFC793-TCP 中文翻译 编码那些事儿已于 2022-07-14 16:02:16 修改 简介 翻译自: RFC 793 - Transmission Control Protocol https://datatracker.ietf.org/doc/html/rfc793 TCP 是一个高可靠的主机到主机之间…...
2025蓝桥杯JAVA编程题练习Day2
1.大衣构造字符串 问题描述 已知对于一个由小写字母构成的字符串,每次操作可以选择一个索引,将该索引处的字符用三个相同的字符副本替换。 现有一长度为 NN 的字符串 UU,请帮助大衣构造一个最小长度的字符串 SS,使得经过任意次…...
《解锁GANs黑科技:打造影视游戏的逼真3D模型》
在游戏与影视制作领域,逼真的3D模型是构建沉浸式虚拟世界的关键要素。从游戏中栩栩如生的角色形象,到影视里震撼人心的宏大场景,高品质3D模型的重要性不言而喻。随着人工智能技术的飞速发展,生成对抗网络(GANs…...
es match 可查 而 term 查不到 问题分析
es 匹配逻辑 根本:es 的匹配是基于token 的。检索的query和目标字段在token 层级上有交集才能检索成功。对同样的文本,使用不同的分词器,所得token 不同。es 默认的analyzer(分词器)是standard模式,即按字切分。 基本上…...

【OpenCV实战】基于 OpenCV 的多尺度与模板匹配目标跟踪设计与实现
文章目录 基于 OpenCV 的模板匹配目标跟踪设计与实现1. 摘要2. 系统概述3. 系统原理3.1 模板匹配的基本原理3.2 多尺度匹配 4. 逻辑流程4.1 系统初始化4.2 主循环4.3 逻辑流程图 5. 关键代码解析5.1 鼠标回调函数5.2 多尺度模板匹配 6. 系统优势与不足6.1 优势6.2 不足 7. 总结…...
将有序数组转换为二叉搜索树(力扣108)
这道题需要在递归的同时使用双指针。先找到一个区间的中间值,当作子树的父节点,再递归该中间值的左区间和右区间,用于生成该父节点的左子树和右子树。这就是此题的递归逻辑。而双指针就体现在每一层递归都要使用左指针和右指针来找到中间值。…...

开放式TCP/IP通信
一、1200和1200之间的开放式TCP/IP通讯 第一步:组态1214CPU,勾选时钟存储器 第二步:防护与安全里面连接机制勾选允许PUT/GET访问 第三步:添加PLC 第四步:点击网络试图,选中网口,把两个PLC连接起…...

S4 HANA (递延所得税传输)Deferred Tax Transfer - S_AC0_52000644
本文主要介绍在S4 HANA OP中S4 HANA (递延所得税传输)Deferred Tax Transfer - S_AC0_52000644的后台配置及前台操作。具体请参照如下内容: 目录 Deferred Tax Transfer - S_AC0_52000644 1. 后台配置 1.1 Business Transaction Events激活- FIBF 2. 前台操作 …...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...