import React, { Component } from 'react'
|
import { connect } from 'react-redux'
|
import { DndProvider } from 'react-dnd'
|
import { fromJS } from 'immutable'
|
import HTML5Backend from 'react-dnd-html5-backend'
|
// import { SketchPicker } from 'react-color'
|
import { Icon, Tabs, notification, Modal } from 'antd'
|
|
import Api from '@/api'
|
import zhCN from '@/locales/zh-CN/mob.js'
|
import enUS from '@/locales/en-US/mob.js'
|
import asyncComponent from '@/utils/asyncComponent'
|
|
import './index.scss'
|
|
const { TabPane } = Tabs
|
const { confirm } = Modal
|
|
const Header = asyncComponent(() => import('@/mob/header'))
|
const Controller = asyncComponent(() => import('@/mob/controller'))
|
const MobShell = asyncComponent(() => import('@/mob/mobshell'))
|
const SourceWrap = asyncComponent(() => import('@/mob/modelsource'))
|
const DataSource = asyncComponent(() => import('@/mob/datasource'))
|
|
class Mobile extends Component {
|
state = {
|
dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
|
appId: this.props.match.params.appId,
|
appType: this.props.match.params.appType,
|
appConfig: null,
|
saveIng: false,
|
config: null,
|
pageIndex: 0,
|
editElem: null
|
}
|
|
UNSAFE_componentWillMount() {
|
this.getAppParam(this.props.match.params.appId)
|
}
|
|
/**
|
* @description 组件销毁,清除state更新
|
*/
|
componentWillUnmount () {
|
this.setState = () => {
|
return
|
}
|
}
|
|
jumpToManage = () => {
|
this.props.history.replace('/mobmanage')
|
// this.props.history.push('/mobdesign/sdafadjfidsf/dsfsdf')
|
}
|
|
triggerSave = () => {
|
this.setState({
|
saveIng: true
|
})
|
}
|
|
getAppParam = (id) => {
|
Api.getSystemConfig({
|
func: 'sPC_Get_LongParam',
|
MenuID: id
|
}).then(result => {
|
if (result.status) {
|
let appConfig = null
|
|
if (result.LongParam) {
|
try {
|
appConfig = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam)))
|
} catch (e) {
|
console.warn('Parse Failure')
|
appConfig = null
|
}
|
}
|
|
if (!appConfig) {
|
appConfig = {
|
version: 1.0,
|
label: '',
|
uuid: this.props.match.params.appId,
|
pageIndex: 0,
|
sourcelist: [],
|
components: []
|
}
|
}
|
|
this.setState({
|
appConfig: appConfig,
|
config: fromJS(appConfig).toJS()
|
})
|
} else {
|
notification.warning({
|
top: 92,
|
message: result.message,
|
duration: 5
|
})
|
}
|
})
|
}
|
|
deleteCard = (id) => {
|
let _this = this
|
let config = fromJS(this.state.config).toJS()
|
|
confirm({
|
title: '确定删除元素吗?',
|
content: '',
|
okText: this.state.dict['mob.confirm'],
|
cancelText: this.state.dict['mob.cancel'],
|
onOk() {
|
config.components = config.components.filter(item => item.uuid !== id)
|
|
_this.setState({
|
config: config
|
})
|
},
|
onCancel() {}
|
})
|
}
|
|
editCard = (element) => {
|
this.setState({
|
editElem: element
|
})
|
}
|
|
updateConfig = (config) => {
|
this.setState({
|
config: config
|
})
|
}
|
|
render () {
|
const { saveIng, appType, config, editElem } = this.state
|
|
return (
|
<div className="mobile-view">
|
<Header view="design" jumpToManage={this.jumpToManage} triggerSave={this.triggerSave} saveIng={saveIng} />
|
<DndProvider backend={HTML5Backend}>
|
<div className="mob-body">
|
<div className="mob-tool">
|
<div className="mob-tool-content">
|
<div className="plus-content">
|
<Icon type="plus-circle" />添 加 内 容
|
</div>
|
<div className="useable-component">
|
<SourceWrap appType={appType} />
|
</div>
|
</div>
|
<div className="mob-tool-other"></div>
|
</div>
|
{appType === 'mob' && config ?
|
<div className="mob-shell">
|
<MobShell config={config} deleteCard={this.deleteCard} editCard={this.editCard} editId={editElem ? editElem.uuid : ''} handleList={this.updateConfig} />
|
</div> : null
|
}
|
<div className="mob-setting">
|
{config ? <Tabs defaultActiveKey="2" animated={false} size="small">
|
<TabPane tab="配置" key="1">
|
{/* <SketchPicker /> */}
|
<Controller />
|
</TabPane>
|
<TabPane tab="数据源" key="2">
|
<DataSource config={config} updateConfig={this.updateConfig} />
|
</TabPane>
|
</Tabs> : null}
|
</div>
|
</div>
|
</DndProvider>
|
</div>
|
)
|
}
|
}
|
|
const mapStateToProps = () => {
|
return {}
|
}
|
|
const mapDispatchToProps = () => {
|
return {}
|
}
|
|
export default connect(mapStateToProps, mapDispatchToProps)(Mobile)
|