113 lines
4.2 KiB
JavaScript
113 lines
4.2 KiB
JavaScript
/*
|
||
* @Author: lusx
|
||
* @Date: 2020-03-02 14:51:29
|
||
* @Last Modified by: lusx
|
||
* @Last Modified time: 2020-05-20 11:14:53
|
||
*/
|
||
import React from 'react';
|
||
import { Popover } from 'antd';
|
||
import {WeaTools} from 'ecCom';
|
||
import classnames from 'classnames';
|
||
import Content from "./content";
|
||
import { toJS } from "mobx";
|
||
import _ from "lodash";
|
||
import "./prjSelect.less";
|
||
import { WeaLocaleProvider } from 'ecCom';
|
||
const getLabel = WeaLocaleProvider.getLabel;
|
||
const { ls } = WeaTools;
|
||
export default class PrjSelect extends React.Component {
|
||
static defaultProps = {
|
||
prefixCls: 'prj-select'
|
||
};
|
||
constructor() {
|
||
super();
|
||
this.state = { open: false, copyOPtions: {}, options: {} };
|
||
this.total = 0;
|
||
}
|
||
componentDidMount() {
|
||
const { value } = this.props;
|
||
const prjdatas = toJS(ls.getJSONObj("prj_portal_datas"));
|
||
const total = toJS(ls.getJSONObj("prj_portal_count"));
|
||
this.total = total;
|
||
const options = { menus: prjdatas, total: this.total };
|
||
this.setState({ options });
|
||
}
|
||
|
||
render() {
|
||
const { prefixCls, onChange, value, title } = this.props;
|
||
let selected = title;
|
||
const prjdatas = toJS(ls.getJSONObj("prj_portal_datas"));
|
||
prjdatas.forEach(data=>{
|
||
data.datas.length > 0 && data.datas.forEach(d=>{
|
||
if(d.id == value) {
|
||
selected = d.name;
|
||
return false;
|
||
}
|
||
})
|
||
})
|
||
const { open, options } = this.state;
|
||
const iconClass = classnames({
|
||
'icon-jiantou-xia': !open,
|
||
'icon-jiantou-shang': open
|
||
});
|
||
return (
|
||
<Popover ecId={`${this && this.props && this.props.ecId || ''}_Popover@lxz0xu`}
|
||
content={<Content ecId={`${this && this.props && this.props.ecId || ''}_Content@w8w0pp`} options={options} _inputChangeFun={this._inputChangeFun} _clearFun={this._clearFun} onChange={onChange} handleVisibleChange={this.handleVisibleChange} selectedKey={value} />}
|
||
trigger="click"
|
||
visible={open}
|
||
arrowPointAtCenter
|
||
onVisibleChange={this.handleVisibleChange}
|
||
>
|
||
<div className={`${prefixCls}-wraps`}>
|
||
<div className={`${prefixCls}-dropdown-select ${prefixCls}-project_select`}>
|
||
<span className={`${prefixCls}-dropdown-select-label`}>{getLabel('101','项目')}:</span>
|
||
<div className={`${prefixCls}-dropdown-select-selected-item`}>
|
||
<div className={`${prefixCls}-dropdown-select-selected-item-menu`} onClick={this.clickFun}>
|
||
<a>{selected}</a>
|
||
</div>
|
||
<span className={`${iconClass} icon iconfont`}></span>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</Popover>
|
||
);
|
||
}
|
||
handleVisibleChange = (visible) => {
|
||
this.setState({ open: visible });
|
||
}
|
||
clickFun = (ev) => {
|
||
const oEvent = ev || event;
|
||
oEvent.preventDefault();
|
||
this.setState(pre => ({ open: !pre.open }));
|
||
}
|
||
_inputChangeFun = (ev) => {
|
||
const oEvent = ev || event;
|
||
oEvent.preventDefault();
|
||
const prjdatas = toJS(ls.getJSONObj("prj_portal_datas"));
|
||
const options = { menus: prjdatas, total: this.total };
|
||
if (oEvent.target.value.length > 0) {
|
||
let searchListDatas = { menus: [] };
|
||
options.menus.map((m, index) => {
|
||
let ff = m.datas.filter(i =>
|
||
i.name.includes(oEvent.target.value)
|
||
)
|
||
searchListDatas.menus[index] = { showname: m.showname, datas: ff, key: m.key };
|
||
}
|
||
)
|
||
searchListDatas = Object.assign({ ...searchListDatas }, { total: this.total });
|
||
this.setState({ options: searchListDatas })
|
||
} else {
|
||
this.setState({ options });
|
||
}
|
||
|
||
}
|
||
|
||
_clearFun = () => {
|
||
const prjdatas = toJS(ls.getJSONObj("prj_portal_datas"));
|
||
const options = { menus: prjdatas, total: this.total };
|
||
this.setState({ options });
|
||
}
|
||
|
||
}
|