| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { fromJS } from 'immutable' |
| | | import { Icon, Modal, Col } from 'antd' |
| | | import { Modal, Col } from 'antd' |
| | | import { AntDesignOutlined } from '@ant-design/icons' |
| | | |
| | | import Utils from '@/utils/utils.js' |
| | | import asyncComponent from '@/utils/asyncComponent' |
| | | import MarkForm from './markform' |
| | | import './index.scss' |
| | | import MkIcon from '@/components/mk-icon' |
| | | import { minkeIconSystem } from '@/utils/option.js' |
| | | import zhCN from '@/locales/zh-CN/model.js' |
| | | import enUS from '@/locales/en-US/model.js' |
| | | import '@/assets/css/table.scss' |
| | | import './index.scss' |
| | | |
| | | const EditTable = asyncComponent(() => import('@/templates/zshare/editTable')) |
| | | const { confirm } = Modal |
| | | |
| | | class MarkColumn extends Component { |
| | | static propTpyes = { |
| | | field: PropTypes.any, |
| | | columns: PropTypes.array, // 显示列 |
| | | marks: PropTypes.object, |
| | | onSubmit: PropTypes.func |
| | |
| | | options: [], |
| | | render: text => { |
| | | let sign = { |
| | | 'font': '文字颜色', |
| | | 'font': '文字', |
| | | 'background': '背景', |
| | | 'underline': '下划线', |
| | | 'line-through': '中划线', |
| | | 'icon': '图标' |
| | | 'icon': '图标', |
| | | 'iconfront': '图标', |
| | | 'iconback': '图标', |
| | | } |
| | | |
| | | return ( |
| | | <div>{sign[text[0]]} {text[3] ? <Icon type={text[3]} /> : null}</div> |
| | | <div>{sign[text[0]]} {text[2] ? <MkIcon type={text[text.length - 1]} /> : null}</div> |
| | | ) |
| | | } |
| | | } |
| | |
| | | resetMark = () => { |
| | | const { marks, columns, type } = this.props |
| | | let markColumns = fromJS(this.state.markColumns).toJS() |
| | | let _columns = fromJS(columns).toJS() |
| | | |
| | | let options = columns.map(col => { |
| | | _columns.unshift({field: '$Index', label: '序号'}) |
| | | |
| | | let options = _columns.map(col => { |
| | | return { |
| | | value: col.field, |
| | | label: col.label, |
| | |
| | | { |
| | | value: 'dynamic', |
| | | label: '动态值', |
| | | children: columns.map(cell => { |
| | | children: _columns.map(cell => { |
| | | return { |
| | | value: cell.field, |
| | | label: cell.label |
| | |
| | | children: minkeIconSystem.direction.map(cell => { |
| | | return { |
| | | value: cell, |
| | | label: (<Icon type={cell} />) |
| | | label: (<MkIcon type={cell} />) |
| | | } |
| | | }) |
| | | }, |
| | |
| | | children: minkeIconSystem.hint.map(cell => { |
| | | return { |
| | | value: cell, |
| | | label: (<Icon type={cell} />) |
| | | label: (<MkIcon type={cell} />) |
| | | } |
| | | }) |
| | | }, |
| | |
| | | children: minkeIconSystem.edit.map(cell => { |
| | | return { |
| | | value: cell, |
| | | label: (<Icon type={cell} />) |
| | | label: (<MkIcon type={cell} />) |
| | | } |
| | | }) |
| | | }, |
| | |
| | | children: minkeIconSystem.data.map(cell => { |
| | | return { |
| | | value: cell, |
| | | label: (<Icon type={cell} />) |
| | | } |
| | | }) |
| | | }, |
| | | { |
| | | value: 'trademark', |
| | | label: '品牌和标识', |
| | | children: minkeIconSystem.trademark.map(cell => { |
| | | return { |
| | | value: cell, |
| | | label: (<Icon type={cell} />) |
| | | label: (<MkIcon type={cell} />) |
| | | } |
| | | }) |
| | | }, |
| | |
| | | children: minkeIconSystem.normal.map(cell => { |
| | | return { |
| | | value: cell, |
| | | label: (<Icon type={cell} />) |
| | | label: (<MkIcon type={cell} />) |
| | | } |
| | | }) |
| | | } |
| | |
| | | let signs = [ |
| | | { |
| | | value: 'font', |
| | | label: '文字颜色' |
| | | label: '文字' |
| | | }, |
| | | { |
| | | value: 'background', |
| | |
| | | label: '中划线' |
| | | }, |
| | | { |
| | | value: 'icon', |
| | | label: '图标', |
| | | children: [ |
| | | { |
| | | value: 'front', |
| | | label: '内容前', |
| | | children: icons |
| | | }, |
| | | { |
| | | value: 'back', |
| | | label: '内容后', |
| | | children: icons |
| | | } |
| | | ] |
| | | value: 'iconfront', |
| | | label: '图标(前)', |
| | | children: icons |
| | | }, |
| | | { |
| | | value: 'iconback', |
| | | label: '图标(后)', |
| | | children: icons |
| | | } |
| | | ] |
| | | |
| | | if (type === 'line') { |
| | | if (type === 'line' || type === 'sequence') { |
| | | signs.pop() |
| | | signs.pop() |
| | | } else if (type === 'slider') { |
| | | markColumns = markColumns.filter(col => { |
| | |
| | | signs = [] |
| | | } |
| | | |
| | | let _marks = marks ? fromJS(marks).toJS() : [] |
| | | _marks = _marks.map(item => { |
| | | if (item.signType && item.signType[0] === 'icon') { |
| | | item.signType = [item.signType[0] + item.signType[1], item.signType[2], item.signType[3]] |
| | | } |
| | | return item |
| | | }) |
| | | |
| | | this.setState({ |
| | | visible: true, |
| | | marks: marks ? fromJS(marks).toJS() : [], |
| | | marks: _marks, |
| | | markColumns: markColumns.map(col => { |
| | | if (col.dataIndex === 'field') { |
| | | col.options = options |
| | |
| | | } |
| | | |
| | | markSubmit = () => { |
| | | this.setState({ |
| | | visible: false |
| | | }) |
| | | let save = false |
| | | let input = document.getElementById('contrastValue') |
| | | let val = input && input.value ? input.value : '' |
| | | |
| | | if (!val) { |
| | | save = true |
| | | } |
| | | |
| | | let marks = this.state.marks.map(item => { |
| | | if (item.signType && item.signType[0] === 'background') { |
| | |
| | | } else { |
| | | item.fontColor = '' |
| | | } |
| | | } catch { |
| | | } catch (e) { |
| | | item.fontColor = '' |
| | | } |
| | | } |
| | | if (val && item.contrastValue === val) { |
| | | save = true |
| | | } |
| | | return item |
| | | }) |
| | | |
| | | this.props.onSubmit(marks) |
| | | if (save) { |
| | | this.setState({ |
| | | visible: false |
| | | }) |
| | | this.props.onSubmit(marks) |
| | | } else { |
| | | const _this = this |
| | | confirm({ |
| | | title: '存在未保存标记,确定忽略吗?', |
| | | onOk() { |
| | | _this.setState({ visible: false }) |
| | | _this.props.onSubmit(marks) |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | | } |
| | | } |
| | | |
| | | render() { |
| | |
| | | |
| | | return ( |
| | | <div style={{display: 'inline-block'}}> |
| | | <Icon className="profile" title="标记" type="ant-design" onClick={this.resetMark} /> |
| | | <AntDesignOutlined className="profile" title="标记" onClick={this.resetMark} /> |
| | | <Modal |
| | | wrapClassName="model-table-column-mark-modal" |
| | | title={'标记设置'} |
| | |
| | | onCancel={() => { this.setState({ visible: false }) }} |
| | | destroyOnClose |
| | | > |
| | | <MarkForm dict={dict} signs={signs} columns={options} markChange={this.markChange}/> |
| | | <MarkForm field={this.props.field} dict={dict} signs={signs} columns={options} markChange={this.markChange}/> |
| | | <Col style={{fontSize: '12px', color: '#757575', paddingLeft: '10px'}} span={24}>注:从上到下,匹配第一个符合条件的标记。</Col> |
| | | <EditTable actions={['edit', 'move', 'del']} data={marks} columns={markColumns} onChange={(marks) => this.setState({marks})}/> |
| | | </Modal> |