国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二)

這篇具有很好參考價(jià)值的文章主要介紹了后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:完成一個(gè)列表,實(shí)現(xiàn)表頭的切換,字段的篩選,排序,分頁功能。

目錄

一、數(shù)據(jù)庫表的設(shè)計(jì)

二、后端實(shí)現(xiàn)

環(huán)境配置

model層

?mapper層

service層

?service層單元測試

controller層

三、前端實(shí)現(xiàn)

interface接口

接口api層

主要代碼

效果展示


一、數(shù)據(jù)庫表的設(shè)計(jì)

后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二),測試技術(shù),# SpringBoot,前端技術(shù),前端,后端

二、后端實(shí)現(xiàn)

環(huán)境配置

引入mybatis-plus依賴

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3</version>
        </dependency>

model層

package com.mrjj.java.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("merchandise_details")
public class MerchandiseDetails {
    @TableId(type= IdType.AUTO)
    public int id;
    public String salesPlatform;
    public String merchandiseName;
    public int freightCharge;
    public String notes;
}

?mapper層

package com.mrjj.java.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mrjj.java.model.MerchandiseDetails;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface MerchandiseDetailsMapper extends BaseMapper<MerchandiseDetails> {
}

service層

MerchandiseDetailsService文件

package com.mrjj.java.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.mrjj.java.model.MerchandiseDetails;

public interface MerchandiseDetailsService extends IService<MerchandiseDetails> {
}
package com.mrjj.java.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mrjj.java.mapper.MerchandiseDetailsMapper;
import com.mrjj.java.model.MerchandiseDetails;
import com.mrjj.java.service.MerchandiseDetailsService;
import org.springframework.stereotype.Service;

@Service("MerchandiseDetailsService")
public class MerchandiseDetailsServiceImpl extends ServiceImpl<MerchandiseDetailsMapper, MerchandiseDetails> implements MerchandiseDetailsService {
}

?service層單元測試

package com.mrjj.java.service;

import com.mrjj.java.model.MerchandiseDetails;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@SpringBootTest
@Transactional
public class MerchandiseDetailsServiceTest {
    @Resource
    MerchandiseDetailsService merchandiseDetailsService;

    @Test
    public void getAll() {
        List<MerchandiseDetails> list = merchandiseDetailsService.list();
        System.out.println(list);

    }

    @Test
    public void update() {
        MerchandiseDetails change = new MerchandiseDetails(30, "淘寶", "天堂傘", 16, "質(zhì)量好");
        merchandiseDetailsService.updateById(change);
    }
}

controller層

package com.mrjj.java.controller;

import com.mrjj.java.model.MerchandiseDetails;
import com.mrjj.java.model.Result;
import com.mrjj.java.service.MerchandiseDetailsService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/MerchandiseDetails")
public class MerchandiseDetailsController {
    @Resource
    MerchandiseDetailsService merchandiseDetailsService;

    @GetMapping
    public Result<List<MerchandiseDetails>> listMerchandiseDetails() {
        return Result.success(merchandiseDetailsService.list());
    }

    @PutMapping
    public Result updateMerchandiseDetails(@RequestBody MerchandiseDetails merchandiseDetails) {
        boolean result = merchandiseDetailsService.updateById(merchandiseDetails);
        if (result) {
            return Result.success("更新商品詳細(xì)信息成功!");
        } else {
            return Result.fail(210, "更新商品詳細(xì)信息失敗", merchandiseDetails);
        }

    }
}

三、前端實(shí)現(xiàn)

interface接口

export interface MerchandiseDetails {
    id: number;
    salesPlatform: string;
    merchandiseName: string;
    freightCharge: number;
    notes: string;
}

接口api層

import request from '../request'
import axios, { type AxiosPromise } from 'axios'
import type { MerchandiseDetails } from '@/types/merchandises_details/types'
const instance = axios.create({
    baseURL: '/merchandiseDetails',
    timeout: 30000,
    headers: { 'Content-Type': 'application/json;charset=utf-8' }
  })
  export default instance

export function listMerchandiseDetailsApi(): AxiosPromise<MerchandiseDetails[]> {
  return request({
    url: '/merchandiseDetails',
    method: 'get',
  })
}

export function updateMerchandiseDetailsApi(data: MerchandiseDetails) {
  return request({
    url: '/merchandiseDetails',
    method: 'put',
    data: data,
  })
}

主要代碼

<template>
<main>
  <el-dialog title="修改商品名稱" v-model="isUpdateName">
    <el-input v-model="changeRow.merchandiseName" size="default" clearable></el-input>
    <template #footer>
      <span>
        <el-button @click="isUpdateName = false">取消</el-button>
        <el-button type="primary" @click="updateMerchandiseName">確認(rèn)</el-button>
      </span>
    </template>
  </el-dialog>
  <el-row>
    <el-col :span="12" :offset="0"> 
  <el-radio-group v-model="filterType" size="default">
    <el-radio-button label="all">全部</el-radio-button>
    <el-radio-button label="京東" />
    <el-radio-button label="唯品會(huì)" />
    <el-radio-button label="淘寶" />
    <el-radio-button label="亞馬遜" />
    <el-radio-button label="拼多多" />
    <el-radio-button label="當(dāng)當(dāng)" />
    <el-radio-button label="天貓" />
  </el-radio-group>

    </el-col>
    <el-col >
      <el-input
        v-model="searchText"
        placeholder="請輸入內(nèi)容進(jìn)行搜索"
        size="default"
        clearable
        :suffix-icon="Search"
        ><template #prepend
          ><el-button type="primary" size="default" :icon="Search"></el-button>
        </template>
      </el-input>
    </el-col>
  </el-row>

  <el-table :data="showMerchandiseList" style="width: 50%" height="540" border stripe>
    <el-table-column label="商品名稱" fixed prop="merchandiseName" width="200px" />
    <el-table-column label="銷售平臺" prop="salesPlatform" width="100px" />
    <el-table-column label="郵費(fèi)" prop="freightCharge" width="100px" />
    <el-table-column label="詳細(xì)信息" prop="notes" width="200px" />
    <el-table-column label="操作" width="200px">
      <template #default="{ row }">
        <el-button
          type="primary"
          size="default"
          @click="
            isUpdateName = true;
            changeRow = { ...row };
          "
          >修改商品名稱</el-button
        ></template
      >
    </el-table-column>
  </el-table>
  <el-pagination
    background
    v-model:current-page="currentPage"
    v-model:page-size="pageSize"
    :page-sizes="[10, 20, 50]"
    layout="total, prev,sizes, pager, next,jumper"
    :total="filterMerchandiseList.length"
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
  />
  </main>
</template>
<script setup lang="ts">
import { MerchandiseName } from '../types/merchandises_details/types'
import { listMerchandiseDetailsApi, updateMerchandiseDetailsApi } from '../api/merchandise_details'
import { computed, onMounted, ref } from 'vue'
import { Search } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
let merchandiseDetailsList = ref<MerchandiseName[]>([])
let filterMerchandiseList = computed(() => {
  let platformMerchandise = merchandiseDetailsList.value
    .filter((key) => {
      return filterType.value === 'all' || key.salesPlatform === filterType.value
    })
    .filter((merchandise) => {
      return (
        merchandise.merchandiseName.indexOf(searchText.value) !== -1 ||
        merchandise.notes.indexOf(searchText.value) !== -1
      )
    })
  return platformMerchandise
})
onMounted(() => {
  ListMerchandiseDetails()
})

const searchText = ref('')
const filterType = ref('all')

let changeRow = ref<MerchandiseName>()
let isUpdateName = ref(false)

let currentPage = ref(1)
let pageSize = ref(10)

let showMerchandiseList = computed(() => {
  let startIndex = (currentPage.value - 1) * pageSize.value
  let endIndex = currentPage.value * pageSize.value - 1
  let index = -1
  let currentPageData = filterMerchandiseList.value.filter((merchandiseName) => {
    index += 1
    return index <= endIndex && index >= startIndex
  })
  return currentPageData
})

function ListMerchandiseDetails() {
  listMerchandiseDetailsApi().then(({ data }) => {
    merchandiseDetailsList.value = data
  })
}
function updateMerchandiseName() {
  // ElMessage.info(JSON.stringify(changeRow.value))
  isUpdateName.value = false
  updateMerchandiseDetailsApi(changeRow.value!).then(({ data }) => {
    ElMessage.success(data)
    ListMerchandiseDetails()
  })
}
function handleSizeChange(size: number) {
  console.log('當(dāng)前頁面大小是:', size)
  pageSize.value = size
}
const handleCurrentChange = (page: number) => {
  console.log('當(dāng)前的頁數(shù)是:', page)
  currentPage.value = page
}
</script>

<style scoped>
.el-input{
width: 30%;
}
</style>

效果展示

固定表頭,每頁展示50條數(shù)據(jù),分頁功能

后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二),測試技術(shù),# SpringBoot,前端技術(shù),前端,后端

搜索功能?

后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二),測試技術(shù),# SpringBoot,前端技術(shù),前端,后端

?過濾+搜索功能

后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二),測試技術(shù),# SpringBoot,前端技術(shù),前端,后端修改商品名稱

后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二),測試技術(shù),# SpringBoot,前端技術(shù),前端,后端

后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二),測試技術(shù),# SpringBoot,前端技術(shù),前端,后端數(shù)據(jù)庫merchandise_name字段值發(fā)生改變?

后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二),測試技術(shù),# SpringBoot,前端技術(shù),前端,后端文章來源地址http://www.zghlxwxcb.cn/news/detail-697649.html

到了這里,關(guān)于后端SpringBoot+前端Vue前后端分離的項(xiàng)目(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 一:Vue前端設(shè)計(jì)

    SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 一:Vue前端設(shè)計(jì)

    系列文章: SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 一:Vue前端設(shè)計(jì) SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 二:Spring Boot后端與數(shù)據(jù)庫連接 SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 三:Spring Boot后端與Vue前端連接 SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 四:用戶管理功能實(shí)現(xiàn) SpringBoot + Vue前后

    2024年02月09日
    瀏覽(99)
  • SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 二:Spring Boot后端與數(shù)據(jù)庫連接

    SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 二:Spring Boot后端與數(shù)據(jù)庫連接

    系列文章: SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 一:Vue前端設(shè)計(jì) SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 二:Spring Boot后端與數(shù)據(jù)庫連接 SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 三:Spring Boot后端與Vue前端連接 SpringBoot + Vue前后端分離項(xiàng)目實(shí)戰(zhàn) || 四:用戶管理功能實(shí)現(xiàn) SpringBoot + Vue前后

    2024年02月11日
    瀏覽(53)
  • 【SpringBoot+Vue】全網(wǎng)最簡單但實(shí)用的前后端分離項(xiàng)目實(shí)戰(zhàn)筆記 - 前端

    【SpringBoot+Vue】全網(wǎng)最簡單但實(shí)用的前后端分離項(xiàng)目實(shí)戰(zhàn)筆記 - 前端

    配套視頻地址:https://www.bilibili.com/video/BV1dG4y1T7yp/ 如果您需要原版筆記,請up喝口水,可以上我的淘寶小店 青菜開發(fā)資料 購買,或點(diǎn)擊下方鏈接直接購買: 源碼+PDF版本筆記 源碼+原始MD版本筆記 感謝支持! 官網(wǎng):https://nodejs.org 注意,node可以比我稍低,但不要更高 https://p

    2024年01月17日
    瀏覽(48)
  • 二、搭建前后端分離的自動(dòng)化測試平臺的前端Vue3+Element-plus前端項(xiàng)目

    二、搭建前后端分離的自動(dòng)化測試平臺的前端Vue3+Element-plus前端項(xiàng)目

    1、Node獲取地址 https://nodejs.org/en/download 一直默認(rèn)選項(xiàng)安裝,安裝好了之后,在環(huán)境變量中會(huì)自動(dòng)配置Node的地址,可以在cmd中使用 node -v/npm -v命令驗(yàn)證是否下載成功 2、設(shè)置Node的配置內(nèi)容 (1)在安裝目錄下新建兩個(gè)文件夾命名為node_cache,和node_global: 其中 node_cache 是作為 緩

    2024年02月06日
    瀏覽(28)
  • 解決前后端分離項(xiàng)目后端設(shè)置響應(yīng)頭前端無法獲取

    解決前后端分離項(xiàng)目后端設(shè)置響應(yīng)頭前端無法獲取

    在開發(fā)前后端分離項(xiàng)目中出現(xiàn)后端設(shè)置響應(yīng)頭,前端一直無法獲取等問題。 后端設(shè)置響應(yīng)頭代碼如下 在瀏覽器中我們是可以看到設(shè)置的響應(yīng)頭 Content-Disposition 屬性,但是在前端接收到的響應(yīng)信息中卻看不到我們設(shè)置的 Content-Disposition 屬性。 原來在前后端分離的項(xiàng)目中除了需

    2024年02月04日
    瀏覽(100)
  • 全面解析若依框架(springboot-vue前后分離--后端部分)

    全面解析若依框架(springboot-vue前后分離--后端部分)

    前端啟動(dòng) 后端啟動(dòng) 創(chuàng)建數(shù)據(jù)庫ry-vue,導(dǎo)入ry_2021xxxx.sql,quartz.sql,加載好依賴直接啟動(dòng)。 后端技術(shù) SpringBoot Spring Security JWT MyBatis Druid Fastjson 分頁實(shí)現(xiàn) 導(dǎo)入導(dǎo)出 上傳下載(框架使用的簡單,不做講解) 權(quán)限控制 事務(wù)管理(這里使用@Transactional,不做講解,具體和Spring的8種事務(wù)

    2024年01月16日
    瀏覽(54)
  • 基于Ant DesignPro Vue + SpringBoot 前后端分離 - 后端微服化 + 接口網(wǎng)關(guān) + Nacos

    基于Ant DesignPro Vue + SpringBoot 前后端分離 - 后端微服化 + 接口網(wǎng)關(guān) + Nacos

    通過Ant DesignPro Vue + SpringBoot 搭建的后臺管理系統(tǒng)后,實(shí)現(xiàn)了前后端分離,并實(shí)現(xiàn)了登錄認(rèn)證,認(rèn)證成功后返回該用戶相應(yīng)權(quán)限范圍內(nèi)可見的菜單。 后端采用SpringCloud構(gòu)建微服,采用SpringCloud Gateway做為服務(wù)網(wǎng)關(guān),采用Nacos做為統(tǒng)一配置中心,并在服務(wù)網(wǎng)關(guān)部分解決了前端跨域調(diào)

    2024年02月12日
    瀏覽(17)
  • 基于Ant DesignPro Vue + SpringBoot 前后端分離 - 后端微服化 + 接口網(wǎng)關(guān) + Nacos + Sentinel

    基于Ant DesignPro Vue + SpringBoot 前后端分離 - 后端微服化 + 接口網(wǎng)關(guān) + Nacos + Sentinel

    通過Ant DesignPro Vue + SpringBoot 搭建的后臺管理系統(tǒng)后,實(shí)現(xiàn)了前后端分離,并實(shí)現(xiàn)了登錄認(rèn)證,認(rèn)證成功后返回該用戶相應(yīng)權(quán)限范圍內(nèi)可見的菜單。 后端采用SpringCloud構(gòu)建微服,采用SpringCloud Gateway做為服務(wù)網(wǎng)關(guān),采用Nacos做為統(tǒng)一配置中心,并在服務(wù)網(wǎng)關(guān)部分解決了前端跨域調(diào)

    2024年02月11日
    瀏覽(21)
  • Vue加SpringBoot實(shí)現(xiàn)項(xiàng)目前后端分離

    Vue加SpringBoot實(shí)現(xiàn)項(xiàng)目前后端分離

    首先需要搭建一個(gè)Vue的腳手架項(xiàng)目(已經(jīng)放在gitee里面了,下面是gitee網(wǎng)址,可以直接拉) (vue-web: 這個(gè)是Vue項(xiàng)目模板,沒有后臺數(shù)據(jù)) 那么接下來就是實(shí)現(xiàn)前后端分離的步驟 首先我們需要有一個(gè)登錄頁面 登錄的點(diǎn)擊事件利用axios提交到后臺去,代碼放在后面(沒有樣式也可以

    2024年02月06日
    瀏覽(29)
  • SpringBoot+Vue前后端分離項(xiàng)目國際化支持

    SpringBoot+Vue前后端分離項(xiàng)目國際化支持

    i18n.js文件 language.en_US.js文件 language.zh_CN.js文件 messages_en_US.properties文件 messages_zh_CN.properties文件

    2024年02月04日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包