基于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

隔行换色


相关文章
|
27天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
3天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
27天前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
24 1
|
27天前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
27天前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
29天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
1月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
36 1
vue学习第一章
|
1月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
27 1
vue学习第三章
|
1月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
35 1
vue学习第四章
|
1月前
|
JavaScript 前端开发 算法
vue学习第7章(循环)
欢迎来到瑞雨溪的博客,一名热爱JavaScript和Vue的大一学生。本文介绍了Vue中的v-for指令,包括遍历数组和对象、使用key以及数组的响应式方法等内容,并附有综合练习实例。关注我,将持续更新更多优质文章!🎉🎉🎉
24 1
vue学习第7章(循环)