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 ...
随机推荐
- 基于阿里云GPU云服务器的AIACC助力UC搜索业务性能提效380%,每年节省数千万成本
简介: 用阿里云GPU计算实例来满足UC极致性价比需求 文丨阿里云神龙计算平台AI加速团队 & UC搜索架构部推理引擎团队 导语:作为国产行列里占有率排名第一的移动浏览器,UC浏览器自身承载着 ...
- [Go] godoc 打开本地文档, windows 同样适用
godoc 提供了在无网环境下 浏览官方文档的便利. 示例: $ go get golang.org/x/tools/cmd/godoc $ godoc -http=localhost:6060 Li ...
- UOS 开启 VisualStudio 远程调试 .NET 应用之旅
本文记录的是在 Windows 系统里面,使用 VisualStudio 2022 远程调试运行在 UOS 里面 dotnet 应用的配置方法 本文写于 2024.03.19 如果你阅读本文的时间距离 ...
- 开源相机管理库Aravis例程学习(四)——multiple-acquisition-signal
目录 简介 例程代码 函数说明 g_main_loop_new g_main_loop_run g_main_loop_quit g_signal_connect arv_stream_set_emi ...
- 提取jks文件证书和私钥
提取jks文件证书和私钥 JKS文件由公钥和密钥构成利用Java Keytool 工具生成的文件,它是由公钥和密钥构成的,公钥就是我们平时说的证书(.cer后缀的文件),私钥就是密钥(.key后缀的文 ...
- windows10安装ruby
下载ruby 下载地址: ruby各版本下载地址 https://rubyinstaller.org/downloads/ 2.3.3版本 https://www.cr173.com/soft/142 ...
- 解决:Failed to get D-Bus connection: Operation not permitted
docker中安装完httpd服务后,使用命令systemctl start httpd.service,发现报错,错误信息:Failed to get D-Bus connection: Opera ...
- keepalived(2)- keepalived安装和配置
目录 1. keepalived安装配置 1.1 keepalived安装环境 1.2 keepalived日志文件 1.3 keepalived配置文件 2. keepalived配置 2.1 ke ...
- leaflet 用自定义pane实现图层顺序调整
在 Leaflet 中,map panes 隐式地将图层组合在一起,而开发者并不知道这一点.这种分组允许 Web 浏览器以比单独处理图层更有效的方式同时处理多个图层. Map panes 使用 z-i ...
- postgresql 创建索引
--查询索引 select * from pg_indexes where tablename='tab1'; --创建索引(查询用到哪几列,就对哪几个字段创建索引) CREATE INDEX ind ...