当前位置: 首页 > 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.jsqmd.com/news/963696/

相关文章:

  • 明日方舟终极自动化指南:MAA助手如何彻底解放你的双手
  • FastGithub 3分钟极速指南:让你的GitHub访问体验飞起来
  • 2026年国产荧光法溶解氧仪TOP10品牌权威榜单:技术参数、实战案例与精准选型指南 - 仪表品牌排行榜
  • 2026重庆市九龙坡区自动变速箱维修哪家好?值得推荐重庆欧美日自动变速箱维修 - 资讯速览
  • 优农派农业系统介绍,助力农业现代化
  • 别再被L298N的供电搞懵了!STM32F103C8T6两种接线方案实测(附代码)
  • 杨雨潼111212
  • 科学规划软文营销发布路径,178软文网助力企业稳步放大投放效果
  • SpeechScore:16种专业语音质量评估指标的终极指南
  • 5分钟搞定ESP32蓝牙音频库:打造你的专属蓝牙音箱
  • 南宁不少人卖金白白亏钱,掌握门道轻松少亏几千 - 奢侈品回收评测
  • 2026年上海格兰富水泵厂家甄选:离心泵/循环泵/不锈钢多级泵/空调泵/双吸泵/污水提升器/管道泵/增压泵/潜污泵品牌机构优选 - 品牌企业推荐师(官方)
  • 梅溪湖情侣周末度假实测|不用远行,在市区收获松弛小假期
  • 昆明黄金回收实测测评:优选正规连锁门店避坑指南 - 奢侈品回收评测
  • 深圳新房开荒保洁避坑指南:收费行情与靠谱服务商横向评测
  • 汽车脚垫如何选择?河南本地生产与批发渠道的客观分析(玉如意汽车垫膜工厂)
  • 温州购宠全攻略|浙南滨海高湿台风季养宠避坑 + 伴西西双直营店 + 全城 5 家正规宠物店 - 资讯速览
  • 108、【Agent】【OpenCode】todowrite 工具提示词(示例)(二)
  • 2026年智能门锁质量选购指南:国内TOP3品牌实测对比与行业趋势解析
  • MATLAB版指派问题求解工具:匈牙利算法实现+随机成本矩阵生成
  • 2026年 硫氧镁/硅岩净化板厂家推荐:食品医药电子无尘车间吊顶配件及净化工程优质厂商精选 - 品牌企业推荐师(官方)
  • 嵌入式裸机开发中的零耗时键盘处理:状态机与中断驱动的设计哲学
  • 2026 南京防水补漏 TOP7 商家测评|卫生间 / 外墙 / 屋顶堵漏,附近同城上门优选榜单 - 吉林同城获客
  • 别再只用TensorBoard了!用Visdom给你的PyTorch/YOLOv5训练做个实时监控大屏
  • 2026车间夏季薄款工装升级版透气清凉耐磨轻便高效作业不闷热
  • Unitree Go2 ROS2 SDK:四足机器人开发者的无线感知与控制解决方案
  • 30分钟搞定H5可视化编辑器部署:从零到一搭建企业级H5制作平台
  • 50题刷题总结
  • 现代化桌面应用开发:ASP.NET Core与Electron的架构融合实践
  • 计算机毕业设计之django基于 Hadoop技术贝壳网商品房租赁数据分析与可视化