编写商品列表和商品编辑和商品新增页面

 

 

addvue

<template><!-- 传过来的id -->
<!-- {{ $route.query.id }} -->
<el-formref="FormRef"style="max-width: 600px":model="FormData":rule="rules"status-iconlabel-width="auto"class="demo-ruleForm"><el-form-item label="名称" prop="name"><el-input v-model="FormData.name" /></el-form-item><el-form-item label="副标题" prop="subName"><el-input v-model.number="FormData.subName" :rows="2" type="textarea"/></el-form-item><el-form-item label="图片" prop="img"><el-input v-model="FormData.img" /></el-form-item><el-form-item label="分类" prop="categoryId"><el-input v-model.number="FormData.categoryId" /></el-form-item><el-form-item label="状态" prop="status"><el-select v-model="FormData.status" placeholder="Select" style="width: 115px"><el-option v-for="itme in options" :key="itme.value"  :label="itme.lable" :value="itme.value" /></el-select></el-form-item><el-form-item label="价格" prop="price"><el-input-number v-model="FormData.price" :precision="2" :step="0.1"/></el-form-item><el-form-item label="排序" prop="seq"><el-input v-model.number="FormData.seq" /></el-form-item><el-form-item label="标签" prop="tags"><el-input v-model="FormData.tags" /></el-form-item><el-form-item><el-button type="primary" @click="submitForm(FormRef)">提交</el-button><el-button @click="resetForm(FormRef)">重置</el-button></el-form-item></el-form>
</template><script setup lang="ts">
import { reactive ,ref} from 'vue';
import { productApi } from '@/api/index.ts';
import {useRoute,useRouter} from 'vue-router';
import { ElMessage } from 'element-plus';const route = useRoute()
const router = useRouter()const FormRef = ref();const FormData = reactive({name:'',subName:'',img:'',categoryId:'0',status:'',price:'',seq:'0',tags:''})//点击登录后调用的被抽出来的方法
const submitFormData = () => {let params = {name:FormData.name,subName:FormData.subName,img:FormData.img,categoryId:FormData.categoryId,status:FormData.status,price:FormData.price,seq:FormData.seq,tags:FormData.tags}console.log(params)productApi.insert.call(params).then((_res:any)=>{ElMessage.success("新增成功")router.push({name:"list"})})
}//表单验证规则,表单中的prop属性
const rules = reactive<any>({})const options =[{value:1,lable:"上架",},{value:2,lable:"下架",}
]//重置表单
const resetForm = (formEl: any) => {if (!formEl) returnformEl.resetFields()
}
//点击登录按钮后
const submitForm = async (formEl: any) => {await formEl.validate((valid: any, fields: any) => {if (valid) {    //抽出来方法来数据提交后submitFormData()}})
}</script>

 edit.vue

<template><!-- 传过来的id -->
<!-- {{ $route.query.id }} -->
<el-formref="FormRef"style="max-width: 600px":model="FormData":rule="rules"status-iconlabel-width="auto"class="demo-ruleForm"><el-form-item label="名称" prop="name"><el-input v-model="FormData.name" /></el-form-item><el-form-item label="副标题" prop="subName"><el-input v-model.number="FormData.subName" :rows="2" type="textarea"/></el-form-item><el-form-item label="图片" prop="img"><el-input v-model="FormData.img" /></el-form-item><el-form-item label="分类" prop="categoryId"><el-input v-model.number="FormData.categoryId" /></el-form-item><el-form-item label="状态" prop="status"><el-select v-model="FormData.status" placeholder="Select" style="width: 115px"><el-option v-for="itme in options" :key="itme.value"  :label="itme.lable" :value="itme.value" /></el-select></el-form-item><el-form-item label="价格" prop="price"><el-input-number v-model="FormData.price" :precision="2" :step="0.1"/></el-form-item><el-form-item label="排序" prop="seq"><el-input v-model.number="FormData.seq" /></el-form-item><el-form-item label="标签" prop="tags"><el-input v-model="FormData.tags" /></el-form-item><el-form-item><el-button type="primary" @click="submitForm(FormRef)">提交</el-button><el-button @click="resetForm(FormRef)">重置</el-button></el-form-item></el-form>
</template><script setup lang="ts">
import { onMounted, reactive ,ref} from 'vue';
import { productApi } from '@/api/index.ts';
import {useRoute,useRouter} from 'vue-router';const route = useRoute()
const router = useRouter()const FormRef = ref();onMounted(()=>{FormData.id = route.query.id != undefined ? Number(route.query.id) : 0console.log(FormData.id);callProductApi()})const callProductApi = () => {productApi.select.call({id:FormData.id}).then((res:any)=>{let resData = res[0];FormData.name=resData.nameFormData.subName = resData.subNameFormData.img = resData.imgFormData.categoryId = resData.categoryIdFormData.status = resData.statusFormData.price = resData.priceFormData.seq = resData.seqFormData.tags = resData.tags   })
}const FormData = reactive({id:0,name:'',subName:'',img:'',categoryId:'0',status:'',price:'',seq:'0',tags:''})//点击登录后调用的被抽出来的方法
const submitFormData = () => {let params = {id:FormData.id,name:FormData.name,subName:FormData.subName,img:FormData.img,categoryId:FormData.categoryId,status:FormData.status,price:FormData.price,seq:FormData.seq,tags:FormData.tags}productApi.update.call(params).then((_res:any)=>{router.push({name:"list"})})
}//表单验证规则,表单中的prop属性
const rules = reactive<any>({})const options =[{value:1,lable:"上架",},{value:2,lable:"下架",}
]//重置表单
const resetForm = (formEl: any) => {if (!formEl) returnformEl.resetFields()
}
//点击登录按钮后
const submitForm = async (formEl: any) => {await formEl.validate((valid: any, fields: any) => {if (valid) {    //抽出来方法来数据提交后submitFormData()}})
}</script>

list.vue

<template><!-- 用于查询的表单 --><el-form :inline="true" :model="FormData"><el-form-item label=""><el-form-item label="商品查询"><el-input v-model="FormData.name" /></el-form-item></el-form-item><el-form-item><el-button type="primary" @click="onQuery">查询</el-button></el-form-item></el-form><!-- 用于存放数据的表格 --><el-table :data="tableData" style="width: 100%"><el-table-column prop="id" label="商品id" width="150" /><el-table-column prop="name" label="名称" width="120" /><el-table-column prop="img" label="图片" width="120" ><template #default="scope"><!-- scope.row代表这一行的数据 --><!-- {{scope.row }} --><img :src="scope.row.img" width="50px" height="50px" /></template></el-table-column><el-table-column prop="statusX" label="状态" width="120" /><el-table-column prop="price" label="价格" width="120" :formatter="formatter"/><el-table-column prop="lastUpdateBy" label="更新人" width="120" /><el-table-column prop="lastUpdateTime" label="更新时间" width="120" :formatter="formatter"/><el-table-column fixed="right" label="操作" min-width="120"><template #default="scope"><el-button type="primary" size="small" @click="goEdit(scope.row)">编辑</el-button><el-button type="danger" size="small" @click="goDelete(scope.row)">删除</el-button></template></el-table-column></el-table><br/><!-- 引入elementPluse分页组件 --><el-pagination background layout="prev, pager, next" :total=pageDate.total :page-size = pageDate.pageSize :current-page ="pageDate.pageNum" @current-change="changePage"/>
</template><script setup lang="ts">import {ref,onMounted, reactive} from 'vue';
//  import http from '@/http';
import {productApi} from '@/api/index.ts';
import { dayjs } from 'element-plus';
import {useRoute,useRouter} from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus'// 获取当前页面参数
const route = useRoute()
// 负责页面跳转
const router = useRouter()const tableData = ref<any>([])const centerDialogVisible = ref(false)onMounted(()=>{//调用查询商品信息函数callProductApi()})const goEdit = (row:any)=>{router.push({name:"edit",query:{id:row.id}})
}const goDelete = (row:any)=>{// 确认删除消息弹出框ElMessageBox.confirm('确定删除【'+ row.name+'】吗?','Warning',{confirmButtonText: '删除',cancelButtonText: '取消',type: 'warning',}).then(() => {ElMessage({type: 'success',message: '删除成功',})}).catch(() => {ElMessage({type: 'info',message: '未删除',})})centerDialogVisible.value = trueproductApi.delete.call({id:row.id}).then((_res:any)=>{})
}const FormData = reactive({name:"",
})const formatter =(row: any, column: any, cellValue: any, index: number) =>{if(column.property =="price"){return "¥"+cellValue;}else if(column.property =="lastUpdateTime"){return dayjs(cellValue).format('YY年MM月DD HH:mm')}
}const onQuery = () =>{//点击按钮时,重新查询数据刷新页面callProductApi()
}const changePage = (pageNum: number) =>{pageDate.pageNum=pageNum//改变了当前页的值,重新查询刷新页面callProductApi()}const pageDate = reactive({total:10,pageSize:6,pageNum:1, })//定义查询商品信息函数const callProductApi= () =>{let name = FormData.name==''? undefined :FormData.nameproductApi.select.call({pageNum: pageDate.pageNum,pageSize:pageDate.pageSize,name:name}).then((res:any) =>{tableData.value=res.itmespageDate.total = res.total})}</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python面试题:在 Python 中,如何处理内存泄漏?

在 Python 中&#xff0c;尽管有垃圾收集器&#xff08;GC&#xff09;来自动管理内存&#xff0c;有时仍可能会出现内存泄漏。内存泄漏通常是由于程序中存在长时间保留不再需要的对象&#xff0c;导致这些对象不能被垃圾收集器回收。以下是处理内存泄漏的一些方法&#xff1a;…

Spring AOP 基础知识

1.背景 按照软件重构的思想&#xff0c;当多个类中存在相同的代码时&#xff0c;需要提取公共部分来消除代码坏味道。Java的继承机制允许用户在纵向上通过提取公共方法或者公共部分(模版方法方式)至父类中以消除代码重复问题&#xff1b;日志、访问控制、性能监测等重复的非业务…

Golang | Leetcode Golang题解之第232题用栈实现队列

题目&#xff1a; 题解&#xff1a; type MyQueue struct {inStack, outStack []int }func Constructor() MyQueue {return MyQueue{} }func (q *MyQueue) Push(x int) {q.inStack append(q.inStack, x) }func (q *MyQueue) in2out() {for len(q.inStack) > 0 {q.outStack…

【web】-sql注入-login

根据网址提示打开如图&#xff1a; 查看源代码前台并没有过滤限制、扫描后台也没有发现特殊文件。看到标题显示flag is in database&#xff0c;尝试sql注入。 由于post,bp抓包如下&#xff1a; 运行python sqlmap.py -r 1.txt --dump 获取flag 42f4ebc342b6ed4af4aadc1ea75f…

昇思25天学习打卡营第20天 | 基于MindNLP+MusicGen生成自己的个性化音乐

基于MindNLPMusicGen生成个性化音乐 实验简介 MusicGen是Meta AI提出的音乐生成模型&#xff0c;能够根据文本描述或音频提示生成高质量音乐。该模型基于Transformer结构&#xff0c;分为三个阶段&#xff1a;文本编码、音频token预测和音频解码。此实验将演示如何使用MindSpo…

十年期国债收益率

十年期国债收益率是指政府发行的、期限为十年的国债的年化收益率。它被广泛视为一个国家经济健康状况和未来经济前景的重要指标&#xff0c;同时也是金融市场中的一个重要基准利率。 下面我将详细解释十年期国债收益率的相关内容及其意义。 十年期国债收益率的意义 经济健康的…

搞定ES6同步与异步机制、async/await的使用以及Promise的使用!

文章目录 同步和异步async/awaitPromisePromise的概念 同步和异步 ​ 同步&#xff1a;代码按照编写顺序逐行执行&#xff0c;后续的代码必须等待当前正在执行的代码完成之后才能执行&#xff0c;当遇到耗时的操作&#xff08;如网络请求等&#xff09;时&#xff0c;主线程会…

数据结构(初阶2.顺序表)

文章目录 一、线性表 二、顺序表 2.1 概念和结构 2.2 分类 2.2.1 静态顺序表 2.2.2 动态顺序表 2.3动态顺序表的实现 1.SeqList.h 2.SeqList.c 打印顺序表 初始化 销毁 增容 尾插 头插 在指定位置之前插入数据 尾删 头删 在指定位置删除数据 3.test.c 一、线性表 线性表&#…

如何解决VMware 安装Windows10系统出现Time out EFI Network...

一、问题描述 使用VMware 17 安装windows10出现如下图所示Time out EFI Network… Windows10镜像为微软官方下载的ISO格式镜像&#xff1b; 二、问题分析 VMware 17 默认的固件类型是UEFI(E)&#xff0c;而微软官网下载的Windows10 ISO格式镜像不支持UEFI(E)&#xff0c;支…

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构④ | 4.7

前言 第4章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于技术相关的内容&#xff0c;学习要以教材为准。本章分值预计在4-5分。 目录 4.7 安全架构 4.7.1 安全威胁 4.7.2 定义与范围 4.7.3 整体架构设计 4.7.4 网络安全架构设计 4.7.5 数据库系统安…

C++基础语法:STL之迭代器

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 C基础:STL概述-CSDN博客 上一篇梳理了一些同STL有关的概念.同时对理解迭代器需要的类包含,内部类,链表等内容做了分析,这篇从<C Prime Plus> 6th Edition(以下称"本书")的P684,大标题16.4泛型编…

C++继承和多态

目录 继承 继承的意义 访问限定符、继承方式 赋值兼容规则&#xff08;切片&#xff09; 子类的默认成员函数 多继承 继承is a和组合has a 多态 什么是多态 形成多态的条件 函数重载&#xff0c;隐藏&#xff0c;重写的区别 override和final 多态原理 继承 继承的…

Algorithms,最全的Python算法仓库!

学习编程、学习Python最好的方式就是练习&#xff0c;哪怕是新手&#xff0c;只要不断地敲代码输出&#xff0c;肯定会有神效。 Python的练手项目很多&#xff0c;特别是Github上&#xff0c;建议不管新手、老司机都去看看。 这里推荐给大家一个Gitthub上练习的项目&#xff…

高级Puppet manifest编写和模块化管理:构建高效可靠的自动化运维平台

高级Puppet manifest编写和模块化管理&#xff1a;构建高效可靠的自动化运维平台 Puppet是一种流行的开源自动化运维工具&#xff0c;可以自动化IT基础设施的配置和管理。Puppet使用声明性语言来描述系统状态&#xff0c;并通过客户端-服务器模型来实现自动化。Puppet manifes…

[C++]——同步异步日志系统(5)

同步异步日志系统 一、日志消息格式化设计1.1 格式化子项类的定义和实现1.2 格式化类的定义和实现 二、日志落地类设计2.1 日志落地模块功能实现与测试2.2 日志落地模块功能功能扩展 一、日志消息格式化设计 日志格式化模块的作用&#xff1a;对日志消息进行格式化&#xff0c…

深度学习工具和资源推荐:全面指南

今天我们来聊聊深度学习的工具和资源。要学好深度学习&#xff0c;除了理论知识&#xff0c;还需要掌握一些强大的工具和找到好的资源。以下是我在学习过程中发现的一些非常有用的工具和资源&#xff0c;希望对你们有帮助。 目录 工具推荐 1. Python编程语言 2. TensorFlow…

接口测试返回参数的自动化对比!

引言 在现代软件开发过程中&#xff0c;接口测试是验证系统功能正确性和稳定性的核心环节。接口返回参数的对比不仅是确保接口功能实现的手段&#xff0c;也是测试过程中常见且重要的任务。为了提高对比的效率和准确性&#xff0c;我们可以通过自动化手段实现这一过程。本文将…

WGCLOUD登录页面支持输入验证码吗

支持的 v3.5.3版本开始&#xff0c;WGCLOUD支持在登录页面配置输入验证码&#xff0c;我们可以根据自己的场景需要&#xff0c;配置是否在登录页面显示验证码&#xff0c;如下说明 登录页面添加验证码说明 - WGCLOUD

[超级详细系列]ubuntu22.04配置深度学习环境(显卡驱动+CUDA+cuDNN+Pytorch)--[3]安装cuDNN与Pytorch

本次配置过程的三篇博文分享分别为为&#xff1a; [超级详细系列]ubuntu22.04配置深度学习环境(显卡驱动CUDAcuDNNPytorch)--[1]安装显卡驱动 [超级详细系列]ubuntu22.04配置深度学习环境(显卡驱动CUDAcuDNNPytorch)--[2]安装Anaconda与CUDA [超级详细系列]ubuntu22.04配置深…

代码随想录 day38 动态规划part04

416. 分割等和子集 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. …