king
2024-04-08 37e28da53f6d4d7d8abe7626ba28ba7dbe16e7bb
src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx
@@ -1,9 +1,9 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { Form, Row, Col, Input, Radio, Tooltip, notification } from 'antd'
import { Form, Row, Col, Input, Radio, Tooltip, notification, InputNumber } from 'antd'
import { QuestionCircleOutlined } from '@ant-design/icons'
import Utils from '@/utils/utils.js'
import { checkSQL } from '@/utils/utils-custom.js'
import asyncComponent from '@/utils/asyncComponent'
import './index.scss'
@@ -17,7 +17,8 @@
  state = {
    dataType: '',
    defaultSql: 'true'
    defaultSql: 'true',
    excelHandle: 'false'
  }
  UNSAFE_componentWillMount () {
@@ -25,7 +26,8 @@
    this.setState({
      dataType: btnType === 'print' ? 'custom' : setting.dataType,
      defaultSql: setting.defaultSql || 'true'
      defaultSql: setting.defaultSql || 'true',
      excelHandle: setting.excelHandle || 'false'
    })
  }
@@ -44,48 +46,9 @@
            reject()
            return
          } else if (values.defaultSql === 'true' && values.dataresource) {
            let _quot = values.dataresource.match(/'{1}/g)
            let _lparen = values.dataresource.match(/\({1}/g)
            let _rparen = values.dataresource.match(/\){1}/g)
            let pass = checkSQL(values.dataresource)
            _quot = _quot ? _quot.length : 0
            _lparen = _lparen ? _lparen.length : 0
            _rparen = _rparen ? _rparen.length : 0
            if (_quot % 2 !== 0) {
              notification.warning({
                top: 92,
                message: '数据源中\'必须成对出现',
                duration: 5
              })
              reject()
              return
            } else if (_lparen !== _rparen) {
              notification.warning({
                top: 92,
                message: '数据源中()必须成对出现',
                duration: 5
              })
              reject()
              return
            } else if (/--/ig.test(values.dataresource)) {
              notification.warning({
                top: 92,
                message: '数据源中,不可出现字符 -- ,注释请用 /*内容*/',
                duration: 5
              })
              reject()
              return
            }
            let error = Utils.verifySql(values.dataresource)
            if (error) {
              notification.warning({
                top: 92,
                message: '数据源中不可使用' + error,
                duration: 5
              })
            if (!pass) {
              reject()
              return
            }
@@ -100,14 +63,24 @@
  }
  updateDataType = (e) => {
    this.setState({dataType: e.target.value})
    this.props.updateDataType(e.target.value)
    if (e.target.value === 'custom') {
      setTimeout(() => {
        this.setState({
          dataType: e.target.value,
          defaultSql: this.props.setting.defaultSql || 'true'
        })
      }, 10)
    } else {
      this.setState({dataType: e.target.value})
    }
  }
  render() {
    const { setting, btnType } = this.props
    const { getFieldDecorator } = this.props.form
    const { dataType, defaultSql } = this.state
    const { dataType, defaultSql, excelHandle } = this.state
    const formItemLayout = {
      labelCol: {
@@ -198,15 +171,25 @@
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {dataType === 'custom' && defaultSql === 'true' ? <Col className="short-label" span={8}>
              <Form.Item label="主键">
            {btnType !== 'print' && dataType === 'custom' && defaultSql === 'true' ? <Col className="short-label" span={8}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="可自定义主键,空时默认为数据源主键。注:选行导出时使用。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  主键
                </Tooltip>
              }>
                {getFieldDecorator('primaryKey', {
                  initialValue: setting.primaryKey || 'ID',
                  initialValue: setting.primaryKey || '',
                })(<Input placeholder={''} autoComplete="off" />)}
              </Form.Item>
            </Col> : null}
            {dataType === 'custom' && defaultSql === 'true' ? <Col className="short-label" span={8}>
              <Form.Item label="排序方式">
              <Form.Item label={
                <Tooltip placement="topLeft" title="如果在自定义脚本中使用了@pageSize@或@orderBy@,请在数据源中单独写排序语句。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  排序方式
                </Tooltip>
              }>
                {getFieldDecorator('order', {
                  initialValue: setting.order || '',
                  rules: [
@@ -234,6 +217,91 @@
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {btnType !== 'print' ? <Col span={8}>
              <Form.Item label={
                <Tooltip placement="topRight" title="自定义生成Excel,可用参数为 XLSX、data、columns、searches、callback。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  导出格式
                </Tooltip>
              }>
                {getFieldDecorator('excelHandle', {
                  initialValue: excelHandle
                })(
                <Radio.Group onChange={(e) => this.setState({excelHandle: e.target.value})}>
                  <Radio value="false">默认</Radio>
                  <Radio value="true">自定义</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {btnType !== 'print' && excelHandle === 'true' ? <Col span={24} style={{paddingLeft: '30px'}}>
              <Form.Item wrapperCol={ {xs: { span: 24 }, sm: { span: 24 }} } label="">
                {getFieldDecorator('excel_func', {
                  initialValue: setting.excel_func || '',
                  rules: [
                    {
                      required: true,
                      message: '请填写自定义逻辑!'
                    }
                  ]
                })(<CodeMirror mode="text/javascript" theme="cobalt" />)}
              </Form.Item>
            </Col> : null}
            {btnType !== 'print' && excelHandle !== 'true' ? <Col span={8}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="导出excel中工作表名称,默认为Sheet1。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  工作表
                </Tooltip>
              }>
                {getFieldDecorator('sheet', {
                  initialValue: setting.sheet || ''
                })(<Input placeholder="" autoComplete="off" />)}
              </Form.Item>
            </Col> : null}
            {btnType !== 'print' && excelHandle !== 'true' ? <Col span={8}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="导出excel中的行高。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  行高
                </Tooltip>
              }>
                {getFieldDecorator('rowHeight', {
                  initialValue: setting.rowHeight || ''
                })(<InputNumber min={10} max={200} precision={0} />)}
              </Form.Item>
            </Col> : null}
            {btnType !== 'print' && excelHandle !== 'true' ? <Col span={8}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="请将需要合并的表头使用中横线分隔(如:商品-数量、商品-单价),前部分将作为主表头,后部分将作为子表头。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  表头合并
                </Tooltip>
              }>
                {getFieldDecorator('merge', {
                  initialValue: setting.merge || 'false'
                })(
                <Radio.Group>
                  <Radio value="false">否</Radio>
                  <Radio value="true">是</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null}
            {/* {btnType !== 'print' && excelHandle !== 'true' ? <Col span={8}>
              <Form.Item label={
                <Tooltip placement="topLeft" title="Excel内容区是否自动换行。">
                  <QuestionCircleOutlined className="mk-form-tip" />
                  自动换行
                </Tooltip>
              }>
                {getFieldDecorator('wrapText', {
                  initialValue: setting.wrapText || 'false'
                })(
                <Radio.Group>
                  <Radio value="false">否</Radio>
                  <Radio value="true">是</Radio>
                </Radio.Group>)}
              </Form.Item>
            </Col> : null} */}
          </Row>
        </Form>
      </div>