效果图

前端

  1 <template>
2 <!-- 总体情况 - 总览echarts -->
3
4 <div v-loading="loading" class="list-table" style="height: 350px;">
5 <el-tabs v-model="counterpartyAccountName" type="card" @tab-click="choiceYearMethod">
6 <el-tab-pane
7 v-for="item in counterpartyAccountNameOptions"
8 :key="item.value"
9 :label="item.label"
10 :value="item.value"
11 :name="item.label"
12 />
13 </el-tabs>
14 <!-- 年份选择 -->
15 <div class="choiceYear">
16 <el-select v-model="choiceYear" :placeholder="$t('请选择')" size="mini" style="width: 80px;" @change="choiceYearMethod">
17 <el-option
18 v-for="item in yearOptions"
19 :key="item.value + new Date().getTime()"
20 :label="item.label"
21 :value="item.value"
22 />
23 </el-select>
24
25 </div>
26
27 <UpAndDownColumnar
28 v-if="showColumnar"
29 ref="UpAndDownColumnar"
30 :row-data="rowData"
31 :up-data-arr="upDataArr"
32 :down-data-arr="downDataArr"
33 :subtext="subtext"
34 :title="$t('单个关联方')"
35 />
36 </div>
37 </template>
38 <script>
39
40 import { oneRelatedPartiesView, getRecordYear
41 , getCounterpartyAccountNames
42 } from '@/api/company/bankFlowWaterAnalysis/WaterAnalysis.js'
43 import UpAndDownColumnar from '@/views/company/bankFlowWaterAnalysis/columnar/UpAndDownColumnar.vue'
44 export default {
45 components: {
46 UpAndDownColumnar
47 },
48 props: {
49 },
50 data() {
51 return {
52 activeName: 'first',
53 loading: false,
54 // 上面数据
55 upDataArr: [],
56 // 下面数据
57 downDataArr: [],
58 // 月份
59 rowData: [],
60 showColumnar: false,
61 yearOptions: [],
62 counterpartyAccountNameOptions: [],
63 choiceYear: '',
64 counterpartyAccountName: '',
65 // 当前页面的宽度
66 thisPageWidth: (document.documentElement.clientWidth - 270) + 'px',
67 formData: {},
68 subtext: ''
69 }
70 },
71 created() {
72 this.initData()
73 },
74 mounted() {
75 },
76 methods: {
77 initData() {
78 // 获取年份
79 getRecordYear({}).then(response => {
80 this.yearOptions = response.data
81 this.choiceYear = response.data[0].value
82 this.choiceYearMethod()
83 })
84 // 获取交易对手
85 getCounterpartyAccountNames({ companyId: this.$route.query.companyId }).then(response => {
86 this.counterpartyAccountNameOptions = response.data
87 this.counterpartyAccountName = response.data[0].value
88 this.choiceYearMethod()
89 })
90 },
91 handleClick(tab, event) {
92 console.log(tab, event)
93 },
94 choiceYearMethod() {
95 this.loading = true
96 this.showColumnar = false
97 oneRelatedPartiesView({ companyId: this.$route.query.companyId, years: this.choiceYear, counterpartyAccountName: this.counterpartyAccountName
98 }).then(response => {
99 if (response.data.code === 200) {
100 if (response.data.inflow) {
101 this.formData = response.data
102 this.subtext = this.choiceYear + this.$t('年') + this.$t('总流入') + ': ' + this.formData.totalInflow + this.$t('元') + ', ' + this.$t('总流出') + ': ' + this.formData.totalOutflow + this.$t('元') + ', ' + this.$t('差额') + ': ' + this.formData.difference + this.$t('元')
103 this.rowData = []
104 this.upDataArr = []
105 this.downDataArr = []
106 response.data.inflow.forEach(item => {
107 this.rowData.push(this.$t(item.years))
108 this.upDataArr.push(item.totalInflow)
109 })
110 }
111 if (response.data.outflow) {
112 response.data.outflow.forEach(item => {
113 this.downDataArr.push(item.totalOutflow)
114 })
115 }
116 this.showColumnar = true
117 this.loading = false
118 } else {
119 this.msgError(this.$t(response.data.msg))
120 this.loading = false
121 }
122 })
123 }
124 }
125 }
126 </script>
127 <!--<script src="//unpkg.com/vue/dist/vue.js"></script>-->
128 <!--<script src="//unpkg.com/element-ui@2.15.5/lib/index.js"></script>-->
129
130 <style scoped>
131 .choiceYear {
132 z-index: 2001;
133 position: absolute;
134 right: 0;
135 border-radius: 6px;
136 padding: 10px;
137 }
138 .overview-information {
139 z-index: 2001;
140 position: absolute;
141 height: 30px;
142 width: 100%;
143 text-align: center;
144 line-height: 1.8;
145 color: white;
146 margin-top: -35px;
147 font-size: 14px;
148 }
149 </style>

后台

 1 controller
2 /**
3 * 单个关联方
4 */
5 @ApiOperation(value="获取关联方交易对手名称" ,notes="作者:lgw")
6 @GetMapping("/getCounterpartyAccountNames")
7 @Log(title = "获取关联方交易对手名称", businessType = BusinessType.LIST)
8 public AjaxResult getCounterpartyAccountNames(BankFlowWaterAnalysis bankFlowWaterAnalysis) {
9 return AjaxResult.success(bankFlowWaterAnalysisService.getCounterpartyAccountNames(bankFlowWaterAnalysis));
10 }
11
12 service
13 /**
14 * 获取关联方交易对手名称
15 * @param bankFlowWaterAnalysis
16 * @return
17 */
18 public List<Map<String, String>> getCounterpartyAccountNames(BankFlowWaterAnalysis bankFlowWaterAnalysis) {
19 List<Map<String, String>> result = new ArrayList<>();
20 if (bankFlowWaterAnalysis.getCompanyId() !=null){
21 List<BankFlowWaterAnalysis> counterpartyAccountNames = bankFlowWaterAnalysisDao.getCounterpartyAccountNames(bankFlowWaterAnalysis);
22 for (int i = 0; i <counterpartyAccountNames.size() ; i++) {
23 Map<String, String> mapCounterpartyAccountName = new HashMap<>();
24 mapCounterpartyAccountName.put("label", String.valueOf(counterpartyAccountNames.get(i).getCounterpartyAccountName()));
25 mapCounterpartyAccountName.put("value", String.valueOf(counterpartyAccountNames.get(i).getCounterpartyAccountName()));
26 result.add(mapCounterpartyAccountName);
27 }
28 }
29 return result;
30 }

柱状图详情可查看vue柱状图

vue柱状图链接

https://www.cnblogs.com/lemperor/p/15119127.html

vue动态页签的更多相关文章

  1. [转] JQuery UI Tabs 动态添加页签,并跳转到新页签

    [From] https://blog.csdn.net/zhangfeng2124/article/details/76672403 需求: 1.tabs默认只有一个页签,但是需要点击某按钮,动态添 ...

  2. 移动端 vue + mintUI 实现头部页签切换,按需加载~

    记录~记录~~有时候,我们会遇到一个页面有两个页签切换需求,但是为了避免同时加载两个页面,我们要做到的就是当前进入的是那个页面,就先加载哪一个页面,并且也不会造成浏览器地址的变化.一开始我使用的方法是 ...

  3. 实现Vue的多页签组件

    在之前的博客中  关于vue的多页面标签功能,对于嵌套router-view缓存的最终无奈解决方法  有写过vue的多页签功能的解决方案 可以看到我当时那个多页签的组件还是比较简单 的,只有打开跟关闭 ...

  4. easyui-tabs 页签绑定click事件,动态加载jqgrid

    .前台代码 <%-- builed by manage.aspx.cmt [ver:] at // :: --%> <%@ Page Language="C#" ...

  5. 基于微前端qiankun的多页签缓存方案实践

    作者:vivo 互联网前端团队- Tang Xiao 本文梳理了基于阿里开源微前端框架qiankun,实现多页签及子应用缓存的方案,同时还类比了多个不同方案之间的区别及优劣势,为使用微前端进行多页签开 ...

  6. WPF如何实现一个漂亮的页签导航UI

    最近看到一个比较漂亮的UI主界面,该UI是用左边的页签进行导航,比较有特色,就想着尝试用WPF来实现一下.经过一番尝试,基本上将UI设计图的效果用WPF程序进行了实现.下面介绍一下主要的思路: 1 U ...

  7. JavaScript选项卡/页签/Tab的实现

    选项卡,也称页签,英文用Tab(Module-Tabs)表示.Tab将不同的内容重叠放在一个布局块内,重叠的内容区里每次只有其中一个是可见的. Tab可以在相同的空间里展示更多的信息,它把相似的主题分 ...

  8. Vue动态组件

    前面的话 让多个组件使用同一个挂载点,并动态切换,这就是动态组件.本文将详细介绍Vue动态组件 概述 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,可以实现动 ...

  9. 如何在vue单页应用中使用百度地图

    作为一名开发人员,每次接到开发任务,我们首先应该先分析需求,然后再思考技术方案和解决方案.三思而后行,这是一个好的习惯. 需求:本项目是采用vue组件化开发的单页应用项目,现需要在项目中引入百度的地图 ...

  10. tabpanel如何隐藏页签表头以及基本用法总结

    tabpanel是extjs中一种比较常用的布局容器控件,也比较简单. ///1:相关的插件, var tabScrollerMenu = Ext.create("Ext.ux.TabScr ...

随机推荐

  1. 了解3D世界的黑魔法-纯Java构造一个简单的3D渲染引擎

    简介: 对于非渲染引擎相关工作的开发者来说,可能认为即使构建最简单的3D程序也非常困难,但事实上并非如此,本篇文章将通过简单的200多行的纯 Java代码,去实践正交投影.简单三角形光栅化.z缓冲(深 ...

  2. 官宣|Apache Flink 1.13.0 正式发布,流处理应用更加简单高效!

    简介: Flink 1.13.0 版本让流处理应用的使用像普通应用一样简单和自然,并且让用户可以更好地理解流作业的性能. ​翻译 | 高赟Review | 朱翥.马国维 Flink 1.13 发布了! ...

  3. 基于 EMR OLAP 的开源实时数仓解决方案之 ClickHouse 事务实现

    ​简介:阿里云 EMR OLAP 与 Flink 团队深度合作,支持了 Flink 到 ClickHouse 的 Exactly-Once写入来保证整个实时数仓数据的准确性.本文介绍了基于 EMR O ...

  4. [Go] golang-migrate/migrate 快速使用指南

    1. CLI 用途的安装 [文档] [确保] CLI 工具使用 go 命令安装时,不应该在 go.mod 所在的目录中执行命令,也就是先进入到其它非项目目录内. $ go get -tags 'pos ...

  5. dotnet C# 高性能配置文件读写库 dotnetCampus.Configurations 简介

    在应用程序运行的时,需要根据不同的配置执行不同的内容.有很多根据配置而初始化的功能往往是在应用程序启动的时候需要执行.对于很多类型的应用程序,特别是客户端的应用程序,启动的性能特别重要.也因此,在启动 ...

  6. 基于EPCLYPS的DDS控制器(二)

    关于ZmodAWGController ZmodAWGController 介绍 双击IP核,进入的第一个界面会有Ch1 Gain Static Configuration的选项修改为 "0 ...

  7. 魔方OA 数据字典

    https://gitee.com/mojocube/mc-oa/blob/master/Data/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%84%9A%E6%9C%AC.sql ...

  8. vue-axios设置公共的请求ip

    1.安装axios,网上找方法 2.src->network->request.js并复制: import axios from 'axios' export function reque ...

  9. gorm使用小结

    增 db.Create(user) db.Save(user) 参数只能用**结构体指针****,因为要根据指针写入该条插入的数据, 所以user可以作为该条数据使用. 新增只能用结构体 save方法 ...

  10. HTTP 报文详解

    报文的语法 所有的 HTTP 报文都可以分为两类:请求报文和响应报文.请求报文会向 Web 服务器请求一个动作,响应报文会将请求的结果返回给客户端.请求和响应报文的基本报文结构相同 请求报文的格式: ...