vue.js3+element-plus+typescript add,edit,del,search

2024-08-28 06:44

本文主要是介绍vue.js3+element-plus+typescript add,edit,del,search,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

vite.config.ts

server: {cors: true, // 默认启用并允许任何源host: '0.0.0.0', // 这个用于启动port: 5110, // 指定启动端口open: true, //启动后是否自动打开浏览器  proxy: {'/api': {target: 'http://localhost:8081/',  //实际请求地址,数据库的rest APIschangeOrigin: true      },}

数据来源于前面文章的介绍的方式


import axios from "axios";/* eslint-disable class UserinfoDataService*/
/*** Userinfo Rest API* 和前文章的各数据操作,可以用其一任一种*/
class UserinfoDataService
{/*** 查看所有记录    getAll():Promise<any> {* @returns */ getAllData(){axios.get('/api/userinfos').then(response=>{console.log(response.data);return response.data;}).catch(error=>{console.log(error);return null});//console.log(axios.get("/tutorials"));// return axios.get("/api/tutorials");// http.get("/tutorials");//}/*** 2 查询所有记录*/
getAll(): Promise<any>{return axios.get("/api/userinfos");// http.get("/tutorials");//
}/*** 登录* @param userName * @param userPassword * @returns */
userlogin(userName:any,userPassword:any):Promise<any> 
{return axios.get(`/api/userinfos/?userName=${userName}&userPassword=${userPassword}`);
}/*** 查询一条记录* @param id * @returns */get(id: any): Promise<any> {console.log(id);return axios.get(`/api/userinfos/${id}`);//http.get(`/api/tutorials/${id}`);}/*** 添加* @param data * @returns */create(data: any): Promise<any> {return axios.post("/api/userinfos", data);}/*** 更新* @param id * @param data * @returns */update(id: any, data: any): Promise<any> {return axios.put(`/api/userinfos/${id}`, data);}/*** 删除* @param id * @returns */delete(id: any): Promise<any> {return axios.delete(`/api/userinfos/${id}`);}/***删除所有* @returns */deleteAll(): Promise<any> {return axios.delete(`/api/api/userinfos`);}/*** 查找* @param username * @returns */findByTitle(username: string): Promise<any> {return axios.get(`/api/userinfos?username=${username}`);}
}
// new TutorialDataService()
export default new UserinfoDataService();

调用:

<!--
** _______________#########_______________________ * ______________############_____________________ * ______________#############____________________ * _____________##__###########___________________ * ____________###__######_#####__________________ * ____________###_#######___####_________________ * ___________###__##########_####________________ * __________####__###########_####_______________ * ________#####___###########__#####_____________ * _______######___###_########___#####___________ * _______#####___###___########___######_________ * ______######___###__###########___######_______ * _____######___####_##############__######______ * ____#######__#####################_#######_____ * ____#######__##############################____ * ___#######__######_#################_#######___ * ___#######__######_######_#########___######___ * ___#######____##__######___######_____######___ * ___#######________######____#####_____#####____ * ____######________#####_____#####_____####_____ * _____#####________####______#####_____###______ * ______#####______;###________###______#________ * ________##_______####________####______________ * * @Author: geovindu* @Date: 2024-08-26 19:55:02* @LastEditors: geovindu* @LastEditTime: 2024-08-27 20:24:32* @FilePath: \vue\vuetest\src\components\tablebind.vue* @Description: geovindu* @lib,packpage: * * @IDE: vscode* @jslib: node 20 vue.js 3.0* @OS: windows10* @database: mysql 8.0  sql server 2019 postgreSQL 16* Copyright (c) geovindu 2024 by geovindu@163.com, All Rights Reserved. --><template><div style="padding: 10px"> <ElConfigProvider :locale="zhCn"><ElInput style="width: 300px" placeholder="请输入名称..." v-model="name" clearable></ElInput><ElButton type="primary" @click="search" style="margin-left: 5px">查询数据</ElButton><ElButton type="primary" @click="handleAdd">新增数据</ElButton><div style="margin: 10px 0"><ElTable :data="paginatedData" border style="width: 100%">  <ElTableColumn prop="id" label="ID" width="20"/>     <ElTableColumn prop="userName" label="用户名" width="80"/>        <ElTableColumn prop="userReal" label="姓名" width="80"/><ElTableColumn prop="userPassword" label="密码"/><ElTableColumn prop="userIsOk" label="否可用"/><ElTableColumn prop="userMail" label="邮件"/><ElTableColumn prop="userMobile" label="手机号码"/><ElTableColumn prop="createdAt" label="日期" width="80"/><ElTableColumn label="操作"><template #default="scope"><ElButton type="text" size="small" @click="handleEdit(scope.row, scope.$index)">编辑</ElButton>  <ElButton type="danger" size="small" @click.prevent="remove(scope.$index)">删除</ElButton></template></ElTableColumn></ElTable><div class="pagination-block">  <ElPagination  background  layout="prev, pager, next, jumper, total, sizes"  :current-page="state.page"  :page-size="state.limit"  :page-sizes="[10, 20, 30, 40]"  :total="total"  @current-change="handleCurrentChange"  @size-change="handleSizeChange"  />  </div>  </div><!--弹窗--><ElDialog v-model="dialogFormVisible" title="信息" width="40%"><ElForm :model="form" label-width="100px" style="padding-right:30px "><ElFormItem label="ID"><ElInput v-model="form.id" autocomplete="off"/></ElFormItem>                <ElFormItem label="用户名"><ElInput v-model="form.userName" autocomplete="off"/></ElFormItem><ElFormItem label="姓名"><ElInput v-model="form.userReal" autocomplete="off"/></ElFormItem><ElFormItem label="密码"><ElInput v-model="form.userPassword" autocomplete="off"/></ElFormItem><ElFormItem label="邮件"><ElInput v-model="form.userMail" autocomplete="off"/></ElFormItem><ElFormItem label="手机号码"><ElInput v-model="form.userMobile" autocomplete="off"/></ElFormItem><ElFormItem label="是否可用"><ElCheckbox v-model="form.userIsOk"/></ElFormItem><ElFormItem label="日期">                    <ElDatePickerv-model="form.createdAt"type="date"placeholder="Pick a day"format="YYYY/MM/DD"value-format="YYYY-MM-DD"        :disabled-date="disabledDate":shortcuts="shortcuts":size="size"/>     </ElFormItem></ElForm><template #footer><span class="dialog-footer"><ElButton @click="dialogFormVisible = false">取消</ElButton><ElButton type="primary" @click="save">确认</ElButton></span></template></ElDialog></ElConfigProvider></div>
</template>
<script lang="ts" setup>import { ElMessageBox,ElTable,ElButton,ElTableColumn,ElDialog,ElForm,ElFormItem,ElInput,ElDatePicker,ElConfigProvider,ElCheckbox } from "element-plus";//https://element-plus.org/zh-CN/guide/i18n.htmlimport zhCn from 'element-plus/es/locale/lang/zh-cn'//中文import {reactive, ref,computed} from "vue";import  UserinfoDataService from "../services/UserinfoDataService";import router from "@/router"; //路由配置文件import Crypoto from "../common/Cryptographer"; //;加密const total=ref(0);//const state = reactive({  page: 1,  limit: 10,  });  // 计算属性用于分页  const paginatedData = computed(() => {  const start = (state.page - 1) * state.limit;  const end = start + state.limit;  total.value=tableData.value.length;return tableData.value.slice(start, end);  });  // 改变页码  const handleCurrentChange = (e: number) => {  state.page = e;  };      // 改变页数限制  const handleSizeChange = (e: number) => {  state.limit = e;  };  //https://element-plus.org/zh-CN/component/date-pickerconst size = ref<'default' | 'large' | 'small'>('default');const shortcuts = [{text: 'Today',value: new Date(),},{text: 'Yesterday',value: () => {const date = new Date()date.setTime(date.getTime() - 3600 * 1000 * 24)return date},},{text: 'A week ago',value: () => {const date = new Date()date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)return date},},
]const disabledDate = (time: Date) => {return time.getTime() > Date.now()
}//const tableData = ref([{}]);//读数据UserinfoDataService.getAll().then(response=>{     console.log("class处理成功情况2");console.log(response.data);tableData.value=response.data;}).catch(error=>{console.log(error);});const dialogFormVisible = ref(false)const form = reactive({id:total,userName:"",userReal:"",userPassword:"",userIsOk:false,userMail:"",userMobile:"",createdAt:""})//全局保存编辑的行号const globalIndex = ref(-1)const name = ref('')//新增数据 设置新的空的绑值对象 打开弹窗const handleAdd = () => {//生成最大的IDform.id=tableData.value.length+1;form.userName = '';  form.userReal="";form.userPassword = '';  form.userIsOk = false;form.userMail="";form.userMobile="";form.createdAt="";dialogFormVisible.value = true;}//保存数据,把数据插入到tableData中,并刷新页面,弹窗关闭const save = () => {if (globalIndex.value >= 0) {//表示编辑tableData.value[globalIndex.value,20] = form    //还原回去globalIndex.value = -1UserinfoDataService.update(form.id,form); //修改成功 (密码需要加密一下)router.push('tablebind')} else {//新增tableData.value.push(form)UserinfoDataService.create(form); //添加成功!(密码需要加密一下)router.push('tablebind')}dialogFormVisible.value = false}//编辑数据 先赋值到表单再弹窗const handleEdit = (row: {id:number, userName: string; userReal:string,userPassword: string; userIsOk:boolean,userMail:string,userMobile:string,createdAt:string}, index: number) => {const newObj = Object.assign({}, row)form.id=newObj.id;form.userName =newObj.userName;form.userReal=newObj.userReal;form.userPassword=newObj.userPassword;form.userIsOk=newObj.userIsOk;form.userMail=newObj.userMail; //.toLocaleDateString()form.userMobile=newObj.userMobile;form.createdAt=newObj.createdAt;console.log(form);// reactive(newObj)//把当前编辑的行号赋值给全局保存的行号globalIndex.value = index;console.log(globalIndex.value);dialogFormVisible.value = true;}//删除数据 从index位置开始,删除一行即可 删除前有一个提示为好const remove = (index:any) => {tableData.value.splice(index, 1)// UserinfoDataService.delete(form.id) //删除}//查询数据有问题,需要修改const search = () =>{tableData.value = tableData.value.filter(v =>v.userName.includes(form.userName)) //userName.value// UserinfoDataService.getAll(form.userName)}
</script>

还有BUG,待完善

输出:

这篇关于vue.js3+element-plus+typescript add,edit,del,search的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114028

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',