表格

说明:


1、return里面放table的数据(:data=”tableData”),el-table-column里面的prop属性即为表格里面要添加的数据、label为表头的内容<br />
2、summary-method、show-summary属性为合计功能,不需要删除即可<br />
3、el-table-column type属性为selection 是复选框,不需要删除即可<br />
4、el-table上的 height="400" 属性控制表格的高度(超出高度出现滚动条)<br />
5、如不需要边框去掉最外层div style里面的border: 1px solid #ccc;即可<br />
6、el-table-column 上的width属性控制表格列的宽度,不设置width列表自动平分<br />
7、el-table-column 上的label为每一列的表头<br />
8、el-table-column 上的prop为每一列的数据,如果需要自定义内容(按钮)就把prop删掉<br />
9、内容居中 在el-table-column上设置align="center"<br />
10、最外层 div 上的margin、padding控制div的外边距和内边距,四个值分别为上、右、下、左<br />
11、事件说明:

        @row-contextmenu="rowContextmenu" -- 鼠标右键点击会触发该事件
        
        @cell-dblclick="cellClick" -- 单元格被双击击时会触发该事件
        
        @row-click="rowClick" -- 行被点击时会触发该事件
        
12、删除时或者执行某些事件的时候,需要获取当前行的数据信息,在方法中传入此行的信息即可(例如:在自定义模板中有删除按钮,在调用删除的方法的时候,传入 scope.row 即可)<br />
13、表格编辑:

        A、页面加载完毕在table数据中添加 edit -- true/false 属性用来控制编辑框的显示隐藏(如果是接口调用数据,在返回数据后执行此操作)
           this.tableData.map(v => {this.$set(v, 'edit', false)})
        
        B、row-contextmenu 事件里面改变edit的值来显示编辑框(edit = true)
        
        C、keepTable 事件里面改变edit的值来隐藏编辑框 (edit = false 还可以在方法里执行自定义保存方法)
        
        D、在需要编辑的项上添加自定义模板,删除 el-table-column 上的 prop绑定值属性(输入框input的绑定值需要改成修改项的值,展示span的值也要修改成修改项的值)
        <template slot-scope="scope">
           <div style="width: 100%;text-align: center;" v-if="scope.row.edit">
               <el-input v-model="scope.row.name" placeholder="请输入内容" size="mini"></el-input>
           </div>
           <div style="width: 100%;text-align: center;" v-else>
               <span>{{scope.row.name}}</span>
           </div>
        </template>
        
14、this.menuIsShow = false / true 控制右键按钮的显示隐藏<br />
15、弹出层编辑传值问题 -- 点击编辑按钮按照示例把当前行数据赋值给弹出层里面的form表单即可(注意字段名的对应)<br />
16、表格最后的按钮,如果要根据条件进行显示隐藏某一个按钮,在按钮上添加 v-if 判断即可<br />
        
        例:(定义变量show show = true 显示删除按钮)
        
        <el-button type="danger" size="mini" v-if="show">删除</el-button>

<div style="position: relative;border: 1px solid #ccc;padding:0px 0px 54px 0px;margin:0px 0px 0px 0px;">
   <el-table
     :data="tableData"
     tooltip-effect="dark"
     :summary-method="getSummaries"
     show-summary
     height="400"
     style="width: 100%"
     @selection-change="handleSelectionChange">
     <el-table-column
       type="selection"
       width="45">
     </el-table-column>
     <el-table-column
       width="50"
       align="center"
       type="index"
       label="序号">
     </el-table-column>
     <el-table-column
       align="center"
       prop="number"
       label="项目编号"
       show-overflow-tooltip
       width="120">
     </el-table-column>
     <el-table-column
       align="center"
       label="项目名称"
       show-overflow-tooltip
       width="200">
       <template slot-scope="scope">
         <div style="width: 100%;text-align: center;" v-if="scope.row.edit">
           <el-input v-model="scope.row.name" placeholder="请输入内容" size="mini"></el-input>
         </div>
         <div style="width: 100%;text-align: center;" v-else>
           <span>{{scope.row.name}}</span>
         </div>
       </template>
     </el-table-column>
     <el-table-column
       align="center"
       prop="object"
       label="项目类型"
       show-overflow-tooltip>
     </el-table-column>
     <el-table-column
       align="center"
       prop="state"
       label="项目状态"
       show-overflow-tooltip>
     </el-table-column>
     <el-table-column
       align="center"
       prop="initiator"
       label="立项人"
       show-overflow-tooltip>
     </el-table-column>
     <el-table-column
       align="center"
       width="100"
       prop="trackingPeople"
       label="项目跟踪人"
       show-overflow-tooltip>
     </el-table-column>
     <el-table-column
       align="center"
       prop="company"
       label="建设单位"
       show-overflow-tooltip>
     </el-table-column>
     <el-table-column
       align="center"
       prop="beginTime"
       label="开始时间"
       show-overflow-tooltip>
     </el-table-column>
     <el-table-column
       prop="endTime"
       align="center"
       label="结束时间"
       show-overflow-tooltip>
     </el-table-column>
     <el-table-column
       align="center"
       prop="engineerinCost"
       label="工程造价"
       show-overflow-tooltip>
     </el-table-column>
     <el-table-column
       align="center"
       width="300"
       label="操作">
       <template slot-scope="scope">
         <div style="text-align: center;">
           <el-row>
             <el-col :span="8">
               <el-button v-if="scope.row.edit" type="primary" size="mini" @click="keepTable(scope.row)">保存修改</el-button>
               <el-button v-else type="primary" size="mini" @click="scope.row.edit=!scope.row.edit">自身编辑</el-button>
             </el-col>
             <el-col :span="8"><el-button type="primary" size="mini" @click="popUpEdit(scope.row)">弹框编辑</el-button></el-col>
             <el-col :span="8"><el-button type="danger" size="mini">删除</el-button></el-col>
           </el-row>
         </div>
       </template>
     </el-table-column>
   </el-table>
   <div style="position: absolute;bottom:0;left: 10px;">
     <paging :size-change="handleSizeChange"
             :current-change="handleCurrentChange"
             :page-sizes="pageSizes"
             :page-num="pageNum"
             :total-num="totalNum">
     </paging>
   </div>
   <!--编辑弹出层 begin-->
   <el-dialog title="表格编辑" :visible.sync="dialogTableEdit" top="60px">
     <div class="overflowY" style="height: 330px;padding-right: 15px;">
       <el-form :inline="true" :model="ruleForm" label-position="right" class="demo-form-inline conponentForm" label-width="90px" size="small">
         <el-row>
         <el-col :span="24">
           <el-form-item label="项目名称 : " prop="itmeName">
             <el-input size="small" v-model="ruleForm.name" placeholder="请输入项目名称"></el-input>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="24">
           <el-form-item label="开始时间 : " prop="itmeName">
             <el-date-picker
               v-model="ruleForm.beginTime"
               type="date"
               placeholder="选择日期">
             </el-date-picker>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="24">
           <el-form-item label="结束时间 : " prop="itmeName">
             <el-date-picker
               v-model="ruleForm.endTime"
               type="date"
               placeholder="选择日期">
             </el-date-picker>
           </el-form-item>
         </el-col>
       </el-row>
       </el-form>
     </div>
     <div slot="footer" class="dialog-footer" style="text-align: right;">
       <el-button @click="dialogTableEdit = false">取 消</el-button>
       <el-button type="primary" @click="btnClickFun">确 定</el-button>
     </div>
   </el-dialog>
 </div>
import paging from '@/components/demoAssembly/paging'
import BaseCard from '@/components/BaseCard/BaseCard'
export default {
  data() {
    return {
      ruleForm: {},
      rowIndex: 0,
      dialogTableEdit: false,
      pageSizes: [10, 20, 30, 40],
      pageNum: 10,
      totalNum: 50,
      handleSizeChange() {
        alert('pageSize 改变时触发')
      },
      handleCurrentChange() {
        alert('currentPage 改变时会触发')
      },
      tableData: [
        {
          number: '12345678',
          date: '2016-05-03',
          name: '项目名称1',
          object: '项目类型1',
          state: '开始',
          initiator: '张三',
          trackingPeople: '李四',
          company: 'xxx单位',
          beginTime: '2016/01/02',
          endTime: '2016/02/03',
          engineerinCost: '250000'
        },
        {
          number: '12345678',
          date: '2016-05-03',
          name: '项目名称1',
          object: '项目类型1',
          state: '开始',
          initiator: '张三',
          trackingPeople: '李四',
          company: 'xxx单位',
          beginTime: '2016/01/02',
          endTime: '2016/02/03',
          engineerinCost: '250000'
        },
        {
          number: '12345678',
          date: '2016-05-03',
          name: '项目名称1',
          object: '项目类型1',
          state: '开始',
          initiator: '张三',
          trackingPeople: '李四',
          company: 'xxx单位',
          beginTime: '2016/01/02',
          endTime: '2016/02/03',
          engineerinCost: '250000'
        },
        {
          number: '12345678',
          date: '2016-05-03',
          name: '项目名称1',
          object: '项目类型1',
          state: '开始',
          initiator: '张三',
          trackingPeople: '李四',
          company: 'xxx单位',
          beginTime: '2016/01/02',
          endTime: '2016/02/03',
          engineerinCost: '250000'
        },
        {
          number: '12345678',
          date: '2016-05-03',
          name: '项目名称1',
          object: '项目类型1',
          state: '开始',
          initiator: '张三',
          trackingPeople: '李四',
          company: 'xxx单位',
          beginTime: '2016/01/02',
          endTime: '2016/02/03',
          engineerinCost: '250000'
        },
        {
          number: '12345678',
          date: '2016-05-03',
          name: '项目名称1',
          object: '项目类型1',
          state: '开始',
          initiator: '张三',
          trackingPeople: '李四',
          company: 'xxx单位',
          beginTime: '2016/01/02',
          endTime: '2016/02/03',
          engineerinCost: '250000'
        },
        {
          number: '12345678',
          date: '2016-05-03',
          name: '项目名称1',
          object: '项目类型1',
          state: '开始',
          initiator: '张三',
          trackingPeople: '李四',
          company: 'xxx单位',
          beginTime: '2016/01/02',
          endTime: '2016/02/03',
          engineerinCost: '250000'
        },
        {
          number: '12345678',
          date: '2016-05-03',
          name: '项目名称1',
          object: '项目类型1',
          state: '开始',
          initiator: '张三',
          trackingPeople: '李四',
          company: 'xxx单位',
          beginTime: '2016/01/02',
          endTime: '2016/02/03',
          engineerinCost: '250000'
        },
        {
          number: '12345678',
          date: '2016-05-03',
          name: '项目名称1',
          object: '项目类型1',
          state: '开始',
          initiator: '张三',
          trackingPeople: '李四',
          company: 'xxx单位',
          beginTime: '2016/01/02',
          endTime: '2016/02/03',
          engineerinCost: '250000'
        }
      ]
    }
  },
  components: {
    paging,
    BaseCard
  },
  mounted() {
    this.tableData.map(v => {
      this.$set(v, 'edit', false)
    })
      },
  methods: {
    handleSelectionChange(val) { // 当选择项发生变化时会触发该事件,val返回选中行
          },
    getSummaries(param) {
      const { columns, data } = param
      const sums = []
      columns.forEach((column, index) => {
        if (index === 1) {
          sums[index] = '合计'
          return
        }
        const values = data.map(item => Number(item[column.property]))
        if (column.property === 'engineerinCost') {
          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
    },
    keepTable(row) { // 点击编辑保存按钮执行的function
      row.edit = false
    },
    popUpEdit(row) { // 点击弹框编辑按钮执行的function
      this.dialogTableEdit = true
      this.ruleForm = row
    },
    btnClickFun() { // 点击弹出层修改确认按钮执行的function
      // 在此方法里面执行调用保存接口完成修改数据保存 然后刷新数据
      this.dialogTableEdit = false
    }
  }
}