king
2023-03-06 eb164d66b57fbc93a04415de4afce82f30f3e49f
src/views/menudesign/printmenuform/index.jsx
@@ -1,21 +1,14 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { Form, Row, Col, InputNumber, Select, Radio } from 'antd'
import { Form, Row, Col, InputNumber, Select, Radio, Tooltip } from 'antd'
import { QuestionCircleOutlined } from '@ant-design/icons'
import './index.scss'
// import './index.scss'
class MainSearch extends Component {
  static propTpyes = {
    dict: PropTypes.object, // 字典项
    config: PropTypes.object,
    updateConfig: PropTypes.func
  }
  changeFirstCount = (val) => {
    if (typeof(val) !== 'number') {
      val = ''
    }
    this.props.updateConfig({...this.props.config, firstCount: val})
  }
  changeCount = (val) => {
@@ -25,27 +18,91 @@
    this.props.updateConfig({...this.props.config, everyPCount: val})
  }
  changeLastCount = (val) => {
  changePrintWidth = (val) => {
    if (typeof(val) !== 'number') {
      val = ''
    }
    this.props.updateConfig({...this.props.config, lastCount: val})
    this.props.updateConfig({...this.props.config, printWidth: val})
  }
  changePrintHeight = (val) => {
    if (typeof(val) !== 'number') {
      val = ''
    }
    this.props.updateConfig({...this.props.config, printHeight: val})
  }
  onPrintPageChange = (val) => {
    this.props.updateConfig({...this.props.config, printPage: val})
  }
  pageSizeChange = (val) => {
    this.props.updateConfig({...this.props.config, pageSize: val})
    this.resetPage()
  }
  onLayoutChange = (val) => {
    this.props.updateConfig({...this.props.config, pageLayout: val})
    this.resetPage()
  }
  
  onPaddingChange = (val) => {
    this.props.updateConfig({...this.props.config, pagePadding: val})
    this.resetPage()
  }
  onPrintCustomChange = (val) => {
    this.props.updateConfig({...this.props.config, printCustom: val})
    this.resetPage()
  }
  resetPage = () => {
    this.setState({}, () => {
      const { config } = this.props
      if (config.printCustom !== 'true') return
      let pageSize = config.pageSize || 'A4'
      let pageLayout = config.pageLayout !== 'horizontal' ? 'vertical' : 'horizontal'
      let pagePadding = config.pagePadding !== 'without' ? 'default' : 'without'
      let pageParam = {
        A4: {
          vertical: 980,
          horizontal: 1200,
          verticaldefault: 1.455,
          verticalwithout: 1.411,
          horizontaldefault: 0.679,
          horizontalwithout: 0.701,
        },
        A3: {
          vertical: 1200,
          horizontal: 1600,
          verticaldefault: 1.441,
          verticalwithout: 1.410,
          horizontaldefault: 0.688,
          horizontalwithout: 0.703,
        },
        A5: {
          vertical: 700,
          horizontal: 1000,
          verticaldefault: 1.478,
          verticalwithout: 1.413,
          horizontaldefault: 0.669,
          horizontalwithout: 0.700,
        }
      }
      let width = pageParam[pageSize][pageLayout]
      let height = Math.floor(width * pageParam[pageSize][pageLayout + pagePadding])
      this.props.updateConfig({...config, printHeight: height, printWidth: width})
      this.props.form.setFieldsValue({printHeight: height, printWidth: width})
    })
  }
  render() {
    const { dict, config } = this.props
    const { config } = this.props
    const { getFieldDecorator } = this.props.form
    const formItemLayout = {
      labelCol: {
@@ -59,8 +116,22 @@
    }
    return (
      <Form {...formItemLayout} className="print-menu-form">
      <Form {...formItemLayout}>
        <Row>
          <Col span={24}>
            <Form.Item label="菜单名称">
              <span style={{display: 'inline-block', wordBreak: 'break-all', lineHeight: 1.5}}>
                {config.MenuName}
              </span>
            </Form.Item>
          </Col>
          <Col span={24}>
            <Form.Item label="菜单参数">
              <span style={{display: 'inline-block', wordBreak: 'break-all', lineHeight: 1.5}}>
                {config.MenuNo}
              </span>
            </Form.Item>
          </Col>
          <Col span={24}>
            <Form.Item label="打印尺寸">
              {getFieldDecorator('pageSize', {
@@ -68,7 +139,7 @@
                rules: [
                  {
                    required: true,
                    message: dict['mob.required.input'] + '打印尺寸!'
                    message: '请选择打印尺寸!'
                  }
                ]
              })(
@@ -87,7 +158,7 @@
                rules: [
                  {
                    required: true,
                    message: dict['mob.required.select'] + '打印布局!'
                    message: '请选择打印布局!'
                  }
                ]
              })(
@@ -105,7 +176,7 @@
                rules: [
                  {
                    required: true,
                    message: dict['mob.required.select'] + '打印边距!'
                    message: '请选择打印边距!'
                  }
                ]
              })(
@@ -117,38 +188,81 @@
            </Form.Item>
          </Col>
          <Col span={24}>
            <Form.Item label="页面布局">
              {getFieldDecorator('printPage', {
                initialValue: config.printPage || 'auto'
              })(
                <Radio.Group onChange={(e) => {this.onPrintPageChange(e.target.value)}}>
                  <Radio value="auto">自适应</Radio>
                  <Radio value="page">分页</Radio>
                </Radio.Group>
              )}
            </Form.Item>
          </Col>
          {/* <Col span={24}>
            <Form.Item label="首页数(条)">
              {getFieldDecorator('firstCount', {
                initialValue: config.firstCount,
                rules: [
                  {
                    required: true,
                    message: dict['mob.required.input'] + '首页数!'
                    message: '请输入首页数!'
                  }
                ]
              })(<InputNumber min={1} max={1000} precision={0} onChange={this.changeFirstCount}/>)}
              })(<InputNumber min={1} max={1000} precision={1} onChange={this.changeFirstCount}/>)}
            </Form.Item>
          </Col>
          <Col span={24}>
          </Col> */}
          {config.printPage === 'page' ? <Col span={24}>
            <Form.Item label="每页数(条)">
              {getFieldDecorator('everyPCount', {
                initialValue: config.everyPCount,
                initialValue: config.everyPCount || 15,
                rules: [
                  {
                    required: true,
                    message: dict['mob.required.input'] + '每页数!'
                    message: '请输入每页数!'
                  }
                ]
              })(<InputNumber min={1} max={1000} precision={0} onChange={this.changeCount}/>)}
              })(<InputNumber min={1} max={1000} precision={1} onChange={this.changeCount}/>)}
            </Form.Item>
          </Col>
          <Col span={24}>
          </Col> : null}
          {/* <Col span={24}>
            <Form.Item label="尾页数(条)">
              {getFieldDecorator('lastCount', {
                initialValue: config.lastCount
              })(<InputNumber min={1} max={1000} precision={0} onChange={this.changeLastCount}/>)}
              })(<InputNumber min={1} max={1000} precision={1} onChange={this.changeLastCount}/>)}
            </Form.Item>
          </Col> */}
          <Col span={24}>
            <Form.Item label={
              <Tooltip placement="topLeft" title="针对不规则纸张,可自定义设置打印高度和宽度,注:同时设置打印宽度和高度后方可生效。">
                <QuestionCircleOutlined className="mk-form-tip" />
                自定义
              </Tooltip>
            }>
              {getFieldDecorator('printCustom', {
                initialValue: config.printCustom || 'false'
              })(
                <Radio.Group onChange={(e) => {this.onPrintCustomChange(e.target.value)}}>
                  <Radio value="false">不启用</Radio>
                  <Radio value="true">启用</Radio>
                </Radio.Group>
              )}
            </Form.Item>
          </Col>
          {config.printCustom === 'true' ? <Col span={24}>
            <Form.Item label="打印宽度">
              {getFieldDecorator('printWidth', {
                initialValue: config.printWidth || ''
              })(<InputNumber min={10} max={9999} precision={0} onChange={this.changePrintWidth}/>)}
            </Form.Item>
          </Col> : null}
          {config.printCustom === 'true' ? <Col span={24}>
            <Form.Item label="打印高度">
              {getFieldDecorator('printHeight', {
                initialValue: config.printHeight || ''
              })(<InputNumber min={10} max={9999} precision={0} onChange={this.changePrintHeight}/>)}
            </Form.Item>
          </Col> : null}
        </Row>
      </Form>
    )