From b5364600d98c8749caba625ec813d4fe670d0a19 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 16 十二月 2021 17:29:55 +0800 Subject: [PATCH] 2021-12-16 --- src/menu/components/card/data-card/node-wrap/index.scss | 9 + src/mob/searchconfig/index.jsx | 2 src/menu/datasource/index.jsx | 1 src/mob/components/formdragelement/index.scss | 3 src/mob/searchconfig/settingform/index.scss | 5 src/views/appmanage/submutilform/index.scss | 5 src/views/mobdesign/index.jsx | 6 src/menu/components/card/data-card/node-wrap/menus/columnform/index.scss | 0 src/views/menudesign/index.jsx | 2 src/menu/datasource/verifycard/index.jsx | 8 src/tabviews/custom/components/card/data-card/index.jsx | 85 ++++++++-- src/menu/components/card/data-card/node-wrap/menus/index.jsx | 69 ++++++++ src/mob/searchconfig/groupdragelement/index.scss | 2 src/menu/components/card/cardcellcomponent/index.jsx | 10 src/menu/components/card/data-card/options.jsx | 13 + src/views/pcdesign/index.jsx | 7 src/menu/components/card/data-card/node-wrap/index.jsx | 68 ++++++++ src/menu/components/card/data-card/node-wrap/menus/columnform/index.jsx | 82 ++++++++++ src/menu/datasource/verifycard/settingform/index.jsx | 7 src/menu/components/card/data-card/node-wrap/menus/index.scss | 0 src/menu/components/card/data-card/index.jsx | 12 + src/mob/searchconfig/settingform/index.jsx | 13 + src/tabviews/custom/index.jsx | 11 + src/views/appmanage/index.jsx | 7 src/views/appmanage/submutilform/index.jsx | 15 + 25 files changed, 399 insertions(+), 43 deletions(-) diff --git a/src/menu/components/card/cardcellcomponent/index.jsx b/src/menu/components/card/cardcellcomponent/index.jsx index 7686036..551555c 100644 --- a/src/menu/components/card/cardcellcomponent/index.jsx +++ b/src/menu/components/card/cardcellcomponent/index.jsx @@ -167,11 +167,11 @@ if (comIds.length !== 3 || comIds[0] !== cards.uuid || comIds[1] !== cardCell.uuid || !card) return - if (card.eleType === 'button') { - if ((style.paddingLeft || style.paddingRight) && !style.width) { - style.width = 'auto' - } - } + // if (card.eleType === 'button') { + // if ((style.paddingLeft || style.paddingRight) && !style.width) { + // style.width = 'auto' + // } + // } let _card = this.resetCardStyle(card, style) diff --git a/src/menu/components/card/data-card/index.jsx b/src/menu/components/card/data-card/index.jsx index 1a44355..c864bd0 100644 --- a/src/menu/components/card/data-card/index.jsx +++ b/src/menu/components/card/data-card/index.jsx @@ -14,6 +14,7 @@ const SettingComponent = asyncIconComponent(() => import('@/menu/datasource')) const NormalForm = asyncIconComponent(() => import('@/components/normalform')) const CardComponent = asyncComponent(() => import('../cardcomponent')) +const Nodes = asyncComponent(() => import('./node-wrap')) const MobPagination = asyncIconComponent(() => import('@/menu/components/share/mobPagination')) const LogComponent = asyncIconComponent(() => import('@/menu/components/share/logcomponent')) const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent')) @@ -599,6 +600,16 @@ } } + updateSupNodes = (res) => { + const { card } = this.state + + this.setState({ + card: {...card, supNodes: res} + }) + + this.updateComponent({...card, supNodes: res}) + } + render() { const { card, appType } = this.state @@ -626,6 +637,7 @@ <NormalForm title="鏁版嵁鍗¤缃�" width={800} update={this.updateWrap} getForms={this.getWrapForms}> <Icon type="edit" style={{color: '#1890ff'}} title="缂栬緫"/> </NormalForm> + {card.wrap.supType === 'multi' && appType !== 'mob' ? <Nodes card={card} updateMenus={this.updateSupNodes}/> : null} <CopyComponent type="datacard" card={card}/> <PasteComponent options={['action', 'search', 'form', 'cardcell']} updateConfig={this.pasteComponent} /> <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle} type="font-colors" /> diff --git a/src/menu/components/card/data-card/node-wrap/index.jsx b/src/menu/components/card/data-card/node-wrap/index.jsx new file mode 100644 index 0000000..aa87f47 --- /dev/null +++ b/src/menu/components/card/data-card/node-wrap/index.jsx @@ -0,0 +1,68 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { is, fromJS } from 'immutable' +import { Modal, Icon } from 'antd' + +import MenusForm from './menus' +import './index.scss' + +class NodesWrap extends Component { + static propTpyes = { + card: PropTypes.object, + updateMenus: PropTypes.func + } + + state = { + visible: false, + supNodes: [], + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.state), fromJS(nextState)) + } + + trigger = () => { + const { card } = this.props + + this.setState({ + visible: true, + supNodes: card.supNodes || [] + }) + } + + submit = () => { + this.setState({ + visible: false + }) + this.props.updateMenus(this.state.supNodes) + } + + update = (supNodes) => { + this.setState({supNodes}) + } + + render() { + const { card } = this.props + const { visible, supNodes } = this.state + + return ( + <> + <Icon type="fork" title="涓婄骇缁勪欢" style={{color: 'orange'}} onClick={this.trigger}/> + <Modal + title="涓婄骇缁勪欢" + wrapClassName="menus-field-modal" + visible={visible} + width={700} + maskClosable={false} + onOk={this.submit} + onCancel={() => { this.setState({ visible: false })}} + destroyOnClose + > + <MenusForm supNodes={supNodes} card={card} update={this.update}/> + </Modal> + </> + ) + } +} + +export default NodesWrap \ No newline at end of file diff --git a/src/menu/components/card/data-card/node-wrap/index.scss b/src/menu/components/card/data-card/node-wrap/index.scss new file mode 100644 index 0000000..52caa86 --- /dev/null +++ b/src/menu/components/card/data-card/node-wrap/index.scss @@ -0,0 +1,9 @@ +.menus-field-modal { + .ant-modal { + top: 70px; + } + .ant-modal-body { + min-height: 150px; + padding-top: 40px; + } +} \ No newline at end of file diff --git a/src/menu/components/card/data-card/node-wrap/menus/columnform/index.jsx b/src/menu/components/card/data-card/node-wrap/menus/columnform/index.jsx new file mode 100644 index 0000000..6c6a36b --- /dev/null +++ b/src/menu/components/card/data-card/node-wrap/menus/columnform/index.jsx @@ -0,0 +1,82 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { Form, Row, Col, Button, Cascader, notification } from 'antd' +// import './index.scss' + +class MenusColumn extends Component { + static propTpyes = { + supNodes: PropTypes.array, + modules: PropTypes.array, + columnChange: PropTypes.func + } + + state = {options: []} + + handleConfirm = () => { + const { supNodes } = this.props + // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� + this.props.form.validateFieldsAndScroll((err, values) => { + if (!err) { + values.componentId = values.nodes[values.nodes.length - 1] + if (supNodes.filter(item => item.componentId === values.componentId).length > 0) { + notification.warning({ + top: 92, + message: '缁勪欢宸叉坊鍔狅紒', + duration: 2 + }) + return + } + + values.label = this.state.options.map(item => item.label).join(' / ') + + this.props.columnChange(values) + } + }) + } + + onChange = (values, options) => { + this.setState({options: options}) + } + + render() { + const { modules } = this.props + const { getFieldDecorator } = this.props.form + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 8 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + } + } + + return ( + <Form {...formItemLayout}> + <Row gutter={24}> + <Col span={16}> + <Form.Item label="缁勪欢"> + {getFieldDecorator('nodes', { + initialValue: [], + rules: [ + { + required: true, + message: '璇烽�夋嫨缁勪欢!' + } + ] + })(<Cascader options={modules} onChange={this.onChange} placeholder=""/>)} + </Form.Item> + </Col> + <Col span={6} offset={2} style={{paddingTop: '4px'}}> + <Button onClick={this.handleConfirm} type="primary" className="mk-green"> + 娣诲姞 + </Button> + </Col> + </Row> + </Form> + ) + } +} + +export default Form.create()(MenusColumn) \ No newline at end of file diff --git a/src/menu/components/card/data-card/node-wrap/menus/columnform/index.scss b/src/menu/components/card/data-card/node-wrap/menus/columnform/index.scss new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/menu/components/card/data-card/node-wrap/menus/columnform/index.scss diff --git a/src/menu/components/card/data-card/node-wrap/menus/index.jsx b/src/menu/components/card/data-card/node-wrap/menus/index.jsx new file mode 100644 index 0000000..37990be --- /dev/null +++ b/src/menu/components/card/data-card/node-wrap/menus/index.jsx @@ -0,0 +1,69 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { fromJS } from 'immutable' + +import Utils from '@/utils/utils.js' +import ColumnForm from './columnform' +import asyncComponent from '@/utils/asyncComponent' +import MenuUtils from '@/utils/utils-custom.js' +// import './index.scss' + +const EditTable = asyncComponent(() => import('@/templates/zshare/editTable')) + +class SupNodes extends Component { + static propTpyes = { + card: PropTypes.object, + supNodes: PropTypes.array, + update: PropTypes.func + } + + state = { + modules: [], + columns: [ + { + title: '缁勪欢', + dataIndex: 'label', + editable: false, + width: '60%' + } + ] + } + + UNSAFE_componentWillMount() { + const { supNodes, card } = this.props + + let modules = MenuUtils.getSupModules(window.GLOB.customMenu.components, card.uuid) || [] + + this.setState({ + modules, + supNodes: fromJS(supNodes).toJS() + }) + } + + columnChange = (values) => { + const { supNodes } = this.state + values.uuid = Utils.getuuid() + let _nodes = [...supNodes, values] + + this.setState({supNodes: _nodes}) + this.props.update(_nodes) + } + + changeColumns = (columns) => { + this.setState({supNodes: columns}) + this.props.update(columns) + } + + render() { + const { supNodes, columns, modules } = this.state + + return ( + <div style={{minHeight: '250px'}}> + <ColumnForm supNodes={supNodes} modules={modules} columnChange={this.columnChange}/> + <EditTable actions={['del']} data={supNodes} columns={columns} onChange={this.changeColumns}/> + </div> + ) + } +} + +export default SupNodes \ No newline at end of file diff --git a/src/menu/components/card/data-card/node-wrap/menus/index.scss b/src/menu/components/card/data-card/node-wrap/menus/index.scss new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/menu/components/card/data-card/node-wrap/menus/index.scss diff --git a/src/menu/components/card/data-card/options.jsx b/src/menu/components/card/data-card/options.jsx index 6ea0c7c..1614f78 100644 --- a/src/menu/components/card/data-card/options.jsx +++ b/src/menu/components/card/data-card/options.jsx @@ -118,6 +118,19 @@ ] }, { + type: 'radio', + field: 'supType', + label: '涓婄骇绫诲瀷', + initval: wrap.supType || 'single', + tooltip: '涓婄骇缁勪欢涓哄崟涓�缁勪欢鎴栧涓粍浠躲��', + required: false, + forbid: subtype !== 'datacard' || appType === 'mob', + options: [ + {value: 'single', label: '鍗曠粍浠�'}, + {value: 'multi', label: '澶氱粍浠�'}, + ] + }, + { type: subtype === 'propcard' ? 'select' : 'radio', field: 'selStyle', label: '閫変腑椋庢牸', diff --git a/src/menu/datasource/index.jsx b/src/menu/datasource/index.jsx index 42e66df..c0c34ad 100644 --- a/src/menu/datasource/index.jsx +++ b/src/menu/datasource/index.jsx @@ -241,7 +241,6 @@ > <VerifyCard dict={dict} - menu={window.GLOB.customMenu} mainSearch={mainSearch} config={config} wrappedComponentRef={(inst) => this.verifyRef = inst} diff --git a/src/menu/datasource/verifycard/index.jsx b/src/menu/datasource/verifycard/index.jsx index edd2fa1..ced365c 100644 --- a/src/menu/datasource/verifycard/index.jsx +++ b/src/menu/datasource/verifycard/index.jsx @@ -24,7 +24,6 @@ class VerifyCard extends Component { static propTpyes = { dict: PropTypes.object, // 瀛楀吀椤� - menu: PropTypes.object, // 鑿滃崟閰嶇疆淇℃伅 config: PropTypes.object, // 缁勪欢閰嶇疆淇℃伅 } @@ -161,7 +160,7 @@ } let _setting = fromJS(config.setting).toJS() - let scripts = fromJS(config.scripts).toJS() + let scripts = config.scripts ? fromJS(config.scripts).toJS() : [] if (window.GLOB.funcs && window.GLOB.funcs.length > 0) { window.GLOB.funcs.forEach(m => { @@ -183,7 +182,7 @@ this.setState({ scripts, - columns: fromJS(config.columns).toJS(), + columns: config.columns ? fromJS(config.columns).toJS() : [], setting: _setting, searches: search, defaultSearch: _search @@ -646,7 +645,7 @@ } render() { - const { menu, config } = this.props + const { config } = this.props const { columns, setting, scripts, colColumns, scriptsColumns, activeKey, loading, searches, defaultsql } = this.state return ( @@ -655,7 +654,6 @@ <Tabs activeKey={activeKey} className="data-source-card-box" onChange={this.changeTab}> <TabPane tab="鏁版嵁婧�" key="setting"> <SettingForm - menu={menu} dict={this.props.dict} config={config} columns={columns} diff --git a/src/menu/datasource/verifycard/settingform/index.jsx b/src/menu/datasource/verifycard/settingform/index.jsx index 854ee9b..dcba39d 100644 --- a/src/menu/datasource/verifycard/settingform/index.jsx +++ b/src/menu/datasource/verifycard/settingform/index.jsx @@ -14,7 +14,6 @@ class SettingForm extends Component { static propTpyes = { dict: PropTypes.object, // 瀛楀吀椤� - menu: PropTypes.any, // 鑿滃崟閰嶇疆淇℃伅 config: PropTypes.object, // 缁勪欢閰嶇疆 setting: PropTypes.object, // 鏁版嵁婧愰厤缃� modules: PropTypes.array, // 鍙粦瀹氱殑涓婄骇缁勪欢 @@ -32,9 +31,9 @@ } UNSAFE_componentWillMount () { - const { menu, config } = this.props + const { config } = this.props - let modules = MenuUtils.getSupModules(menu.components, config.uuid) || [] + let modules = MenuUtils.getSupModules(window.GLOB.customMenu.components, config.uuid) || [] modules.unshift({ value: 'empty', @@ -349,7 +348,7 @@ </Radio.Group>)} </Form.Item> </Col> : null} - {!['navbar', 'balcony', 'menubar'].includes(config.type) ? <Col span={8}> + {!['navbar', 'balcony', 'menubar'].includes(config.type) && (!config.wrap || config.wrap.supType !== 'multi') ? <Col span={8}> <Form.Item label={ <Tooltip placement="topLeft" title={'璇ョ粍浠跺鏋滃彈鍏朵粬缁勪欢鎺у埗锛岃閫夐」鐩稿簲鐨勭粍浠讹紝娌℃湁鏃堕�夆�滄棤鈥濄��'}> <QuestionCircleOutlined className="mk-form-tip" /> diff --git a/src/mob/components/formdragelement/index.scss b/src/mob/components/formdragelement/index.scss index b8673a5..c89ff7b 100644 --- a/src/mob/components/formdragelement/index.scss +++ b/src/mob/components/formdragelement/index.scss @@ -93,6 +93,9 @@ .check-card-edit-box { margin-top: 0!important; } + .am-input-label { + width: auto; + } } } .am-list-item.hint { diff --git a/src/mob/searchconfig/groupdragelement/index.scss b/src/mob/searchconfig/groupdragelement/index.scss index bf9d07a..a400b7a 100644 --- a/src/mob/searchconfig/groupdragelement/index.scss +++ b/src/mob/searchconfig/groupdragelement/index.scss @@ -6,7 +6,7 @@ margin-bottom: 15px; .page-card { float: left; - width: 13.333%; + width: 16.666%; text-align: center; padding: 5px; .icon { diff --git a/src/mob/searchconfig/index.jsx b/src/mob/searchconfig/index.jsx index 2ad5662..25dde68 100644 --- a/src/mob/searchconfig/index.jsx +++ b/src/mob/searchconfig/index.jsx @@ -495,7 +495,7 @@ </div> <div className="setting"> <div className="mob-shell" style={{width: window.GLOB.shellWidth, height: window.GLOB.shellHeight}}> - <div className="mob-shell-inner"> + <div className="mob-shell-inner" style={{backgroundColor: group.setting.backgroundColor || '#ffffff'}}> <Icon className="setting-group" onClick={this.changeSetting} type="setting" /> {group.setting.type === 'title' ? <div className="am-navbar"> <Icon type="left" /> diff --git a/src/mob/searchconfig/settingform/index.jsx b/src/mob/searchconfig/settingform/index.jsx index 52653f6..42a7ee2 100644 --- a/src/mob/searchconfig/settingform/index.jsx +++ b/src/mob/searchconfig/settingform/index.jsx @@ -2,8 +2,12 @@ import PropTypes from 'prop-types' import { Form, Row, Col, Input, Radio, Select, Tooltip } from 'antd' import { QuestionCircleOutlined } from '@ant-design/icons' + +import asyncComponent from '@/utils/asyncComponent' import { formRule } from '@/utils/option.js' import './index.scss' + +const ColorSketch = asyncComponent(() => import('@/mob/colorsketch')) class SettingForm extends Component { static propTpyes = { @@ -208,6 +212,15 @@ )} </Form.Item> </Col> : null} + <Col span={12}> + <Form.Item className="sys-bgcolor" label="鑳屾櫙鑹�"> + {getFieldDecorator('backgroundColor', { + initialValue: config.setting.backgroundColor || '#ffffff' + })( + <ColorSketch value={config.setting.backgroundColor || '#ffffff'}/> + )} + </Form.Item> + </Col> {type === 'search' ? <Col span={12}> <Form.Item label="榛戝悕鍗�"> {getFieldDecorator('blacklist', { diff --git a/src/mob/searchconfig/settingform/index.scss b/src/mob/searchconfig/settingform/index.scss index 0bfd8f4..cd7da53 100644 --- a/src/mob/searchconfig/settingform/index.scss +++ b/src/mob/searchconfig/settingform/index.scss @@ -12,4 +12,9 @@ float: none; vertical-align: top; } + .sys-bgcolor { + .ant-form-item-children { + padding-top: 7px; + } + } } \ No newline at end of file diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx index d608b7c..2bbbf72 100644 --- a/src/tabviews/custom/components/card/data-card/index.jsx +++ b/src/tabviews/custom/components/card/data-card/index.jsx @@ -41,7 +41,9 @@ total: null, precards: [], nextcards: [], - selected: 'false' + selected: 'false', + supNodes: [], + supComs: null } UNSAFE_componentWillMount () { @@ -144,7 +146,13 @@ return item }) + let supComs = null + if (_config.wrap.supType === 'multi') { + supComs = _config.supNodes.map(item => item.componentId) + } + this.setState({ + supComs, selected, precards, nextcards, @@ -227,7 +235,7 @@ * @param {*} btn // 鎵ц鐨勬寜閽� */ refreshByButtonResult = (menuId, position, btn, id, lines) => { - const { config, BID } = this.state + const { config, BID, supComs, supNodes } = this.state if (config.uuid !== menuId) return @@ -243,15 +251,38 @@ this.loadData() } - if (btn.syncComponentId && btn.syncComponentId !== config.uuid && btn.syncComponentId !== config.setting.supModule) { - MKEmitter.emit('reloadData', btn.syncComponentId) // 鍚岀骇鏍囩鍒锋柊 - } - if (position === 'mainline' && config.setting.supModule) { // 涓昏〃琛屽埛鏂� - MKEmitter.emit('reloadData', config.setting.supModule, (BID || 'empty')) - } else if (position === 'popclose') { // 鏍囩鍏抽棴鍒锋柊 - config.setting.supModule && MKEmitter.emit('reloadData', config.setting.supModule, (BID || 'empty')) - btn.$tabId && MKEmitter.emit('refreshPopButton', btn.$tabId) + if (supComs) { + if (btn.syncComponentId && btn.syncComponentId !== config.uuid && !supComs.includes(btn.syncComponentId)) { + MKEmitter.emit('reloadData', btn.syncComponentId) // 鍚岀骇鏍囩鍒锋柊 + } + + if (position === 'mainline' || position === 'popclose') { // 涓昏〃琛屽埛鏂� + let supNode = supNodes[supNodes.length - 1] + supComs.forEach((item, i) => { + setTimeout(() => { + if (supNode && supNode.key === item) { + MKEmitter.emit('reloadData', item, supNode.value) + } else { + MKEmitter.emit('reloadData', item) + } + }, i * 10) + }) + if (position === 'popclose') { // 鏍囩鍏抽棴鍒锋柊 + btn.$tabId && MKEmitter.emit('refreshPopButton', btn.$tabId) + } + } + } else { + if (btn.syncComponentId && btn.syncComponentId !== config.uuid && btn.syncComponentId !== config.setting.supModule) { + MKEmitter.emit('reloadData', btn.syncComponentId) // 鍚岀骇鏍囩鍒锋柊 + } + + if (position === 'mainline' && config.setting.supModule) { // 涓昏〃琛屽埛鏂� + MKEmitter.emit('reloadData', config.setting.supModule, (BID || 'empty')) + } else if (position === 'popclose') { // 鏍囩鍏抽棴鍒锋柊 + config.setting.supModule && MKEmitter.emit('reloadData', config.setting.supModule, (BID || 'empty')) + btn.$tabId && MKEmitter.emit('refreshPopButton', btn.$tabId) + } } } @@ -327,13 +358,35 @@ } resetParentParam = (MenuID, id, data) => { - const { config } = this.state + const { config, supComs } = this.state - if (!config.setting.supModule || config.setting.supModule !== MenuID) return - if (id !== this.state.BID || id !== '') { - this.setState({ BID: id, BData: data, pageIndex: 1 }, () => { - this.loadData() - }) + if (supComs) { + if (!supComs.includes(MenuID)) return + + let supNodes = this.state.supNodes.filter(item => item.key !== MenuID) + let bid = '' + let _data = null + + if (id) { + supNodes.push({key: MenuID, value: id, data}) + } + if (supNodes.length > 0) { + bid = supNodes[supNodes.length - 1].value + _data = supNodes[supNodes.length - 1].data + } + + if (bid !== this.state.BID || bid !== '') { + this.setState({ BID: bid, BData: _data, pageIndex: 1 }, () => { + this.loadData() + }) + } + } else { + if (!config.setting.supModule || config.setting.supModule !== MenuID) return + if (id !== this.state.BID || id !== '') { + this.setState({ BID: id, BData: data, pageIndex: 1 }, () => { + this.loadData() + }) + } } } diff --git a/src/tabviews/custom/index.jsx b/src/tabviews/custom/index.jsx index d4bc44a..2070009 100644 --- a/src/tabviews/custom/index.jsx +++ b/src/tabviews/custom/index.jsx @@ -737,7 +737,15 @@ } } - if (item.setting && item.setting.supModule) { + if (item.wrap && item.wrap.supType === 'multi') { // 鏁版嵁鍗″涓婄骇缁勪欢 + if (item.supNodes && item.supNodes[0]) { + item.setting.supModule = item.supNodes[0].componentId + } else { + item.wrap.supType = 'single' + item.supNodes = null + item.setting.supModule = '' + } + } else if (item.setting && item.setting.supModule) { let pid = item.setting.supModule.pop() if (pid && pid !== 'empty') { item.setting.supModule = pid @@ -745,6 +753,7 @@ item.setting.supModule = '' } } + if (item.wrap && item.wrap.doubleClick) { let index = item.action.findIndex((btn) => btn.uuid === item.wrap.doubleClick) if (index === -1) { diff --git a/src/views/appmanage/index.jsx b/src/views/appmanage/index.jsx index 913707c..b5020dd 100644 --- a/src/views/appmanage/index.jsx +++ b/src/views/appmanage/index.jsx @@ -472,6 +472,7 @@ cell.apptype = _param.apptype || '' cell.delay = _param.delay || 0 cell.statusBarColor = _param.statusBarColor || 'black' + cell.sysBgColor = _param.sysBgColor || '#ffffff' cell.adapter = _param.adapter || '' if (cell.adapter && (cell.adapter === 'true' || cell.adapter === 'false')) { cell.adapter = '' @@ -612,7 +613,7 @@ 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 || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}','${window.btoa(window.encodeURIComponent(JSON.stringify({copyright: item.copyright || '', logo: item.logo || '', apptype: item.apptype || '', delay: item.delay || 0, statusBarColor: item.statusBarColor || 'black', adapter: item.adapter || ''})))}'`) + param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}','${window.btoa(window.encodeURIComponent(JSON.stringify({copyright: item.copyright || '', logo: item.logo || '', apptype: item.apptype || '', delay: item.delay || 0, statusBarColor: item.statusBarColor || 'black', sysBgColor: item.sysBgColor || '#ffffff', adapter: item.adapter || ''})))}'`) param.LText = param.LText.join(' union all ') param.LText = Utils.formatOptions(param.LText) @@ -836,7 +837,7 @@ 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 || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}','${window.btoa(window.encodeURIComponent(JSON.stringify({copyright: item.copyright || '', logo: item.logo || '', apptype: item.apptype || '', delay: item.delay || 0, statusBarColor: item.statusBarColor || 'black', adapter: item.adapter || ''})))}'`) + param.LText = selectApp.sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}','${window.btoa(window.encodeURIComponent(JSON.stringify({copyright: item.copyright || '', logo: item.logo || '', apptype: item.apptype || '', delay: item.delay || 0, statusBarColor: item.statusBarColor || 'black', sysBgColor: item.sysBgColor || '#ffffff', adapter: item.adapter || ''})))}'`) param.LText = param.LText.join(' union all ') param.LText = Utils.formatOptions(param.LText) } @@ -922,7 +923,7 @@ } // 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 || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}','${window.btoa(window.encodeURIComponent(JSON.stringify({copyright: item.copyright || '', logo: item.logo || '', apptype: item.apptype || '', delay: item.delay || 0, statusBarColor: item.statusBarColor || 'black', adapter: item.adapter || ''})))}'`) + param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}','${window.btoa(window.encodeURIComponent(JSON.stringify({copyright: item.copyright || '', logo: item.logo || '', apptype: item.apptype || '', delay: item.delay || 0, statusBarColor: item.statusBarColor || 'black', sysBgColor: item.sysBgColor || '#ffffff', adapter: item.adapter || ''})))}'`) param.LText = param.LText.join(' union all ') param.LText = Utils.formatOptions(param.LText) diff --git a/src/views/appmanage/submutilform/index.jsx b/src/views/appmanage/submutilform/index.jsx index 3a49a97..ac533bf 100644 --- a/src/views/appmanage/submutilform/index.jsx +++ b/src/views/appmanage/submutilform/index.jsx @@ -6,6 +6,7 @@ import asyncComponent from '@/utils/asyncComponent' import './index.scss' +const ColorSketch = asyncComponent(() => import('@/mob/colorsketch')) const SourceComponent = asyncComponent(() => import('@/menu/components/share/sourcecomponent')) class MainSearch extends Component { @@ -293,6 +294,20 @@ )} </Form.Item> </Col> : null} + <Col span={12}> + <Form.Item className="sys-bgcolor" label={ + <Tooltip placement="topLeft" title="瀛愬簲鐢ㄩ�氱敤鐨勮儗鏅壊锛屽瓙搴旂敤椤甸潰鍒涘缓鏃朵細榛樿娣诲姞姝よ儗鏅壊銆�"> + <QuestionCircleOutlined className="mk-form-tip" /> + 鑳屾櫙鑹� + </Tooltip> + }> + {getFieldDecorator('sysBgColor', { + initialValue: card ? card.sysBgColor || '#ffffff' : '#ffffff' + })( + <ColorSketch value={card ? card.sysBgColor || '#ffffff' : '#ffffff'}/> + )} + </Form.Item> + </Col> </Row> </Form> ) diff --git a/src/views/appmanage/submutilform/index.scss b/src/views/appmanage/submutilform/index.scss index 4adee58..7b121c8 100644 --- a/src/views/appmanage/submutilform/index.scss +++ b/src/views/appmanage/submutilform/index.scss @@ -15,4 +15,9 @@ .ant-form-item-with-help { margin-bottom: 24px; } + .sys-bgcolor { + .ant-form-item-children { + padding-top: 7px; + } + } } \ No newline at end of file diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx index 66ce2e4..f5246d3 100644 --- a/src/views/menudesign/index.jsx +++ b/src/views/menudesign/index.jsx @@ -864,7 +864,7 @@ error = `缁勪欢銆�${item.name}銆嬫湭璁剧疆鏁版嵁婧愶紒` } else if (!item.setting.primaryKey) { error = `缁勪欢銆�${item.name}銆嬫湭璁剧疆涓婚敭锛乣 - } else if (!item.setting.supModule && item.type !== 'balcony') { + } else if (!item.setting.supModule && item.type !== 'balcony' && (!item.wrap || item.wrap.supType !== 'multi')) { error = `缁勪欢銆�${item.name}銆嬫湭璁剧疆涓婄骇缁勪欢锛乣 } } diff --git a/src/views/mobdesign/index.jsx b/src/views/mobdesign/index.jsx index 44a255b..4e92bb9 100644 --- a/src/views/mobdesign/index.jsx +++ b/src/views/mobdesign/index.jsx @@ -87,6 +87,7 @@ sessionStorage.setItem('login_types', param.login_types || 'false') sessionStorage.setItem('typename', param.typename || 'mob') sessionStorage.setItem('adapter', param.adapter || '') + sessionStorage.setItem('sysBgColor', param.sysBgColor || '#ffffff') this.setState({ localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS, @@ -466,8 +467,9 @@ tables: [], components: [], viewType: 'menu', + statusBarbgColor: sessionStorage.getItem('sysBgColor') || '#ffffff', style: { - backgroundColor: '#ffffff', backgroundImage: '' + backgroundColor: sessionStorage.getItem('sysBgColor') || '#ffffff', backgroundImage: '' } } } @@ -1034,7 +1036,7 @@ Typename: sessionStorage.getItem('typename'), MenuName: item.name || '', PageParam: JSON.stringify({Template: item.type}), - open_edition: _item.open_edition || '', + open_edition: _item ? (_item.open_edition || '') : '', menus_rolelist: window.btoa(window.encodeURIComponent(JSON.stringify(roles))), LText: '', LTexttb: '' diff --git a/src/views/pcdesign/index.jsx b/src/views/pcdesign/index.jsx index 4c94c51..982c2da 100644 --- a/src/views/pcdesign/index.jsx +++ b/src/views/pcdesign/index.jsx @@ -88,6 +88,7 @@ sessionStorage.setItem('kei_no', param.kei_no || '') sessionStorage.setItem('role_type', param.role_type || 'true') sessionStorage.setItem('login_types', param.login_types || 'false') + sessionStorage.setItem('sysBgColor', param.sysBgColor || '#ffffff') this.setState({ localedict: sessionStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS, @@ -529,7 +530,7 @@ components: [], viewType: 'menu', style: { - backgroundColor: '#ffffff', backgroundImage: '', paddingLeft: '20px', paddingRight: '20px' + backgroundColor: sessionStorage.getItem('sysBgColor') || '#ffffff', backgroundImage: '', paddingLeft: '20px', paddingRight: '20px' } } } @@ -647,7 +648,7 @@ components: [], viewType: 'menu', style: { - backgroundColor: '#ffffff', backgroundImage: '', paddingLeft: '20px', paddingRight: '20px' + backgroundColor: sessionStorage.getItem('sysBgColor') || '#ffffff', backgroundImage: '', paddingLeft: '20px', paddingRight: '20px' } } } else { @@ -1407,7 +1408,7 @@ error = `缁勪欢銆�${item.name}銆嬫湭璁剧疆鏁版嵁婧愶紒` } else if (!item.setting.primaryKey) { error = `缁勪欢銆�${item.name}銆嬫湭璁剧疆涓婚敭锛乣 - } else if (!item.setting.supModule && item.type !== 'balcony') { + } else if (!item.setting.supModule && item.type !== 'balcony' && (!item.wrap || item.wrap.supType !== 'multi')) { error = `缁勪欢銆�${item.name}銆嬫湭璁剧疆涓婄骇缁勪欢锛乣 } } -- Gitblit v1.8.0