以为是响应式对象丢失导致数据没有回显
背景:之前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. 前台操作 …...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
