king
2021-06-18 bb47f06e3c5eaf568aaecf870736787373ce73aa
2021-06-18
31个文件已修改
4个文件已添加
656 ■■■■ 已修改文件
package.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/dragaction/action.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcellcomponent/formconfig.jsx 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/card/cardcomponent/index.jsx 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/form/formaction/index.jsx 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/search/main-search/dragsearch/index.jsx 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/formconfig.jsx 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/components/share/actioncomponent/index.jsx 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/stylecombcontrolbutton/index.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/components/navbar/normal-navbar/menusetting/menutable/index.jsx 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/header/index.jsx 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/header/index.scss 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/mob/mobshell/card.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pc/components/navbar/normal-navbar/menusetting/menutable/index.jsx 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pc/createview/index.jsx 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pc/createview/index.scss 补丁 | 查看 | 原始文档 | blame | 历史
src/pc/createview/settingform/index.jsx 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pc/createview/settingform/index.scss 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pc/menushell/card.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/components/form/normal-form/index.jsx 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/custom/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/checkCard/index.scss 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/fieldscomponent/index.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/sharecomponent/tablecomponent/index.jsx 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/utils-custom.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/appmanage/index.jsx 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/appmanage/submutilform/index.jsx 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/billprint/index.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mobdesign/index.jsx 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mobdesign/index.scss 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mobdesign/menuform/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pcdesign/index.jsx 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pcdesign/menuform/index.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json
@@ -192,7 +192,7 @@
      ]
    ]
  },
  "homepage": "./build",
  "homepage": ".",
  "devDependencies": {
    "typescript": "^4.0.2"
  }
src/index.js
@@ -59,7 +59,7 @@
// 新系统文件置于admin中 ../options.json
fetch('./options.json')
fetch('../options.json')
  .then(response => response.json())
  .catch(() => {
    document.getElementById('root').innerHTML = '<div style="text-align: center; font-size: 30px; margin-top: 40vh;">系统配置信息获取失败,请联系管理员!</div>'
src/menu/components/card/cardcellcomponent/dragaction/action.jsx
@@ -56,7 +56,7 @@
        {hasProfile ? <Icon className="profile" title="setting" type="profile" onClick={() => profileCard(id)} /> : null}
      </div>
    } trigger="hover">
      <div ref={node => drag(drop(node))} className={'ant-col card-button-cell ant-col-' + card.width} onDoubleClick={() => doubleClickCard(id)}>
      <div ref={node => drag(drop(node))} className={'ant-col card-button-cell ant-col-' + card.width} onDoubleClick={(e) => {e.stopPropagation(); doubleClickCard(id)}}>
        <div style={{opacity: isDragging ? 0 : 1}}>
          {btnElement}
        </div>
src/menu/components/card/cardcellcomponent/formconfig.jsx
@@ -362,7 +362,7 @@
      forbid: !isApp,
      options: [
        { value: '', text: '无' },
        { value: 'page', text: '菜单' },
        // { value: 'page', text: '菜单' },
        { value: 'linkpage', text: '关联菜单' },
        { value: 'custom', text: '链接' }
      ]
@@ -388,15 +388,15 @@
        { value: 'self', text: '当前页面' }
      ]
    },
    {
      type: 'select',
      key: 'copyMenuId',
      label: '复制菜单',
      initVal: card.copyMenuId || '',
      required: false,
      forbid: !isApp,
      options: appMenus
    },
    // {
    //   type: 'select',
    //   key: 'copyMenuId',
    //   label: '复制菜单',
    //   initVal: card.copyMenuId || '',
    //   required: false,
    //   forbid: !isApp,
    //   options: appMenus
    // },
    {
      type: 'radio',
      key: 'joint',
src/menu/components/card/cardcomponent/index.jsx
@@ -221,6 +221,14 @@
    }
  }
  doubleClickCard = () => {
    const { card } = this.state
    if (card.setting.click === 'menu' && card.setting.menu) {
      MKEmitter.emit('changeEditMenu', {MenuID: card.setting.menu})
    }
  }
  render() {
    const { cards, offset } = this.props
    const { card, elements, side, settingVisible, dict } = this.state
@@ -245,7 +253,7 @@
    return (
      <Col span={card.setting.width || 6} offset={offset || 0}>
        <div className="card-item" style={_style} onClick={this.clickComponent} id={card.uuid}>
        <div className="card-item" style={_style} onClick={this.clickComponent} onDoubleClick={(e) => {e.stopPropagation(); this.doubleClickCard()}} id={card.uuid}>
          <CardCellComponent cards={cards} cardCell={card} side={side} elements={elements} updateElement={this.updateCard}/>
          <div className="card-control">
            <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
src/menu/components/form/formaction/index.jsx
@@ -24,6 +24,7 @@
  state = {
    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
    appType: sessionStorage.getItem('appType'),
    card: null,          // 编辑中元素
    formlist: null,      // 表单信息
    visible: false,      // 模态框控制
@@ -173,6 +174,21 @@
    })
  }
  changeMenu = () => {
    const { appType } = this.state
    const { group } = this.props
    if (appType !== 'pc' && appType !== 'mob') return
    if (!group.subButton.linkmenu) return
    MKEmitter.emit('changeEditMenu', {
      MenuID: group.subButton.linkmenu,
      copyMenuId: '',
      MenuNo: '',
      MenuName: '',
    })
  }
  render() {
    const { group, config } = this.props
    const { visible, profVisible, card, dict } = this.state
@@ -194,7 +210,7 @@
            <Icon className="profile" title="setting" type="profile" onClick={() => this.profileAction()} />
          </div>
        } trigger="hover">
          <Button type="link" className="submit mk-primary" style={resetStyle(group.subButton.style)}>{group.subButton.label}</Button>
          <Button type="link" className="submit mk-primary" onDoubleClick={this.changeMenu} style={resetStyle(group.subButton.style)}>{group.subButton.label}</Button>
        </Popover>
        {group.sort !== config.subcards.length ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
          <div className="mk-popover-control">
src/menu/components/search/main-search/dragsearch/index.jsx
@@ -77,6 +77,8 @@
    drop() {}
  })
  const appType = sessionStorage.getItem('appType')
  return (
    <div ref={drop} className="ant-row">
      {cards.map(card => (
@@ -99,7 +101,7 @@
          </div>
          <div className="ant-col ant-form-item-control-wrapper ant-col-xs-24 ant-col-sm-16">
            <Button type="primary">搜索</Button>
            <Button style={{ marginLeft: 8 }}>重置</Button>
            {appType !== 'mob' ? <Button style={{ marginLeft: 8 }}>重置</Button> : null}
            <div style={{position: 'absolute', top: 0, bottom: 0, left: 0, right: 0}}></div>
          </div>
        </div>
src/menu/components/share/actioncomponent/formconfig.jsx
@@ -59,7 +59,7 @@
  if (isApp) {
    opentypes = opentypes.filter(item => item.value !== 'tab')
    pageTemps = [
      { value: 'page', text: '菜单' },
      // { value: 'page', text: '菜单' },
      { value: 'linkpage', text: '关联菜单' },
      { value: 'billprint', text: '单据打印' },
      { value: 'pay', text: Formdict['model.pay'] },
@@ -215,14 +215,14 @@
      required: true,
      options: appMenus
    },
    {
      type: 'select',
      key: 'copyMenuId',
      label: '复制菜单',
      initVal: card.copyMenuId || '',
      required: false,
      options: appMenus
    },
    // {
    //   type: 'select',
    //   key: 'copyMenuId',
    //   label: '复制菜单',
    //   initVal: card.copyMenuId || '',
    //   required: false,
    //   options: appMenus
    // },
    {
      type: 'textarea',
      key: 'url',
src/menu/components/share/actioncomponent/index.jsx
src/menu/stylecombcontrolbutton/index.jsx
@@ -12,7 +12,7 @@
  }
  state = {
    label: '调整',
    label: '批量调整',
    parent: null,
    type: '',
    components: []
@@ -127,7 +127,7 @@
  triggerStyleChange = () => {
    const { label, components } = this.state
    if (label === '调整') {
    if (label === '批量调整') {
      document.body.className = 'style-control'
      sessionStorage.setItem('style-control', 'true')
      this.setState({label: '退出'})
@@ -141,14 +141,14 @@
      MKEmitter.emit('closeCombineStyle')
      this.setState({label: '调整', parent: null, components: []})
      this.setState({label: '批量调整', parent: null, components: []})
    }
  }
  
  render() {
    const { label } = this.state
    return (
      <Button className="style-control-button" icon="font-colors" title="调整样式" onClick={this.triggerStyleChange}>{label}</Button>
      <Button className="style-control-button" icon="font-colors" title="批量调整样式" onClick={this.triggerStyleChange}>{label}</Button>
    )
  }
}
src/mob/components/navbar/normal-navbar/menusetting/menutable/index.jsx
@@ -5,7 +5,7 @@
import MenuForm from '../menuform'
import Utils from '@/utils/utils.js'
import MKEmitter from '@/utils/events.js'
// import MKEmitter from '@/utils/events.js'
import './index.scss'
const { confirm } = Modal
@@ -89,15 +89,15 @@
      onOk() {
        _this.setState({data: data.filter(item => item.MenuID !== record.MenuID)})
        let uuids = [record.MenuID]
        record.sublist && record.sublist.forEach(item => {
          uuids.push(item.MenuID)
        // let uuids = [record.MenuID]
        // record.sublist && record.sublist.forEach(item => {
        //   uuids.push(item.MenuID)
          item.sublist && item.sublist.forEach(cell => {
            uuids.push(cell.MenuID)
          })
        })
        MKEmitter.emit('delButtons', uuids)
        //   item.sublist && item.sublist.forEach(cell => {
        //     uuids.push(cell.MenuID)
        //   })
        // })
        // MKEmitter.emit('delButtons', uuids)
      },
      onCancel() {}
    })
src/mob/header/index.jsx
@@ -1,4 +1,5 @@
import React, {Component} from 'react'
import { Radio } from 'antd'
import avatar from '@/assets/img/avatar.jpg'
import MainLogo from '@/assets/img/main-logo.png'
@@ -7,13 +8,26 @@
class MobHeader extends Component {
  state = {
    avatar: sessionStorage.getItem('CloudAvatar') || avatar,
    userName: sessionStorage.getItem('CloudUserName')
    userName: sessionStorage.getItem('CloudUserName'),
    typename: sessionStorage.getItem('typename')
  }
  changeView = (e) => {
    let val = e.target.value
    this.props.changeView(val)
  }
  render () {
    const { typename } = this.state
    return (
      <header className="mob-header-container">
        <div className="header-logo"><img src={MainLogo} alt=""/></div>
        {typename === 'pad' ? <div className="change-view">
          <Radio.Group defaultValue="vertical" onChange={this.changeView}>
            <Radio value="vertical">竖屏</Radio>
            <Radio value="horizontal">横屏</Radio>
          </Radio.Group>
        </div> : null}
        <div className="header-user">
          <img src={this.state.avatar} alt=""/>
          <span>
src/mob/header/index.scss
@@ -45,4 +45,12 @@
      }
    }
  }
  .change-view {
    position: absolute;
    left: calc(50% - 70px);
    top: 12px;
    .ant-radio-wrapper {
      color: #ffffff;
    }
  }
}
src/mob/mobshell/card.jsx
@@ -64,10 +64,10 @@
    if (card.wrap && card.wrap.height) {
      // scaleview
      height = card.wrap.height.replace(/\d+vw/ig, (word) => {
        return parseFloat(word) * 420 / 100 + 'px'
        return parseFloat(word) * (window.GLOB.winWidth || 420) / 100 + 'px'
        // return parseFloat(word) * 350 / 100 + 'px'
      }).replace(/\d+vh/ig, (word) => {
        return parseFloat(word) * 738 / 100 + 'px'
        return parseFloat(word) * (window.GLOB.winHeight || 738) / 100 + 'px'
        // return parseFloat(word) * 615 / 100 + 'px'
      })
    }
src/pc/components/navbar/normal-navbar/menusetting/menutable/index.jsx
@@ -5,7 +5,7 @@
import MenuForm from '../menuform'
import Utils from '@/utils/utils.js'
import MKEmitter from '@/utils/events.js'
// import MKEmitter from '@/utils/events.js'
import './index.scss'
const { confirm } = Modal
@@ -97,7 +97,7 @@
        let _data = _this.state.data.filter(item => item.MenuID !== record.MenuID)
        _this.setState({data: _data})
        _this.props.menuUpdate({...menu, sublist: _data})
        MKEmitter.emit('delButtons', [record.MenuID])
        // MKEmitter.emit('delButtons', [record.MenuID])
      },
      onCancel() {}
    })
@@ -264,11 +264,11 @@
        _this.setState({data: _data})
        _this.props.menuUpdate({...menu, sublist: _data})
        let uuids = [record.MenuID]
        record.sublist && record.sublist.forEach(item => {
          uuids.push(item.MenuID)
        })
        MKEmitter.emit('delButtons', uuids)
        // let uuids = [record.MenuID]
        // record.sublist && record.sublist.forEach(item => {
        //   uuids.push(item.MenuID)
        // })
        // MKEmitter.emit('delButtons', uuids)
      },
      onCancel() {}
    })
@@ -445,15 +445,15 @@
      onOk() {
        _this.setState({data: data.filter(item => item.MenuID !== record.MenuID)})
        let uuids = [record.MenuID]
        record.sublist && record.sublist.forEach(item => {
          uuids.push(item.MenuID)
        // let uuids = [record.MenuID]
        // record.sublist && record.sublist.forEach(item => {
        //   uuids.push(item.MenuID)
          item.sublist && item.sublist.forEach(cell => {
            uuids.push(cell.MenuID)
          })
        })
        MKEmitter.emit('delButtons', uuids)
        //   item.sublist && item.sublist.forEach(cell => {
        //     uuids.push(cell.MenuID)
        //   })
        // })
        // MKEmitter.emit('delButtons', uuids)
      },
      onCancel() {}
    })
src/pc/createview/index.jsx
New file
@@ -0,0 +1,201 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { Button, Modal, notification } from 'antd'
import moment from 'moment'
import zhCN from '@/locales/zh-CN/model.js'
import enUS from '@/locales/en-US/model.js'
import Utils from '@/utils/utils.js'
import MenuUtils from '@/utils/utils-custom.js'
import SettingForm from './settingform'
import Api from '@/api'
import './index.scss'
class CreateView extends Component {
  static propTpyes = {
    resetmenu: PropTypes.func
  }
  state = {
    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
    visible: false,
    loading: false
  }
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState))
  }
  verifySubmit = () => {
    this.verifyRef.handleConfirm().then(res => {
      this.setState({
        loading: true
      })
      let parMenuId = sessionStorage.getItem('kei_no') + sessionStorage.getItem('typename') + sessionStorage.getItem('lang')
      let menuId = Utils.getuuid()
      let config = {
        version: 1.0,
        uuid: menuId,
        MenuID: menuId,
        Template: 'webPage',
        enabled: false,
        MenuName: res.MenuName || '',
        MenuNo: res.MenuNo || '',
        tables: [],
        components: [],
        viewType: 'menu',
        style: {}
      }
      let param = {
        func: 'sPC_TrdMenu_AddUpt',
        FstID: parMenuId,
        SndID: parMenuId,
        ParentID: parMenuId,
        MenuID: menuId,
        MenuNo: res.MenuNo || '',
        EasyCode: '',
        Template: 'webPage',
        TypeCharOne: sessionStorage.getItem('kei_no'),
        Typename: sessionStorage.getItem('typename'),
        MenuName: res.MenuName || '',
        PageParam: JSON.stringify({Template: 'webPage'}),
        open_edition: '',
        LText: '',
        LTexttb: ''
      }
      param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
      param.secretkey = Utils.encrypt('', param.timestamp)
      if (!res.copymenuId) {
        param.LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(config)))
        Api.getSystemConfig(param).then(result => {
          if (!result.status) {
            notification.warning({
              top: 92,
              message: result.message,
              duration: 5
            })
          } else {
            notification.success({
              top: 92,
              message: '创建成功',
              duration: 5
            })
          }
          this.setState({
            visible: false,
            loading: false
          })
          this.props.resetmenu()
        })
      } else {
        Api.getSystemConfig({
          func: 'sPC_Get_LongParam',
          TypeCharOne: sessionStorage.getItem('kei_no'),
          typename: sessionStorage.getItem('typename') || 'pc',
          MenuID: res.copymenuId
        }).then(result => {
          if (!result.status) {
            notification.warning({
              top: 92,
              message: result.message,
              duration: 5
            })
            this.setState({
              loading: false
            })
            return
          }
          let _config = null
          try {
            _config = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam)))
          } catch (e) {
            console.warn('Parse Failure')
            _config = null
          }
          if (!_config) {
            notification.warning({
              top: 92,
              message: '未获取到配置信息!',
              duration: 5
            })
            this.setState({
              loading: false
            })
            return
          }
          if (_config.components) {
            config.components = MenuUtils.resetConfig(_config.components)
            config.tables = _config.tables || []
            config.style = _config.style || {}
          }
          param.LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(config)))
          Api.getSystemConfig(param).then(result => {
            if (!result.status) {
              notification.warning({
                top: 92,
                message: result.message,
                duration: 5
              })
            } else {
              notification.success({
                top: 92,
                message: '创建成功',
                duration: 5
              })
            }
            this.setState({
              visible: false,
              loading: false
            })
            this.props.resetmenu()
          })
        })
      }
    })
  }
  render () {
    const { config } = this.props
    const { visible, dict, loading } = this.state
    return (
      <div className="create-view">
        <Button icon="plus" className="mk-border-green" onClick={() => {this.setState({visible: true, loading: false})}}>新建页面</Button>
        <Modal
          title="新建页面"
          visible={visible}
          width={500}
          maskClosable={false}
          okText={dict['model.submit']}
          onOk={this.verifySubmit}
          onCancel={() => { this.setState({ visible: false }) }}
          confirmLoading={loading}
          destroyOnClose
        >
          <SettingForm
            dict={dict}
            config={config}
            wrappedComponentRef={(inst) => this.verifyRef = inst}
          />
        </Modal>
      </div>
    )
  }
}
export default CreateView
src/pc/createview/index.scss
src/pc/createview/settingform/index.jsx
New file
@@ -0,0 +1,107 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { Form, Row, Col, Select, Input } from 'antd'
import './index.scss'
class SettingForm extends Component {
  static propTpyes = {
    dict: PropTypes.object,      // 字典项
  }
  state = {
    appMenus: []
  }
  UNSAFE_componentWillMount () {
    let appMenus = sessionStorage.getItem('appMenus')
    if (appMenus) {
      try {
        appMenus = JSON.parse(appMenus)
      } catch {
        appMenus = []
      }
    } else {
      appMenus = []
    }
    this.setState({appMenus})
  }
  handleConfirm = () => {
    // 表单提交时检查输入值是否正确
    return new Promise((resolve, reject) => {
      this.props.form.validateFieldsAndScroll((err, values) => {
        if (!err) {
          resolve(values)
        } else {
          reject(err)
        }
      })
    })
  }
  render() {
    const { getFieldDecorator } = this.props.form
    const { appMenus } = this.state
    const formItemLayout = {
      labelCol: {
        xs: { span: 24 },
        sm: { span: 8 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 }
      }
    }
    return (
      <Form {...formItemLayout}>
        <Row gutter={24}>
          <Col span={20}>
            <Form.Item label="菜单名称">
              {getFieldDecorator('MenuName', {
                initialValue: '',
                rules: [
                  {
                    required: true,
                    message: this.props.dict['form.required.input'] + '菜单名称!'
                  }
                ]
              })(<Input placeholder="" autoComplete="off" />)}
            </Form.Item>
          </Col>
          <Col span={20}>
            <Form.Item label="菜单参数">
              {getFieldDecorator('MenuNo', {
                initialValue: '',
                rules: [
                  {
                    required: true,
                    message: this.props.dict['form.required.input'] + '菜单参数!'
                  }
                ]
              })(<Input placeholder="" autoComplete="off" />)}
            </Form.Item>
          </Col>
          <Col span={20}>
            <Form.Item label="复制菜单">
              {getFieldDecorator('copymenuId', {
                initialValue: ''
              })(
                <Select allowClear showSearch filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}>
                  {appMenus.map(option =>
                    <Select.Option key={option.MenuID} value={option.MenuID}>{option.MenuName}</Select.Option>
                  )}
                </Select>
              )}
            </Form.Item>
          </Col>
        </Row>
      </Form>
    )
  }
}
export default Form.create()(SettingForm)
src/pc/createview/settingform/index.scss
New file
@@ -0,0 +1,11 @@
.model-menu-setting-form {
  position: relative;
  .anticon-question-circle {
    color: #c49f47;
    margin-right: 3px;
  }
  .ant-input-number {
    width: 100%;
  }
}
src/pc/menushell/card.jsx
@@ -62,10 +62,10 @@
    if (card.wrap && card.wrap.height) {
      // scaleview
      height = card.wrap.height.replace(/\d+vw/ig, (word) => {
        return parseFloat(word) * 420 / 100 + 'px'
        return parseFloat(word) * (window.GLOB.winWidth || 420) / 100 + 'px'
        // return parseFloat(word) * 350 / 100 + 'px'
      }).replace(/\d+vh/ig, (word) => {
        return parseFloat(word) * 738 / 100 + 'px'
        return parseFloat(word) * (window.GLOB.winHeight || 738) / 100 + 'px'
        // return parseFloat(word) * 615 / 100 + 'px'
      })
    }
src/tabviews/custom/components/form/normal-form/index.jsx
@@ -116,6 +116,7 @@
  }
  componentDidMount () {
    MKEmitter.addListener('reloadData', this.reloadData)
    MKEmitter.addListener('mkFormSubmit', this.mkFormSubmit)
    MKEmitter.addListener('resetSelectLine', this.resetParentParam)
    MKEmitter.addListener('refreshByButtonResult', this.refreshByButtonResult)
@@ -129,6 +130,7 @@
    this.setState = () => {
      return
    }
    MKEmitter.removeListener('reloadData', this.reloadData)
    MKEmitter.removeListener('mkFormSubmit', this.mkFormSubmit)
    MKEmitter.removeListener('resetSelectLine', this.resetParentParam)
    MKEmitter.removeListener('refreshByButtonResult', this.refreshByButtonResult)
@@ -163,6 +165,14 @@
        })
      }
    }
  }
  reloadData = (menuId, id) => {
    const { config } = this.state
    if (config.uuid !== menuId) return
    this.loadData(null, 'refresh')
  }
  /**
@@ -237,7 +247,7 @@
    }
  }
  async loadData (btn) {
  async loadData (btn, type) {
    const { mainSearch, menuType } = this.props
    const { config, arr_field, BID, group } = this.state
@@ -288,16 +298,23 @@
        this.execSuccess(btn)
      } else {
        let _group = group
        if (type === 'refresh') {
          _group = config.subcards[0]
        }
        if (config.wrap.statusControl && _data[config.wrap.statusControl]) {
          let _status = _data[config.wrap.statusControl]
          let _groups = config.subcards.filter(item => item.setting.status === _status)[0]
          _group = _groups || _group
        }
        this.setState({
          group: _group,
          group: null,
          step: _group.sort - 1,
          data: _data || {},
          loading: false
        }, () => {
          this.setState({group: _group})
        })
      }
    } else {
src/tabviews/custom/index.jsx
@@ -737,7 +737,7 @@
        return component
      }
      if (['propcard', 'brafteditor', 'sandbox', 'stepform'].includes(component.subtype) && component.wrap.datatype === 'static') {
      if (component.wrap.datatype === 'static') {
        component.format = ''
      }
src/tabviews/zshare/mutilform/checkCard/index.scss
@@ -8,7 +8,6 @@
    padding: 6px;
    margin-bottom: 12px;
    line-height: 1.5;
    transition: all 0.3s;
    cursor: pointer;
    span {
      display: block;
@@ -16,6 +15,7 @@
      text-overflow: ellipsis;
      white-space: nowrap;
    }
    transition: all 0.3s;
  }
  .card-cell.active {
    border-color: #1890ff;
@@ -33,6 +33,7 @@
    margin-bottom: 12px;
    line-height: 1.5;
    cursor: pointer;
    transition: all 0.3s;
  }
  .card-pic-cell.active {
    border-color: #1890ff;
src/tabviews/zshare/mutilform/index.jsx
@@ -48,7 +48,7 @@
    let formlist = fromJS(action.fields).toJS()
    formlist.forEach(item => {
      if (item.type === 'text' || item.type === 'number') {              // 用于过滤下拉菜单关联表单
      if (item.type === 'text' || item.type === 'number') {
        _inputfields.push(item.field)
      } else if (item.type === 'textarea') {
        _inputfields.push(item.field)
src/templates/sharecomponent/fieldscomponent/index.jsx
@@ -217,12 +217,13 @@
      let _columns = [...columnsMap.values()]
      _columns.forEach(item => {
        let _t = item.$datatype || (item.type === 'number' ? 'Decimal(18,0)' : 'Nvarchar(50)')
        if (item.selected) {
          let newcard = {
            uuid: Utils.getuuid(),
            label: item.label,
            field: item.field,
            datatype: item.type === 'number' ? 'Decimal(18,0)' : 'Nvarchar(50)'
            datatype: _t
          }
          items.push(newcard)
src/templates/sharecomponent/tablecomponent/index.jsx
@@ -137,6 +137,7 @@
                datatype: _type,
                decimal: _decimal,
                length: _length,
                $datatype: item.FieldType.toLowerCase()
              }
            })
          }
src/utils/utils-custom.js
@@ -384,10 +384,10 @@
    // scaleview
    _style = _style.replace(/\d+vw/ig, (word) => {
      return parseFloat(word) * 420 / 100 + 'px'
      return parseFloat(word) * (window.GLOB.winWidth || 420) / 100 + 'px'
      // return parseFloat(word) * 350 / 100 + 'px'
    }).replace(/\d+vh/ig, (word) => {
      return parseFloat(word) * 738 / 100 + 'px'
      return parseFloat(word) * (window.GLOB.winHeight || 738) / 100 + 'px'
      // return parseFloat(word) * 615 / 100 + 'px'
    })
src/views/appmanage/index.jsx
@@ -57,10 +57,6 @@
        render: (text, record) => text === 'false' ? '不启用' : '启用'
      },
      {
        title: '短连接', dataIndex: 'link_type', key: 'link_type', align: 'center',
        render: (text, record) => text === 'false' ? '不启用' : '启用'
      },
      {
        title: '皮肤', dataIndex: 'css', key: 'css', align: 'center',
        render: (text, record) => {
          const style = {
@@ -246,7 +242,8 @@
    let sublist = fromJS(selectApp.sublist).toJS()
    sublist = sublist.filter(item => item.ID !== record.ID)
    param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','${item.link_type || 'true'}','${item.role_type || 'true'}','${item.lang || 'zh-CN'}'`)
    // param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','${item.link_type || 'true'}','${item.role_type || 'true'}','${item.lang || 'zh-CN'}'`)
    param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}'`)
    param.LText = param.LText.join(' union all ')
    param.LText = Utils.formatOptions(param.LText)
    
@@ -393,7 +390,8 @@
      param.secretkey = Utils.encrypt('', param.timestamp)
      if (visible === 'edit') {
        param.LText = selectApp.sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','${item.link_type || 'true'}','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}'`)
        // param.LText = selectApp.sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','${item.link_type || 'true'}','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}'`)
        param.LText = selectApp.sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}'`)
        param.LText = param.LText.join(' union all ')
        param.LText = Utils.formatOptions(param.LText)
      }
@@ -479,7 +477,8 @@
        })
      }
      param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','${item.link_type || 'true'}','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}'`)
      // param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','${item.link_type || 'true'}','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}'`)
      param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}'`)
      param.LText = param.LText.join(' union all ')
      param.LText = Utils.formatOptions(param.LText)
src/views/appmanage/submutilform/index.jsx
@@ -67,6 +67,7 @@
              })(
                <Select disabled={type === 'edit'}>
                  <Select.Option value="mob">移动端(包括android、ios)</Select.Option>
                  <Select.Option value="pad">Pad端</Select.Option>
                  <Select.Option value="pc">PC端</Select.Option>
                </Select>
              )}
@@ -100,18 +101,6 @@
            <Form.Item label="权限管理">
              {getFieldDecorator('role_type', {
                initialValue: card ? card.role_type || 'true' : 'true'
              })(
                <Radio.Group>
                  <Radio value="true">启用</Radio>
                  <Radio value="false">不启用</Radio>
                </Radio.Group>
              )}
            </Form.Item>
          </Col>
          <Col span={12}>
            <Form.Item label="短连接">
              {getFieldDecorator('link_type', {
                initialValue: card ? card.link_type || 'true' : 'true'
              })(
                <Radio.Group>
                  <Radio value="true">启用</Radio>
src/views/billprint/index.jsx
@@ -184,7 +184,7 @@
          if (component.search) component.search = []
          component.data = [] // 初始化数据为空
          if (['propcard', 'brafteditor', 'sandbox'].includes(component.subtype) && component.wrap.datatype === 'static') {
          if (component.wrap.datatype === 'static') {
            component.format = ''
          }
    
src/views/mobdesign/index.jsx
@@ -25,6 +25,7 @@
const Header = asyncComponent(() => import('@/mob/header'))
const MenuForm = asyncComponent(() => import('./menuform'))
const MobShell = asyncComponent(() => import('@/mob/mobshell'))
const CreateView = asyncComponent(() => import('@/pc/createview'))
const SourceWrap = asyncComponent(() => import('@/mob/modulesource'))
const BgController = asyncComponent(() => import('@/pc/bgcontroller'))
const SysInterface = asyncComponent(() => import('@/menu/sysinterface'))
@@ -64,6 +65,8 @@
    config: null,
    visible: false,
    customComponents: [],
    direction: 'vertical',
    comloading: false
  }
  UNSAFE_componentWillMount() {
@@ -75,9 +78,9 @@
        sessionStorage.setItem('appId', param.ID || '')
        sessionStorage.setItem('lang', param.lang || 'zh-CN')
        sessionStorage.setItem('kei_no', param.kei_no || '')
        sessionStorage.setItem('link_type', param.link_type || 'true')
        sessionStorage.setItem('role_type', param.role_type || 'true')
        sessionStorage.setItem('login_types', param.login_types || 'true')
        sessionStorage.setItem('typename', param.typename || 'mob')
        this.setState({
          localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS,
@@ -85,6 +88,18 @@
        })
        this.getAppMessage()
      } else if (param.type === 'view') {
        window.GLOB.winWidth = 420
        window.GLOB.winHeight = 738
        window.GLOB.shellWidth = 376
        window.GLOB.shellHeight = 680
        if (sessionStorage.getItem('typename') === 'pad') {
          window.GLOB.winWidth = 736
          window.GLOB.winHeight = 945
          window.GLOB.shellWidth = 640
          window.GLOB.shellHeight = 853
        }
        this.setState({
          MenuId: param.MenuID
        }, () => {
@@ -193,9 +208,6 @@
      type: 'view'
    }
    if (menu.fixed && menu.MenuNo && menu.MenuName) {
      param.fixed = true
    }
    param.MenuNo = menu.MenuNo || ''
    param.MenuName = menu.MenuName || ''
@@ -309,7 +321,7 @@
  updateCustomComponent = () => {
    Api.getSystemConfig({
      func: 's_get_custom_components',
      typename: 'mob',
      typename: sessionStorage.getItem('typename'),
      typecharone: ''
    }).then(res => {
      let coms = []
@@ -410,7 +422,7 @@
    let param = {
      func: 'sPC_Get_LongParam',
      TypeCharOne: sessionStorage.getItem('kei_no'),
      typename: 'mob',
      typename: sessionStorage.getItem('typename'),
      MenuID: MenuId
    }
@@ -460,10 +472,6 @@
        config.open_edition = result.open_edition || ''
        window.GLOB.urlFields = config.urlFields || []
        if (urlParam.fixed && urlParam.MenuName && urlParam.MenuNo) {
          config.fixed = true
        }
        let indeComs = []
        config.components.forEach(item => {
          if (item.type === 'navbar') {
@@ -491,7 +499,7 @@
    let _param = {
      func: 's_get_app_menus',
      TypeCharOne: sessionStorage.getItem('kei_no'),
      typename: 'mob',
      typename: sessionStorage.getItem('typename'),
      LText: `select '${window.GLOB.appkey}'`,
      timestamp: moment().format('YYYY-MM-DD HH:mm:ss')
    }
@@ -523,7 +531,7 @@
    let param = {
      func: 'sPC_Get_LongParam',
      TypeCharOne: sessionStorage.getItem('kei_no'),
      typename: 'mob',
      typename: sessionStorage.getItem('typename'),
      MenuID: urlParam.copyMenuId
    }
@@ -578,6 +586,8 @@
      config.uuid = MenuId
      config.MenuID = MenuId
      config.open_edition = ''
      config.MenuName = urlParam.MenuName || ''
      config.MenuNo = urlParam.MenuNo || ''
      let indeComs = []
      config.components.forEach(item => {
@@ -606,7 +616,7 @@
        Api.getSystemConfig({
          func: 'sPC_Get_LongParam',
          TypeCharOne: sessionStorage.getItem('kei_no'),
          typename: 'mob',
          typename: sessionStorage.getItem('typename'),
          MenuID: item.uuid
        }).then(res => {
          res.uuid = item.uuid
@@ -810,7 +820,7 @@
        EasyCode: '',
        Template: 'webPage',
        TypeCharOne: sessionStorage.getItem('kei_no'),
        Typename: 'mob',
        Typename: sessionStorage.getItem('typename'),
        MenuName: config.MenuName || '',
        PageParam: JSON.stringify({Template: 'webPage'}),
        open_edition: config.open_edition,
@@ -880,7 +890,7 @@
                EasyCode: '',
                Template: item.type,
                TypeCharOne: sessionStorage.getItem('kei_no'),
                Typename: 'mob',
                Typename: sessionStorage.getItem('typename'),
                MenuName: item.name || '',
                PageParam: JSON.stringify({Template: item.type}),
                open_edition: item.open_edition || '',
@@ -1424,13 +1434,34 @@
    })
  }
  changeView = (val) => {
    if (val !== 'vertical') {
      window.GLOB.winWidth = 992
      window.GLOB.winHeight = 690
      window.GLOB.shellWidth = 853
      window.GLOB.shellHeight = 640
    } else {
      window.GLOB.winWidth = 736
      window.GLOB.winHeight = 945
      window.GLOB.shellWidth = 640
      window.GLOB.shellHeight = 853
    }
    this.setState({
      direction: val,
      comloading: true
    }, () => {
      this.setState({ comloading: false })
    })
  }
  render () {
    const { localedict, loading, activeKey, dict, MenuId, config, menuloading, customComponents } = this.state
    const { localedict, comloading, loading, activeKey, dict, MenuId, config, menuloading, customComponents } = this.state
    return (
      <ConfigProvider locale={localedict}>
        <div className="mk-mob-view" id="mk-mob-design-view">
          <Header />
          <Header changeView={this.changeView}/>
          {loading ? <Spin className="view-spin" size="large" /> : null}
          <DndProvider backend={HTML5Backend}>
            <div className="menu-setting">
@@ -1465,6 +1496,7 @@
            <div className="menu-control">
              <Button type="primary" onClick={this.submitConfig} loading={menuloading}>{dict['mob.save']}</Button>
              <Switch className="big" checkedChildren={dict['mob.enable']} unCheckedChildren={dict['mob.disable']} checked={config && config.enabled} onChange={this.onEnabledChange} />
              <CreateView resetmenu={this.getAppMenus} />
              <PasteController type="menu" Tab={null} insert={this.insert} />
              <StyleCombControlButton menu={config} />
              <SysInterface config={config} updateConfig={this.updateConfig}/>
@@ -1475,8 +1507,8 @@
              <Button type="default" onClick={this.closeView}>关闭</Button>
            </div>
            <div className={'menu-body ' + (menuloading ? 'saving' : '')}>
              <div className="mob-shell">
                {config ? <MobShell menu={config} handleList={this.updateConfig} /> : null}
              <div className="mob-shell" style={{width: window.GLOB.shellWidth, height: window.GLOB.shellHeight}}>
                {config && !comloading ? <MobShell menu={config} handleList={this.updateConfig} /> : null}
              </div>
            </div>
          </DndProvider>
src/views/mobdesign/index.scss
@@ -103,8 +103,8 @@
    }
  }
  .mob-shell {
    width: 376px;
    height: 680px;
    // width: 376px;
    // height: 680px;
    margin: 0 auto;
    background: #000000;
    background-size: 100% 100%;
src/views/mobdesign/menuform/index.jsx
@@ -69,7 +69,7 @@
                    message: dict['mob.required.input'] + dict['mob.menu'] + dict['mob.name'] + '!'
                  }
                ]
              })(<Input placeholder="" disabled={!!(config.fixed && config.MenuName)} autoComplete="off" onChange={this.changeName}/>)}
              })(<Input placeholder="" autoComplete="off" onChange={this.changeName}/>)}
            </Form.Item>
          </Col>
          <Col span={24}>
@@ -82,7 +82,7 @@
                    message: dict['mob.required.input'] + dict['mob.menu'] + dict['mob.param'] + '!'
                  }
                ]
              })(<Input placeholder="" disabled={!!(config.fixed && config.MenuName)} autoComplete="off" onChange={this.changeNo}/>)}
              })(<Input placeholder="" autoComplete="off" onChange={this.changeNo}/>)}
            </Form.Item>
          </Col>
          <Col span={24}>
src/views/pcdesign/index.jsx
@@ -25,6 +25,7 @@
const MenuForm = asyncComponent(() => import('./menuform'))
const MenuShell = asyncComponent(() => import('@/pc/menushell'))
const SourceWrap = asyncComponent(() => import('@/pc/modulesource'))
const CreateView = asyncComponent(() => import('@/pc/createview'))
const BgController = asyncComponent(() => import('@/pc/bgcontroller'))
const Quotecomponent = asyncComponent(() => import('@/pc/quotecomponent'))
const PasteController = asyncComponent(() => import('@/menu/pastecontroller'))
@@ -40,6 +41,7 @@
sessionStorage.setItem('isEditState', 'true')
sessionStorage.setItem('editMenuType', 'menu') // 编辑菜单类型
sessionStorage.setItem('appType', 'pc')        // 应用类型
sessionStorage.setItem('typename', 'pc')
document.body.className = ''
window.GLOB.UserComponentMap = new Map() // 缓存用户自定义组件
window.GLOB.CacheIndependent = new Map()
@@ -77,7 +79,6 @@
        sessionStorage.setItem('appId', param.ID || '')
        sessionStorage.setItem('lang', param.lang || 'zh-CN')
        sessionStorage.setItem('kei_no', param.kei_no || '')
        sessionStorage.setItem('link_type', param.link_type || 'true')
        sessionStorage.setItem('role_type', param.role_type || 'true')
        sessionStorage.setItem('login_types', param.login_types || 'true')
@@ -166,9 +167,6 @@
      type: 'view'
    }
    if (menu.fixed && menu.MenuNo && menu.MenuName) {
      param.fixed = true
    }
    param.MenuNo = menu.MenuNo || ''
    param.MenuName = menu.MenuName || ''
@@ -502,10 +500,6 @@
        config.open_edition = result.open_edition || ''
        window.GLOB.urlFields = config.urlFields || []
        if (urlParam.fixed && urlParam.MenuNo && urlParam.MenuName) {
          config.fixed = true
        }
        let indeComs = []
        config.components.forEach(item => {
          if (item.type === 'navbar') {
@@ -620,6 +614,8 @@
      config.uuid = MenuId
      config.MenuID = MenuId
      config.open_edition = ''
      config.MenuName = urlParam.MenuName || ''
      config.MenuNo = urlParam.MenuNo || ''
      let indeComs = []
      config.components.forEach(item => {
@@ -1045,21 +1041,21 @@
            })
            if (appViewList.length > _length) {
              let param = {
              let kparam = {
                func: 's_kei_link_keyids_addupt',
                BID: sessionStorage.getItem('appId'),
                exec_type: 'y',
                LText: ''
              }
    
              param.LText = appViewList.map(item => `select '${item.keys_id}','${item.keys_type}','${item.kei_no}','${item.appkey}','${item.bid}','${sessionStorage.getItem('CloudUserID')}','${item.remark}'`)
              param.LText = param.LText.join(' union all ')
              param.LText = Utils.formatOptions(param.LText)
              kparam.LText = appViewList.map(item => `select '${item.keys_id}','${item.keys_type}','${item.kei_no}','${item.appkey}','${item.bid}','${sessionStorage.getItem('CloudUserID')}','${item.remark}'`)
              kparam.LText = kparam.LText.join(' union all ')
              kparam.LText = Utils.formatOptions(kparam.LText)
        
              param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
              param.secretkey = Utils.encrypt('', param.timestamp)
              kparam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
              kparam.secretkey = Utils.encrypt('', kparam.timestamp)
    
              Api.getSystemConfig(param).then(result => {
              Api.getSystemConfig(kparam).then(result => {
                if (!result.status) {
                  notification.warning({
                    top: 92,
@@ -1514,6 +1510,7 @@
              </div>
              <Button type="primary" onClick={this.submitConfig} loading={menuloading}>{dict['mob.save']}</Button>
              <Switch className="big" checkedChildren={dict['mob.enable']} unCheckedChildren={dict['mob.disable']} checked={config && config.enabled} onChange={this.onEnabledChange} />
              <CreateView resetmenu={this.getAppMenus} />
              <PasteController type="menu" Tab={null} insert={this.insert} />
              <StyleCombControlButton menu={config} />
              <SysInterface config={config} updateConfig={this.updateConfig}/>
src/views/pcdesign/menuform/index.jsx
@@ -69,7 +69,7 @@
                    message: dict['mob.required.input'] + dict['mob.menu'] + dict['mob.name'] + '!'
                  }
                ]
              })(<Input placeholder="" disabled={!!(config.fixed && config.MenuName)} autoComplete="off" onChange={this.changeName}/>)}
              })(<Input placeholder="" autoComplete="off" onChange={this.changeName}/>)}
            </Form.Item>
          </Col>
          <Col span={24}>
@@ -82,7 +82,7 @@
                    message: dict['mob.required.input'] + dict['mob.menu'] + dict['mob.param'] + '!'
                  }
                ]
              })(<Input placeholder="" disabled={!!(config.fixed && config.MenuName)} autoComplete="off" onChange={this.changeNo}/>)}
              })(<Input placeholder="" autoComplete="off" onChange={this.changeNo}/>)}
            </Form.Item>
          </Col>
          <Col span={24}>