| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Card, Icon } from 'antd' |
| | | import { Icon, Modal } from 'antd' |
| | | |
| | | import Utils from '@/utils/utils.js' |
| | | import zhCN from '@/locales/zh-CN/model.js' |
| | | import enUS from '@/locales/en-US/model.js' |
| | | // import ChartCompileForm from './chartcompile' |
| | | import { getCardDetailForm } from '@/templates/zshare/formconfig' |
| | | |
| | | import DragDetail from './dragdetail' |
| | | import CardDetailForm from './carddetailform' |
| | | import './index.scss' |
| | | |
| | | // const { Meta } = Card |
| | | const { confirm } = Modal |
| | | |
| | | class LineChart extends Component { |
| | | static propTpyes = { |
| | |
| | | |
| | | state = { |
| | | dict: (!localStorage.getItem('lang') || localStorage.getItem('lang') === 'zh-CN') ? zhCN : enUS, |
| | | visible: true, |
| | | visible: false, |
| | | formlist: null, |
| | | cardcell: null // 卡片元素 |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | editdetail = (_cell) => { |
| | | const { config } = this.props |
| | | if (!_cell) { |
| | | _cell = {uuid: Utils.getuuid()} |
| | | _cell = { |
| | | datatype: 'dynamic' |
| | | } |
| | | } |
| | | |
| | | let _columns = config.columns.filter(col => ['text', 'number'].includes(col.type)) |
| | | _columns = _columns.map(col => { |
| | | return { |
| | | uuid: col.uuid, |
| | | value: col.field, |
| | | text: col.label |
| | | } |
| | | }) |
| | | |
| | | if (_columns.filter(col => col.value === _cell.field).length === 0) { |
| | | _cell.field = '' |
| | | } |
| | | |
| | | this.setState({ |
| | | cardcell: _cell |
| | | cardcell: _cell, |
| | | visible: true, |
| | | formlist: getCardDetailForm(_cell, _columns) |
| | | }) |
| | | |
| | | } |
| | | |
| | | deletedetail = () => { |
| | | handleSubmit = () => { |
| | | const { card } = this.props |
| | | let _details = fromJS(card.details).toJS() |
| | | |
| | | this.detailFormRef.handleConfirm().then(res => { |
| | | if (!res.uuid) { |
| | | res.uuid = Utils.getuuid() |
| | | _details.push(res) |
| | | } else { |
| | | _details = _details.map(item => { |
| | | if (item.uuid === res.uuid) return res |
| | | return item |
| | | }) |
| | | } |
| | | |
| | | this.setState({ |
| | | cardcell: null, |
| | | visible: false, |
| | | formlist: null |
| | | }) |
| | | this.plotChange({details: _details}) |
| | | }) |
| | | } |
| | | |
| | | editModalCancel = () => { |
| | | this.setState({ |
| | | cardcell: null, |
| | | visible: false, |
| | | formlist: null |
| | | }) |
| | | } |
| | | |
| | | deletedetail = (cell) => { |
| | | const { card } = this.props |
| | | const { dict } = this.state |
| | | let _this = this |
| | | |
| | | confirm({ |
| | | content: dict['model.confirm'] + dict['model.delete'] + ` - ${cell.content} ?`, |
| | | okText: dict['model.confirm'], |
| | | cancelText: dict['header.cancel'], |
| | | onOk() { |
| | | let _details = fromJS(card.details).toJS() |
| | | |
| | | _details = _details.filter(item => item.uuid !== cell.uuid) |
| | | |
| | | _this.plotChange({details: _details}) |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | | |
| | | } |
| | | |
| | | render() { |
| | | const { card } = this.props |
| | | const { dict, visible, cardcell } = this.state |
| | | |
| | | return ( |
| | | <div className="line-card-edit-box"> |
| | | {card.title ? <p className="chart-title">{card.title}</p> : null} |
| | | {card.cardType === 'card1' ? <Card |
| | | className={card.widthType === 'ratio' ? 'ant-col ant-col-' + card.cardWidth : ''} |
| | | <div |
| | | className={'ant-card ant-card-bordered chart-card' + (card.widthType === 'ratio' ? ' ant-col ant-col-' + card.cardWidth : '')} |
| | | style={card.widthType === 'absolute' ? { width: card.cardWidth } : null} |
| | | > |
| | | <div className="ant-card-meta"> |
| | | <Icon type="plus" onClick={this.editdetail} /> |
| | | <DragDetail |
| | | list={card.details} |
| | | handleList={this.handleList} |
| | | handleMenu={this.editdetail} |
| | | deleteMenu={this.deletedetail} |
| | | /> |
| | | <div className="ant-card-head"> |
| | | <div className="ant-card-head-wrapper"> |
| | | <div className="ant-card-head-title">Card Title</div> |
| | | <div className="ant-card-extra"> |
| | | <span>Action</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </Card> : null} |
| | | {/* <Card |
| | | className={card.widthType === 'ratio' ? 'ant-col ant-col-' + card.cardWidth : ''} |
| | | style={card.widthType === 'absolute' ? { width: card.cardWidth } : null} |
| | | <div className="ant-card-body"> |
| | | <div className="ant-card-meta"> |
| | | <Icon type="plus" onClick={() => this.editdetail()} /> |
| | | {card.cardType === 'card2' ? <div className="ant-card-meta-avatar"> |
| | | <span className="ant-avatar ant-avatar-circle ant-avatar-image" style={{width: 32, height: 32}}> |
| | | <img src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" alt=""/> |
| | | </span> |
| | | </div> : null } |
| | | <DragDetail |
| | | list={card.details} |
| | | handleList={this.handleList} |
| | | handleMenu={this.editdetail} |
| | | deleteMenu={this.deletedetail} |
| | | /> |
| | | </div> |
| | | </div> |
| | | {card.cardType === 'card2' ? <ul className="ant-card-actions"> |
| | | <li style={{width: '33.3333%'}}> |
| | | <span> |
| | | <Icon type="setting"/> |
| | | </span> |
| | | </li> |
| | | <li style={{width: '33.3333%'}}> |
| | | <span> |
| | | <Icon type="edit"/> |
| | | </span> |
| | | </li> |
| | | <li style={{width: '33.3333%'}}> |
| | | <span> |
| | | <Icon type="edit"/> |
| | | </span> |
| | | </li> |
| | | </ul> : null} |
| | | </div> |
| | | {/* 显示列编辑 */} |
| | | <Modal |
| | | title="编辑" |
| | | visible={visible} |
| | | width={650} |
| | | maskClosable={false} |
| | | onOk={this.handleSubmit} |
| | | onCancel={this.editModalCancel} |
| | | destroyOnClose |
| | | > |
| | | <Meta |
| | | avatar={ |
| | | <Avatar size={64} src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /> |
| | | } |
| | | title="Card title" |
| | | description="This is the description" |
| | | <CardDetailForm |
| | | dict={dict} |
| | | card={cardcell} |
| | | inputSubmit={this.handleSubmit} |
| | | formlist={this.state.formlist} |
| | | wrappedComponentRef={(inst) => this.detailFormRef = inst} |
| | | /> |
| | | </Card> */} |
| | | {/* <ChartCompileForm |
| | | plot={plot} |
| | | type={plot.chartType} |
| | | config={this.props.config} |
| | | dict={this.state.dict} |
| | | plotchange={this.plotChange} |
| | | /> */} |
| | | </Modal> |
| | | </div> |
| | | ) |
| | | } |