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 ...
随机推荐
- 成本节省 50%,9人团队使用函数计算开发 wolai 在线文档应用
简介: 通过使用函数计算,wolai 的前端工程师们就可以把从前到后的一整套开发流程负责起来,我们的研发迭代速度非常快. 作者| 马锐拉(wolai.com 创始人) 我们的日常工作场景几乎离 ...
- 基于 EventBridge 构建 SaaS 应用集成方案
简介:事件源是事件驱动的基石,如何获取更多事件源也是 EventBridge 一直在探索和尝试的方向.针对市场上其他云厂商和垂直领域的 Saas 服务,EventBridge 发布了 HTTP So ...
- 重回铁王座!时隔5年!Quill 2.0 终于发布啦🎉
你好,我是 Kagol. 2024年4月17日,Quill 2.0 正式发布 最后一个 1.0 版本 1.3.7 发布于 2019年9月9日,时隔4年零7个月. 富文本编辑器拥有非常丰富的使用场景,我 ...
- dotnet core 3.1 将 UWP 控件嵌入到 WPF 应用 收到 UIA 消息主线程卡住
本文记录一个问题,此问题是在 .NET Core 3.1 的 WPF 应用里面,嵌入 UWP 控件之后,在收到 UIA 的消息时,可能让主线程卡住.暂时此问题还不知道具体的复现步骤,此问题预计和 WP ...
- WPF 将 StaticResource 和 ResourceDictionary 放在一起的魔幻行为
本文将记录一些在 WPF 里面,使用 StaticResource 将 ResourceDictionary 玩坏的做法.大家可以放心的是,这些玩法基本只有高级玩家或逗比开发者才会使用到 后加入的资源 ...
- 读 MAUI 源代码 理解可绑定对象和可绑定属性的存储机制
和 UWP 与 WPF 不同的是在 MAUI 里面,使用可绑定对象 BindableObject 替换了依赖对象的概念,我阅读了 MAUI 的源代码发现其实只是命名变更了,里面的机制和设计思想都是差不 ...
- dotnet 在 UOS 国产系统上安装 dotnet sdk 的方法
本文告诉大家如何在 UOS 国产系统上安装 dotnet sdk 的方法 使用的 UOS 是 UOS 20 x64 版本,这个系统版本是基于 debian 10 的,可以使用 debian 10 的方 ...
- 使用 NestJS 和 qrcode.js 创建 QR 码生成器 API
前言 QR码(Quick Response Code)是一种二维码,于1994年开发.它能快速存储和识别数据,包含黑白方块图案,常用于扫描获取信息.QR码具有高容错性和快速读取的优点,广泛应用于广告. ...
- C++ Grammar Focus
一.结构体 1.基础模板 struct Node { <变量类型1> 变量名1; <变量类型2> 变量名2; ... } <定义变量名1>,<定义变量名2&g ...
- 大模型_2:Prompt Engineering
目录: 1.提示工程简介 2.如何写好提示词 2.1 描述清晰 2.2 角色扮演 2.3 提供示例 2.4 复杂任务分解 2.5 使用格式符区分语义 2.6 情感和物质激励 2.7 使用英语 2.8 ...