import React, {Fragment, PureComponent} from 'react';
import {
    DeleteOutlined,
    EditOutlined,
    PlusOutlined,
    SearchOutlined,
    RedoOutlined,
    DownOutlined, 
	ExclamationCircleFilled,
	UpOutlined,
} from '@ant-design/icons';
import {connect, history} from '@umijs/max';
import {Button, Card, Divider, Dropdown, message, Modal, Popconfirm, Space, Switch, Tag,Row,Col} from 'antd';
import StandardTable from '@/components/StandardTable';

import { MyIcon } from "@/components/Icon"
import style from "@/global.less";
import StaffSheetCreateForm from './form/StaffSheetCreateForm'; //新增表单
import StaffSheetUpdateForm from './form/StaffSheetUpdateForm'; //修改表单
import StaffSheetViewForm from './form/StaffSheetViewForm'; //查看表单
import StaffSheetRenderSimpleForm from './form/StaffSheetRenderSimpleForm'; //简单查询表单
import StaffSheetRenderAdvancedForm from './form/StaffSheetRenderAdvancedForm'; //高级查询表单
import styles from './StaffSheetList.less';
import datadictionary from "@/utils/dataDictionary";
import {formatDate} from "@/utils/formatUtils";
import { formatDictText, checkButtonAuthority } from "@/utils/globalCommon";

const { confirm } = Modal;

//预约类型
const sex_type = datadictionary.sex
const user_status = datadictionary.user_status
const sys_user_post = datadictionary.sys_user_post
            
const mockData = {
	list: [
		{
			gx: "--",
			gslx: "排班",
			ks: "中医科",
			lc: "11",
			kssj: "08:00",
			jssj: "18:00",
			cxsc: "8",
			sjly: ""
		},
		{
			gx: "--",
			gslx: "考勤",
			ks: "中医科",
			lc: "11",
			kssj: "07:00",
			jssj: "20:00",
			cxsc: "11",
			sjly: ""
		},
		{
			gx: "照顾A",
			gslx: "照顾",
			ks: "中医科",
			lc: "11",
			kssj: "09:00",
			jssj: "10:00",
			cxsc: "1",
			sjly: "人工上传"
		},
		{
			gx: "照顾B",
			gslx: "照顾",
			ks: "中医科",
			lc: "11",
			kssj: "10:00",
			jssj: "11:00",
			cxsc: "1",
			sjly: "人工上传"
		},
		{
			gx: "照顾C",
			gslx: "照顾",
			ks: "中医科",
			lc: "11",
			kssj: "11:00",
			jssj: "13:00",
			cxsc: "2",
			sjly: "人工上传"
		},
		{
			gx: "接病人D",
			gslx: "接送",
			ks: "急诊",
			lc: "1",
			kssj: "14:00",
			jssj: "16:00",
			cxsc: "2",
			sjly: "his"
		},
		{
			gx: "照顾A",
			gslx: "照顾",
			ks: "心脏内科",
			lc: "9",
			kssj: "16:00",
			jssj: "18:00",
			cxsc: "2",
			sjly: "his"
		},
		{
			gx: "送病人B",
			gslx: "接送",
			ks: "急诊",
			lc: "1",
			kssj: "18:00",
			jssj: "20:00",
			cxsc: "2",
			sjly: "his"
		},
		{
			gx: "照顾C",
			gslx: "照顾",
			ks: "中医科",
			lc: "11",
			kssj: "20:00",
			jssj: "21:00",
			cxsc: "1",
			sjly: "系统采集"
		},
	],
	pagination: {},
}
@connect(({ staffsheet, loading }) => ({
    staffsheet,
    loading: loading.models.staffsheet,
}))

class StaffSheetList extends PureComponent {
    state = {
        modalVisible: false,
        updateModalVisible: false,
        viewModalVisible: false,
        expandForm: false,
        selectedRows: [],
        formValues: {},
        updateFormValues: {},
        viewFormValues: {},
		toggleExpand: false,
    }

    columns = [ 
        {
            title: '工序',
            dataIndex: 'gx',
            key: 'gx',
            width: 80,
            fixed: 'left',
        }, {
            title: '工时类型',
            dataIndex: 'gslx',
            key: 'gslx',
            width: 100,
            fixed: 'left',
        },{
            title: '科室',
            dataIndex: 'ks',
            key: 'ks',
            width: 80,
        }, {
            title: '楼层',
            dataIndex: 'lc',
            key: 'lc',
            width: 80,
        },{
            title: '开始时间',
            dataIndex: 'kssj',
            key: 'kssj',
            width: 100,
        }, {
            title: '结束时间',
            dataIndex: 'jssj',
            key: 'jssj',
            width: 100,
        }, {
            title: '持续时长(小时)',
            dataIndex: 'cxsc',
            key: 'cxsc',
            width: 100,
        },
        {
            title: <div className={styles.timeGraphic}>
				<span>6</span>
				<span>7</span>
				<span>8</span>
				<span>9</span>
				<span>10</span>
				<span>11</span>
				<span>12</span>
				<span>13</span>
				<span>14</span>
				<span>15</span>
				<span>16</span>
				<span>17</span>
				<span>18</span>
				<span>19</span>
				<span>20</span>
				<span>21</span>
				<span>22</span>
				<span>23</span>
				<span>0</span>
				<span>1</span>
				<span>2</span>
				<span>3</span>
				<span>4</span>
				<span>5</span>
			</div>,
            dataIndex: 'tj',
            key: 'tj',
			width: 750,
			render: (text, record,index) => {
				console.log(record,77777)
				if(index == 0) {
					return (
					    <Fragment>
					        <div className={styles.pbsjStyle}></div>
							<div className={styles.pbsjStyle} style={{marginLeft: 73}}></div>
					    </Fragment>
					)
				} else if(index == 1) {
					return (
					    <Fragment>
					        <div className={styles.kqsjStyle}></div>
							<div className={styles.kqsjStyle} style={{marginLeft: 36,width: 232}}></div>
					    </Fragment>
					)
				} else if(index == 2) {
					return (
					    <Fragment>
					        <div className={styles.xzStyle}></div>
							<div className={styles.zjgsStyle}></div>
					    </Fragment>
					)
				} else if(index == 3) {
					return (
					    <Fragment>
							<div className={styles.zjgsStyle} style={{marginLeft: 118}}></div>
					    </Fragment>
					)
				} else if(index == 4) {
					return (
					    <Fragment>
							<div className={styles.zjgsStyle} style={{marginLeft: 148, width: 60}}></div>
					    </Fragment>
					)
				} else if(index == 5) {
					return (
					    <Fragment>
							<div className={styles.zjgsStyle} style={{marginLeft: 246, width: 60}}></div>
					    </Fragment>
					)
				} else if(index == 6) {
					return (
					    <Fragment>
							<div className={styles.zjgsStyle} style={{marginLeft: 310, width: 60}}></div>
					    </Fragment>
					)
				} else if(index == 7) {
					return (
					    <Fragment>
							<div className={styles.zjgsStyle} style={{marginLeft: 370, width: 60}}></div>
					    </Fragment>
					)
				} else if(index == 8) {
					return (
					    <Fragment>
							<div className={styles.zjgsStyle} style={{marginLeft: 430, width: 30}}></div>
					    </Fragment>
					)
				}
			}
        },
		{
		    title: '数据来源',
		    dataIndex: 'sjly',
		    key: 'sjly',
		    width: 100,
		},
        {
            title: '操作',
            fixed: 'right',
            width: 100,
            render: (text, record) => {
                return (
                    <Fragment>
                        <a className={style.iconstyle}> 修改 </a>
                    </Fragment>
                )
            }
        },
    ]
	
    componentDidMount() {
        // const { dispatch, staffsheet: { params } } = this.props

        // dispatch({
        //     type: 'timesheet/query_page_for_prouser',
        // })

        // this.setState({
        //     expandForm: params?.expandForm || false,
        // })
    }

    handleStandardTableChange = (pagination, sorter) => {
        const { dispatch } = this.props
        const { formValues } = this.state

        const params = {
            currentPage: pagination.current,
            pageSize: pagination.pageSize,
            ...formValues
        }

        sorter.field && (params.sorter = `${sorter.field}_${sorter.order}`)

        // dispatch({
        //     type: 'prouser/query_page_for_prouser',
        //     payload: params
        // })
    }

    handleFormReset = () => {
        const { dispatch } = this.props
        this.setState({
            formValues: {}
        })

        // dispatch({
        //     type: 'prouser/query_page_for_prouser',
        //     payload: {
        //         resetFlag: true
        //     }
        // })
    }

    toggleForm = () => {
        const { expandForm } = this.state
        this.setState({
            expandForm: !expandForm
        })
    }

    handleSelectRows = rows => {
        this.setState({
            selectedRows: rows
        })
    }

    handleSearch = values => {
        const { dispatch } = this.props
        const { expandForm } = this.state

        this.setState({
            formValues: values
        })

        // dispatch({
        //     type: 'prouser/query_page_for_prouser',
        //     payload: {
        //         ...values,
        //         resetFlag: true,
        //         expandForm
        //     }
        // })
    }

    handleModalVisible = flag => {
        this.setState({
            modalVisible: !!flag
        })
    }

    handleUpdateModalVisible = (flag, record) => {
        this.setState({
            updateModalVisible: !!flag,
            updateFormValues: record || {}
        })
    }

    handleViewModalVisible = (flag, record) => {
        this.setState({
            viewModalVisible: !!flag,
            viewFormValues: record || {}
        })
    }

    handleAdd = fields => {
        const { dispatch } = this.props

        dispatch({
            type: 'prouser/insert_for_prouser',
            payload: {
                user_id: fields.user_id,
                user_name: fields.user_name,
                user_name_cn: fields.user_name_cn,
                user_name_en: fields.user_name_en,
                password: fields.password,
                email: fields.email,
                phone: fields.phone,
                landline: fields.landline,
                sex: fields.sex,
                avatar: fields.avatar,
                sign: fields.sign,
                tags: fields.tags,
                id_card: fields.id_card,
                birthday: fields.birthday,
                job_status: fields.job_status,
                hiredate: fields.hiredate,
                departure_time: fields.departure_time,
                user_type: fields.user_type,
                emp_no: fields.emp_no,
                access_card_no: fields.access_card_no,
                country: fields.country,
                province: fields.province,
                city: fields.city,
                address: fields.address,
                work_addr: fields.work_addr,
                floor: fields.floor,
                inprovince: fields.inprovince,
                // dept_code: fields.dept_code,
                // dept_name: fields.dept_name,
                inner_dept_code: fields.inner_dept_code,
                org_code: fields.org_code,
                org_name: fields.org_name,
                inner_org_code: fields.inner_org_code,
                posts: fields.posts,
                wx_openid: fields.wx_openid,
                wx_mpopenid: fields.wx_mpopenid,
                wx_miniopenid: fields.wx_miniopenid,
                wx_unionid: fields.wx_unionid,
                mobile_imei: fields.mobile_imei,
                device_num: fields.device_num,
                al_taobao: fields.al_taobao,
                al_alipay: fields.al_alipay,
                al_dingding: fields.al_dingding,
                is_system_user: fields.is_system_user,
                mgr_type: fields.mgr_type,
                pwd_security_level: fields.pwd_security_level,
                pwd_update_date: fields.pwd_update_date,
                last_login_ip: fields.last_login_ip,
                last_login_date: fields.last_login_date,
                freeze_date: fields.freeze_date,
                freeze_cause: fields.freeze_cause,
                zindex: fields.zindex,
                wx_msg: fields.wx_msg,
                email_msg: fields.email_msg,
                system_msg: fields.system_msg,
                remarks: fields.remarks,
                status: fields.status,
                creator: fields.creator,
                create_date: fields.create_date,
                updater: fields.updater,
                update_date: fields.update_date
            },
            callback: (res) => {
                if(res.success == true) {
                    message.success('添加成功')
                    this.handleModalVisible()
                }
            }
        })
    }

    handleDeleteRecord = record => {
        const { dispatch } = this.props

        dispatch({
            type: 'prouser/delete_by_primarykey_for_prouser',
            payload: {
                recordid: record.user_id
            },
            callback: res => {
                if (res.success) {
                    message.success('删除成功')

                    this.setState({
                        selectedRows: []
                    })
                }
            }
        })
    }

    handleUpdate = fields => {
        const { dispatch } = this.props

        dispatch({
            type: 'prouser/update_for_prouser',
            payload: {
                user_id: fields.user_id,
                user_name: fields.user_name,
                user_name_cn: fields.user_name_cn,
                user_name_en: fields.user_name_en,
                password: fields.password,
                email: fields.email,
                phone: fields.phone,
                landline: fields.landline,
                sex: fields.sex,
                avatar: fields.avatar,
                sign: fields.sign,
                tags: fields.tags,
                id_card: fields.id_card,
                birthday: fields.birthday,
                job_status: fields.job_status,
                hiredate: fields.hiredate,
                departure_time: fields.departure_time,
                user_type: fields.user_type,
                emp_no: fields.emp_no,
                access_card_no: fields.access_card_no,
                country: fields.country,
                province: fields.province,
                city: fields.city,
                address: fields.address,
                work_addr: fields.work_addr,
                floor: fields.floor,
                inprovince: fields.inprovince,
                // dept_code: fields.dept_code,
                // dept_name: fields.dept_name,
                inner_dept_code: fields.inner_dept_code,
                org_code: fields.org_code,
                org_name: fields.org_name,
                inner_org_code: fields.inner_org_code,
                posts: fields.posts,
                wx_openid: fields.wx_openid,
                wx_mpopenid: fields.wx_mpopenid,
                wx_miniopenid: fields.wx_miniopenid,
                wx_unionid: fields.wx_unionid,
                mobile_imei: fields.mobile_imei,
                device_num: fields.device_num,
                al_taobao: fields.al_taobao,
                al_alipay: fields.al_alipay,
                al_dingding: fields.al_dingding,
                is_system_user: fields.is_system_user,
                mgr_type: fields.mgr_type,
                pwd_security_level: fields.pwd_security_level,
                pwd_update_date: fields.pwd_update_date,
                last_login_ip: fields.last_login_ip,
                last_login_date: fields.last_login_date,
                freeze_date: fields.freeze_date,
                freeze_cause: fields.freeze_cause,
                zindex: fields.zindex,
                wx_msg: fields.wx_msg,
                email_msg: fields.email_msg,
                system_msg: fields.system_msg,
                remarks: fields.remarks,
                status: fields.status,
                creator: fields.creator,
                create_date: fields.create_date,
                updater: fields.updater,
                update_date: fields.update_date
            },
            callback: (res) => {
                if(res.success === true) {
                    message.success('修改成功')
                    this.handleUpdateModalVisible()
                }
            }
        })
    }

    // 修改用户状态
    handleUpdateUserStatus = (fields, status, msg) => {
        const { dispatch } = this.props

        confirm({
            title: `确定要 ${ msg } 当前用户的吗?`,
            icon: <ExclamationCircleFilled />,
            onOk() {
                dispatch({
                    type: 'prouser/update_for_prouser',
                    payload: {
                        user_id: fields.user_id,
                        status: status,
                    },
                    callback: (res) => {
                        if(res.success === true) {
                            message.success('修改成功')
                        }
                    }
                })
            }
        })
    }

    // 修改用户密码
    handleUpdateUserPassword = fields => {
        const { dispatch } = this.props
        confirm({
            title: '确定要重置当前用户的密码吗?',
            icon: <ExclamationCircleFilled />,
            onOk() {
                dispatch({
                    type: 'prouser/resetpwd_for_prouser',
                    payload: {
                        user_id: fields.user_id
                    },
                    callback: (res) => {
                        if(res.success === true) {
                            message.success('重置成功')
                        }
                    }
                })
            }
        })
    }

    renderSimpleForm() {
        const { staffsheet: { params } } = this.props
        const parentMethods = {
            handleSearch: this.handleSearch,
            handleFormReset: this.handleFormReset,
            toggleForm: this.toggleForm,
            params
        }

        return <StaffSheetRenderSimpleForm {...parentMethods} />
    }

    renderAdvancedForm() {
        const { dispatch, prouser: { selectDeptTree, selectOrganTree, params } } = this.props
        const parentMethods = {
            handleSearch: this.handleSearch,
            handleFormReset: this.handleFormReset,
            toggleForm: this.toggleForm,
            dispatch: dispatch,
            selectDeptTree: selectDeptTree,
            selectOrganTree: selectOrganTree,
            params
        }

        return <StaffSheetRenderAdvancedForm {...parentMethods} />
    }

    renderForm() {
        const { expandForm } = this.state
        return expandForm ? this.renderAdvancedForm() : this.renderSimpleForm()
    }
	
	handleCollapse = () => {
	    const { toggleExpand } = this.state
	    this.setState({
	        toggleExpand: !toggleExpand
	    })
	}

    render() {
        const {
            staffsheet: {
                data,
                selectDeptTree,
                selectOrganTree
            },
            loading,
            dispatch
        } = this.props
        const {
            selectedRows,
            modalVisible,
            updateModalVisible,
            viewModalVisible,
            updateFormValues,
            viewFormValues,
			toggleExpand
        } = this.state

        const parentMethods = {
            handleAdd: this.handleAdd,
            handleModalVisible: this.handleModalVisible,
            dispatch: dispatch,
            loading,
            selectDeptTree: selectDeptTree,
            selectOrganTree: selectOrganTree
        }

        const updateMethods = {
            handleUpdateModalVisible: this.handleUpdateModalVisible,
            handleUpdate: this.handleUpdate,
            dispatch: dispatch,
            loading,
            selectDeptTree: selectDeptTree,
            selectOrganTree: selectOrganTree
        }

        const viewMethods = {
            handleViewModalVisible: this.handleViewModalVisible
        }

        return (
            <>
                <Card bordered={false}>
                    <div className={styles.proUsertableList}>
                        <div className={styles.proUsertableListForm}>{this.renderForm()}</div>
						<Divider style={{ borderColor: '#cccccc',margin:0 }}>
							<div className={styles.summaryButton} onClick={() => this.handleCollapse()}>
								{toggleExpand ? <><UpOutlined /> 收起</> : <><DownOutlined /> 展开</>}
							</div>
						</Divider>
						<div style={{display: toggleExpand?'block':'none'}}>
							<div className={styles.summaryContent}>
								<div style={{paddingLeft: 0}}>
									<div className={styles.titleLabel}>名称</div>
									<div className={styles.titleVal}>张三</div>
								</div>
								<div>
									<div className={styles.titleLabel}>考勤类型</div>
									<div className={styles.titleVal}>排班制</div>
								</div>
								<div>
									<div className={styles.titleLabel}>出勤人效(件/小时)</div>
									<div className={styles.titleVal}>10000</div>
								</div>
								<div>
									<div className={styles.titleLabel}>作业人效(件/小时)</div>
									<div className={styles.titleVal}>12000</div>
								</div>
								<div>
									<div className={styles.titleLabel}>人效出勤工时(小时)</div>
									<div className={styles.titleVal}>8</div>
								</div>
								<div>
									<div className={styles.titleLabel}>出勤工时占比(%)</div>
									<div className={styles.titleVal}>100%</div>
								</div>
							</div>
							<div className={styles.summaryContent}>
								<div style={{paddingLeft: 0}}>
									<div className={styles.titleLabel}>工号</div>
									<div className={styles.titleVal}>123456</div>
								</div>
								<div>
									<div className={styles.titleLabel}>在职时长(小时)</div>
									<div className={styles.titleVal}>1200</div>
								</div>
								<div>
									<div className={styles.titleLabel}>外出就餐时长(小时)</div>
									<div className={styles.titleVal}>0</div>
								</div>
								<div>
									<div className={styles.titleLabel}>直接作业工时(小时)</div>
									<div className={styles.titleVal}>7</div>
								</div>
								<div>
									<div className={styles.titleLabel}>间接作业工时(小时)</div>
									<div className={styles.titleVal}>1</div>
								</div>
								<div>
									<div className={styles.titleLabel}>闲置工时(小时)</div>
									<div className={styles.titleVal}>0</div>
								</div>
							</div>
							<div className={styles.summaryContent}>
								<div style={{paddingLeft: 0}}>
									<div className={styles.titleLabel}>工作性质</div>
									<div className={styles.titleVal}>外包</div>
								</div>
								<div>
									<div className={styles.titleLabel}>总件数(件)</div>
									<div className={styles.titleVal}>9000</div>
								</div>
								<div>
									<div className={styles.titleLabel}>离岗休息时长(小时)</div>
									<div className={styles.titleVal}>0</div>
								</div>
								<div>
									<div className={styles.titleLabel}>直接作业工时占比(%)</div>
									<div className={styles.titleVal}>84</div>
								</div>
								<div>
									<div className={styles.titleLabel}>闲置工时占比(%)</div>
									<div className={styles.titleVal}>0</div>
								</div>
								<div>
									<div className={styles.titleLabel}>闲置工时(小时)</div>
									<div className={styles.titleVal}>0</div>
								</div>
							</div>
						</div>
						<div className={styles.operateContent}>
							<div>
								<Button type='primary' style={{marginRight: 50}}>
								    同步
								</Button>
								<Button type='primary' danger>
								    考勤排查
								</Button>
							</div>
							<div>
								<div style={{display: 'inline-block'}}>
									<div className={styles.workClass} style={{background: '#faf07a'}}></div>
									 排班时间
								</div>
								<div style={{display: 'inline-block'}}>
									<div className={styles.workClass} style={{background: '#9cc5fc'}}></div>
									 考勤时间
								</div>
								<div style={{display: 'inline-block'}}>
									<div className={styles.workClass} style={{background: '#aa02cf'}}></div>
									 修改状态
								</div>
								<div style={{display: 'inline-block'}}>
									<div className={styles.workClass} style={{background: '#454545'}}></div>
									 闲置工时
								</div>
								<div style={{display: 'inline-block'}}>
									<div className={styles.workClass} style={{background: '#8ddd15'}}></div>
									 直接工时
								</div>
								<div style={{display: 'inline-block'}}>
									<div className={styles.workClass} style={{background: '#cecece'}}></div>
									 离岗休息
								</div>
							</div>
						</div>
						<div style={{display: 'flex',justifyContent: "space-between"}}>
							<div>共20项</div>
						</div>
                        <StandardTable
                            rowKey={'user_id'}
                            selectedRows={selectedRows}
                            loading={loading}
                            data={mockData}
                            columns={this.columns}
                            onSelectRow={this.handleSelectRows}
                            onChange={this.handleStandardTableChange}
                            scroll={{ x: 1000,y: 600 }}
							showTotal={(total, range) => total}
                        />
                    </div>
                </Card>

                {modalVisible && <StaffSheetCreateForm {...parerntMethods} modalVisible={modalVisible} />}

                {updateFormValues && Object.keys(updateFormValues).length ? (
                    <StaffSheetUpdateForm
                        {...updateMethods}
                        updateModalVisible={updateModalVisible}
                        values={updateFormValues}
                    />
                ) : null}

                {viewFormValues && Object.keys(viewFormValues).length ? (
                    <StaffSheetViewForm
                        {...viewMethods}
                        viewModalVisible={viewModalVisible}
                        values={viewFormValues}
                    />
                ) : null}
            </>
        )
    }
}

export default StaffSheetList
