UNPKG

joywok-material-components

Version:

<h1 align="center"> Joywok Material Components </h1>

432 lines (388 loc) 12.9 kB
/** 组件说明:文件信息流分享 files:[], 要分享的文件list selfinfo : {} 转发者信息 */ import React,{ Component }from 'react'; import ReactDOM from 'react-dom'; import { createStore } from 'redux' import { Provider } from 'react-redux' import { connect } from 'dva'; import request from './../utils/request'; import Tip from './../tips/aloneTip' import Reply from './../shareAs/Reply' import Emoji from './../shareAs/Emoji' import Dialog from '@material-ui/core/Dialog'; import DialogTitle from '@material-ui/core/DialogTitle'; import Slide from '@material-ui/core/Slide'; import { Checkbox, Button, TextField} from 'joywok-material-components'; require('./style/Index.css'); // const Transition = React.forwardRef(function Transition(props, ref) { // return <Slide direction="up" ref={ref} {...props} />; // }); class ShareAs extends Component{ constructor(props) { super(props); this.myref = React.createRef(); this.reply = React.createRef(); this.state = { selfinfo: props.selfinfo, owner: "zhangsan", val: "", open: true, spaces: spaces, spacesValue: "无分类", shareFlag: 0, downloadFlag: 0, categoryFlag: false, shareObjList: [], shareObj:[ { id: 'public', name: '公开' } ], files: props.files ? props.files : [] } } componentDidMount() { } handleClose(){ let self = this; self.setState({ open: false }) self.props.onClose && self.props.onClose(); } onFocus(){ } submitComment(){ } onBlur(){ } onSubmit(){ let self = this; let body = {}; let publicFlag = false; _.map(self.state.shareObj, function(item){ if(item.id === "public"){ publicFlag = true } }) body.append = self.state.files; body.content = self.state.val; if(publicFlag){ body.share_scope = 'public'; }else{ body.share_scope = 'custom'; } body.allow_download = self.state.downloadFlag; body.space = self.state.spacesValue; body.allow_share = self.state.shareFlag; console.log(body) request(basurl + '/api/as/sharefile',{ method:"POST", body: JSON.stringify(body) }).then(function(resp){ if(resp.data.data && resp.data.data.errcode){ self.setState({ loading: false }) }else{ self.setState({ open: false }) } }) } onChangeReply(value){ let self = this; console.log(value) self.setState({ val: value }) } openEmoji(){ let self = this; self.myref.current.open($('#fileEmoji')) } emojiChange(obj, index){ let self = this; console.log(obj, index) self.setState({ val: self.state.val+obj.text }) setTimeout(function(){ self.props.onChange && self.props.onChange(self.state) self.reply.current.setValue(self.state.val) }) } onCloseEmoji(){ let self = this; self.setState({ emojiFlag: false }) } changeForceFollow(e, key){ console.log(e, key) let self = this; let obj = {}; obj[key+'Flag'] = e.target.checked == 1 ? 1 : 0 self.setState(obj) } selectSpace(item){ let self = this; self.setState({ spacesValue: item, categoryFlag: false }) } showCategory(){ let self = this; self.setState({ categoryFlag: !!!self.state.categoryFlag }) } closeCategory(){ let self = this; console.log(111) self.setState({ categoryFlag: false }) } openShareObj(){ let self = this; self.setState({ shareObjFlag: true }) setTimeout(function(){ $('#shareObjInput').focus() }, 200) } selectObj(item){ let self = this; let arr = self.state.shareObj; arr.push(item); console.log(item, arr) self.setState({ shareObj: arr, shareObjFlag: false, shareObjValue: '' }) } shareObjBlur(v){ console.log(v) let self = this; if(v.target.value == ""){ self.setState({ shareObjFlag: false }) } } delShareObj(item){ let self = this; let arr = [] _.map(self.state.shareObj, function(i){ if(i.id != item.id){ arr.push(i) } }) self.setState({ shareObj: arr }) } getObj(str){ let self = this; // self.setState({ // shareObjListFlag: true, // shareObjFlag: true, // shareObjValue: str // }) // return; request(basurl + '/suggestion/index?s='+str,{ method:"GET" }).then(function(resp){ if(resp.data.data && resp.data.data.errcode){ self.setState({ loading: false }) }else{ self.setState({ shareObjList: resp.data.data, shareObjListFlag: true, shareObjFlag: true, shareObjValue: str }) } }) } shareObjOnChange(v){ let self = this; self.getObj(v.target.value) } shareObjFocus(v){ let self = this; self.setState({ shareObjFlag: true, shareObjListFlag: true }) } render(){ let self = this; // if(!self.state.selfinfo){ // return <div>请传入正确的参数</div> // } let style = {}; let length = self.state.files.length; style = { width: 210*length+'px' } let offset; if(self.state.categoryFlag){ let el = $('.category') if(el && el.offset()){ offset = el.offset(); } } let offsetShareObj; if(self.state.shareObjFlag){ console.log(1111) let el = $('.share-obj-input') if(el && el.offset()){ offsetShareObj = el.offset(); if(offsetShareObj.top > 210){ offsetShareObj.top = offsetShareObj.top-210 }else{ offsetShareObj.top = 10 } offsetShareObj.left = offsetShareObj.left-50 } } let submitFlag = true; if(self.state.val == ""){ submitFlag = false }else if(self.state.files.length == 0){ submitFlag = false } return (<Dialog open={self.state.open} onClose={self.handleClose.bind(self)} // TransitionComponent={Transition} keepMounted disableBackdropClick = {true} disableEscapeKeyDown = {true} PaperProps = {{tabIndex:0}} className="jw-dialog" > <DialogTitle className="shareAs-title">分享到信息流</DialogTitle> <div className="shareAs-txt"> <Reply ref={self.reply} placeholder={"分享你的想法给大家"} callback={{ onFocus: self.onFocus.bind(self, self.props.article_id), onBlur: self.onBlur.bind(self), onChange: self.onChangeReply.bind(self) }}/> </div> <div className="share-files"> <div className="files-form">此文件最开始由 <span>{self.state.owner}</span> 发布</div> { self.state.files.length == 1 ? <div className="file-single"> <img src="http://bpic.588ku.com/element_origin_min_pic/16/10/29/2ac8e99273bc079e40a8dc079ca11b1f.jpg"/> </div> : <div className="file-multi"> <div className="file-multi-c" style={style}> { _.map(self.state.files, function(item){ return <div className="file-multi-item"> <img src={item.url}/> </div> }) } </div> </div> } </div> <div className="funcs"> <div className="emoji-c"> <i class="icon icon-shareAs-emoji" id="fileEmoji" onClick={self.openEmoji.bind(self)}></i> <Emoji ref={self.myref} onClose={self.onCloseEmoji.bind(self)} el={$('#fileEmoji')} onClose={self.onCloseEmoji.bind(self)} open={false} onChange={self.emojiChange.bind(self)}/> </div> <div className="category"> <i class="icon icon-shareAs-category" onClick={self.showCategory.bind(self)}></i> <span>{self.state.spacesValue == "无分类" ? "" : self.state.spacesValue }</span> <div className={self.state.categoryFlag ? "category-c" : "category-c hide"}> <div className="category-bg" onClick={self.closeCategory.bind(self)}>&nbsp;</div> <div className={self.state.categoryFlag ? "category-list" : "category-list hide"} style={offset}> { _.map(self.state.spaces, function(item){ let className = item == self.state.spacesValue ? "selected" : "" return <div className={"category-item "+className} onClick={self.selectSpace.bind(self, item)}> <span className="jw-fd-i"></span> <span>{item}</span> </div> }) } </div> </div> </div> </div> <div className="share-obj"> <div className="share-obj-c"> { _.map(self.state.shareObj, function(item){ return <div className="obj-item">{item.name} <i onClick={self.delShareObj.bind(self, item)} className="ico-shareAs-del"/></div> }) } { self.state.shareObjFlag ? <TextField className="share-obj-input" onChange={self.shareObjOnChange.bind(self)} value={self.state.shareObjValue} onBlur={self.shareObjBlur.bind(self)} id="shareObjInput"/> : <div className="share-obj-add" onClick={self.openShareObj.bind(self)}>+添加</div> } <div className={self.state.shareObjListFlag ? "share-list" : "share-list hide"} style={offsetShareObj}> { self.state.shareObjValue == "" ? <div className="offen-use"> </div> : <div className="share-list-c"> { _.map(self.state.shareObjList, function(item){ let flag = true; _.map(self.state.shareObj, function(i){ if(item.id == i.id){ flag = false } }) if(flag){ return <div className="share-list-item" onClick={self.selectObj.bind(self, item)}>{item.name}</div> } }) } </div> } </div> </div> </div> <div className="dialog-footer"> <div className="jw-m-common-checkbox-item"> <Checkbox className="jw-m-common-checkbox" colorSystem="blue" value={'force_follow'} checked={this.state.shareFlag==1 ? true : false} onChange={(e)=>self.changeForceFollow(e, 'share')} /> <font>禁止浏览者分享</font> </div> <div className="jw-m-common-checkbox-item"> <Checkbox className="jw-m-common-checkbox" colorSystem="blue" value={'force_follow'} checked={this.state.downloadFlag==1 ? true : false} onChange={(e)=>self.changeForceFollow(e, 'download')} /> <font>禁止浏览者下载</font> </div> { submitFlag ? <Button className="sure" style={{"background": "#3297fc"}} onClick={self.onSubmit.bind(self)}>发布</Button> : <Button className="sure" style={{"background": "#EEEEEE"}} disabled="disabled">发布</Button> } <Button onClick={self.handleClose.bind(self)}>取消</Button> </div> </Dialog>) } } export default ShareAs;