vue+express+mysql(3)增删改查,导入导出excel

一.Vue前端项目
在这里插入图片描述

1.vue.config.js配置代理跨域

module.exports={
   
    devServer: {
   
        proxy: {
   
          //配置跨域
          '/api': {
   
            target: 'http://127.0.0.1:3000/',
            ws: true,
            changOrigin: true,
            pathRewrite: {
   
              '^/api': 'api'
            },
            open: true /*启动项目自动打开浏览器(同时需在package.json中配置:"scripts": {
    "dev": "vue-cli-service serve --open",}*/
          }
        }

    }
}

2.headers/headers.js

import $md5 from 'js-md5'

export function getHeader(url,code){
   
    //时间戳
    let timestamp=Date.now()
    let token=sessionStorage.getItem('user-token')===null?'':sessionStorage.getItem('user-token')
    let source='web'
    let sign=$md5(source+url+code+timestamp+token)
    
    return {
   'Content-type':'application/json;charset=UTF-8','token':token,
    'timestamp':timestamp,'code':code,'sign':sign,'source':source
}
}

3.axios/request.js

import axios from 'axios'
import {
   getHeader} from '@/headers/header'
import {
   Message,MessageBox} from 'element-ui'

let baseURL='/'
//创建axios实例

const service=axios.create({
   
    baseURL:baseURL,
    timeout:30000 //请求超时时间
})

//request拦截器
service.interceptors.request.use(
    config=>{
   
    let url=config.url.replace(config.baseURL,'')
    let code=config.code;
    config.headers=getHeader(url,code)//让每个请求携带自定义签名
    return config
},
 error=>{
   
     Promise.reject(error)
   
 }
)

//response拦截器

service.interceptors.response.use(
    response=>{
   
        
    if(response.config.responseType=='blob')  {
     
        if(response.status==200){
   
            return response
        }else {
   
            return Promise.reject('error')
        }
    }else{
   
      const res=response.data;
      if(res.code===200){
   
          return response.data
      }else if(res.code===407){
   
        //   console.log('token失效跳转登录页面')
        // sessionStorage.clear();
        // location.href=''
      }else{
   
          Message({
   
              message:res.message,
              type:'error',
              duration:5*1000
          })
          return Promise.reject('error')
      }
    }
   },
   error=>{
   
       Message({
   
           message:error.message,
           type:'error',
           duration:5*1000
       })
      
       return Promise.reject(error)
   }
)

export default service

4.axios/api.js

import request from './request'

export function getList(data){
   
    return request({
   
        url:'/api/index',
        method:'post',
        data,
        
    })
}

export function insertForm(data){
   
    return request({
   
        url:'/api/insert',
        method:'post',
        data,
    })
}
export function updateForm(params){
   
     return request({
   
         url:'/api/update',
         method:'get',
         params
     })
}
export function deletelist(data){
   
    return request({
   
        url:'/api/delete',
        method:'delete',
        data
    })
}

export function importFile(data){
   
   return request({
   
        url:'/api/import',
        method:'post',
        data
    })
}

export function exportFile(data){
   
    return request({
   
        url:'/api/export',
        method:'post',
        data,
        responseType:'blob'
    })
}
export function pageQuery(params){
   
    return request({
   
        url:'/api/pageQuery',
        method:'get',
        params
    })
}

3.views/about.vue

<template>
    <div>
<!-- Form -->

<el-button type='primary' @click="findList">查询</el-button>
<el-button type="primary" @click="dialogForm" >新增</el-button>
<el-button type="primary" @click="dialogUpdate">修改</el-button>
<el-button type="danger" @click="deletelist">删除</el-button>
<el-button type="primary" @click="importExcel">导入</el-button>
<el-button type="primary" @click="exportExcel">导出</el-button>
 <el-dialog :visible.sync='dialogImport'>
  <el-upload
  class="upload-demo"
  action=""
  :auto-upload='false'
  :http-request='uploadFile'
  :on-change="handleChange"
  ref='importInfo'
  :sho
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个典型的前后端分离的例子,我可以给您提供一个简单的示例代码,来帮助您理解如何使用 Vue3 + Vite + Ajax + SpringBoot 实现增删改查功能。 前端使用 Vue3 + Vite + Ajax 实现: 1. 在 Vue3 中,使用 `axios` 或者 `fetch` 进行 AJAX 请求,请求后端 SpringBoot 服务器,获取数据或者提交数据。 2. 在 Vue3 中,使用 `vue-router` 进行 SPA 单页应用的路由控制,实现前端页面的跳转。 3. 在 Vue3 中,使用 `vuex` 进行状态管理,方便组件之间的数据共享和传递。 下面是一个简单的 Vue3 组件的示例代码: ```vue <template> <div> <h1>用户列表</h1> <table> <thead> <tr> <th>ID</th> <th>用户名</th> <th>邮箱</th> <th>操作</th> </tr> </thead> <tbody> <tr v-for="user in users" :key="user.id"> <td>{{ user.id }}</td> <td>{{ user.username }}</td> <td>{{ user.email }}</td> <td> <button @click="editUser(user)">编辑</button> <button @click="deleteUser(user.id)">删除</button> </td> </tr> </tbody> </table> </div> </template> <script> import axios from 'axios'; export default { name: 'UserList', data() { return { users: [], }; }, methods: { async getUsers() { const response = await axios.get('/api/users'); this.users = response.data; }, async deleteUser(id) { await axios.delete(`/api/users/${id}`); this.getUsers(); }, editUser(user) { // 跳转到编辑用户页面,使用 vue-router this.$router.push(`/users/${user.id}`); }, }, mounted() { this.getUsers(); }, }; </script> ``` 后端使用 SpringBoot 实现: 1. 在 SpringBoot 中,使用 `@RestController` 和 `@RequestMapping` 注解定义 RESTful API 接口,实现增删改查的逻辑。 2. 在 SpringBoot 中,使用 `@Service` 和 `@Repository` 注解定义服务层和数据访问层,实现业务逻辑和数据库操作。 3. 在 SpringBoot 中,使用 `Spring Data JPA` 或者 `MyBatis` 等框架进行数据库操作,简化代码编写。 下面是一个简单的 SpringBoot Controller 的示例代码: ```java @RestController @RequestMapping("/api/users") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @GetMapping public List<User> listUsers() { return userService.listUsers(); } @PostMapping public void createUser(@RequestBody User user) { userService.createUser(user); } @PutMapping("/{id}") public void updateUser(@PathVariable Long id, @RequestBody User user) { userService.updateUser(id, user); } @DeleteMapping("/{id}") public void deleteUser(@PathVariable Long id) { userService.deleteUser(id); } } ``` 这是一个简单的增删改查的示例代码,您可以根据自己的需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值