基于SprnigBoot+ElementUI 整合Vue案例【公司案件管理系统】(四)

简介: 基于SprnigBoot+ElementUI 整合Vue案例【公司案件管理系统】

3.3 Company.vue页面详解


  • —— 表格

b2b7a630cf6141bd9ae3baea77a4ddbf.png —— 分页


42cc0b3a271146ccbc782113d1b21b64.png

  • —— 对话框【展示案件列表】
  • 点击案件按钮,展示该公司所有案件悬浮窗口

ad792995f71e48cf86cb7e5575f24135.png

—— 详情分析

7ec6ee38924c4917a78171957e1f39bc.png

4. 分页查看案件列表功能:后端代码【三层架构】

  1. 点击批量删除按钮,显示要删除多少条,不论删除还是取消,都要给出弹窗提示

782e5af6bb6844f5bf4ad0b9f0850a22.png

2. 取消效果

bc9a32d14be3434eb1939b7b497ce4c5.png

—— domain 【Case表】

package com.czxy.domain;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "`case`")
public class Case {
    @Id
    private String cno;
    private String anno;
    private Integer isvalid;
    @Column(name = "`type`")
    private Integer type;
    private String casegroup;
    private String keyno;
    private String cname;
}

—— dao 【CaseMapper接口】

package com.czxy.dao;
import com.czxy.domain.Case;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
@org.apache.ibatis.annotations.Mapper
public interface CaseMapper extends Mapper<Case> {
//    根据公司id查询所对应的案件列表
    @Select("select * from `case` where keyno = #{keyno}")
    List<Case> findByKeyno(@Param("keyno") String keyno);
}

—— service【CaseService接口】

package com.czxy.service;
import com.czxy.domain.Case;
import com.github.pagehelper.PageInfo;
import java.util.List;
public interface CaseService {
    //分页查询
    PageInfo<Case> condition(Integer pageSize, Integer pageNum);
    //根据公司id查询相关案件列表
    List<Case> findByKeyno(String keyno);
    //批量删除
    void batchDelete(List<String> ids);
}

—— service -> impl 【CaseServiceImpl实现接口】

package com.czxy.service;
import com.czxy.dao.CaseMapper;
import com.czxy.domain.Case;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional
public class CaseServiceImpl implements CaseService {
    @Resource
    private CaseMapper caseMapper;
    @Override
    public PageInfo<Case> condition(Integer pageSize, Integer pageNum) {
        Example example = new Example(Case.class);
        PageHelper.startPage(pageNum,pageSize);
        List<Case> list = caseMapper.selectByExample(example);
        PageInfo<Case> pageInfo = new PageInfo<>(list);
        return pageInfo ;
    }
    @Override
    public List<Case> findByKeyno(String keyno) {
        List<Case> list = caseMapper.findByKeyno(keyno);
        return list ;
    }
    @Override
    public void batchDelete(List<String> ids) {
        for (String id : ids) {
            caseMapper.deleteByPrimaryKey(id);
        }
    }
}

—— controller 【CaseController】

package com.czxy.controler;
import com.czxy.domain.Case;
import com.czxy.service.CaseService;
import com.czxy.vo.BaseResult;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/case")
@CrossOrigin
public class CaseController {
    @Resource
    private CaseService caseService;
    @GetMapping("/{keyno}")
    public BaseResult findByKeyno(@PathVariable("keyno") String keyno) {
        List<Case> list = caseService.findByKeyno(keyno);
        return BaseResult.ok("查询成功",list);
    }
    @PostMapping("/condition/{pageSize}/{pageNum}")
    public BaseResult condition(
            @PathVariable("pageSize") Integer pageSize,
            @PathVariable("pageNum") Integer pageNum
    ) {
        PageInfo<Case> pageInfo = caseService.condition(pageSize, pageNum);
        return BaseResult.ok("查询成功!",pageInfo);
    }
    @PostMapping("/batchDelete")
    public BaseResult batchDelete(@RequestBody List<String> ids) {
        caseService.batchDelete(ids);
        return BaseResult.ok("批量删除成功");
    }
}

—— Case.vue 页面展示

<template>
  <div>
     <!-- 列表 start-->
     <template>
        <el-table
            :data="pageInfo.list"
            border
            style="width: 100%"
            :row-class-name="tableRowClassName"
             @selection-change="handleSelectionChange">
             <el-table-column
            type="selection"
            width="55">
             </el-table-column>
            <el-table-column
            prop="cno"
            label="案件编号"
            width="180">
            </el-table-column>
            <el-table-column
            prop="anno"
            label="案件名称"
            width="180">
            </el-table-column>
            <el-table-column
            prop="isvalib"
            label="有效性">
              <template slot-scope="scope">
                {{scope.row.isvalib == 0 ? '无效' : '有效'}}
              </template>
            </el-table-column>
            <el-table-column
            prop="type"
            label="案件类型">
              <template slot-scope="scope">
                {{scope.row.type == 2 ? '被执行' : ''}}
                {{scope.row.type == 3 ? '限高' : ''}}
                {{scope.row.type == 4 ? '裁判文书' : ''}}
                {{scope.row.type == 5 ? '破产重整' : ''}}
                {{scope.row.type == 6 ? '终本案件' : ''}}
                {{scope.row.type == 7 ? '询价评估' : ''}}
                {{scope.row.type == 8 ? '股权冻结' : ''}}
                {{scope.row.type == 9 ? '送达公告' : ''}}
                {{scope.row.type == 11 ? '开庭公告' : ''}}
            </template>
            </el-table-column>
            <el-table-column
            prop="casegroup"
            label="所属案件组">
            </el-table-column>
            <el-table-column
            prop="cname"
            label="所属公司">
            </el-table-column>
        </el-table>
     </template>
     <!-- 列表 end-->
     <!-- 分页条start -->
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="pageInfo.pageNum"
      :page-sizes="[5,10,15,20,25,30]"
      :page-size="pageInfo.pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="pageInfo.total">
    </el-pagination>
     <!-- 分页条end -->
     <el-row>
        <el-button type="danger" @click="adddelete()">批量/单个删除</el-button>
    </el-row>
  </div>
</template>
<script>
import axios from 'axios';
 export default {
    methods: {
      // 隔行换色
      tableRowClassName({row, rowIndex}) {
        if (rowIndex %2 != 0) {
          return 'warning-row';
        } else if (rowIndex %2 == 0) {
          return 'success-row';
        }
        return '';
      },
      //多选
      handleSelectionChange(val){
        this.ids = val.map(company => company.cno )  
      },
    //   监听条数变化
    handleSizeChange(val) {
        this.pageInfo.pageSize = val ;
        this.pageInfo.pageNum = 1;
        this.condition();
      },
    //   监听页数变化
      handleCurrentChange(val) {
        this.pageInfo.pageNum = val;
        this.condition();
      },
    //   查询所有公司
    async condition(num) {
        if(num ){
            this.pageInfo.pageNum = num ;
        }
        let {data : baseResult } = await axios.post(`http://localhost:8888/case/condition/${this.pageInfo.pageSize}/${this.pageInfo.pageNum}`);
        if (baseResult.code == 20000 ) {
            this.pageInfo = baseResult.data ;
        }
      },
      //批量删除
      async adddelete() {
        this.$confirm(`您确定要删除${this.ids.length}条数据吗?`, '删除提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then( async () => {
          let {data : baseResult } = await axios.post(`http://localhost:8888/case/batchDelete`,this.ids);
        if (baseResult.code == 20000 ) {
          this.$message.success(baseResult.msg);
            this.condition();
        }
        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          });          
        });
      },
    },
    data() {
      return {
        //   多选数组
        ids: [],
        // 分页对象
        pageInfo: {
            pageNum : 1,
            pageSize : 5 
        },
        // 案件列表
        caseList:[],
    }
  },
  mounted () {
    // 页面加载完成时执行
    this.condition();
  }
}
</script>
<style>
/* 隔行换色样式 */
.el-table .warning-row {
    background: oldlace;
  }
  .el-table .success-row {
    background: #f0f9eb;
  }
  /* 字体设置 */
  .link {
    padding-top: 1.5rem;
    text-align: right;
  }
</style>

—— Case.vue 页面 详情分析

5c4cfa1def5141a3a99129559dd055f3.png


5. 样式说明

登录界面:

  1. 页面背景色:#B3C0D1
  2. 登录卡片颜色:aliceblue
  3. 登录卡片位置:页面中间
  4. 登录卡片宽度:500px

欢迎界面:


字体:楷体

字体大小:40px

字体颜色:绿色

整体布局:


页面铺满、header/footer两侧无边距

header背景色:#545c64,字体:楷体,字体大小:40px,居中显示

footer背景色:#B3C0D1,居中显示

aside背景色:#D3DCE6,active-text-color:#333,text-color:#00599f

main背景色:mintcream

公司列表、案件列表:


表格行高:40px

隔行换色


相关文章
|
5天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
5天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
5天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
5天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
5天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
JavaScript
Vue:ElementUI常用组件
Vue:ElementUI常用组件
145 0
|
5天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
6天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
6天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
11天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发