vue easy ui DataGrid CheckBox 全选事件

75 篇文章 2 订阅

 

 


            <DataGrid
                        ref="dg"
                        :data="locations"
                        :pagination="true"
                        :total="total"
                        :pageSize="pageSize"
                        :pagePosition="pagePosition"
                        :clickToEdit="false"
                        :dblclickToEdit="true"
                        selectionMode="row"
                        editMode="row"
                        @editEnd="onEditEnd($event)"
                        @cellClick="onCellClick($event)"
                        style="margin-top:5px"
                    >
                        <GridColumn field="ck" :width="50" align="center">
                            <template slot="header" slot-scope="scope">
                                <CheckBox v-model="allChecked" @checkedChange="onAllCheckedChange($event)"></CheckBox>
                            </template>
                            <template slot="body" slot-scope="scope">
                                <CheckBox v-model="scope.row.selected"
                                          @checkedChange="onCheckedChange($event)"></CheckBox>
                            </template>
                        </GridColumn>
                        <GridColumn field="zone" title="Zone" :editable="true"/>
                        <GridColumn field="latitude" title="Latitude" :editable="true">
                            <template slot="edit" slot-scope="scope">
                                <NumberBox v-model="scope.row.latitude" :precision="7"></NumberBox>
                            </template>
                        </GridColumn>
                        <GridColumn field="longitude" title="Longitude" :editable="true">
                            <template slot="edit" slot-scope="scope">
                                <NumberBox v-model="scope.row.longitude" :precision="7"></NumberBox>
                            </template>
                        </GridColumn>
                        <GridColumn field="version" title="Version" :editable="false">
                            <template slot="edit" slot-scope="scope">
                                <NumberBox v-model="scope.row.version" :precision="0"></NumberBox>
                            </template>
                        </GridColumn>
                    </DataGrid>
                    <Panel :bodyStyle="{padding:'20px'}">
                        <template slot="footer">
                            <Pagination :total="total" :pageSize="pageSize" :pageNumber="pageNumber"
                                        @pageChange="onPageChange($event)"></Pagination>
                        </template>
                    </Panel>


computed: {
            checkedRows() {
                return this.locations.filter(row => row.selected);
            }
        },

methods: {

           onAllCheckedChange(checked) {
                if (this.rowClicked) {
                    return;
                }
                this.locations = this.locations.map(row => {
                    return Object.assign({}, row, {
                        selected: checked
                    });
                });
            },
            onCheckedChange(checked) {
                this.allChecked = this.checkedRows.length === this.locations.length;
                this.rowClicked = true;
                this.$nextTick(() => (this.rowClicked = false));
            },
}
const _T = 100;
 
var mixin = {
	data () {
		return {
			cellFocused:false
		}
	},
  methods: {
		beginEditingRow(gr, item, fend) {
			var col = item.column;
			if(col && col.editable == false) {
				gr.endEdit();
				return;
			}
			this.editing = true;
			var vm = this;
			var elem;
			if(item.element) {
				elem = $(item.element);
			} else {
				var rindex = gr.getRowIndex(item.row);
				elem = $($(gr.$el).find('tr.datagrid-row')[rindex]);
			}
			setTimeout(function() {
				elem.find('.datagrid-editable input').on('blur', function() {
					vm.cellFocused = false;
					setTimeout(function(){
						if(!vm.cellFocused)
							if(fend == undefined || fend() == true) {
								vm.validateRow(item.row, function(){
									gr.endEdit();
								});
							}
					}, _T);
				}).focus(function(){
					vm.cellFocused = true;
				});
			}, _T);
		},
		appendNewRow(gr, obj, editing) {
			var list = gr.data;
			list.push(obj);
			if(editing) {
				setTimeout(function() {
					gr.beginEdit(gr.rows[list.length - 1]);
				}, 200);
			}
		},
		deleteSelectedRows(gr) {
			if(this.hasSelectedRows(gr)) {
				this.$confirm('是否删除选中行?').then(() => {
					var list = gr.data;
					for(var i = list.length - 1;i >= 0; --i) {
						if(list[i].selected) {
							list.splice(i, 1);
						}
					}
				}).catch(() => {});
			}
		},
		hasSelectedRows(gr) {
			var list = gr.data;
			for(var i = 0;i < list.length; ++i) {
				if(list[i].selected) {
					return true
				}
			}
		}
  }
}
 
export default mixin

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值