| | |
| | | import { withRouter } from 'react-router' |
| | | import { is, fromJS } from 'immutable' |
| | | import moment from 'moment' |
| | | import { ConfigProvider, notification, Modal, Collapse, Button, Spin } from 'antd' |
| | | import { notification, Modal, Collapse, Button, Spin } from 'antd' |
| | | import { DoubleLeftOutlined, DoubleRightOutlined, LeftOutlined, UserOutlined, EllipsisOutlined } from '@ant-design/icons' |
| | | |
| | | import Api from '@/api' |
| | | import Utils from '@/utils/utils.js' |
| | | import antdEnUS from 'antd/es/locale/en_US' |
| | | import antdZhCN from 'antd/es/locale/zh_CN' |
| | | // import MKEmitter from '@/utils/events.js' |
| | | import asyncComponent from '@/utils/asyncComponent' |
| | | import getWrapForm from './options' |
| | |
| | | const StyleController = asyncComponent(() => import('@/menu/stylecontroller')) |
| | | const NormalForm = asyncComponent(() => import('@/components/normalform')) |
| | | |
| | | sessionStorage.setItem('isEditState', 'true') |
| | | sessionStorage.setItem('appType', 'mob') // 应用类型 |
| | | document.body.className = '' |
| | | window.GLOB.CacheIndependent = new Map() |
| | | |
| | | class ImDesign extends Component { |
| | | state = { |
| | | localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS, |
| | | loading: true, |
| | | MenuId: '', |
| | | MenuName: '', |
| | |
| | | try { |
| | | let param = JSON.parse(window.decodeURIComponent(window.atob(this.props.match.params.param))) |
| | | |
| | | if (param.lang) { |
| | | sessionStorage.setItem('lang', param.lang) |
| | | } |
| | | if (param.type === 'app') { |
| | | sessionStorage.setItem('appId', param.ID || '') |
| | | sessionStorage.setItem('appName', param.remark || '') |
| | | sessionStorage.setItem('lang', param.lang || 'zh-CN') |
| | | sessionStorage.setItem('kei_no', param.kei_no || '') |
| | | sessionStorage.setItem('typename', param.typename || 'mob') |
| | | sessionStorage.setItem('adapter', param.adapter || '') |
| | |
| | | sessionStorage.setItem('userbind', param.userbind || '') |
| | | sessionStorage.setItem('instantMessage', param.instantMessage || '') |
| | | |
| | | this.setState({ |
| | | localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS, |
| | | }) |
| | | this.getAppMessage(param.MenuID) |
| | | } else if (param.type === 'view') { |
| | | window.GLOB.winWidth = 420 |
| | |
| | | } |
| | | |
| | | componentDidMount () { |
| | | setTimeout(() => { |
| | | this.getAppPictures() |
| | | }, 1000) |
| | | |
| | | document.onkeydown = (event) => { |
| | | let e = event || window.event |
| | | let keyCode = e.keyCode || e.which || e.charCode |
| | |
| | | let param = { |
| | | MenuID: config.wrap.linkmenu, |
| | | copyMenuId: '', |
| | | type: 'view' |
| | | type: 'view', |
| | | lang: sessionStorage.getItem('lang') |
| | | } |
| | | |
| | | param = window.btoa(window.encodeURIComponent(JSON.stringify(param))) |
| | |
| | | } |
| | | |
| | | getAppMessage = (MenuID) => { |
| | | Api.getSystemConfig({ |
| | | Api.getCloudConfig({ |
| | | func: 's_get_keyids', |
| | | bid: sessionStorage.getItem('appId') |
| | | }).then(res => { |
| | |
| | | } |
| | | |
| | | sessionStorage.setItem('appViewList', JSON.stringify(appViewList)) |
| | | this.props.history.replace('/imdesign/' + window.btoa(window.encodeURIComponent(JSON.stringify({MenuID: MenuID, type: 'view'})))) |
| | | this.props.history.replace('/imdesign/' + window.btoa(window.encodeURIComponent(JSON.stringify({MenuID: MenuID, type: 'view', lang: sessionStorage.getItem('lang')})))) |
| | | window.location.reload() |
| | | }) |
| | | } |
| | | |
| | | getAppPictures = () => { |
| | | if (sessionStorage.getItem('app_pictures')) return |
| | | |
| | | let deffers = [] |
| | | let param = { |
| | | func: 's_url_db_adduptdel', |
| | | PageIndex: 0, // 0 代表全部 |
| | | PageSize: 0, // 0 代表全部 |
| | | type: 'search' |
| | | } |
| | | deffers = [new Promise(resolve => { |
| | | setTimeout(() => { |
| | | Api.getSystemConfig({...param, typecharone: 'image'}).then(res => { |
| | | resolve(res.data) |
| | | }) |
| | | }, 500) |
| | | }), new Promise(resolve => { |
| | | setTimeout(() => { |
| | | Api.getSystemConfig({...param, typecharone: 'video'}).then(res => { |
| | | resolve(res.data) |
| | | }) |
| | | }, 1000) |
| | | }), new Promise(resolve => { |
| | | setTimeout(() => { |
| | | Api.getSystemConfig({...param, typecharone: 'color'}).then(res => { |
| | | resolve(res.data) |
| | | }) |
| | | }, 1500) |
| | | })] |
| | | |
| | | Promise.all(deffers).then(response => { |
| | | sessionStorage.setItem('app_pictures', JSON.stringify(response[0] || [])) |
| | | sessionStorage.setItem('app_videos', JSON.stringify(response[1] || [])) |
| | | sessionStorage.setItem('app_colors', JSON.stringify(response[2] || [])) |
| | | }) |
| | | } |
| | | |
| | |
| | | MenuID: MenuId |
| | | } |
| | | |
| | | Api.getSystemConfig(param).then(result => { |
| | | Api.getCloudConfig(param).then(result => { |
| | | if (!result.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | |
| | | |
| | | _param.secretkey = Utils.encrypt(_param.LText, _param.timestamp) |
| | | |
| | | Api.getSystemConfig(_param).then(res => { |
| | | Api.getCloudConfig(_param).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | |
| | | PageParam: JSON.stringify({Template: 'imPage'}), |
| | | open_edition: config.open_edition, |
| | | menus_rolelist: window.btoa(window.encodeURIComponent(JSON.stringify({type: 'im', key: config.uuid, title: config.MenuName, children: []}))), |
| | | LText: '', |
| | | LTexttb: '' |
| | | // LText: '', |
| | | // LTexttb: '' |
| | | } |
| | | |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | param.LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(config))) |
| | | |
| | | Api.getSystemConfig(param).then(res => { |
| | | Api.getCloudConfig(param).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | |
| | | } |
| | | |
| | | render () { |
| | | const { localedict, loading, settingshow, controlshow, MenuId, config, menuloading } = this.state |
| | | const { loading, settingshow, controlshow, MenuId, config, menuloading } = this.state |
| | | |
| | | return ( |
| | | <ConfigProvider locale={localedict}> |
| | | <div className="mk-mob-view" id="mk-mob-design-view"> |
| | | <Header/> |
| | | {loading ? <Spin className="view-spin" size="large" /> : null} |
| | | <div className={'menu-setting ' + (!settingshow ? 'hidden' : '')}> |
| | | <div className="draw"> |
| | | {settingshow ? <DoubleLeftOutlined onClick={() => {this.setState({settingshow: false})}} /> : null} |
| | | {!settingshow ? <DoubleRightOutlined onClick={() => {this.setState({settingshow: true})}} /> : null} |
| | | </div> |
| | | <div className="pc-setting-tools"> |
| | | <Collapse accordion defaultActiveKey="basedata" bordered={false}> |
| | | {/* 基本信息 */} |
| | | <Panel header="基本信息" forceRender key="basedata"> |
| | | {/* 菜单信息 */} |
| | | {config ? <MenuForm |
| | | config={config} |
| | | MenuId={MenuId} |
| | | updateConfig={this.updateConfig} |
| | | /> : null} |
| | | </Panel> |
| | | <Panel header="页面样式" key="background"> |
| | | {config ? <BgController config={config} updateConfig={this.updateConfig} /> : null} |
| | | </Panel> |
| | | </Collapse> |
| | | </div> |
| | | <div className="mk-mob-view" id="mk-mob-design-view"> |
| | | <Header/> |
| | | {loading ? <Spin className="view-spin" size="large" /> : null} |
| | | <div className={'menu-setting ' + (!settingshow ? 'hidden' : '')}> |
| | | <div className="draw"> |
| | | {settingshow ? <DoubleLeftOutlined onClick={() => {this.setState({settingshow: false})}} /> : null} |
| | | {!settingshow ? <DoubleRightOutlined onClick={() => {this.setState({settingshow: true})}} /> : null} |
| | | </div> |
| | | <div className={'menu-control ' + (!controlshow ? 'hidden' : '')}> |
| | | <div className="draw"> |
| | | {controlshow ? <DoubleRightOutlined onClick={() => {this.setState({controlshow: false})}}/> : null} |
| | | {!controlshow ? <DoubleLeftOutlined onClick={() => {this.setState({controlshow: true})}}/> : null} |
| | | </div> |
| | | <div className="wrap"> |
| | | <Button type="primary" onClick={this.submitConfig} id="save-config" loading={menuloading}>保存</Button> |
| | | <NormalForm title="即时通信设置" width={800} update={this.updateWrap} getForms={this.getWrapForms}> |
| | | <Button type="default" style={{borderColor: 'rgb(64, 169, 255)', color: 'rgb(64, 169, 255)'}}>设置</Button> |
| | | </NormalForm> |
| | | <Button type="default" className="mk-border-purple" onClick={this.backView}>后退</Button> |
| | | <CreateView resetmenu={this.getAppMenus} /> |
| | | <Transfer MenuID={MenuId} /> |
| | | <Button type="default" onClick={this.closeView}>关闭</Button> |
| | | </div> |
| | | <div className="pc-setting-tools"> |
| | | <Collapse accordion defaultActiveKey="basedata" bordered={false}> |
| | | {/* 基本信息 */} |
| | | <Panel header="基本信息" forceRender key="basedata"> |
| | | {/* 菜单信息 */} |
| | | {config ? <MenuForm |
| | | config={config} |
| | | MenuId={MenuId} |
| | | updateConfig={this.updateConfig} |
| | | /> : null} |
| | | </Panel> |
| | | <Panel header="页面样式" key="background"> |
| | | {config ? <BgController config={config} updateConfig={this.updateConfig} /> : null} |
| | | </Panel> |
| | | </Collapse> |
| | | </div> |
| | | <div className={'menu-body menu-view'}> |
| | | <div className="mob-shell" style={{width: window.GLOB.shellWidth, height: window.GLOB.shellHeight}}> |
| | | <div className="instant-message" style={config ? config.style : null}> |
| | | <div className="header"> |
| | | <LeftOutlined/> |
| | | <span className="title">朋友</span> |
| | | {config && config.wrap.linkmenu ? <EllipsisOutlined onDoubleClick={this.changeEditMenu}/> : null} |
| | | </div> |
| | | <div className="mk-content-wrap"> |
| | | <div className="line-wrap"> |
| | | <div className="time-line">12:34</div> |
| | | <div className="line-msg"> |
| | | <div className="portrait"> |
| | | <div className="img"><UserOutlined /></div> |
| | | </div> |
| | | <div className="msg"> |
| | | <div className="title">朋友</div> |
| | | <div className="words">您好</div> |
| | | </div> |
| | | </div> |
| | | <div className={'menu-control ' + (!controlshow ? 'hidden' : '')}> |
| | | <div className="draw"> |
| | | {controlshow ? <DoubleRightOutlined onClick={() => {this.setState({controlshow: false})}}/> : null} |
| | | {!controlshow ? <DoubleLeftOutlined onClick={() => {this.setState({controlshow: true})}}/> : null} |
| | | </div> |
| | | <div className="wrap"> |
| | | <Button type="primary" onClick={this.submitConfig} id="save-config" loading={menuloading}>保存</Button> |
| | | <NormalForm title="即时通信设置" width={800} update={this.updateWrap} getForms={this.getWrapForms}> |
| | | <Button type="default" style={{borderColor: 'rgb(64, 169, 255)', color: 'rgb(64, 169, 255)'}}>设置</Button> |
| | | </NormalForm> |
| | | <Button type="default" className="mk-border-purple" onClick={this.backView}>后退</Button> |
| | | <CreateView resetmenu={this.getAppMenus} /> |
| | | <Transfer MenuID={MenuId} /> |
| | | <Button type="default" onClick={this.closeView}>关闭</Button> |
| | | </div> |
| | | </div> |
| | | <div className={'menu-body menu-view'}> |
| | | <div className="mob-shell" style={{width: window.GLOB.shellWidth, height: window.GLOB.shellHeight}}> |
| | | <div className="instant-message" style={config ? config.style : null}> |
| | | <div className="header"> |
| | | <LeftOutlined/> |
| | | <span className="title">朋友</span> |
| | | {config && config.wrap.linkmenu ? <EllipsisOutlined onDoubleClick={this.changeEditMenu}/> : null} |
| | | </div> |
| | | <div className="mk-content-wrap"> |
| | | <div className="line-wrap"> |
| | | <div className="time-line">12:34</div> |
| | | <div className="line-msg"> |
| | | <div className="portrait"> |
| | | <div className="img"><UserOutlined /></div> |
| | | </div> |
| | | </div> |
| | | <div className="line-wrap"> |
| | | <div className="time-line">12:45</div> |
| | | <div className="line-msg right"> |
| | | <div className="msg"> |
| | | <div className="words"> |
| | | 您好 |
| | | </div> |
| | | </div> |
| | | <div className="portrait"> |
| | | <div className="img"><UserOutlined /></div> |
| | | </div> |
| | | <div className="msg"> |
| | | <div className="title">朋友</div> |
| | | <div className="words">您好</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="send-wrap"> |
| | | <div className="adm-input"></div> |
| | | <div className="send"><Button>发送</Button></div> |
| | | <div className="line-wrap"> |
| | | <div className="time-line">12:45</div> |
| | | <div className="line-msg right"> |
| | | <div className="msg"> |
| | | <div className="words"> |
| | | 您好 |
| | | </div> |
| | | </div> |
| | | <div className="portrait"> |
| | | <div className="img"><UserOutlined /></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div className="send-wrap"> |
| | | <div className="adm-input"></div> |
| | | <div className="send"><Button>发送</Button></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <StyleController /> |
| | | </div> |
| | | </ConfigProvider> |
| | | <StyleController /> |
| | | </div> |
| | | ) |
| | | } |
| | | } |