import React, {Component} from 'react'
|
import PropTypes from 'prop-types'
|
import { is, fromJS } from 'immutable'
|
import { Modal, Tooltip, notification } from 'antd'
|
import { QuestionCircleOutlined, PlusOutlined, CloseOutlined } from '@ant-design/icons'
|
|
import SettingForm from './settingform'
|
import './index.scss'
|
|
const { confirm } = Modal
|
|
class UrlFieldComponent extends Component {
|
static propTpyes = {
|
config: PropTypes.any,
|
updateConfig: PropTypes.func
|
}
|
|
state = {
|
visible: false,
|
urlFields: this.props.config.urlFields || []
|
}
|
|
shouldComponentUpdate (nextProps, nextState) {
|
return !is(fromJS(this.state), fromJS(nextState))
|
}
|
|
editDataSource = () => {
|
this.setState({
|
visible: true
|
})
|
}
|
|
verifySubmit = () => {
|
const { urlFields } = this.state
|
const { config } = this.props
|
|
this.verifyRef.handleConfirm().then(res => {
|
if (urlFields.filter(field => field === res.field).length > 0) {
|
notification.warning({
|
top: 92,
|
message: '字段已存在!',
|
duration: 5
|
})
|
return
|
}
|
|
let _urlFields = [...urlFields, res.field]
|
|
this.setState({
|
visible: false,
|
urlFields: _urlFields
|
})
|
|
if (window.GLOB.urlFields) {
|
window.GLOB.urlFields = _urlFields
|
}
|
|
this.props.updateConfig({...config, urlFields: _urlFields})
|
})
|
}
|
|
deleteField = (field) => {
|
let config = JSON.stringify(this.props.config)
|
const that = this
|
|
if (new RegExp('@' + field + '@', 'ig').test(config)) {
|
confirm({
|
title: `配置中存在@${field}@,确定删除吗?`,
|
content: '',
|
onOk() {
|
that.execDelete(field)
|
},
|
onCancel() {}
|
})
|
} else {
|
this.execDelete(field)
|
}
|
}
|
|
execDelete = (_field) => {
|
const { config } = this.props
|
let _urlFields = this.state.urlFields.filter(field => field !== _field)
|
|
this.setState({
|
urlFields: _urlFields
|
})
|
|
if (window.GLOB.urlFields) {
|
window.GLOB.urlFields = _urlFields
|
}
|
|
this.props.updateConfig({...config, urlFields: _urlFields})
|
}
|
|
render () {
|
const { visible, urlFields } = this.state
|
|
return (
|
<div className="url-field-component">
|
<div className="field-plus">
|
<Tooltip placement="topLeft" title="页面可接收的参数字段,在查询数据源或自定义脚本中使用 @字段@ 接收。">
|
<QuestionCircleOutlined className="mk-form-tip" />
|
url变量
|
</Tooltip>
|
<PlusOutlined title="添加" onClick={() => this.editDataSource()} />
|
</div>
|
<div>
|
{urlFields.map((field, index) => {
|
return (
|
<div className="field-item" key={index}>
|
<CloseOutlined title="删除" onClick={() => this.deleteField(field)} />
|
{field}
|
</div>
|
)
|
})}
|
</div>
|
<Modal
|
title="字段添加"
|
visible={visible}
|
width={500}
|
maskClosable={false}
|
onOk={this.verifySubmit}
|
onCancel={() => { this.setState({ visible: false }) }}
|
destroyOnClose
|
>
|
<SettingForm
|
inputSubmit={this.verifySubmit}
|
wrappedComponentRef={(inst) => this.verifyRef = inst}
|
/>
|
</Modal>
|
</div>
|
)
|
}
|
}
|
|
export default UrlFieldComponent
|