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

news2024/11/14 14:50:15

 

 

addvue

<template>
  <!-- 传过来的id -->
<!-- {{ $route.query.id }} -->
<el-form
    ref="FormRef"
    style="max-width: 600px"
    :model="FormData"
    :rule="rules"
    status-icon
    label-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) return
  formEl.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-form
    ref="FormRef"
    style="max-width: 600px"
    :model="FormData"
    :rule="rules"
    status-icon
    label-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) : 0
  console.log(FormData.id);
  
  
  callProductApi()

})

const callProductApi = () => {
  productApi.select.call({id:FormData.id}).then((res:any)=>{
     let resData = res[0];

     FormData.name=resData.name
     FormData.subName = resData.subName
     FormData.img = resData.img
     FormData.categoryId = resData.categoryId
     FormData.status = resData.status
     FormData.price = resData.price
     FormData.seq = resData.seq
     FormData.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) return
  formEl.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 = true
   productApi.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.name
  productApi.select.call({pageNum: pageDate.pageNum,pageSize:pageDate.pageSize,name:name}).then((res:any) =>{
    tableData.value=res.itmes
    pageDate.total = res.total
  })
 }
  </script>

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

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

相关文章

【中台】数字中台建设方案(PPT)

数字中台建设要点&#xff1a; 数据采集与整合&#xff1a; 打破企业内部各个业务系统的数据隔阂&#xff0c;通过数据采集和数据交换实现数据的集中管理&#xff0c;形成统一的数据中心&#xff0c;为后续数据价值的挖掘提供基础。 利用自研或第三方ETL&#xff08;Extract, T…

最长下降序列

如何理解这个题目呢,我们可以每个人的分数放到排名上&#xff0c;然后求解最长下降序列即可 #include<bits/stdc.h> using namespace std;int n; const int N (int)1e5 5; int a[N]; int b[N]; int d[N]; int dp[N]; int t;int main() {cin >> t;while (t--) {…

排序——归并排序及排序章节总结

前面的文章中 我们详细介绍了排序的概念&#xff0c;插入排序&#xff0c;交换排序与选择排序&#xff0c;大家可以通过下面的链接再去学习&#xff1a; ​​​​​​排序的概念及插入排序 交换排序 选择排序 这篇文章就详细介绍一下另一种排序算法&#xff1a;归并排序以及…

PE文件(十)重定位表

重定位表的引入 程序加载过程 在win32下&#xff0c;每一个PE文件&#xff08;其可能由多个子PE文件组成&#xff09;在运行时&#xff0c;操作系统会给分配一个独立的4GB虚拟内存&#xff0c;内存地址从0x00000000到0xFFFFFFFF。其中低2G为用户程序空间&#xff0c;高2G为操…

【Linux】进程间通信——消息队列和信号量

目录 消息队列&#xff08;message queue&#xff09; 信号量&#xff08;Semaphore&#xff09; system V版本的进程间通信方式有三种&#xff1a;共享内存&#xff0c;消息队列和信号量。之前我们已经说了共享内存&#xff0c;那么我们来看一下消息队列和信号量以及它们之间…

【鸿蒙学习笔记】位置设置・position・绝对定位

官方文档&#xff1a;位置设置 目录标题 position&#xff1a;绝对定位&#xff0c;确定子组件相对父组件的位置。 position&#xff1a;绝对定位&#xff0c;确定子组件相对父组件的位置。 正→ ↓ Entry Component struct Loc_position {State message: string Hello Wor…

汇编语言程序设计-8-汇编语言快速查阅

8. 汇编语言快速查阅 文章目录 8. 汇编语言快速查阅常用资料寄存器含义标志寄存器的含义Debug的使用汇编语法 本章列出一些需要经常查阅的知识点。 常用资料 参考视频&#xff1a;烟台大学贺利坚老师的网课《汇编语言程序设计系列专题》&#xff0c;或者是B站《汇编语言程序设计…

vue学习day08-v-model详解、sync修饰符、ref和$refs获取dom组件、Vue异步更新和$nextTick

25、v-model详解 &#xff08;1&#xff09;v-model原理 1&#xff09;原理: v-model本质上是一个语法糖&#xff0c;比如&#xff1a;在应用于输入框时&#xff0c;就是value属性与input事件的合写。 2&#xff09;作用 ①数据变&#xff0c;视图变 ②视图变&#xff0c…

【 C++ 】详解 (类和对象) 继承

继承的概念及定义 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设计的层次结构…

【Linux】Linux的账号和用户组

管理员的工作中&#xff0c;相当重要的一环就是【管理账号】。 因为整个系统都是你在管理&#xff0c;并且所有一般用户的账号申请&#xff0c;都必须要通过你的协助才行&#xff0c;所以你就必须要了解一下如何管理好一个服务器主机的账号。 在管理Linux主机的账号时&#xff…

Python应用开发——30天学习Streamlit Python包进行APP的构建(15):优化性能并为应用程序添加状态

Caching and state 优化性能并为应用程序添加状态! Caching 缓存 Streamlit 为数据和全局资源提供了强大的缓存原语。即使从网络加载数据、处理大型数据集或执行昂贵的计算,它们也能让您的应用程序保持高性能。 本页仅包含有关 st.cache_data API 的信息。如需深入了解缓…

AG32 的MCU与FPGA的主频可以达到568MHz吗

Customers: AG32/ AGRV2K 这个芯片主频和定时器最高速度是多少&#xff1f;用户期望 CPLD计时器功能0.1ns以下。 AGM RE: CPLD做不到 0.1ns的速率&#xff0c;这个需要10G以上的时钟。 那AGRV2K最高多少MHz呢&#xff1f; 一般200MHZ比较容易实现。 进一步说明&#xff1…

智慧校园服务监控功能

智慧校园系统中的服务监控功能&#xff0c;扮演着维护整个校园数字化生态系统稳定与高效运作的重要角色。它如同一位全天候的守护者&#xff0c;通过实时跟踪、分析并响应系统各层面的运行状况&#xff0c;确保教学、管理等核心业务流程的顺畅进行。 服务监控功能覆盖了智慧校园…

自动控制——变速积分的PID控制

变速积分的PID控制 PID控制&#xff08;Proportional-Integral-Derivative Control&#xff09;是工业控制中最常用的控制算法之一。标准的PID控制器由比例&#xff08;P&#xff09;、积分&#xff08;I&#xff09;和微分&#xff08;D&#xff09;三个部分组成&#xff0c;…

连锁直营店小程序赋能多店如何管理

如商超便利店卖货线下场景&#xff0c;也有不少品牌以同城多店和多地开店经营为主&#xff0c;获取店铺周围客户和散流&#xff0c;如今线上重要性凸显&#xff0c;品牌电商发展是经营的重要方式之一&#xff0c;也是完善同城和外地客户随时便捷消费的方式之一。 多个门店管理…

Js 前置,后置补零的原生方法与补字符串 padStart及padEnd

在工作中&#xff0c;遇到了需要将不满八位的一个字符串进行后补0的操作&#xff0c;所以就在网上学习了关于js原生补充字符串的方法&#xff0c;然后用这篇博客记录下来。 目录 前置补充字符串 String.prototype.padStart() 后置补充字符串String.prototype.padEnd() 前置补…

OpenGL笔记十之Shader类的封装

OpenGL笔记十之Shader类的封装 —— 2024-07-10 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记十之Shader类的封装1.运行2.目录结构3.main.cpp4.application4.1.CMakeLists.txt4.2.Application.h4.3.Application.cpp 5.assets5.1.shaders&#xf…

虚拟机:VMware功能,安装与使用

目录 一、虚拟机介绍 二、VMware 1.介绍 2.安装 &#xff08;1&#xff09;根据提示按步骤安装​编辑 &#xff08;2&#xff09;更改软件的安装地址​编辑 &#xff08;3&#xff09;根据自己的需求选择是否需要软件更新​编辑 &#xff08;4&#xff09;根据需求选择…

20240715 每日AI必读资讯

&#x1f310; 代号“ 草莓 ”&#xff0c;OpenAI 被曝研发新项目&#xff1a;将 AI 推理能力提至新高度 - OpenAI 公司被曝正在研发代号为“ 草莓 ”的全新项目&#xff0c;进一步延伸去年 11 月宣布的 Q* 项目&#xff0c;不断提高 AI 推理能力&#xff0c;让其更接近人类的…

27.数码管的驱动,使用74HC595移位寄存器芯片

PS&#xff1a;升腾A7pro系列FPGA没有数码管外设&#xff0c;因此以AC620FPGA为例展开实验。 &#xff08;1&#xff09;共阳极数码管和共阴极数码管示意图&#xff1a; AC620中的数码管属于共阳极数码管&#xff0c;段选端口(dp,g,f,e,d,c,b,a)低电平即可点亮led。人眼的视觉…