king
2021-09-06 d4c2669215ef211e52496e69a89010a9b545e04a
2021-09-06
14个文件已修改
2个文件已添加
443 ■■■■■ 已修改文件
src/locales/en-US/model.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/locales/zh-CN/model.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/popview/index.jsx 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/versions/index.jsx 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/menu/versions/index.scss 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/actionList/normalbutton/index.jsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/index.jsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/tabviews/zshare/mutilform/index.scss 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/comtableconfig/index.jsx 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/modalconfig/index.jsx 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/modalconfig/settingform/index.jsx 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/templates/subtableconfig/index.jsx 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/design/header/index.scss 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/menudesign/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mobdesign/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/pcdesign/index.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/locales/en-US/model.js
@@ -184,7 +184,6 @@
  'header.form.asc': '正序',
  'header.form.desc': '倒序',
  'header.form.linkField': '关联字段',
  'header.form.display': '显示方式',
  'header.form.dropdown': '下拉菜单',
  'header.form.button': '按钮',
  'model.form.style': '风格',
src/locales/zh-CN/model.js
@@ -184,7 +184,6 @@
  'header.form.asc': '正序',
  'header.form.desc': '倒序',
  'header.form.linkField': '关联字段',
  'header.form.display': '显示方式',
  'header.form.dropdown': '下拉菜单',
  'header.form.button': '按钮',
  'model.form.style': '风格',
src/menu/popview/index.jsx
@@ -19,6 +19,7 @@
const { confirm } = Modal
const MenuForm = asyncComponent(() => import('./menuform'))
const Versions = asyncComponent(() => import('@/menu/versions'))
const Header = asyncComponent(() => import('@/menu/header'))
const SourceWrap = asyncComponent(() => import('@/menu/modulesource'))
const MenuShell = asyncComponent(() => import('@/menu/menushell'))
@@ -39,9 +40,7 @@
  state = {
    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
    MenuType: '',
    MenuId: '',
    MenuNo: '',
    delButtons: [],
    activeKey: 'basedata',
    menuloading: false,
@@ -556,9 +555,21 @@
    window.GLOB.customMenu = config
  }
  refreshConfig = () => {
    this.setState({
      delButtons: [],
      activeKey: 'basedata',
      menuloading: false,
      oriConfig: null,
      config: null,
    }, () => {
      this.getMenuParam()
    })
  }
  render () {
    const { btn } = this.props
    const { activeKey, MenuType, dict, config, menuloading, customComponents } = this.state
    const { activeKey, dict, config, menuloading, customComponents, MenuId } = this.state
    return (
      <div className="pc-poper-view">
@@ -576,10 +587,10 @@
                </Panel>
                {/* 组件添加 */}
                <Panel header={dict['mob.component']} key="component">
                  <SourceWrap MenuType={MenuType} />
                  <SourceWrap MenuType="" />
                </Panel>
                {customComponents && customComponents.length ? <Panel header="自定义组件" key="cuscomponent">
                  <SourceWrap components={customComponents} MenuType={MenuType} />
                  <SourceWrap components={customComponents} MenuType="" />
                </Panel> : null}
                <Panel header={'页面背景'} key="background">
                  {config ? <BgController config={config} updateConfig={this.updateConfig} /> : null}
@@ -594,6 +605,7 @@
                <div> {config && config.MenuName} </div>
              } bordered={false} extra={
                <div>
                  <Versions MenuId={MenuId} open_edition={config ? config.open_edition : ''} updateConfig={this.refreshConfig}/>
                  <ReplaceField type="custom" config={config} updateConfig={this.resetConfig}/>
                  <StyleCombControlButton menu={config} />
                  <PasteController type="menu" Tab={null} insert={this.insert} />
src/menu/versions/index.jsx
New file
@@ -0,0 +1,156 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import { is, fromJS } from 'immutable'
import { Modal, Button, Icon, notification } from 'antd'
import moment from 'moment'
import Api from '@/api'
// import options from '@/store/options.js'
import Utils from '@/utils/utils.js'
import './index.scss'
class Versions extends Component {
  static propTpyes = {
    MenuId: PropTypes.string,
    open_edition: PropTypes.string,
    updateConfig: PropTypes.func
  }
  state = {
    visible: false,
    loadingTable: false,
    preconfirming: false,
    nextconfirming: false,
    tables: [],
  }
  shouldComponentUpdate (nextProps, nextState) {
    return !is(fromJS(this.state), fromJS(nextState))
  }
  trigger = () => {
    this.setState({visible: true})
  }
  preVersion = () => {
    const { MenuId, open_edition, updateConfig } = this.props
    let param = {
      func: 's_spages_Param_ctrlzy',
      ctrlzy: 'z',
      MenuID: MenuId,
      TypeCharOne: sessionStorage.getItem('kei_no') || '',
      TypeName: sessionStorage.getItem('typename') || '',
      lang: sessionStorage.getItem('lang'),
      timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
      open_edition: open_edition,
      LText: MenuId + window.GLOB.appkey
    }
    param.secretkey = Utils.encrypt(param.LText, param.timestamp)
    this.setState({preconfirming: true})
    Api.getCloudConfig(param).then(res => {
      this.setState({preconfirming: false})
      if (!res.status) {
        notification.warning({
          top: 92,
          message: res.message,
          duration: 5
        })
      } else {
        this.setState({visible: false})
        notification.success({
          top: 92,
          message: '执行成功。',
          duration: 2
        })
        if (updateConfig) {
          updateConfig()
        } else {
          setTimeout(() => {
            window.location.reload()
          }, 2000)
        }
      }
    })
  }
  nextVersion = () => {
    const { MenuId, open_edition, updateConfig } = this.props
    let param = {
      func: 's_spages_Param_ctrlzy',
      ctrlzy: 'y',
      MenuID: MenuId,
      TypeCharOne: sessionStorage.getItem('kei_no') || '',
      TypeName: sessionStorage.getItem('typename') || '',
      lang: sessionStorage.getItem('lang'),
      timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
      open_edition: open_edition,
      LText: MenuId + window.GLOB.appkey
    }
    param.secretkey = Utils.encrypt(param.LText, param.timestamp)
    this.setState({nextconfirming: true})
    Api.getCloudConfig(param).then(res => {
      this.setState({nextconfirming: false})
      if (!res.status) {
        notification.warning({
          top: 92,
          message: res.message,
          duration: 5
        })
      } else {
        this.setState({visible: false})
        notification.success({
          top: 92,
          message: '执行成功。',
          duration: 2
        })
        if (updateConfig) {
          updateConfig()
        } else {
          setTimeout(() => {
            window.location.reload()
          }, 2000)
        }
      }
    })
  }
  render() {
    const { visible, preconfirming, nextconfirming } = this.state
    return (
      <div style={{display: 'inline-block'}}>
        <Button style={{borderColor: '#40a9ff', color: '#40a9ff'}} icon="calendar" onClick={this.trigger}>版本管理</Button>
        <Modal
          title=""
          wrapClassName="version-modal"
          visible={visible}
          width={500}
          closable={false}
          maskClosable={false}
          footer={[]}
          destroyOnClose
        >
          <div className="header"><Icon type="question-circle"/>版本切换</div>
          <div className="detail">请选择需要切换的版本,或点击取消关闭弹窗。</div>
          <div className="footer">
            <Button key="cancel" onClick={() => { this.setState({ visible: false })}}>取消</Button>
            <Button key="pre" type="primary" loading={preconfirming} onClick={this.preVersion}>上一版本</Button>
            <Button key="next" type="primary" loading={nextconfirming} onClick={this.nextVersion}>下一版本</Button>
          </div>
        </Modal>
      </div>
    )
  }
}
export default Versions
src/menu/versions/index.scss
New file
@@ -0,0 +1,30 @@
.version-modal {
  .ant-modal-body {
    padding: 32px 32px 24px;
  }
  .ant-modal-footer {
    display: none;
  }
  .header {
    color: rgba(0,0,0,.85);
    font-weight: 500;
    font-size: 16px;
    .anticon {
      color: #faad14;
      margin-right: 16px;
      font-size: 22px;
    }
  }
  .detail {
    margin-top: 8px;
    margin-bottom: 24px;
    color: rgba(0,0,0,.65);
    font-size: 14px;
  }
  .footer {
    text-align: right;
    .ant-btn + .ant-btn {
      margin-left: 15px;
    }
  }
}
src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -1733,11 +1733,11 @@
          />
          <div style={{ position: 'absolute', zIndex: 1, right: 0, bottom: 0, width: '100%', borderTop: '1px solid #e9e9e9', padding: '10px 16px', background: '#fff', textAlign: 'right'}}>
            <Button onClick={this.handleCancel} style={{ marginRight: 8 }}>
              取消
              {btnconfig.setting.formType !== 'check' ? '取消' : '关闭'}
            </Button>
            <Button onClick={this.handleOk} loading={this.state.confirmLoading} type="primary">
            {btnconfig.setting.formType !== 'check' ? <Button onClick={this.handleOk} loading={this.state.confirmLoading} type="primary">
              确定
            </Button>
            </Button> : null}
          </div>
        </Drawer>
      )
src/tabviews/zshare/mutilform/index.jsx
@@ -52,6 +52,7 @@
    let record = {}
    let formlist = fromJS(action.fields).toJS()
    let fieldMap = new Map()
    let check = action.setting.formType === 'check'
    formlist = formlist.filter(item => {
      if (item.supField && item.supvalue) { // 多层表单控制
@@ -76,7 +77,7 @@
      // 数据自动填充
      item.readin = item.readin !== 'false'
      item.readonly = item.readonly === 'true'
      item.readonly = check || item.readonly === 'true'
      item.writein = item.writein !== 'false'
      item.hidden = item.hidden === 'true'
      item.fieldlength = item.fieldlength || 50
@@ -673,7 +674,7 @@
        } else if (item.type === 'color') {
          content = (<MKColor config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
        } else if (item.type === 'checkcard') {
          className = "checkcard"
          className = 'checkcard'
          content = (<MKCheckCard config={item} onChange={(val, other) => this.recordChange({[item.field]: val, ...other}, item)}/>)
        } else if (item.type === 'switch') {
          content = (<MKSwitch config={item} onChange={(val) => this.recordChange({[item.field]: val})}/>)
@@ -684,6 +685,7 @@
        } else if (item.type === 'date' || item.type === 'datemonth' || item.type === 'datetime') {
          content = (<MKDatePicker config={item} onChange={(val) => this.recordChange({[item.field]: val})} />)
        } else if (item.type === 'fileupload') {
          className = item.readonly ? 'readonly' : ''
          content = (<MKFileUpload config={item} onChange={(val) => this.recordChange({[item.field]: val})} />)
        } else if (item.type === 'textarea') {
          content = (<MKTextArea config={item} onChange={(val, defer) => !defer && this.recordChange({[item.field]: val})}/>)
src/tabviews/zshare/mutilform/index.scss
@@ -30,6 +30,18 @@
      line-height: 1.5;
    }
  }
  .ant-form-item.readonly {
    .fileupload-form-container {
      .ant-upload-select {
        display: none;
      }
      .ant-upload-list-item-actions {
        .anticon-delete {
          display: none;
        }
      }
    }
  }
  .ant-form-item.hint {
    margin-bottom: 0px;
    .message {
src/templates/comtableconfig/index.jsx
@@ -25,6 +25,8 @@
const { Panel } = Collapse
const { confirm } = Modal
const Versions = asyncComponent(() => import('@/menu/versions'))
const UrlFieldComponent = asyncComponent(() => import('@/menu/urlfieldcomponent'))
const ReplaceField = asyncComponent(() => import('@/menu/replaceField'))
const EditComponent = asyncComponent(() => import('@/templates/zshare/editcomponent'))
@@ -1083,9 +1085,72 @@
    })
  }
  refreshConfig = () => {
    const { menu } = this.props
    let param = {
      func: 'sPC_Get_LongParam',
      MenuID: menu.MenuID
    }
    Api.getSystemConfig(param).then(res => {
      if (res.status) {
        let _config = ''
        if (res.LongParam) {
          try {
            _config = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
          } catch (e) {
            console.warn('Parse Failure')
            _config = ''
          }
        }
        if (!_config) {
          notification.warning({
            top: 92,
            message: '未获取到配置信息!',
            duration: 5
          })
          return
        }
        _config.ParentId = menu.ParentId
        _config.fstMenuId = menu.fstMenuId
        _config.MenuName = menu.MenuName || ''
        _config.MenuNo = menu.MenuNo || ''
        _config.OpenType = menu.PageParam ? menu.PageParam.OpenType : ''
        _config.easyCode = _config.easyCode || ''
        // 版本兼容
        _config = updateCommonTable(_config)
        this.setState({
          config: null
        }, () => {
          this.setState({
            chartview: _config.charts[0].uuid,
            config: _config,
            openEdition: res.open_edition || '',
            activeKey: menu.activeKey || '0',
            originActions: [],
            originMenu: fromJS(_config).toJS()
          })
        })
      } else {
        notification.warning({
          top: 92,
          message: res.message,
          duration: 5
        })
      }
    })
  }
  render () {
    const { menu } = this.props
    const { activeKey, config, chartview } = this.state
    const { activeKey, config, chartview, openEdition } = this.state
    if (!config) return null
    const confActions = config.action.filter(_action => !_action.origin && (['pop', 'popview'].includes(_action.OpenType) || (_action.OpenType === 'tab' && _action.tabTemplate === 'FormTab') || (_action.OpenType === 'funcbutton' && _action.execMode === 'pop')))
@@ -1206,6 +1271,7 @@
              </div>
            } bordered={false} extra={
              <div>
                <Versions MenuId={menu.MenuID} open_edition={openEdition} updateConfig={this.refreshConfig}/>
                <ReplaceField type="table" config={config} updateConfig={this.updateconfig}/>
                <EditComponent dict={this.state.dict} options={['search', 'action', 'columns']} config={this.state.config} MenuID={this.props.menu.MenuID} thawButtons={this.state.thawButtons} refresh={this.editConfig}/>
                <Switch className="big" checkedChildren={this.state.dict['model.enable']} unCheckedChildren={this.state.dict['model.disable']} checked={this.state.config.enabled} onChange={this.onEnabledChange} />
@@ -1215,7 +1281,7 @@
            } style={{ width: '100%' }}>
              <SettingComponent
                config={config}
                MenuID={this.props.menu.MenuID}
                MenuID={menu.MenuID}
                updatesetting={this.updateconfig}
              />
              <SearchComponent
src/templates/modalconfig/index.jsx
@@ -25,6 +25,7 @@
const { confirm } = Modal
const CommonDict = sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS
const Versions = asyncComponent(() => import('@/menu/versions'))
const ReplaceField = asyncComponent(() => import('@/menu/replaceField'))
const ModalForm = asyncComponent(() => import('@/templates/zshare/modalform'))
const EditComponent = asyncComponent(() => import('@/templates/zshare/editcomponent'))
@@ -600,8 +601,62 @@
    })
  }
  refreshConfig = () => {
    const { editAction } = this.props
    let param = {
      func: 'sPC_Get_LongParam',
      MenuID: editAction.uuid
    }
    Api.getSystemConfig(param).then(res => {
      if (res.status) {
        let _config = ''
        if (res.LongParam) {
          try {
            _config = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
          } catch (e) {
            console.warn('Parse Failure')
            _config = ''
          }
        }
        if (!_config) {
          notification.warning({
            top: 92,
            message: '未获取到配置信息!',
            duration: 5
          })
          return
        }
        // 版本兼容
        _config = updateForm(_config)
        this.setState({
          config: null
        }, () => {
          this.setState({
            config: _config,
            openEdition: res.open_edition || '',
            originConfig: fromJS(_config).toJS()
          })
        })
      } else {
        notification.warning({
          top: 92,
          message: res.message,
          duration: 5
        })
      }
    })
  }
  render () {
    const { config, dict } = this.state
    const { editAction } = this.props
    const { config, dict, openEdition } = this.state
    if (!config) return null
    return (
      <div className="modal-form-board">
@@ -637,6 +692,7 @@
          <div className="setting">
            <Card title={dict['header.menu.form.configurable']} bordered={false} extra={
              <div>
                <Versions MenuId={editAction.uuid} open_edition={openEdition} updateConfig={this.refreshConfig}/>
                <ReplaceField type="form" config={config} updateConfig={this.updateconfig}/>
                <EditComponent dict={dict} options={['form']} config={this.state.config} refresh={this.updateEditConfig}/>
                <Button type="primary" onClick={this.submitConfig} loading={this.state.menuloading}>{dict['model.save']}</Button>
src/templates/modalconfig/settingform/index.jsx
@@ -210,6 +210,18 @@
              )}
            </Form.Item>
          </Col> : null}
          {display === 'drawer' ? <Col span={12}>
            <Form.Item label="表单类型">
              {getFieldDecorator('formType', {
                initialValue: config.setting.formType || 'edit'
              })(
                <Radio.Group style={{whiteSpace: 'nowrap'}}>
                  <Radio value="edit">编辑</Radio>
                  <Radio value="check">查看</Radio>
                </Radio.Group>
              )}
            </Form.Item>
          </Col> : null}
          {appType === 'mob' ? <Col span={12}>
            <Form.Item label="左边距">
              {getFieldDecorator('paddingLeft', {
src/templates/subtableconfig/index.jsx
@@ -26,6 +26,7 @@
const { Panel } = Collapse
const { confirm } = Modal
const Versions = asyncComponent(() => import('@/menu/versions'))
const ReplaceField = asyncComponent(() => import('@/menu/replaceField'))
const EditComponent = asyncComponent(() => import('@/templates/zshare/editcomponent'))
const SettingComponent = asyncComponent(() => import('@/templates/sharecomponent/settingcomponent'))
@@ -917,8 +918,65 @@
    })
  }
  refreshConfig = () => {
    const { config } = this.props
    let param = {
      func: 'sPC_Get_LongParam',
      MenuID: config.uuid
    }
    Api.getSystemConfig(param).then(res => {
      if (res.status) {
        let _config = ''
        if (res.LongParam) {
          try {
            _config = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
          } catch (e) {
            console.warn('Parse Failure')
            _config = ''
          }
        }
        if (!_config) {
          notification.warning({
            top: 92,
            message: '未获取到配置信息!',
            duration: 5
          })
          return
        }
        // 版本兼容
        _config = updateSubTable(_config)
        this.setState({
          config: null
        }, () => {
          this.setState({
            chartview: _config.charts[0].uuid,
            config: _config,
            openEdition: res.open_edition || '',
            activeKey: '0',
            originActions: [],
            originConfig: fromJS(_config).toJS()
          })
        })
      } else {
        notification.warning({
          top: 92,
          message: res.message,
          duration: 5
        })
      }
    })
  }
  render () {
    const { activeKey, config, chartview } = this.state
    const { activeKey, config, chartview, openEdition } = this.state
    if (!config) return null
    const confActions = config.action.filter(_action => !_action.origin && (['pop', 'popview'].includes(_action.OpenType) || (_action.OpenType === 'funcbutton' && _action.execMode === 'pop')))
@@ -1009,6 +1067,7 @@
              </div>
            } bordered={false} extra={
              <div>
                <Versions MenuId={config.uuid} open_edition={openEdition} updateConfig={this.refreshConfig}/>
                <ReplaceField type="table" config={config} updateConfig={this.updateconfig}/>
                <EditComponent dict={this.state.dict} options={['search', 'action', 'columns']} config={config} MenuID={config.uuid} thawButtons={this.state.thawButtons} refresh={this.updateConfig}/>
                <Switch className="big" checkedChildren="启" unCheckedChildren="停" checked={config.enabled} onChange={this.onEnabledChange} />
src/views/design/header/index.scss
@@ -151,7 +151,7 @@
  }
  .entrance {
    position: absolute;
    top: 200px;
    top: 100px;
    background: #ffffff;
    box-shadow: 0 0 5px #d9d9d9;
    border-radius: 5px;
src/views/menudesign/index.jsx
@@ -35,6 +35,7 @@
const PaddingController = asyncComponent(() => import('@/menu/padcontroller'))
const StyleController = asyncComponent(() => import('@/menu/stylecontroller'))
const ReplaceField = asyncComponent(() => import('@/menu/replaceField'))
const Versions = asyncComponent(() => import('@/menu/versions'))
const SysInterface = asyncComponent(() => import('@/menu/sysinterface'))
const UrlFieldComponent = asyncComponent(() => import('@/menu/urlfieldcomponent'))
const PictureController = asyncComponent(() => import('@/menu/picturecontroller'))
@@ -978,6 +979,7 @@
                  <div> {config && config.MenuName} </div>
                } bordered={false} extra={
                  <div>
                    <Versions MenuId={MenuId} open_edition={config ? config.open_edition : ''}/>
                    <ReplaceField type="custom" config={config} updateConfig={this.resetConfig}/>
                    <SysInterface config={config} updateConfig={this.updateConfig}/>
                    <PictureController/>
src/views/mobdesign/index.jsx
@@ -27,6 +27,7 @@
const MobShell = asyncComponent(() => import('@/mob/mobshell'))
const CreateView = asyncComponent(() => import('@/pc/createview'))
const Transfer = asyncComponent(() => import('@/pc/transfer'))
const Versions = asyncComponent(() => import('@/menu/versions'))
const SourceWrap = asyncComponent(() => import('@/mob/modulesource'))
const BgController = asyncComponent(() => import('@/pc/bgcontroller'))
const ReplaceField = asyncComponent(() => import('@/menu/replaceField'))
@@ -1359,6 +1360,7 @@
                <Button className="mk-border-danger" icon="redo" onClick={this.refreshView}>强制刷新</Button>
                <ReplaceField type="custom" config={config} updateConfig={this.resetConfig}/>
                <Transfer MenuID={MenuId} />
                <Versions MenuId={MenuId} open_edition={config ? config.open_edition : ''}/>
                <Button type="default" onClick={this.closeView}>关闭</Button>
              </div>
            </div>
src/views/pcdesign/index.jsx
@@ -25,6 +25,7 @@
const MenuForm = asyncComponent(() => import('./menuform'))
const Transfer = asyncComponent(() => import('@/pc/transfer'))
const PopviewController = asyncComponent(() => import('@/menu/popview'))
const Versions = asyncComponent(() => import('@/menu/versions'))
const MenuShell = asyncComponent(() => import('@/pc/menushell'))
const SourceWrap = asyncComponent(() => import('@/pc/modulesource'))
const CreateView = asyncComponent(() => import('@/pc/createview'))
@@ -1597,6 +1598,7 @@
                <Button className="mk-border-danger" icon="redo" onClick={this.refreshView}>强制刷新</Button>
                <ReplaceField type="custom" config={config} updateConfig={this.resetConfig}/>
                <Transfer MenuID={MenuId} />
                <Versions MenuId={MenuId} open_edition={config ? config.open_edition : ''}/>
                <Button type="default" onClick={this.closeView}>关闭</Button>
              </div>
            </div>