/**
 * @Author: 程亮
 * @Date: 2022-06-20 14:59:21
 * @LastEditTime: 2022-10-18 11:18:05
 * @Description: 
 * @FilePath: /trunk/src4js/pc4mobx/organization/components/resource/ResourceExtend.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';
 
 
 @inject('resourceExtend')
 @inject('resource')
 @observer
 export default class ResourceExtend extends React.Component {
 
   componentDidMount() {
     this.init();
   }
   init = () => {
     const { resourceExtend,resource } = this.props;
     let {hash} = window.location;
     hash = hash.split("?")[0];
     let id = hash.match("[^/]+(?=/$|$)")[0];
     resourceExtend.init();
     resourceExtend.setId(id);
     resourceExtend.getData();
   }
 
   getTabChildren = () => {
     const { resourceExtend } = this.props;
     let { tableInfo, isEditor, tabkey, onRowSelect, selectedRowKeys,detailSelectedKey } = resourceExtend;
     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)=>resourceExtend.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 {
       resourceExtend
     } = this.props, {
       tableInfo,
       selectedRows,
       setSelectedRowKeys,
       selectedRowKeys
     } = resourceExtend;
 
     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 { resourceExtend } = this.props;
     let { form, conditions, isEditor } = resourceExtend;
     const { isFormInit } = form;
     let group = [];
     let tipPosition = 'bottom';
     window.e9HideFormFieldKeys = [];
     isFormInit && conditions.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}
               labelCol={{ span: `${field.labelcol}` }}
               wrapperCol={{ span: `${field.fieldcol}` }}>
               <WeaSwitch ecId={`${this && this.props && this.props.ecId || ''}_WeaSwitch@d4vaqk@${j}`} fieldConfig={field} form={form} />
             </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;
   }
 
   tableEditChange = (data) => {
     const { resourceExtend } = this.props;
     let { detailSelectedKey = '0', tableInfo } = resourceExtend;
     tableInfo = toJS(tableInfo);
     let d = cloneDeep(tableInfo);
     d[Number(detailSelectedKey)].tabinfo.datas = data;
     resourceExtend.updateTableInfo(d);
   }
 
   getRightMenu = () => {
     const { resourceExtend } = this.props;
     const { isEditor, buttons } = resourceExtend;
     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();
             }          
           }
           ]
         }
       }
     } catch (e) { }
     return arr;
   }
 
   getTopButtons = () => {
     const { resourceExtend } = this.props;
     const { isEditor, buttons } = resourceExtend;
     const save = <Button ecId={`${this && this.props && this.props.ecId || ''}_Button@pkes6y`} type="primary" onClick={this.saveEditCard} >{i18n.button.save()}</Button>;
     const btns = [];
     btns.push(save);
     return btns;
   }
 
   
 
   saveEditCard = () => {
     const { resourceExtend } = this.props;
     resourceExtend.save();
   }
 

 
   changeData(key) {
     const {
       resourceExtend
     } = this.props;
     resourceExtend.changeData(key);
 }
 
   render() {
     const { resourceExtend } = this.props;
     const { loading, tabkey, tabInfo,topTab,selectedKey,date,detailSelectedKey } = resourceExtend;

    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}
               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 => {
                         resourceExtend.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>
     }
   }
 }
 
 