| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Popover, Switch, Col } from 'antd' |
| | | import { Popover, Switch, Col, Modal, Button } from 'antd' |
| | | import { PlusOutlined, PlusSquareOutlined, EditOutlined, ArrowLeftOutlined, ArrowRightOutlined, SwapOutlined, ToolOutlined, DeleteOutlined, FontColorsOutlined } from '@ant-design/icons' |
| | | |
| | | import asyncComponent from '@/utils/asyncComponent' |
| | |
| | | |
| | | class CardBoxComponent extends Component { |
| | | static propTpyes = { |
| | | offset: PropTypes.any, // 偏移量 |
| | | cards: PropTypes.object, // 卡片行配置信息 |
| | | card: PropTypes.object, // 卡片配置信息 |
| | | move: PropTypes.func, // 卡片移动 |
| | |
| | | elements: null, // 编辑组 |
| | | side: 'front', |
| | | appType: sessionStorage.getItem('appType'), |
| | | visible: false |
| | | } |
| | | |
| | | /** |
| | |
| | | card: fromJS(card).toJS(), |
| | | elements: fromJS(card.elements).toJS(), |
| | | }) |
| | | } |
| | | |
| | | componentDidMount () { |
| | | MKEmitter.addListener('submitStyle', this.getStyle) |
| | | } |
| | | |
| | | shouldComponentUpdate (nextProps, nextState) { |
| | |
| | | this.setState = () => { |
| | | return |
| | | } |
| | | MKEmitter.removeListener('submitStyle', this.getStyle) |
| | | } |
| | | |
| | | getStyle = (comIds, style) => { |
| | | const { cards } = this.props |
| | | getStyle = (style) => { |
| | | const { card, side } = this.state |
| | | |
| | | if (comIds.length !== 2 || comIds[0] !== cards.uuid || comIds[1] !== card.uuid) return |
| | | |
| | | let _card = fromJS(card).toJS() |
| | | if (side === 'back') { |
| | |
| | | } |
| | | |
| | | changeStyle = () => { |
| | | const { cards } = this.props |
| | | const { card, side } = this.state |
| | | |
| | | let _style = null |
| | |
| | | options = ['background', 'padding'] |
| | | } |
| | | |
| | | MKEmitter.emit('changeStyle', [cards.uuid, card.uuid], options, _style) |
| | | MKEmitter.emit('changeStyle', options, _style, this.getStyle) |
| | | } |
| | | |
| | | getSettingForms = () => { |
| | |
| | | } |
| | | |
| | | doubleClickCard = () => { |
| | | const { card } = this.state |
| | | const { cards } = this.props |
| | | const { card, appType } = this.state |
| | | |
| | | if (card.setting.click === 'menu' && card.setting.menu) { |
| | | if (['IM'].includes(card.setting.menu)) { |
| | |
| | | } else { |
| | | MKEmitter.emit('changeEditMenu', {MenuID: card.setting.menu}) |
| | | } |
| | | } else if (card.setting.click === 'menus' && card.menus && card.menus.length > 0 && cards.subtype === 'datacard' && appType) { |
| | | this.setState({visible: true}) |
| | | } |
| | | } |
| | | |
| | | changeMenu = (MenuId) => { |
| | | if (MenuId === 'IM') { |
| | | if (!sessionStorage.getItem('instantMessage')) return |
| | | |
| | | let param = { |
| | | MenuID: sessionStorage.getItem('instantMessage'), |
| | | copyMenuId: '', |
| | | type: 'view' |
| | | } |
| | | |
| | | param = window.btoa(window.encodeURIComponent(JSON.stringify(param))) |
| | | |
| | | MKEmitter.emit('changeEditMenu', {routerUrl: '/imdesign/' + param}) |
| | | } else { |
| | | MKEmitter.emit('changeEditMenu', {MenuID: MenuId}) |
| | | } |
| | | } |
| | | |
| | | render() { |
| | | const { cards, offset } = this.props |
| | | const { card, elements, side } = this.state |
| | | const { cards } = this.props |
| | | const { card, elements, side, visible } = this.state |
| | | |
| | | let _style = {...card.style} |
| | | |
| | |
| | | _style = resetStyle(_style) |
| | | |
| | | return ( |
| | | <Col span={card.setting.width || 6} offset={offset || 0}> |
| | | <Col span={card.setting.width || 6}> |
| | | <div className={'card-item ' + (card.setting.btnControl || '')} style={_style} onClick={this.clickComponent} onDoubleClick={(e) => {e.stopPropagation(); this.doubleClickCard()}} id={card.uuid}> |
| | | <CardCellComponent cards={cards} cardCell={card} side={side} elements={elements} updateElement={this.updateCard}/> |
| | | <div className="card-control" onDoubleClick={(e) => e.stopPropagation()}> |
| | |
| | | </Popover> |
| | | </div> |
| | | </div> |
| | | <Modal |
| | | title="菜单组" |
| | | wrapClassName="menus-detail-modal" |
| | | visible={visible} |
| | | closable={false} |
| | | width={900} |
| | | maskClosable={false} |
| | | footer={[<Button key="close" onClick={() => { this.setState({ visible: false })}}>关闭</Button>]} |
| | | destroyOnClose |
| | | > |
| | | <div className="menu-line"> |
| | | <div className="sort">序号</div> |
| | | <div className="sign">标识</div> |
| | | <div className="name">菜单</div> |
| | | <div className="action">操作</div> |
| | | </div> |
| | | {card.menus && card.menus.map((item, index) => { |
| | | return <div className="menu-line" key={index}> |
| | | <div className="sort">{index + 1}</div> |
| | | <div className="sign">{item.sign}</div> |
| | | <div className="name">{item.label}</div> |
| | | <div className="action"><span onClick={() => this.changeMenu(item.menu)}>详情</span></div> |
| | | </div> |
| | | })} |
| | | </Modal> |
| | | </Col> |
| | | ) |
| | | } |