1.oninput 事件在用户输入时触发;

<template>
<div class="test_box">
<p>hell,你好</p>
<p>encodeURI编码后转码的路由参数内容----<span style="color: red">({{routerParmas}})</span></p>
<div class="table_box">
<el-table :data="sheetTableData" border style="width: 100%" :summary-method="getSummaries" show-summary>
<el-table-column prop="years" label="年度" align='center' sortable>
<template slot-scope="scope">
<el-input class="txt_ct" v-model="scope.row.years" placeholder="请输入" disabled></el-input>
</template>
</el-table-column>
<el-table-column prop="firstSeason" label="第一季度统计" align='center'>
<template slot-scope="scope">
<el-input class="txt_ct" v-model="scope.row.firstSeason" placeholder="请输入" oninput="value=value.replace(/[^\d\.]/g,'').replace(/^(\d*(\.\d{0,4})?).*/,'$1')" :disabled="isEgdit" v-on:input="changeValue"></el-input>
</template>
</el-table-column>
<el-table-column prop="secondSeason" label="第二季度统计" align='center'>
<template slot-scope="scope">
<el-input class="txt_ct" v-model="scope.row.secondSeason" placeholder="请输入" oninput="value=value.replace(/[^\d\.]/g,'').replace(/^(\d*(\.\d{0,4})?).*/,'$1')" :disabled="isEgdit" v-on:input="changeValue"></el-input>
</template>
</el-table-column>
<el-table-column prop="thirdSeason" label="第三季度统计" align='center'>
<template slot-scope="scope">
<el-input class="txt_ct" v-model="scope.row.thirdSeason" placeholder="请输入" oninput="value=value.replace(/[^\d\.]/g,'').replace(/^(\d*(\.\d{0,4})?).*/,'$1')" :disabled="isEgdit" v-on:input="changeValue"></el-input>
</template>
</el-table-column>
<el-table-column prop="fourthSeason" label="第四季度统计" align='center'>
<template slot-scope="scope">
<el-input class="txt_ct" v-model="scope.row.fourthSeason" placeholder="请输入" oninput="value=value.replace(/[^\d\.]/g,'').replace(/^(\d*(\.\d{0,4})?).*/,'$1')" :disabled="isEgdit" v-on:input="changeValue"></el-input>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" align='center'>
<template slot-scope="scope">
<el-button type="primary" size="small" @click='addData' icon="el-icon-plus" circle></el-button>
<el-button v-if="scope.$index == sheetTableData.length-1 || scope.$index == 0" @click.native.prevent="deleteData(scope.$index,sheetTableData)" type="danger" size="small" icon="el-icon-delete" circle></el-button>
</template>
</el-table-column>
<!-- 暂无数据 -->
<div slot="empty" v-if="!sheetTableData.length" style="padding:20px;">
<div style="margin-top: 10px">暂无数据
<span>,请 <el-button type="text" @click="dialogVisible = true">新增</el-button></span>
</div>
</div>
</el-table>
<!-- 弹窗 -->
<el-dialog title="请选择起始年份/截止年份" :visible.sync="dialogVisible">
<div style="display: flex;align-items: center;justify-content: center;">
<div class="block">
<el-date-picker v-model="startYear" type="year" placeholder="起始年份" value-format="yyyy">
</el-date-picker>
</div>
<div class="block">
<p style="padding:10px;">至</p>
</div>
<div class="block">
<el-date-picker v-model="endYear" type="year" placeholder="截止年份" value-format="yyyy">
</el-date-picker>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="sureAddData">确 定</el-button>
</span>
</el-dialog>
</div>
</div>
</template>
<script>
export default {
data() {
return {
isEgdit: false,//是否可编辑
sheetTableData: [],//数据
startYear: '',//起始年份
endYear: '',//截止年份
dialogVisible: false,//弹窗是否显示
routerParmas: decodeURI(decodeURI(this.$route.query.goodName)), //路由编码参数解码
};
},
methods: {
//新增数据
addData() {
let item = {
"id": null,
"years": Number(this.sheetTableData[this.sheetTableData.length - 1].years) + 1,
"firstSeason": null,
"secondSeason": null,
"thirdSeason": null,
"fourthSeason": null
}
this.sheetTableData.push(item)
},
//确认依据起始年份/截止年份 添加数据
sureAddData() {
let yearDiff = Number(this.endYear - this.startYear)
//console.log(yearDiff, 'yearDiff', this.endYear, 'timeEnd', this.startYear, 'timeStart')
if (yearDiff > 0) {
for (let i = 0; i <= yearDiff; i++) {
this.sheetTableData.push({
"id": null,
"years": Number(this.startYear) + Number(i),
"firstSeason": null,
"secondSeason": null,
"thirdSeason": null,
"fourthSeason": null,
})
}
} else {
this.$eleMessage('截止年份应大于起始年份', 'error', 500)
}
this.dialogVisible = false;
},
//删除
deleteData(index, list) {
list.splice(index, 1);
},
//合计---Element ui自带合计功能还是蛮好用的 (前提是dom中的prop属性必须要有)
getSummaries(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] += '';
} else {
sums[index] = '';
}
});
return sums;
},
changeValue(){
//1、oninput事件在value改变时触发,实时的即每增加或删除一个字符就会触发,然而通过js改变value时,却不会触发。
//2、onchange 事件在内容改变(两次内容有可能还是相等的)且失去焦点时触发。
console.log('输入时候可以做些什么事情')
}
} } </script>
<style scoped> </style>

vue+element ui项目总结点(二)table合计栏目,按照起始年份--截止年份 插入数据并向后追加数据以最后一条年份+1的更多相关文章

  1. vue+element ui项目总结点(一)select、Cascader级联选择器、encodeURI、decodeURI转码解码、mockjs用法、路由懒加载三种方式

    不多说上代码: <template> <div class="hello"> <h1>{{ msg }}</h1> <p> ...

  2. vue+element ui项目总结点(六)table编辑当前行、删除当前行、新增、合计操作

    具体属性方法参考官方网站:http://element-cn.eleme.io/#/zh-CN/component/installation <template> <div clas ...

  3. vue+element ui项目总结点(三)富文本编辑器 vue-wangeditor

    1.参考 https://www.npmjs.com/package/vue-wangeditor 使用该富文本编辑器 <template> <div class="egi ...

  4. vue+element ui项目总结点(四)零散细节概念巩固如vue父组件调用子组件的方法、拷贝数据、数组置空问题 等

    vue config下面的index.js配置host: '0.0.0.0',共享ip (假设你的电脑启动了这个服务我电脑一样可以启动)-------------------------------- ...

  5. vue+element ui项目总结点(五)Carousel 走马灯组件、Collapse 折叠面板、Tree 树形控件

    <template> <div class="ele_test_box"> <!-- 常用效果 Popover 弹出框组件 具体属性查看官方文档--& ...

  6. Vue + Element UI项目初始化

    1.安装相关组件 1.1安装Node 检查本地是否安装node node -v 如果没有安装,从Node官网下载 1.2安装npm npm -v 如果没有安装:使用该指令安装: npm install ...

  7. Vue+element ui table 导出到excel

    需求: Vue+element UI table下的根据搜索条件导出当前所有数据 参考: https://blog.csdn.net/u010427666/article/details/792081 ...

  8. Vue+Element UI 实现视频上传

    一.前言 项目中需要提供一个视频介绍,使用户能够快速.方便的了解如何使用产品以及注意事项. 前台使用Vue+Element UI中的el-upload组件实现视频上传及进度条展示,后台提供视频上传AP ...

  9. vue + element ui 表格自定义表头,提供线上demo

    前言:工作中用到 vue+element ui 的前端框架,需要使用自定义表头,需要使用 re.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9710826.h ...

随机推荐

  1. 【旧文章搬运】从XP到Win7看Windows对象管理的变化(概述)

    原文发表于百度空间,2010-08-01========================================================================== 今天花了一 ...

  2. Lecture0 -- Introduction&&Linear Regression with One Variable

    Introduction What is machine learning? Tom Mitchell provides a more modern definition: "A compu ...

  3. <正则吃饺子> :关于前端往后端传递布尔值参数的问题

    问题是在一个群里看到的,通过自己查找和实验,参考网上的博文,将问题列出来.以帮助后来者和共同交流学习.   博文地址:http://blog.sina.com.cn/s/blog_13c30757a0 ...

  4. const_cast标准转换运算符

    #include <iostream> using namespace std; class A { public: A() { a=; } public: int a; }; void ...

  5. C语言--递归问题

    1,一个经典的例子,理解递归过程的展开 #include<stdio.h> void func(int i){ ) func(i/); printf("%d",i) } ...

  6. LWDB

    题意: 给一棵 $n$ 个节点的树,维护两种操作: 1.将距离 $x$ $distance \leq d$ 的点染成 $c$ 2.询问 $x$ 的颜色. 解法: 首先将染色可以转换为每个时间对应一个颜 ...

  7. c/c++时间相关

    本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时.时间的获取.时间的计算和显示格式等方面进行了阐述.本文还通过大量的实例向你展示了time.h头文件中声明的 ...

  8. Flutter实战视频-移动电商-07.Dio基础_POST请求的使用

    07.Dio基础_POST请求的使用 越界问题解决 容器越界的问题,越界是因为键盘弹起的问题.如果键盘不弹起是不会越界 我们加一个滚动组件就可以解决. 这是技术胖视频中出现的越界的截图效果 这是我自己 ...

  9. 2、webpack基础配置

    我们需要安装webpack 还需要安装webpack cli 这两个都是我们的开发依赖 这里我们一般会加一个-D表示上线的时候不需要他们两个包 安装我们的webpack 先初始化一下,记住我们的安装依 ...

  10. 别用visual editor了,用WindowBuilder

    以前利用 Eclipse Visual Editor 项目构建 GUI,现在用WindowBuilder吧. 官网说: The Visual Editor project has been archi ...