vue动态页签
效果图

前端
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动态页签的更多相关文章
- [转] JQuery UI Tabs 动态添加页签,并跳转到新页签
[From] https://blog.csdn.net/zhangfeng2124/article/details/76672403 需求: 1.tabs默认只有一个页签,但是需要点击某按钮,动态添 ...
- 移动端 vue + mintUI 实现头部页签切换,按需加载~
记录~记录~~有时候,我们会遇到一个页面有两个页签切换需求,但是为了避免同时加载两个页面,我们要做到的就是当前进入的是那个页面,就先加载哪一个页面,并且也不会造成浏览器地址的变化.一开始我使用的方法是 ...
- 实现Vue的多页签组件
在之前的博客中 关于vue的多页面标签功能,对于嵌套router-view缓存的最终无奈解决方法 有写过vue的多页签功能的解决方案 可以看到我当时那个多页签的组件还是比较简单 的,只有打开跟关闭 ...
- easyui-tabs 页签绑定click事件,动态加载jqgrid
.前台代码 <%-- builed by manage.aspx.cmt [ver:] at // :: --%> <%@ Page Language="C#" ...
- 基于微前端qiankun的多页签缓存方案实践
作者:vivo 互联网前端团队- Tang Xiao 本文梳理了基于阿里开源微前端框架qiankun,实现多页签及子应用缓存的方案,同时还类比了多个不同方案之间的区别及优劣势,为使用微前端进行多页签开 ...
- WPF如何实现一个漂亮的页签导航UI
最近看到一个比较漂亮的UI主界面,该UI是用左边的页签进行导航,比较有特色,就想着尝试用WPF来实现一下.经过一番尝试,基本上将UI设计图的效果用WPF程序进行了实现.下面介绍一下主要的思路: 1 U ...
- JavaScript选项卡/页签/Tab的实现
选项卡,也称页签,英文用Tab(Module-Tabs)表示.Tab将不同的内容重叠放在一个布局块内,重叠的内容区里每次只有其中一个是可见的. Tab可以在相同的空间里展示更多的信息,它把相似的主题分 ...
- Vue动态组件
前面的话 让多个组件使用同一个挂载点,并动态切换,这就是动态组件.本文将详细介绍Vue动态组件 概述 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,可以实现动 ...
- 如何在vue单页应用中使用百度地图
作为一名开发人员,每次接到开发任务,我们首先应该先分析需求,然后再思考技术方案和解决方案.三思而后行,这是一个好的习惯. 需求:本项目是采用vue组件化开发的单页应用项目,现需要在项目中引入百度的地图 ...
- tabpanel如何隐藏页签表头以及基本用法总结
tabpanel是extjs中一种比较常用的布局容器控件,也比较简单. ///1:相关的插件, var tabScrollerMenu = Ext.create("Ext.ux.TabScr ...
随机推荐
- DataWorks搬站方案:Airflow作业迁移至DataWorks
简介: DataWorks提供任务搬站功能,支持将开源调度引擎Oozie.Azkaban.Airflow的任务快速迁移至DataWorks.本文主要介绍如何将开源Airflow工作流调度引擎中的作业迁 ...
- 阿里云实时数仓Hologres年度发布,解读数仓新趋势
简介:阿里云实时数仓Hologres年度发布,解读数仓新趋势. 1月7日,阿里云实时数仓Hologres发布最新版本,在成本.可用性.在线高可用等多方面进行了能力升级,行存吞吐提升100%,列存吞吐 ...
- 【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
简介: 台湾作家林清玄在接受记者采访的时候,如此评价自己 30 多年写作生涯:"第一个十年我才华横溢,'贼光闪现',令周边黯然失色:第二个十年,我终于'宝光现形',不再去抢风头,反而与身边的 ...
- ChaosBlade:从混沌工程实验工具到混沌工程平台
简介: ChaosBlade 是阿里巴巴 2019 年开源的混沌工程项目,已加入到 CNCF Sandbox 中.起初包含面向多环境.多语言的混沌工程实验工具 chaosblade,到现在发展到面向 ...
- dotnet 使用 FormatterServices 的 GetUninitializedObject 方法在丢失 DLL 情况下能否执行
在 dotnet 里面,可以使用 FormatterServices 的 GetUninitializedObject 方法可以实现只创建对象,而不调用对象的构造函数方法.而如果在使用此方法时,存在了 ...
- 基于FPGA的二进制转BCD
BCD码(nary-Coded Decimal)又称二-十进制代码,亦称二进码十进数.是一种二进制的数字编码形式,用二进制编码的十进制代码.这种编码形式利用了四个位元来储存一个十进制的数码. 在数字 ...
- Process-与操作系统中的进程进行交互
1.Process介绍 在Java中,Process类是一个抽象类,它提供了与操作系统中的进程进行交互的方法.当你在Java程序中启动一个新的进程(例如,运行一个外部程序或脚本)时,JVM会创建一个P ...
- 面向教师的OBS直播速成教程
引言 本文是面向教师讲述的如何使用OBS软件进行课程直播的速成教程. 本文配套视频链接如下️ 面向教师的OBS直播教学速成教程_哔哩哔哩_bilibili 环境准备 1. 下载对应本机系统版本的并安装 ...
- Linux中的man page指令
以Linux上的date命令为例,在控制台输入 man date,将会展示如下界面: [vbird@www ~]$ man date DATE(1) User Commands DATE(1) # 请 ...
- HDU 多校 2023 Round #6 题解
HDU 多校 2023 Round #6 题解 \(\text{By DaiRuiChen007}\) A. Count Problem Link 题目大意 求有多少个长度为 \(n\),字符集大小为 ...