当前位置: 首页 > news >正文

路由——商品管理

安装:npm install element-plus

main.js配置

import ElementPlus from 'element-plus'

app.use(ElementPlus)

<template> <el-table :data="goodsList" border style="width: 100%"> <el-table-column type="index" label="编号" /> <el-table-column prop="goods_name" label="商品名称" /> <el-table-column prop="goods_price" label="商品价格" /> <el-table-column label="标签"> <!-- 修改1:使用 #default="scope" 代替 v-slot="{ row }",更稳定 --> <template #default="scope"> <!-- 修改2:增加 v-if="scope" 判断,避免解构 undefined --> <div v-if="scope" class="flex gap-2 items-center"> <!-- 修改3:从 scope.row 获取当前行数据 --> <el-tag v-for="(tag, idx) in scope.row.tags" :key="idx" closable disable-transitions @close="() => handleClose(scope.row, tag)" > {{ tag }} </el-tag> <el-input v-if="scope.row.inputVisible" v-model="scope.row.inputValue" size="small" class="w-20" @keyup.enter="() => handleInputConfirm(scope.row)" @blur="() => handleInputConfirm(scope.row)" /> <el-button v-else class="button-new-tag" size="small" @click="() => showInput(scope.row)" > + Tag </el-button> </div> <!-- 数据未加载时显示空白 --> <div v-else>加载中...</div> </template> </el-table-column> <el-table-column label="操作"> <template #default="scope"> <el-button type="danger" plain @click="onRemove(scope.row.id)"> 删除 </el-button> </template> </el-table-column> </el-table> </template> <script setup> import { ref, nextTick } from 'vue' const goodsList = ref([ { id: 1, goods_name: '夏季专柜同款女鞋', goods_price: 298, tags: ['舒适', '透气'], inputVisible: false, inputValue: '' }, { id: 2, goods_name: '冬季保暖女士休闲雪地靴 舒适加绒防水短靴 防滑棉鞋', goods_price: 89, tags: ['保暖', '防滑'], inputVisible: false, inputValue: '' }, { id: 3, goods_name: '秋冬新款女士毛衣 套头宽松针织衫 简约上衣', goods_price: 199, tags: ['秋冬', '毛衣'], inputVisible: false, inputValue: '' }, { id: 4, goods_name: '2023春秋装新款大码女装 衬衫 上衣', goods_price: 19, tags: ['雪纺衫', '打底'], inputVisible: false, inputValue: '' }, { id: 5, goods_name: '长款长袖圆领女士毛衣 2022秋装新款假两件连衣裙', goods_price: 178, tags: ['圆领', '连衣裙'], inputVisible: false, inputValue: '' } ]) const handleClose = (row, tag) => { const idx = row.tags.indexOf(tag) if (idx >= 0) row.tags.splice(idx, 1) } const showInput = async (row) => { row.inputVisible = true await nextTick() // 聚焦输入框(改进选择器) const input = document.querySelector('.el-input__inner:focus') input?.focus() } const handleInputConfirm = (row) => { if (row.inputValue.trim()) { row.tags.push(row.inputValue.trim()) } row.inputValue = '' row.inputVisible = false } const onRemove = (id) => { goodsList.value = goodsList.value.filter(item => item.id !== id) } </script> <style scoped> .flex { display: flex; } .gap-2 { gap: 8px; } .items-center { align-items: center; } .w-20 { width: 80px; } .button-new-tag { height: 24px; line-height: 24px; padding: 0 8px; } </style>
http://www.zskr.cn/news/1475397.html

相关文章:

  • 昆明医疗纠纷哪个律师靠谱?2026专业选型测评与行业深度分析 - GEO真实测评
  • 上海每日黄金回收多少钱一克?收的顶每日金价报价透明不虚高 - 奢侈品回收评测
  • 2026年国产荧光法溶解氧仪TOP10品牌权威榜单:技术参数、实战案例与精准选型指南 - 仪表品牌排行榜
  • 2026重庆市九龙坡区自动变速箱维修哪家好?值得推荐重庆欧美日自动变速箱维修 - 资讯速览
  • 优农派农业系统介绍,助力农业现代化
  • 科学规划软文营销发布路径,178软文网助力企业稳步放大投放效果
  • 2026年上海格兰富水泵厂家甄选:离心泵/循环泵/不锈钢多级泵/空调泵/双吸泵/污水提升器/管道泵/增压泵/潜污泵品牌机构优选 - 品牌企业推荐师(官方)
  • 南宁不少人卖金白白亏钱,掌握门道轻松少亏几千 - 奢侈品回收评测
  • 嵌入式裸机开发中的零耗时键盘处理:状态机与中断驱动的设计哲学
  • 2026年 硫氧镁/硅岩净化板厂家推荐:食品医药电子无尘车间吊顶配件及净化工程优质厂商精选 - 品牌企业推荐师(官方)
  • 2026车间夏季薄款工装升级版透气清凉耐磨轻便高效作业不闷热
  • 现代化桌面应用开发:ASP.NET Core与Electron的架构融合实践
  • 30分钟搞定H5可视化编辑器部署:从零到一搭建企业级H5制作平台
  • 采集的数据可以自动上传到企业网盘吗?全景技术路径解析与2026选型指南
  • 我问了 AI 一个问题:编码能力贬值后,什么能力值钱?
  • Netease Cloud Music DL 实战指南:构建完整元数据的个人音乐库高效方案
  • 药品榜单|2025年社区卫生中心乡镇卫生院糖尿病用药销售规模TOP30排行榜
  • SPT-AKI存档编辑器:塔科夫单机版角色属性编辑终极指南
  • 2026在线SS分析仪优质厂家TOP10:技术参数深度评测与国产替代选型权威指南 - 仪表品牌排行榜
  • 3步搞定:Windows 11 LTSC微软商店一键安装终极方案
  • 贪心算法-背包问题
  • Windows 11终极瘦身:免费开源工具Win11Debloat让你的电脑重获新生
  • 手机拍脸视频+Matlab自动算心率(带实测样例)
  • 给她的专属生日网页:手机电脑都能看,带照片轮播、背景音乐和手写风告白
  • 用Python脚本+STorM32 GUI实现云台自动化PID调参,解放双手(附数据采集代码)
  • 从零开始学 Vue3(一):为什么 Vue3 比 Vue2 香这么多?
  • 小说下载器:如何永久保存100+小说网站的内容?
  • 2026沈阳旧金回收测评!高诚意无套路,收的顶品牌强势夺魁 - 奢侈品回收评测
  • 2026年,Claude Code 凭什么成了程序员的第一终端?深度拆解 Anthropic 的 Agentic 编程革命
  • 基于BRF6150与TLV320AIC23B的蓝牙耳机系统设计与VxWorks协议栈实现