/**
 * @Author: 程亮
 * @Date: 2022-05-26 14:07:12
 * @LastEditTime: 2022-07-12 16:25:58
 * @Description:
 * @FilePath: /trunk/src4js/pc4mobx/organization/components/job/JobExtend.js
 */

import { Button, Modal, message, Row, Col, Spin } from 'antd';
import isEmpty from 'lodash/isEmpty'
import cloneDeep from 'lodash/cloneDeep'
import forEach from 'lodash/forEach'
import { WeaAlertPage, WeaTools, WeaTableEdit, WeaSearchGroup, WeaRightMenu, WeaFormItem, WeaTab, WeaTop } from 'ecCom'
import { WeaSwitch } from 'comsMobx';
import { inject, observer } from 'mobx-react';
import * as mobx from 'mobx';
import { i18n } from '../../public/i18n';

const toJS = mobx.toJS;
import '../../style/common.less';
import AttachToNumberField from "../NewNumberField";


@inject('jobExtend')
@inject('job')
@observer
export default class JobExtend extends React.Component {

  componentDidMount() {
    this.init();
  }
  init = () => {
    const { jobExtend, job } = this.props;
    let { hash } = window.location;
    hash = hash.split("?")[0];
    let id = hash.match("[^/]+(?=/$|$)")[0];
    jobExtend.init();
    jobExtend.setId(id);
    jobExtend.getData();
  }

  getTabChildren = () => {
    const { jobExtend } = this.props;
    let { tableInfo, isEditor, tabkey, onRowSelect, selectedRowKeys, detailSelectedKey } = jobExtend;
    let tabChildren = [];
    tableInfo = toJS(tableInfo);
    tableInfo && tableInfo.map((t, i) => {
      if (detailSelectedKey == i) {
        tabChildren.push(
          <WeaTableEdit ecId={`${this && this.props && this.props.ecId || ''}_WeaTableEdit@b813my@${i}`}
            ref={(ref) => jobExtend.setPersonalEditTables(ref)}
            showTitle={isEditor}
            // title={'列表信息'}
            //addFirstRow={isEditor}
            columns={t.tabinfo.columns}
            datas={t.tabinfo.datas}
            onChange={this.tableEditChange}
            selectedRowKeys={toJS(selectedRowKeys)}
            onRowSelect={keys => onRowSelect(keys)}
            onBtnsSelect={key => this.onBtnsSelect(key, i)}
            viewAttr={isEditor ? 2 : 1}
            getRowSelection={isEditor ? (rowSelection) => {
              Object.assign(rowSelection, {
                getCheckboxProps: record => ({
                  disabled: record.viewAttr === 1,    // 配置无法勾选的列
                })
              })
              return rowSelection;
            } : () => null}
          />
        );
      }
    })
    return tabChildren;
  }

  onBtnsSelect = (key, index) => {
    const {
      jobExtend
    } = this.props, {
      tableInfo,
      selectedRows,
      setSelectedRowKeys,
      selectedRowKeys
    } = jobExtend;

    const datas = tableInfo[index].tabinfo.datas;
    if (key === 'copy') {
      tableInfo[index].tabinfo.datas = datas.map((data, i) => {
        if (!selectedRows[index].includes(i)) {
          data.viewAttr = 2;
        }
        return data
      })
    }
    if (key === 'delete') {
      tableInfo[index].tabinfo.datas = datas.map((data, i) => {
        if (selectedRows[index].includes(i)) {
          data.viewAttr = 1;
        }
        return data
      });
      setSelectedRowKeys(selectedRowKeys.filter(row => !selectedRows[index].includes(row)))
    }
  }

  getSearchs = () => {
    const { jobExtend } = this.props;
    let { form, condition, isEditor } = jobExtend;
    const { isFormInit } = form;
    let group = [];
    let tipPosition = 'bottom';
    window.e9HideFormFieldKeys = [];
    isFormInit && condition.forEach((c, i) => {
      let items = [];
      c.items.forEach((field, j) => {
        if (c.hide || (!isEmpty(field.otherParams) && field.otherParams.hide)) {
          window.e9HideFormFieldKeys.push(field.domkey[0]);
        } else {
          items.push({
            com: (<WeaFormItem ecId={`${this && this.props && this.props.ecId || ''}_WeaFormItem@vh6j67@${j}`}
              underline={!isEditor}
              label={`${field.label}`}
              error={form.getError(field)}
              tipPosition={tipPosition}
              className={j === 1 && "minH5"}
              labelCol={{ span: `${field.labelcol}` }}
              wrapperCol={{ span: `${field.fieldcol}` }}>
              <WeaSwitch ecId={`${this && this.props && this.props.ecId || ''}_WeaSwitch@d4vaqk@${j}`} fieldConfig={field} form={form} onChange={this.onChange} />
              {field.domkey[0] == 'job_no' && field.viewAttr != '1' && <AttachToNumberField field={field} form={form} isEdit={true}/>}
            </WeaFormItem>),
            colSpan: 1
          });
        }
      });
      group.push(<WeaSearchGroup ecId={`${this && this.props && this.props.ecId || ''}_WeaSearchGroup@x9hby9@${i}`} className={`${isEditor ? 'hrm-center' : ''}`}
        needTigger={true} hide={c.hide} title={c.title} showGroup={c.defaultshow} items={items} col={2} />)
    });
    return group;
  }

  onChange = (data) => {
    const { jobExtend } = this.props;
    if (data.sequence_id || data.grade_id) {
      jobExtend.updateConditions(data);
    }
  }


  tableEditChange = (data) => {
    const { jobExtend } = this.props;
    let { detailSelectedKey = '0', tableInfo } = jobExtend;
    tableInfo = toJS(tableInfo);
    let d = cloneDeep(tableInfo);
    d[Number(detailSelectedKey)].tabinfo.datas = data;
    jobExtend.updateTableInfo(d);
  }

  getRightMenu = () => {
    const { jobExtend } = this.props;
    const { isEditor, buttons } = jobExtend;
    let arr = [];
    try {
      if (buttons.hasEdit) {
        if (isEditor) {
          arr = [{
            icon: <i className='icon-coms-common' />,
            content: i18n.button.save(),
            key: 'save',
            onClick: key => {
              this.saveEditCard();
            }
          }, {
            icon: <i className='icon-coms-go-back' />,
            content: i18n.button.back(),
            key: 'back',
            onClick: key => {
              this.backCard();
            }
          }]
        } else {
          arr = [{
            icon: <i className='icon-coms-edit' />,
            content: i18n.button.modify(),
            key: 'editCard',
            onClick: key => {
              this.editCard();
            }
          }
          ]
        }
      }
    } catch (e) { }
    return arr;
  }

  getTopButtons = () => {
    const { jobExtend } = this.props;
    const { isEditor, buttons } = jobExtend;
    const save = <Button ecId={`${this && this.props && this.props.ecId || ''}_Button@pkes6y`} type="primary" onClick={this.saveEditCard} >{i18n.button.save()}</Button>;
    const back = <Button ecId={`${this && this.props && this.props.ecId || ''}_Button@pl1fw8`} type="primary" onClick={this.backCard} >{i18n.button.back()}</Button>;
    const edit = <Button ecId={`${this && this.props && this.props.ecId || ''}_Button@vkeda5`} type="primary" onClick={this.editCard} >{i18n.button.modify()}</Button>;
    const btns = [];
    try {
      if (isEditor) {
        if (buttons.hasSave) {
          btns.push(save);
          btns.push(back);
        }
      } else {
        if (buttons.hasEdit) {
          btns.push(edit);
        }
      }
    } catch (e) { }
    return btns;
  }

  editCard = () => {
    const { jobExtend } = this.props;
    jobExtend.edit();
  }

  saveEditCard = () => {
    const { jobExtend } = this.props;
    jobExtend.save();
  }

  backCard = () => {
    this.init();
  }

  changeData(key) {
    const {
      jobExtend
    } = this.props;
    jobExtend.changeData(key);
  }

  render() {
    const { jobExtend } = this.props;
    const { loading, tabkey, tabInfo, topTab, selectedKey, date, detailSelectedKey, isEditor } = jobExtend;


    try {
      return (
        <div className='hrm-my-cardInfo' style={{ height: '100%', position: 'relative' }}>
          <WeaRightMenu ecId={`${this && this.props && this.props.ecId || ''}_WeaRightMenu@k6oc4u`}
            datas={this.getRightMenu()}
          >
            <WeaTop ecId={`${this && this.props && this.props.ecId || ''}_WeaTop@bj98s7`}
              loading={true}
              title={isEditor ? i18n.label.editJobInfo() : i18n.label.jobsInfo()}
              icon={<i className='icon-coms-hrm' />}
              iconBgcolor='#217346'
              buttons={this.getTopButtons()}
              showDropIcon={true}
              dropMenuDatas={this.getRightMenu()}
            >
              <WeaTab ecId={`${this && this.props && this.props.ecId || ''}_WeaTab@9c3zts`}
                datas={topTab}
                keyParam="viewCondition" //主键
                selectedKey={selectedKey}
                onChange={this.changeData.bind(this)}
              />
              <Spin ecId={`${this && this.props && this.props.ecId || ''}_Spin@4fj4z2`} spinning={loading}>
                {this.getSearchs()}
                {
                  !isEmpty(tabInfo) && <div className='hrm-my-cardInfo_detial_tabs'>
                    <WeaTab ecId={`${this && this.props && this.props.ecId || ''}_WeaTab@vjrq63`}
                      type='card'
                      keyParam='key'
                      datas={toJS(tabInfo)}
                      selectedKey={detailSelectedKey}
                      onChange={v => {
                        jobExtend.updateDetailSelectedKey(v);
                      }}
                    />
                    {this.getTabChildren()}
                  </div>
                }
              </Spin>
            </WeaTop>
          </WeaRightMenu>

        </div>
      )
    } catch (e) {
      return <WeaAlertPage ecId={`${this && this.props && this.props.ecId || ''}_WeaAlertPage@h1wgnu`}>
        <div style={{ color: '#000' }}>{i18n.message.authFailed()}</div>
      </WeaAlertPage>
    }
  }
}

