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 ...
随机推荐
- 基于EasyCV复现ViTDet:单层特征超越FPN
简介: ViTDet其实是恺明团队MAE和ViT-based Mask R-CNN两个工作的延续.MAE提出了ViT的无监督训练方法,而ViT-based Mask R-CNN给出了用ViT作为bac ...
- 企业版Spark Databricks + 企业版Kafka Confluent 联合高效挖掘数据价值
简介:本文介绍了如何使用阿里云的Confluent Cloud和Databricks构建数据流和LakeHouse,并介绍了如何使用Databricks提供的能力来挖掘数据价值,使用Spark ML ...
- [GPT] golang 有那么多系统包 该如何了解和学习
在学习和了解Golang(Go语言)的系统包时,可以遵循以下步骤来逐步熟悉并掌握它们: 1. 官方文档阅读: 首先从官方文档入手,Go的标准库文档非常详尽且易于理解.你可以访问 Go标准库 来查看各个 ...
- WinDbg 设置在加载到某个 DLL 进入断点
本文记录如何在 WinDbg 里,设置在加载到某个 DLL 时,自动进入断点.通过此方式用来定位是哪个业务模块加载了某个 DLL 模块 在 WinDbg 里面,可以附加到现有进程,也可以启动某个进程. ...
- 使用 DISM 安全清理 C 盘 WinSxS 文件夹空间
本文将介绍如何使用系统内置 DISM 工具进行安全清理 C 盘空间,清理 WinSxS 文件夹里面的可回收删除的程序包空间 开始之前,先使用管理员权限打开 CMD 或 PowerShell 命令行窗口 ...
- dotnet 6 HttpClientHandler 和 SocketsHttpHandler 有什么差别
本文来告诉大家在 dotnet 6 的 HttpClientHandler 和 SocketsHttpHandler 两个类型有什么不同 在创建 HttpClient 时,可以在 HttpClient ...
- 2019-3-15-uwp-ScrollViewer-content-out-of-panel-when-set-the-long-width
title author date CreateTime categories uwp ScrollViewer content out of panel when set the long widt ...
- JavaScript字符串String方法介绍及使用示例
实例方法 charAt() charCodeAt() 返回索引位置的字符 'hello'.charAt(0) //h 等价 'hello'.[0] //返回索引位置的字符的Unicode码点 'hel ...
- 如何在 Linux 上部署 RabbitMQ
如何在 Linux 上部署 RabbitMQ 目录 如何在 Linux 上部署 RabbitMQ 安装 Erlang 从预构建的二进制包安装 从源代码编译 Erlang RabbitMQ 的安装 使用 ...
- Docker手工部署GO环境
参考: (最新2020)Golang 使用Dockerfile 打包部署到 docker https://blog.csdn.net/weixin_44042863/article/details/1 ...