| | |
| | | import React, {Component} from 'react' |
| | | import PropTypes from 'prop-types' |
| | | import { is, fromJS } from 'immutable' |
| | | import { Modal, Button, notification } from 'antd' |
| | | import { QuestionCircleOutlined, CalendarOutlined } from '@ant-design/icons' |
| | | import { Modal, Button, notification, Table, Spin } from 'antd' |
| | | import { CalendarOutlined } from '@ant-design/icons' |
| | | import moment from 'moment' |
| | | |
| | | import Api from '@/api' |
| | |
| | | class Versions extends Component { |
| | | static propTpyes = { |
| | | MenuId: PropTypes.string, |
| | | open_edition: PropTypes.string, |
| | | Template: PropTypes.string, |
| | | checklog: PropTypes.func, |
| | | updateConfig: PropTypes.func |
| | | } |
| | | |
| | | state = { |
| | | visible: false, |
| | | loadingTable: false, |
| | | preconfirming: false, |
| | | nextconfirming: false, |
| | | tables: [], |
| | | loading: false, |
| | | logs: [], |
| | | columns: [ |
| | | { title: '修改时间', dataIndex: 'createdate', key: 'createdate', align: 'center' }, |
| | | { title: '修改人', dataIndex: 'fullname', key: 'fullname', align: 'center' }, |
| | | { |
| | | title: '操作', |
| | | key: 'action', |
| | | align: 'center', |
| | | width: '230px', |
| | | render: (text, record) => ( |
| | | <div> |
| | | <Button type="link" onClick={() => this.change(record)} style={{color: '#1890ff'}}>切换</Button> |
| | | </div> |
| | | ), |
| | | }, |
| | | ] |
| | | } |
| | | |
| | | shouldComponentUpdate (nextProps, 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, |
| | | func: 's_get_spages_param_log', |
| | | MenuID: this.props.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 |
| | | LText: this.props.MenuId + window.GLOB.appkey |
| | | } |
| | | |
| | | param.secretkey = Utils.encrypt(param.LText, param.timestamp) |
| | | |
| | | this.setState({preconfirming: true}) |
| | | this.setState({loading: true, visible: true, logs: []}) |
| | | |
| | | Api.getCloudConfig(param).then(res => { |
| | | this.setState({preconfirming: false}) |
| | | this.setState({loading: false}) |
| | | |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | } else { |
| | | this.setState({visible: false}) |
| | | notification.success({ |
| | | top: 92, |
| | | message: '执行成功。', |
| | | duration: 1 |
| | | return |
| | | } else if (!res.data || res.data.length === 0) { |
| | | Modal.warning({ |
| | | title: '当前菜单无历史版本。', |
| | | okText: '知道了' |
| | | }) |
| | | |
| | | if (updateConfig) { |
| | | updateConfig() |
| | | } else { |
| | | setTimeout(() => { |
| | | window.location.reload() |
| | | }, 1000) |
| | | } |
| | | return |
| | | } |
| | | |
| | | this.setState({logs: res.data}) |
| | | }) |
| | | } |
| | | |
| | | nextVersion = () => { |
| | | const { MenuId, open_edition, updateConfig } = this.props |
| | | change = (record) => { |
| | | const { checklog } = this.props |
| | | |
| | | if (checklog()) { |
| | | this.getpage(record) |
| | | } else { |
| | | const that = this |
| | | |
| | | Modal.confirm({ |
| | | title: '当前配置未保存,确定切换吗?', |
| | | onOk: () => { |
| | | that.getpage(record) |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | | } |
| | | } |
| | | |
| | | getpage = (record) => { |
| | | const { Template } = this.props |
| | | |
| | | let param = { |
| | | func: 's_spages_Param_ctrlzy', |
| | | ctrlzy: 'y', |
| | | MenuID: MenuId, |
| | | func: 'sPC_Get_LongParam_page_id', |
| | | id: record.id, |
| | | 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}) |
| | | this.setState({loading: true}) |
| | | |
| | | Api.getCloudConfig(param).then(res => { |
| | | this.setState({nextconfirming: false}) |
| | | this.setState({loading: false}) |
| | | |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | } else { |
| | | this.setState({visible: false}) |
| | | notification.success({ |
| | | } else if (!res.LongParam) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '执行成功。', |
| | | duration: 1 |
| | | message: '未获取到配置信息!', |
| | | duration: 5 |
| | | }) |
| | | |
| | | if (updateConfig) { |
| | | updateConfig() |
| | | } else { |
| | | let config = null |
| | | |
| | | try { |
| | | config = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam))) |
| | | } catch (e) { |
| | | console.warn('Parse Failure') |
| | | config = null |
| | | } |
| | | |
| | | if (!config) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '配置信息解析失败!', |
| | | duration: 5 |
| | | }) |
| | | } else { |
| | | setTimeout(() => { |
| | | window.location.reload() |
| | | }, 1000) |
| | | if (Template !== config.Template) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '菜单模板不一致,不可切换!', |
| | | duration: 5 |
| | | }) |
| | | } else if (config.Template === 'CustomPage' && config.version !== 2.0) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '历史配置版本过低,不可切换!', |
| | | duration: 5 |
| | | }) |
| | | } else { |
| | | this.setState({visible: false}, () => { |
| | | this.props.updateConfig(config) |
| | | }) |
| | | |
| | | notification.success({ |
| | | top: 92, |
| | | message: '版本切换成功,保存后生效!', |
| | | duration: 5 |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | render() { |
| | | const { visible, preconfirming, nextconfirming } = this.state |
| | | const { visible, loading, logs, columns } = this.state |
| | | |
| | | return ( |
| | | <> |
| | | <Button style={{borderColor: '#40a9ff', color: '#40a9ff'}} onClick={this.trigger}><CalendarOutlined /> 版本管理</Button> |
| | | <Modal |
| | | title="" |
| | | title="版本管理" |
| | | wrapClassName="version-modal" |
| | | visible={visible} |
| | | width={500} |
| | | closable={false} |
| | | width={800} |
| | | maskClosable={false} |
| | | footer={[]} |
| | | onCancel={() => { this.setState({ visible: false, logs: [] }) }} |
| | | footer={[ |
| | | <Button key="cancel" onClick={() => this.setState({ visible: false, logs: [] })}>关闭</Button> |
| | | ]} |
| | | destroyOnClose |
| | | > |
| | | <div className="header"><QuestionCircleOutlined/>版本切换</div> |
| | | <div className="detail">请选择需要切换的版本,或点击取消关闭弹窗。</div> |
| | | <div className="footer"> |
| | | <Button key="pre" type="primary" loading={preconfirming} onClick={this.preVersion}>上一版本</Button> |
| | | <Button key="next" type="primary" loading={nextconfirming} onClick={this.nextVersion}>下一版本</Button> |
| | | <Button key="cancel" onClick={() => { this.setState({ visible: false })}}>取消</Button> |
| | | </div> |
| | | {loading ? <Spin size="large" /> : null} |
| | | <Table |
| | | rowKey="id" |
| | | columns={columns} |
| | | dataSource={logs} |
| | | pagination={{ |
| | | pageSize: 10, |
| | | total: logs.length, |
| | | showTotal: (total, range) => `${range[0]}-${range[1]} 共 ${total} 条` |
| | | }} |
| | | /> |
| | | </Modal> |
| | | </> |
| | | ) |