当前位置: 首页 > news >正文

微服务项目:尚融宝(57)(核心业务流程:投资列表展示(2))

管理端显示还款计划

一、后端接口

1、Controller

创建AdminLendReturnController

@Api(tags = "还款记录")
@RestController
@RequestMapping("/admin/core/lendReturn")
@Slf4j
public class AdminLendReturnController {

    @Resource
    private LendReturnService lendReturnService;

    @ApiOperation("获取列表")
    @GetMapping("/list/{lendId}")
    public R list(
            @ApiParam(value = "标的id", required = true)
            @PathVariable Long lendId) {
        List<LendReturn> list = lendReturnService.selectByLendId(lendId);
        return R.ok().data("list", list);
    }
}

2、Service

接口:LendReturnService

List<LendReturn> selectByLendId(Long lendId);

实现:LendReturnServiceImpl 

@Override
public List<LendReturn> selectByLendId(Long lendId) {
    QueryWrapper<LendReturn> queryWrapper = new QueryWrapper();
    queryWrapper.eq("lend_id", lendId);
    List<LendReturn> lendReturnList = baseMapper.selectList(queryWrapper);
    return lendReturnList;
}

二、前端

1、创建api

api/core/lend-return.js

import request from '@/utils/request'

export default {
  getList(lendId) {
    return request({
      url: `/admin/core/lendReturn/list/` + lendId,
      method: 'get'
    })
  }
}

2、页面脚本

views/core/lend/detail.vue

import lendReturnApi from '@/api/core/lend-return'
data() {
  return {
    ......,

    lendReturnList: [] //还款计划列表
  }
},

created() {
  if (this.$route.params.id) {
    ......

    // 还款计划
    this.fetchLendReturnList()
  }
},

methods 

fetchLendReturnList() {
    lendReturnApi.getList(this.$route.params.id).then(response => {
        this.lendReturnList = response.data.list
    })
}

3、页面模板

views/core/lend/detail.vue
还款计划放在投资记录后面
<h4>还款计划</h4>
<el-table :data="lendReturnList" stripe style="width: 100%" border>
    <el-table-column type="index" label="序号" width="70" align="center" />
    <el-table-column prop="currentPeriod" label="当前的期数" />
    <el-table-column prop="principal" label="本金" />
    <el-table-column prop="interest" label="利息" />
    <el-table-column prop="total" label="本息" />
    <el-table-column prop="returnDate" label="还款日期" width="150" />
    <el-table-column prop="realReturnTime" label="实际还款时间" />
    <el-table-column label="是否逾期">
        <template slot-scope="scope">
            <span v-if="scope.row.overdue">
                是(逾期金额:{{ scope.row.overdueTotal }}元)
            </span>
            <span v-else>否</span>
        </template>
    </el-table-column>
    <el-table-column label="状态" width="80">
        <template slot-scope="scope">
            {{ scope.row.status === 0 ? '未还款' : '已还款' }}
        </template>
    </el-table-column>
</el-table>

一、后端接口

Controller

创建 LendReturnController

@Api(tags = "还款计划")
@RestController
@RequestMapping("/api/core/lendReturn")
@Slf4j
public class LendReturnController {

    @Resource
    private LendReturnService lendReturnService;

    @ApiOperation("获取列表")
    @GetMapping("/list/{lendId}")
    public R list(
            @ApiParam(value = "标的id", required = true)
            @PathVariable Long lendId) {
        List<LendReturn> list = lendReturnService.selectByLendId(lendId);
        return R.ok().data("list", list);
    }
}

二、前端

页面脚本

pages/lend/_id.vue

async asyncData({ $axios, params }) {
    ......
    
    //还款计划
    let responseLendReturnList = await $axios.$get(
      '/api/core/lendReturn/list/' + lendId
    )

    return {
      ......,
      lendReturnList: responseLendReturnList.data.list, //还款计划
    }
},

一、后端接口

Controller

创建 LendItemReturnController

@Api(tags = "回款计划")
@RestController
@RequestMapping("/api/core/lendItemReturn")
@Slf4j
public class LendItemReturnController {

    @Resource
    private LendItemReturnService lendItemReturnService;

    @ApiOperation("获取列表")
    @GetMapping("/auth/list/{lendId}")
    public R list(
            @ApiParam(value = "标的id", required = true)
            @PathVariable Long lendId, HttpServletRequest request) {

        String token = request.getHeader("token");
        Long userId = JwtUtils.getUserId(token);
        List<LendItemReturn> list = lendItemReturnService.selectByLendId(lendId, userId);
        return R.ok().data("list", list);
    }
}

2、Service

接口:LendItemReturnService

List<LendItemReturn> selectByLendId(Long lendId, Long userId);

实现:LendItemReturnServiceImpl 

@Override
public List<LendItemReturn> selectByLendId(Long lendId, Long userId) {
    QueryWrapper<LendItemReturn> queryWrapper = new QueryWrapper<>();
    queryWrapper
        .eq("lend_id", lendId)
        .eq("invest_user_id", userId)
        .orderByAsc("current_period");
    return baseMapper.selectList(queryWrapper);
}

二、前端

1、页面脚本

pages/lend/_id.vue

data() {
  return {
    ......,

    lendItemReturnList: [], //回款计划
  }
},

mounted() {
  ......

  //回款计划
  this.fetchLendItemReturnList()
},

methods 

//回款计划
fetchLendItemReturnList() {
    this.$axios
        .$get('/api/core/lendItemReturn/auth/list/' + this.$route.params.id)
        .then((response) => {
        this.lendItemReturnList = response.data.list
    })
},

2、页面模板

pages/lend/_id.vue

 

<!-- 回款计划 -->
<div class="item-detail-body clearfix mrt30 ui-tab">
    <div class="ui-tab-nav hd">
        <ul>
            <li class="nav_li active">
                <a href="javascript:;">回款计划</a>
            </li>
        </ul>
    </div>
    <div class="bd">
        <div class="ui-tab-item active" style="display: block;">
            <div class="repayment-list">
                <table border="0" cellpadding="0" cellspacing="0" width="100%">
                    <thead>
                        <tr>
                            <th>期数</th>
                            <th>本金(元)</th>
                            <th>利息(元)</th>
                            <th>本息(元)</th>
                            <th>计划回款日期</th>
                            <th>实际回款日期</th>
                            <th>状态</th>
                            <th>是否逾期</th>
                        </tr>
                    </thead>
                    <tbody id="repayment_content">
                        <tr
                            v-for="lendItemReturn in lendItemReturnList"
                            :key="lendItemReturn.id"
                            >
                            <td>{{ lendItemReturn.currentPeriod }}</td>
                            <td class="c-orange">¥{{ lendItemReturn.principal }}</td>
                            <td class="c-orange">¥{{ lendItemReturn.interest }}</td>
                            <td class="c-orange">¥{{ lendItemReturn.total }}</td>
                            <td>{{ lendItemReturn.returnDate }}</td>
                            <td>{{ lendItemReturn.realReturnTime }}</td>
                            <td>
                                {{ lendItemReturn.status === 0 ? '未还款' : '已还款' }}
                            </td>
                            <td>
                                <span v-if="lendItemReturn.overdue">
                                    是(逾期金额:{{ lendReturn.overdueTotal }}元)
                                </span>
                                <span v-else>否</span>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

 上篇链接:

(1条消息) 微服务项目:尚融宝(56)(核心业务流程:投资列表展示(1))_一个风轻云淡的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/m0_62436868/article/details/127020735?spm=1001.2014.3001.5502

相关文章:

  • 【Vue】如何使用vuex解决兄弟组件传值?
  • CDH 08Cloudera Manager freeIPAKerberos安装配置(markdown新版)
  • 给你一个购物车模块,你会如何设计测试用例?【测试用例设计】
  • steam搬砖汇率差项目详解
  • NodeJS 环境准备
  • RestFul风格
  • git提交代码版本冲突问题
  • 交换机与路由技术-29-OSPF虚链路
  • Centos6普通用户获取最高权限方法
  • 极致CMS1.7 另一处前台SQL注入
  • 基于javaweb,ssm鲜花销售系统
  • 数据结构与算法:大小根堆和快速排序 解决TopK问题
  • 【ArkUI】对于Flex布局与基础组件声明式UI-组件封装父子组件相互绑定的运用【OpenHarmony/HarmonyOS】
  • java基于ssm+vue的企业通用进销存管理系统 element
  • K8S搭建
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Android 架构优化~MVP 架构改造
  • CentOS7简单部署NFS
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JS实现简单的MVC模式开发小游戏
  • Python 反序列化安全问题(二)
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于 Babel 的 npm 包最小化设置
  • 坑!为什么View.startAnimation不起作用?
  • 日剧·日综资源集合(建议收藏)
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 温故知新之javascript面向对象
  • 系统认识JavaScript正则表达式
  • 携程小程序初体验
  • 学习使用ExpressJS 4.0中的新Router
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 用Visual Studio开发以太坊智能合约
  • 你对linux中grep命令知道多少?
  • zabbix3.2监控linux磁盘IO
  • ​批处理文件中的errorlevel用法
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (三)uboot源码分析
  • (十三)Maven插件解析运行机制
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET处理HTTP请求
  • ::
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • [100天算法】-x 的平方根(day 61)
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [Android Pro] Notification的使用
  • [Android]常见的数据传递方式
  • [BZOJ2208][Jsoi2010]连通数