react 使用antd的多选功能做一个单选与全选效果

一个小而简单的单选全选功能,其实官网已经给出效果了,不过是我多做了些复合用法

import {Modal, Row,Form,Input,Icon,Select} from ‘antd‘;
const FormItem = Form.Item;
const createForm = Form.create;
const { Meta } = Card;
const CheckboxGroup = Checkbox.Group;

export default React.createClass({
    mixins: [LoadingMixin, NotificationMixin, RequestMixin],
    propTypes: {
        onManualClose:React.PropTypes.func,
        onOk: React.PropTypes.func,
        onCancel: React.PropTypes.func,
        title: React.PropTypes.string,
        item: React.PropTypes.object
    },
    getInitialState() {
        return {
            item: this.props.item  && this.props.item || {},
            data: [],
            userObj: {},
            deleteList:[],
            indeterminate: false,
            checkAll: false,
            checkedList:[]
        };
    },
    componentWillMount() {
        this.fetch();
    },
    fetch() {
        console.log("11111111111-------获取父组件传来的用户id-----》",this.props.item.frameid);
        this.post({ //加载图片列表
            url: "Api/historyPush/module/frame/key/dac509bd90a82719a3569291e12c24a6f1af4bac",
            param: {
                frameid: this.props.item.frameid
                // frameid:‘32frame_tj1‘
            },
            noLoading: true
        }).then(result=> {
            console.log("result-----------------",result);
            this.setState({data: result.result || []});
        });

    },
    hideModal() {
        this.props.onCancel && this.props.onCancel();
    },
    onChange(checkedList){
        console.log(‘checked = ‘, checkedList);
        this.setState({
            checkedList:checkedList,
            indeterminate: !!checkedList.length && (checkedList.length < this.state.data.length),
            checkAll: checkedList.length === this.state.data.length,
        });

    },
    onCheckAllChange(e){
        console.log("全选1",e.target.checked);
        console.log("全选2",this.state.data);
        let dataList =[]
        for(var i=0;i<this.state.data.length;i++){
            dataList[i]=this.state.data[i].imgid
        }
        console.log("dataList--------",dataList)
        this.setState({
            checkedList: e.target.checked ? dataList : [],
            indeterminate: false,
            checkAll: e.target.checked,
        });
    },
    handleClose(record) {
        var that = this;
        if (this.state.checkedList==null||this.state.checkedList.length==0) {
            that.error("请选择要删除的图片");
            return false;
        };
        console.log("删除的图片",this.props.item.frameid,this.state.checkedList);
        this.post({
            url: "Api/clearCache/module/frame/key/dac509bd90a82719a3569291e12c24a6f1af4bac",
            param: {
                frameid:this.props.item.frameid,
                imglist: this.state.checkedList
            },
            noLoading: true
        }).then(result=> {
            if (result.result) {
                that.success("操作成功");
                that.fetch();
            }
        });
    },
    render() {
        let isMainObj = {
            1 : "是",
            0 : "否"
        }
        let columns = [
            { title: ‘用户‘, dataIndex: ‘userid‘, key: ‘userid‘, width: ‘20%‘,
                render: (text, record) => {
                    return (
                        this.state.userObj && this.state.userObj[text]
                    )
                }
            },
            { title: ‘主管理‘, dataIndex: ‘is_main‘, key: ‘is_main‘, width: ‘20%‘,
                render: (text, record) => {
                    return (
                        isMainObj[record[‘is_main‘]]
                    )
                }
            },
            { title: ‘设备备注‘, dataIndex: ‘remark‘, key: ‘remark‘, width: ‘30%‘ },
            { title: ‘绑定时间‘, dataIndex: ‘create_time‘, key: ‘create_time‘, width: ‘25%‘ }
        ];
        return (
            <Modal title={this.props.title && this.props.title || ‘新增‘} visible={true}  width="700px" onCancel={this.hideModal}  maskClosable={false} footer={
                <Button key="back" type="ghost" size="large" onClick={this.hideModal}>关&nbsp;&nbsp;闭</Button>
            }>
                <div className={‘boxTitle‘}>
                    <Checkbox
                        indeterminate={this.state.indeterminate}
                        onChange={this.onCheckAllChange}
                        checked={this.state.checkAll}
                        // checked={this.state.checked}
                        // disabled={this.state.disabled}
                        // onChange={this.onChange} //this,record
                    >
                        {‘全选‘}
                    </Checkbox>
                    <Popconfirm placement="topRight" title={"您确定要删除这些数据吗?"} onConfirm={this.handleClose} okText="确定" cancelText="取消">
                        <Button type="primary">批量删除</Button>
                    </Popconfirm>
                </div>
                <div className={‘cardBox‘}>
                    <Checkbox.Group style={{ width: ‘100%‘ }} onChange={this.onChange}  value={this.state.checkedList}>
                    <Card title="">
                        {
                            this.state.data && this.state.data.map((item,index) => {
                                return (
                                <Card.Grid className={‘gridStyle‘} key={item.imgid}>
                                    <Checkbox
                                        className={‘CheckboxStyle‘}
                                        value={item.imgid}
                                    >
                                    </Checkbox>
                                    <img  src={item.small_url} ></img>
                                </Card.Grid>
                                )
                            })
                        }
                    </Card>
                    </Checkbox.Group>,
                </div>
            </Modal>
        )
    }
});

效果图

原文地址:https://www.cnblogs.com/zhixi/p/10212513.html

时间: 2024-09-29 21:54:46

react 使用antd的多选功能做一个单选与全选效果的相关文章

python之路-利用索引切片功能做一个简易的两个未知数的加法计算器,代码如下:

python之路-利用索引切片功能做一个简易的两个未知数的加法计算器,代码如下: #content = input('请输入内容:'),如用户输入:5 +9或 5 + 9 等,然后进行分割再进行计算. content = input('>>>').strip() #content 等于所输入的内容,strip:删除字符串左右两边的空格. index = content.find('+') ''' content内容中的两边的空格都删除了,但中间还有,现在我们只需要定位已知内容是加法,两边

css3的实现的checkbox复选框和radio单选框绚丽美化效果

css3的实现的checkbox复选框和radio单选框绚丽美化效果:在css3之前要美化单选框和复选框无非是使用图片进行相关的替换操作,并且还有很大的局限性.由于css3的出现,一切好像变的都变的轻松起来,并且效果非常的绚丽,这是使用css2无法做到的,下面就分享一段能够实现此功能的代码实例,需要的朋友可以做一下参考.代码如下: <!DOCTYPE html><html> <head> <meta charset=" utf-8"> &

单选,全选操作js相关技术

jsp上编写全选框,单选框 全选框 1 <td class="TableHeaderCell" style="width: 30px;"> 2 <input id="checkedAll" type="checkbox"> 3 </td> 单选框 <input id="fappChecked" name="checkedFapp" type=&q

Jquery 利用单个复选款(checkbox)实现全选、反选

1 <script type="text/javascript"> 2 $(function(){ 3 //全选 4 $("#CheckedAll").click(function(){ 5 $('[name=items]:checkbox').attr("checked", this.checked ); 6 }); 7 $('[name=items]:checkbox').click(function(){ 8 //定义一个临时变

Django框架---jquery实现checkbox的单选和全选

jquery实现checkbox的单选和全选 一.思路 全选:判断“全选”checkbox的状态,如果选中则把tbody下所有的checkbox选中,反之 单选:主要是判断有没有全选,如果不是选中状态就把全选的checkbox状态设置为false,如果是选中就拿所有选中状态下“name=id”的chekbox和所有‘’name=id"的数量去比较,如果一样表示全选了,设置全选的chekbox为选中状态,反之. 二.代码 1.css部分,直接搬运的django项目里面的. <table bo

使用xenserver克隆功能做一个备份数据库服务器

测试环境 需求:将目前的一个主数据库服务器(简称A机,WindowsServer2008下安装的mysql数据库,数据量4000多万),系统是使用xenserver创建的VM,要做一个实时备份.因为数据量太大.初始数据导入导出耗时太长,要10几20几个小时.所以使用以下思路. 将A机关机,使用xenserver的克隆功能,copy vm .... => 选择:Fast clone ,瞬间完成克隆,克隆机简称B机.之后将A.B机启动. 一.在B机上做以下操作: 1.更改IP地址.主机名. 2.编辑

php处理表单中的复选框问题以及js实现全选

做的一个项目中遇到了全选和取消全选的问题,这是一个很普遍的功能,,虽然我们经常用到,但是真正做起来却发现行不通,在网上找了些,大部分都是ie,但是谷歌内核浏览器不能正常实现,所以经过小小的调整,今天就把调试好的代码发上来供大家参考使用. 首先要记得引用jquery框架,这样写起代码来相对容易点,尤其突出在选择器上. 1 <html> 2 <head> 3 <script src="./libs/js/jquery.min.js"></scrip

一个js编写全选、弹出对话框、ajax-json的案例

js功能有:全选.弹出对话框.使用json传输ajax数据:不想在写多余的文字了,直接上代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%>

ExtJs实现复选框组Checkboxgroup单勾选及复选框组对多个复选框组跨控件全选

ExtJs实现复选框Checkboxgroup单勾选及跨控件全选 由于项目的需要,我们要将EXT的控件Checkboxgroup复选框组改造成但勾选,并且实现一个复选框组控制其他多个复选框组的全选,以下是关于如何实现的代码片段. 1.创建CheckboxGroup对象 1,新建空的EOS6.5的工程,新建com.towngas.tcis. gridlock构件包: 2,在com.towngas.tcis.gridlock构件包的"展现"节点下的"页面资源"节点中创建