zoukankan      html  css  js  c++  java
  • vue+element ui项目总结点(二)table合计栏目,按照起始年份--截止年份 插入数据并向后追加数据以最后一条年份+1

    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=" 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>
  • 相关阅读:
    MySQL 5.6中如何定位DDL被阻塞的问题
    MySQL 5.7中如何定位DDL被阻塞的问题
    MySQL表结构变更,不可不知的Metadata Lock
    mysqlfrm
    升级MySQL5.7,开发不得不注意的坑
    MySQL root密码忘记,原来还有更优雅的解法!
    MySQL 8 新特性之自增主键的持久化
    ip route显示和设定路由
    RHEL7/CentOS7 ip 命令常用用法,代替 ifconfg/route/ifup/ifdown
    网络安全+运维进阶(79)-网络基础-网络基础
  • 原文地址:https://www.cnblogs.com/lhl66/p/10096119.html
Copyright © 2011-2022 走看看