From 79e1455e4ba4f4a7d04a483dda1a354e53921a69 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 04 十一月 2020 19:04:14 +0800 Subject: [PATCH] 2020-11-04 --- src/tabviews/custom/components/chart/antv-bar-line/index.jsx | 2 src/tabviews/custom/components/chart/antv-bar-line/index.scss | 5 src/tabviews/custom/components/tabs/antv-tabs/index.jsx | 1 src/menu/components/card/prop-card/index.scss | 4 src/menu/components/card/cardcellcomponent/dragaction/index.jsx | 34 ++ src/tabviews/custom/components/chart/antv-pie/index.scss | 5 src/menu/datasource/index.jsx | 17 + src/menu/components/card/cardcellcomponent/dragaction/card.jsx | 3 src/menu/components/chart/antv-bar/index.scss | 5 src/menu/components/chart/antv-bar/index.jsx | 46 +- src/menu/components/tabs/tabcomponents/index.jsx | 9 src/menu/stylecontroller/index.scss | 8 src/menu/components/card/data-card/index.scss | 4 src/components/sidemenu/config.jsx | 12 src/tabviews/custom/components/card/data-card/index.scss | 2 src/views/menudesign/index.jsx | 5 src/menu/stylecontroller/styleInput/index.scss | 47 -- src/tabviews/custom/components/card/data-card/index.jsx | 21 + src/tabviews/custom/components/card/prop-card/index.scss | 2 src/tabviews/custom/components/card/cardcellList/index.jsx | 44 +++ src/tabviews/custom/components/card/prop-card/index.jsx | 20 + src/mob/colorsketch/index.jsx | 4 src/tabviews/custom/components/share/tabtransfer/index.jsx | 187 ++++++++++++ src/menu/stylecontroller/index.jsx | 32 + src/menu/components/chart/antv-pie/index.scss | 5 src/menu/stylecontroller/styleInput/index.jsx | 103 ++++-- src/tabviews/custom/components/chart/antv-pie/index.jsx | 2 src/menu/components/card/cardcomponent/index.jsx | 2 src/menu/components/card/data-card/index.jsx | 15 src/menu/components/chart/antv-pie/index.jsx | 46 +- src/tabviews/custom/index.jsx | 48 +-- src/menu/modalconfig/index.jsx | 7 src/templates/sharecomponent/actioncomponent/dragaction/index.jsx | 1 src/mob/colorsketch/index.scss | 10 src/menu/components/card/prop-card/index.jsx | 14 src/menu/menushell/index.jsx | 9 36 files changed, 552 insertions(+), 229 deletions(-) diff --git a/src/components/sidemenu/config.jsx b/src/components/sidemenu/config.jsx index 5595166..324df40 100644 --- a/src/components/sidemenu/config.jsx +++ b/src/components/sidemenu/config.jsx @@ -51,8 +51,8 @@ type: 'ManageTable', MenuID: '1578900109100np8aqd0a77q3na46oas', MenuNo: 'sPrintTemplateM', - MenuName: '鎵撳嵃妯℃澘', - text: '鎵撳嵃妯℃澘' + MenuName: '鏍囩鎵撳嵃妯℃澘', + text: '鏍囩鎵撳嵃妯℃澘' }, { src: '', systems: ['SSO', 'cloud'], @@ -87,6 +87,14 @@ MenuNo: 'LdropdownmenuNewM', MenuName: '閫氱敤涓嬫媺鑿滃崟', text: '閫氱敤涓嬫媺鑿滃崟' + }, { + src: '', + PageParam: {OpenType: 'newtab', Template: 'ManageTable'}, + type: 'ManageTable', + MenuID: '1602315375262ikd33ii0nii34pt861o', + MenuNo: 's_worksflow_roleM', + MenuName: '鍏抽敭瑙掕壊绠$悊', + text: '鍏抽敭瑙掕壊绠$悊' }] }, { MenuID: 'systemManageViewInterface', diff --git a/src/menu/components/card/cardcellcomponent/dragaction/card.jsx b/src/menu/components/card/cardcellcomponent/dragaction/card.jsx index 78676b6..c2c52ee 100644 --- a/src/menu/components/card/cardcellcomponent/dragaction/card.jsx +++ b/src/menu/components/card/cardcellcomponent/dragaction/card.jsx @@ -9,7 +9,7 @@ import demo4 from '@/assets/img/demo4.jpg' import demo5 from '@/assets/img/demo5.jpg' -const Card = ({ id, cardIds, card, moveCard, findCard, editCard, delCard, changeStyle }) => { +const Card = ({ id, cardIds, card, moveCard, findCard, editCard, delCard, copyCard, changeStyle }) => { const originalIndex = findCard(id).index const [{ isDragging }, drag] = useDrag({ item: { type: 'action', id, originalIndex }, @@ -102,6 +102,7 @@ <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ <div className="mk-popover-control"> <Icon className="edit" title="缂栬緫" type="edit" onClick={() => editCard(id)} /> + <Icon className="copy" title="澶嶅埗" type="copy" onClick={() => copyCard(id)} /> <Icon className="close" title="鍒犻櫎" type="close" onClick={() => delCard(id)} /> <Icon className="style" title="璋冩暣鏍峰紡" onClick={() => changeStyle(id)} type="font-colors" /> </div> diff --git a/src/menu/components/card/cardcellcomponent/dragaction/index.jsx b/src/menu/components/card/cardcellcomponent/dragaction/index.jsx index 845cedf..49267a8 100644 --- a/src/menu/components/card/cardcellcomponent/dragaction/index.jsx +++ b/src/menu/components/card/cardcellcomponent/dragaction/index.jsx @@ -4,6 +4,7 @@ import update from 'immutability-helper' import Card from './card' +import Utils from '@/utils/utils.js' import Action from './action' import './index.scss' @@ -30,6 +31,38 @@ const editCard = id => { const { card } = findCard(id) handleMenu(card) + } + + const copyCard = id => { + const { card, index: overIndex } = findCard(id) + let copycard = fromJS(card).toJS() + + copycard.uuid = Utils.getuuid() + copycard.copyType = 'customCardElement' + copycard.focus = true + + let _val = '' + + try { + _val = window.btoa(window.encodeURIComponent(JSON.stringify(copycard))) + } catch { + console.warn('Stringify Failure') + _val = '' + } + + if (_val) { + let oInput = document.createElement('input') + oInput.value = _val + document.body.appendChild(oInput) + oInput.select() + document.execCommand('Copy') + document.body.removeChild(oInput) + } + + const _cards = update(cards, { $splice: [[overIndex + 1, 0, copycard]] }) + + handleList(_cards) + handleMenu(copycard) } const changeStyle = id => { @@ -88,6 +121,7 @@ cardIds={cardIds} card={card} moveCard={moveCard} + copyCard={copyCard} editCard={editCard} changeStyle={changeStyle} delCard={delCard} diff --git a/src/menu/components/card/cardcomponent/index.jsx b/src/menu/components/card/cardcomponent/index.jsx index 94835b5..1753712 100644 --- a/src/menu/components/card/cardcomponent/index.jsx +++ b/src/menu/components/card/cardcomponent/index.jsx @@ -49,7 +49,7 @@ } shouldComponentUpdate (nextProps, nextState) { - return !is(fromJS(this.state), fromJS(nextState)) + return !is(fromJS(this.props.cards), fromJS(nextProps.cards)) || !is(fromJS(this.state), fromJS(nextState)) } /** diff --git a/src/menu/components/card/data-card/index.jsx b/src/menu/components/card/data-card/index.jsx index 029154a..1b161aa 100644 --- a/src/menu/components/card/data-card/index.jsx +++ b/src/menu/components/card/data-card/index.jsx @@ -33,20 +33,9 @@ } UNSAFE_componentWillMount () { - const { card, menu } = this.props + const { card } = this.props if (card.isNew) { - let dataName = '' - - if (card.floor === 1) { - while (!dataName) { - let _dataName = Utils.getdataName() - if (menu.components.filter(com => com.dataName === _dataName).length === 0) { - dataName = _dataName - } - } - } - let subcards = null if (card.config) { @@ -87,7 +76,7 @@ format: 'array', // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡 pageable: true, // 缁勪欢灞炴�� - 鏄惁鍙垎椤� switchable: true, // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹� - dataName: dataName, + dataName: card.dataName || '', width: 24, name: card.name, subtype: card.subtype, diff --git a/src/menu/components/card/data-card/index.scss b/src/menu/components/card/data-card/index.scss index 8b61bd1..d6ce6a3 100644 --- a/src/menu/components/card/data-card/index.scss +++ b/src/menu/components/card/data-card/index.scss @@ -5,7 +5,7 @@ background-position: center center; background-repeat: no-repeat; background-size: cover; - min-height: 50px; + min-height: 20px; .card-control { position: absolute; @@ -34,7 +34,7 @@ background-position: center center; background-repeat: no-repeat; background-size: cover; - min-height: 50px; + min-height: 20px; } .card-item:hover { diff --git a/src/menu/components/card/prop-card/index.jsx b/src/menu/components/card/prop-card/index.jsx index c7715d5..9fe9948 100644 --- a/src/menu/components/card/prop-card/index.jsx +++ b/src/menu/components/card/prop-card/index.jsx @@ -33,19 +33,9 @@ } UNSAFE_componentWillMount () { - const { card, menu } = this.props + const { card } = this.props if (card.isNew) { - let dataName = '' - if (card.floor === 1) { - while (!dataName) { - let _dataName = Utils.getdataName() - if (menu.components.filter(com => com.dataName === _dataName).length === 0) { - dataName = _dataName - } - } - } - let subcards = null if (card.config) { @@ -86,7 +76,7 @@ format: 'object', // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡 pageable: false, // 缁勪欢灞炴�� - 鏄惁鍙垎椤� switchable: true, // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹� - dataName: dataName, + dataName: card.dataName || '', width: 24, name: card.name, subtype: card.subtype, diff --git a/src/menu/components/card/prop-card/index.scss b/src/menu/components/card/prop-card/index.scss index 81fec21..7c8800b 100644 --- a/src/menu/components/card/prop-card/index.scss +++ b/src/menu/components/card/prop-card/index.scss @@ -5,7 +5,7 @@ background-position: center center; background-repeat: no-repeat; background-size: cover; - min-height: 50px; + min-height: 20px; .card-control { position: absolute; @@ -34,7 +34,7 @@ background-position: center center; background-repeat: no-repeat; background-size: cover; - min-height: 50px; + min-height: 20px; } .card-item:hover { diff --git a/src/menu/components/chart/antv-bar/index.jsx b/src/menu/components/chart/antv-bar/index.jsx index 27b33a9..41cfc59 100644 --- a/src/menu/components/chart/antv-bar/index.jsx +++ b/src/menu/components/chart/antv-bar/index.jsx @@ -34,7 +34,7 @@ } UNSAFE_componentWillMount () { - const { card, menu } = this.props + const { card } = this.props if (card.isNew) { let _plot = { @@ -59,17 +59,6 @@ _plot.shape = 'hv' } - let dataName = '' - - if (card.floor === 1) { - while (!dataName) { - let _dataName = Utils.getdataName() - if (menu.components.filter(com => com.dataName === _dataName).length === 0) { - dataName = _dataName - } - } - } - let _card = { uuid: card.uuid, type: card.type, @@ -79,16 +68,16 @@ format: 'array', // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡 pageable: false, // 缁勪欢灞炴�� - 鏄惁鍙垎椤� switchable: false, // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹� - dataName: dataName, + dataName: card.dataName || '', width: _plot.width, name: _plot.name, subtype: card.subtype, setting: { interType: 'system' }, style: { - fontSize: '16px', borderWidth: '1px', borderColor: 'rgb(217, 217, 217)', marginLeft: '8px', marginRight: '8px', marginTop: '8px', marginBottom: '8px' }, + headerStyle: { fontSize: '16px', borderBottomWidth: '1px', borderBottomColor: 'rgb(217, 217, 217)' }, columns: [], scripts: [], search: [], @@ -708,18 +697,31 @@ MKEmitter.emit('addButton', card.uuid, newcard) } + changeTitleStyle = () => { + const { card } = this.state + + MKEmitter.emit('changeStyle', [card.uuid, 'header'], ['font', 'border'], card.headerStyle) + } + changeStyle = () => { const { card } = this.state - MKEmitter.emit('changeStyle', [card.uuid], ['font', 'background', 'border', 'padding', 'margin'], card.style) + MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin'], card.style) } getStyle = (comIds, style) => { const { card } = this.state - if (comIds.length !== 1 || comIds[0] !== card.uuid) return + if (comIds[0] !== card.uuid) return - let _card = {...card, style} + let _card = {} + if (comIds.length === 1) { + _card = {...card, style} + } else if (comIds.length === 2 && comIds[1] === 'header') { + _card = {...card, headerStyle: style} + } else { + return + } this.setState({ card: _card @@ -733,8 +735,14 @@ return ( <div className="menu-line-chart-edit-box" style={{...card.style, height: card.plot.height || 400}}> - <div className="chart-header"> - <span className="chart-title">{card.plot.title || ''}</span> + <div className="chart-header" style={card.headerStyle}> + <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ + <div className="mk-popover-control"> + <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeTitleStyle} type="font-colors" /> + </div> + } trigger="hover"> + <span className="chart-title">{card.plot.title || ''}</span> + </Popover> <SearchComponent config={card} updatesearch={this.updateComponent} diff --git a/src/menu/components/chart/antv-bar/index.scss b/src/menu/components/chart/antv-bar/index.scss index 08877af..c37fad1 100644 --- a/src/menu/components/chart/antv-bar/index.scss +++ b/src/menu/components/chart/antv-bar/index.scss @@ -19,9 +19,6 @@ border-bottom: 1px solid #e8e8e8; overflow: hidden; padding-right: 35px; - text-decoration: inherit; - font-weight: inherit; - font-style: inherit; >.anticon-tool { position: absolute; @@ -41,6 +38,8 @@ float: left; line-height: 45px; margin-left: 10px; + position: relative; + z-index: 1; } } diff --git a/src/menu/components/chart/antv-pie/index.jsx b/src/menu/components/chart/antv-pie/index.jsx index f8dff44..5829643 100644 --- a/src/menu/components/chart/antv-pie/index.jsx +++ b/src/menu/components/chart/antv-pie/index.jsx @@ -33,7 +33,7 @@ } UNSAFE_componentWillMount () { - const { card, menu } = this.props + const { card } = this.props if (card.isNew) { let _plot = { @@ -48,17 +48,6 @@ _plot.innerRadius = 50 } - let dataName = '' - - if (card.floor === 1) { - while (!dataName) { - let _dataName = Utils.getdataName() - if (menu.components.filter(com => com.dataName === _dataName).length === 0) { - dataName = _dataName - } - } - } - let _card = { uuid: card.uuid, type: card.type, @@ -68,16 +57,16 @@ format: 'array', // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡 pageable: false, // 缁勪欢灞炴�� - 鏄惁鍙垎椤� switchable: false, // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹� - dataName: dataName, + dataName: card.dataName || '', width: _plot.width, name: _plot.name, subtype: card.subtype, setting: { interType: 'system' }, style: { - fontSize: '16px', borderWidth: '1px', borderColor: 'rgb(217, 217, 217)', marginLeft: '8px', marginRight: '8px', marginTop: '8px', marginBottom: '8px' }, + headerStyle: { fontSize: '16px', borderBottomWidth: '1px', borderBottomColor: 'rgb(217, 217, 217)' }, columns: [], scripts: [], search: [], @@ -385,18 +374,31 @@ MKEmitter.emit('addSearch', card.uuid, newcard) } + changeTitleStyle = () => { + const { card } = this.state + + MKEmitter.emit('changeStyle', [card.uuid, 'header'], ['font', 'border'], card.headerStyle) + } + changeStyle = () => { const { card } = this.state - MKEmitter.emit('changeStyle', [card.uuid], ['font', 'background', 'border', 'padding', 'margin'], card.style) + MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin'], card.style) } getStyle = (comIds, style) => { const { card } = this.state - if (comIds.length !== 1 || comIds[0] !== card.uuid) return + if (comIds[0] !== card.uuid) return - let _card = {...card, style} + let _card = {} + if (comIds.length === 1) { + _card = {...card, style} + } else if (comIds.length === 2 && comIds[1] === 'header') { + _card = {...card, headerStyle: style} + } else { + return + } this.setState({ card: _card @@ -410,8 +412,14 @@ return ( <div className="menu-pie-chart-edit-box" style={{...card.style, height: card.plot.height || 400}}> - <div className="chart-header"> - <span className="chart-title">{card.plot.title || ''}</span> + <div className="chart-header" style={card.headerStyle}> + <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ + <div className="mk-popover-control"> + <Icon className="style" title="璋冩暣鏍峰紡" onClick={this.changeTitleStyle} type="font-colors" /> + </div> + } trigger="hover"> + <span className="chart-title">{card.plot.title || ''}</span> + </Popover> <SearchComponent config={card} updatesearch={this.updateComponent} diff --git a/src/menu/components/chart/antv-pie/index.scss b/src/menu/components/chart/antv-pie/index.scss index d42ee49..87c7aa0 100644 --- a/src/menu/components/chart/antv-pie/index.scss +++ b/src/menu/components/chart/antv-pie/index.scss @@ -18,9 +18,6 @@ border-bottom: 1px solid #e8e8e8; overflow: hidden; padding-right: 35px; - text-decoration: inherit; - font-weight: inherit; - font-style: inherit; >.anticon-tool { position: absolute; @@ -40,6 +37,8 @@ float: left; line-height: 45px; margin-left: 10px; + position: relative; + z-index: 1; } } diff --git a/src/menu/components/tabs/tabcomponents/index.jsx b/src/menu/components/tabs/tabcomponents/index.jsx index e0f397d..e2b9908 100644 --- a/src/menu/components/tabs/tabcomponents/index.jsx +++ b/src/menu/components/tabs/tabcomponents/index.jsx @@ -100,6 +100,14 @@ } i++ } + + let dataName = '' + while (!dataName) { + let _dataName = Utils.getdataName() + if (config.components.filter(com => com.dataName === _dataName).length === 0) { + dataName = _dataName + } + } let newcard = { uuid: Utils.getuuid(), @@ -109,6 +117,7 @@ subtype: item.subtype, config: item.config, width: item.width || 24, + dataName: dataName, name: name, floor: config.floor ? (config.floor + 1) : 2, // 缁勪欢鐨勫眰绾� isNew: true // 鏂版坊鍔犳爣蹇楋紝鐢ㄤ簬鍒濆鍖� diff --git a/src/menu/datasource/index.jsx b/src/menu/datasource/index.jsx index 5520997..07031e4 100644 --- a/src/menu/datasource/index.jsx +++ b/src/menu/datasource/index.jsx @@ -47,6 +47,23 @@ this.setState({loading: true}) this.verifyRef.submitDataSource().then(res => { + if (res.columns) { + res.columns = res.columns.map(item => { + + if (/int/ig.test(item.datatype)) { + item.type = 'number' + item.decimal = 0 + } else if (/Decimal/ig.test(item.datatype)) { + item.type = 'number' + item.decimal = +item.datatype.replace(/^Decimal\(18,/ig, '').replace(/\)/ig, '') + } else { + item.type = 'text' + item.fieldlength = +item.datatype.replace(/^Nvarchar\(/ig, '').replace(/\)/ig, '') + } + return item + }) + } + this.setState({loading: false, visible: false}) this.props.updateConfig({...config, ...res}) }, () => { diff --git a/src/menu/menushell/index.jsx b/src/menu/menushell/index.jsx index 2656df8..de7b7da 100644 --- a/src/menu/menushell/index.jsx +++ b/src/menu/menushell/index.jsx @@ -93,12 +93,21 @@ i++ } + let dataName = '' + while (!dataName) { + let _dataName = Utils.getdataName() + if (menu.components.filter(com => com.dataName === _dataName).length === 0) { + dataName = _dataName + } + } + let newcard = { uuid: Utils.getuuid(), type: item.component, subtype: item.subtype, config: item.config, width: item.width || 24, + dataName: dataName, name: name, floor: 1, // 缁勪欢鐨勫眰绾� isNew: true // 鏂版坊鍔犳爣蹇楋紝鐢ㄤ簬鍒濆鍖� diff --git a/src/menu/modalconfig/index.jsx b/src/menu/modalconfig/index.jsx index 9998550..5a0b8c9 100644 --- a/src/menu/modalconfig/index.jsx +++ b/src/menu/modalconfig/index.jsx @@ -177,7 +177,7 @@ * 3銆佽缃紪杈戝弬鏁伴」-formlist */ handleForm = (_card) => { - const { componentConfig } = this.props + const { componentConfig, menu } = this.props let card = fromJS(_card).toJS() const { config } = this.state @@ -239,8 +239,8 @@ } let roleList = [] - if (this.props.sysRoles && this.props.sysRoles.length > 0) { - roleList = this.props.sysRoles.map(role => { + if (menu.sysRoles && menu.sysRoles.length > 0) { + roleList = menu.sysRoles.map(role => { return { uuid: role.uuid, field: role.value, @@ -917,7 +917,6 @@ const mapStateToProps = (state) => { return { - sysRoles: state.sysRoles, menu: state.customMenu } } diff --git a/src/menu/stylecontroller/index.jsx b/src/menu/stylecontroller/index.jsx index 43cce2d..3d6a28e 100644 --- a/src/menu/stylecontroller/index.jsx +++ b/src/menu/stylecontroller/index.jsx @@ -1,7 +1,7 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { Collapse, Form, Input, Col, Icon, InputNumber, Select, Radio, Drawer } from 'antd' +import { Collapse, Form, Input, Col, Icon, InputNumber, Select, Radio, Drawer, Button } from 'antd' import MKEmitter from '@/utils/events.js' import zhCN from '@/locales/zh-CN/mob.js' @@ -288,6 +288,7 @@ width="300" className="menu-style-drawer" closable={true} + maskClosable={false} onClose={this.onCloseDrawer} maskStyle={{opacity: 0.1}} visible={this.state.visible} @@ -498,73 +499,81 @@ label={<Icon title="鍦嗚" type="radius-setting" />} labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } > - <StyleInput defaultValue={card.borderRadius || ''} options={['px', '%']} onChange={(val) => this.changeNormalStyle(val, 'borderRadius')}/> + <StyleInput defaultValue={card.borderRadius || '0px'} options={['px', '%']} onChange={(val) => this.changeNormalStyle(val, 'borderRadius')}/> </Form.Item> </Col> </Panel> : null} {options.includes('margin') ? <Panel header="澶栬竟璺�" key="margin"> - <Col span={12}> + <Col span={24}> <Form.Item colon={false} label={<Icon title="涓婅竟璺�" type="arrow-up"/>} + labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } > <StyleInput defaultValue={card.marginTop || '0px'} options={['px', 'vh', 'vw']} onChange={(val) => this.changeNormalStyle(val, 'marginTop')}/> </Form.Item> </Col> - <Col span={12}> + <Col span={24}> <Form.Item colon={false} label={<Icon title="涓嬭竟璺�" type="arrow-down"/>} + labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } > <StyleInput defaultValue={card.marginBottom || '0px'} options={['px', 'vh', 'vw']} onChange={(val) => this.changeNormalStyle(val, 'marginBottom')}/> </Form.Item> </Col> - <Col span={12}> + <Col span={24}> <Form.Item colon={false} label={<Icon title="宸﹁竟璺�" type="arrow-left"/>} + labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } > <StyleInput defaultValue={card.marginLeft || '0px'} options={['px', 'vh', 'vw']} onChange={(val) => this.changeNormalStyle(val, 'marginLeft')}/> </Form.Item> </Col> - <Col span={12}> + <Col span={24}> <Form.Item colon={false} label={<Icon title="鍙宠竟璺�" type="arrow-right"/>} + labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } > <StyleInput defaultValue={card.marginRight || '0px'} options={['px', 'vh', 'vw']} onChange={(val) => this.changeNormalStyle(val, 'marginRight')}/> </Form.Item> </Col> </Panel> : null} {options.includes('padding') ? <Panel header="鍐呰竟璺�" key="padding"> - <Col span={12}> + <Col span={24}> <Form.Item colon={false} label={<Icon title="涓婅竟璺�" type="arrow-up"/>} + labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } > <StyleInput defaultValue={card.paddingTop || '0px'} options={['px', 'vh', 'vw']} onChange={(val) => this.changeNormalStyle(val, 'paddingTop')}/> </Form.Item> </Col> - <Col span={12}> + <Col span={24}> <Form.Item colon={false} label={<Icon title="涓嬭竟璺�" type="arrow-down"/>} + labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } > <StyleInput defaultValue={card.paddingBottom || '0px'} options={['px', 'vh', 'vw']} onChange={(val) => this.changeNormalStyle(val, 'paddingBottom')}/> </Form.Item> </Col> - <Col span={12}> + <Col span={24}> <Form.Item colon={false} label={<Icon title="宸﹁竟璺�" type="arrow-left"/>} + labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } > <StyleInput defaultValue={card.paddingLeft || '0px'} options={['px', 'vh', 'vw']} onChange={(val) => this.changeNormalStyle(val, 'paddingLeft')}/> </Form.Item> </Col> - <Col span={12}> + <Col span={24}> <Form.Item colon={false} label={<Icon title="鍙宠竟璺�" type="arrow-right"/>} + labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} } > <StyleInput defaultValue={card.paddingRight || '0px'} options={['px', 'vh', 'vw']} onChange={(val) => this.changeNormalStyle(val, 'paddingRight')}/> </Form.Item> @@ -587,6 +596,9 @@ </Panel> : null} </Collapse> : null} </Form> + <div style={{textAlign: 'right'}}> + <Button type="link" style={{color: '#ffffff', marginTop: '20px'}} onClick={this.onCloseDrawer}>鍏抽棴</Button> + </div> </div> </Drawer> ) diff --git a/src/menu/stylecontroller/index.scss b/src/menu/stylecontroller/index.scss index 801ed13..f1c1560 100644 --- a/src/menu/stylecontroller/index.scss +++ b/src/menu/stylecontroller/index.scss @@ -17,6 +17,14 @@ color: rgba(255, 255, 255, 0.85); background-color: #202735; border-top: 1px solid #202735; + .ant-collapse-content-box { + padding: 5px 10px; + } + .ant-collapse-content-box::after { + content: ' '; + display: block; + clear: both; + } .ant-input-number { width: 100%; } diff --git a/src/menu/stylecontroller/styleInput/index.jsx b/src/menu/stylecontroller/styleInput/index.jsx index 3bf883c..a7d3df9 100644 --- a/src/menu/stylecontroller/styleInput/index.jsx +++ b/src/menu/stylecontroller/styleInput/index.jsx @@ -1,9 +1,11 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { Menu, Popover, Input } from 'antd' +import { Select, Input } from 'antd' import './index.scss' + +const { Option } = Select class StyleInput extends Component { static propTpyes = { @@ -15,14 +17,14 @@ state = { value: '', - parseVal: '', - width: '', + unit: '', options: null } UNSAFE_componentWillMount () { const { defaultValue, value, options } = this.props let val = '' + let unit = '' let _options = ['px'] if (value !== undefined) { @@ -35,8 +37,18 @@ _options = options } - if (val === 'auto') { - val = '' + unit = _options[0] + + if (val) { + if (val.indexOf('px') > -1) { + unit = 'px' + } else if (val.indexOf('%') > -1) { + unit = '%' + } else if (val.indexOf('vw') > -1) { + unit = 'vw' + } else if (val.indexOf('vh') > -1) { + unit = 'vh' + } } let _val = parseInt(val) @@ -45,7 +57,7 @@ _val = '' } - this.setState({value: val, options: _options, parseVal: _val}) + this.setState({value: _val, options: _options, unit}) } shouldComponentUpdate (nextProps, nextState) { @@ -54,13 +66,32 @@ UNSAFE_componentWillReceiveProps(nextProps) { if (nextProps.value !== undefined && nextProps.value !== this.state.value) { - this.setState({ value: nextProps.value }) + let val = nextProps.value + let unit = this.state.unit + + if (val) { + if (val.indexOf('px') > -1) { + unit = 'px' + } else if (val.indexOf('%') > -1) { + unit = '%' + } else if (val.indexOf('vw') > -1) { + unit = 'vw' + } else if (val.indexOf('vh') > -1) { + unit = 'vh' + } + } + + let _val = parseInt(val) + + if (isNaN(_val)) { + _val = '' + } + + this.setState({value: _val, unit}) } } - componentDidMount () { - this.setState({width: (this.input.offsetWidth - 10) + 'px'}) - } + componentDidMount () {} /** * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆 @@ -72,49 +103,47 @@ } changeValue = (e) => { + const { unit } = this.state let val = e.target.value let _val = parseInt(val) - + if (isNaN(_val)) { _val = '' } this.setState({ - value: val, - parseVal: _val - }) - - if (!val && this.props.onChange) { - this.props.onChange('0px') - } - } - - submitValue = (val) => { - this.setState({ - value: val + value: _val, }) if (this.props.onChange) { - this.props.onChange(val) + if (!_val) { + this.props.onChange('0px') + } else { + this.props.onChange(`${_val}${unit}`) + } + } + } + + changeUnit = (val) => { + const { value } = this.state + + this.setState({unit: val}) + if (value && this.props.onChange) { + this.props.onChange(`${value}${val}`) } } render () { - const { value, options, parseVal, width } = this.state + const { value, options, unit } = this.state return ( - <Popover placement="bottom" overlayClassName="style-input-popover" content={ - parseVal !== '' ? - <Menu> - {options.map(option => ( - <Menu.Item key={option} style={{width: width}} onClick={() => this.submitValue(`${parseVal}${option}`)}>{parseVal} {option}</Menu.Item> - ))} - </Menu> : null - } trigger="hover"> - <div ref={dom => { this.input = dom }} style={{lineHeight: '32px'}}> - <Input value={value} onChange={this.changeValue}/> - </div> - </Popover> + <div className="style-input-box"> + <Input value={value} addonAfter={ + <Select value={unit} onChange={this.changeUnit}> + {options.map(item => <Option key={item} value={item}>{item}</Option>)} + </Select> + } onChange={this.changeValue}/> + </div> ) } } diff --git a/src/menu/stylecontroller/styleInput/index.scss b/src/menu/stylecontroller/styleInput/index.scss index 68798d5..e76a3e4 100644 --- a/src/menu/stylecontroller/styleInput/index.scss +++ b/src/menu/stylecontroller/styleInput/index.scss @@ -1,44 +1,9 @@ -.style-input-popover { - padding-top: 0px; - z-index: 1090!important; - .ant-popover-inner-content { - padding: 0px 5px; - .ant-menu-root.ant-menu-vertical { - border: 0; - .ant-menu-item { - height: 30px; - cursor: pointer; - line-height: 30px; - } - .ant-menu-item:not(:last-child) { - margin-bottom: 0px; - } - .ant-menu-item:first-child { - margin-top: 10px; - } - .ant-menu-item:last-child { - margin-bottom: 10px; - } +.style-input-box { + line-height: 32px; + .ant-select { + width: 60px!important; + .ant-select-selection { + color: rgba(0, 0, 0, 0.75)!important; } } - .ant-popover-arrow { - display: none; - } - .ant-popover-content::before { - content: ' '; - position: absolute; - width: 100%; - height: 5px; - top: -5px; - } - .ant-popover-content::after { - content: ' '; - position: absolute; - width: 100%; - height: 5px; - bottom: -5px; - } -} -.style-input-popover.ant-popover-placement-top { - padding-bottom: 0px; } diff --git a/src/mob/colorsketch/index.jsx b/src/mob/colorsketch/index.jsx index dd401d7..c3fe986 100644 --- a/src/mob/colorsketch/index.jsx +++ b/src/mob/colorsketch/index.jsx @@ -58,7 +58,9 @@ <Popover content={ <SketchPicker color={ color } presetColors={presetColors} onChange={ this.handleChange } /> } overlayClassName="color-sketch-popover" placement="bottomRight" title="" trigger="click"> - <div className="color-sketch-block-inner" style={ {background: color} }></div> + <div className="color-sketch-block-box"> + <div className="color-sketch-block-inner" style={ {background: color} }></div> + </div> </Popover> <div className="color-sketch-value">{color}</div> </div> diff --git a/src/mob/colorsketch/index.scss b/src/mob/colorsketch/index.scss index 5790603..96900ce 100644 --- a/src/mob/colorsketch/index.scss +++ b/src/mob/colorsketch/index.scss @@ -2,14 +2,20 @@ height: 25px; width: 100%; + .color-sketch-block-box { + display: inline-block; + width: calc(100% - 160px); + height: 100%; + border-radius: 2px; + background: #ffffff url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==') left center; + } .color-sketch-block-inner { display: inline-block; cursor: pointer; border-radius: 2px; box-shadow: 0 0 0 1px rgba(0, 0, 0, .1); - width: calc(100% - 160px); + width: 100%; height: 100%; - border-radius: 2px; } .color-sketch-value { display: inline-block; diff --git a/src/tabviews/custom/components/card/cardcellList/index.jsx b/src/tabviews/custom/components/card/cardcellList/index.jsx index 8375248..2c2a41c 100644 --- a/src/tabviews/custom/components/card/cardcellList/index.jsx +++ b/src/tabviews/custom/components/card/cardcellList/index.jsx @@ -91,7 +91,7 @@ getContent = (card) => { const { data, BID, cards } = this.props - if (card.eleType === 'text' || card.eleType === 'number') { + if (card.eleType === 'text') { let val = '' if (card.datatype === 'static') { @@ -100,6 +100,48 @@ val = data[card.field] } + if (val !== '' && card.format) { + if (card.format === 'YYYY-MM-DD' && /^[1-9]\d{3}(-|\/)(0[1-9]|1[0-2])(-|\/)(0[1-9]|[1-2][0-9]|3[0-1])/.test(val)) { + val = `${val.substr(0, 4)}-${val.substr(5, 2)}-${val.substr(8, 2)}` + } + } + + if (val !== '') { + val = `${card.prefix || ''}${val}${card.postfix || ''}` + } + + return ( + <Col key={card.uuid} span={card.width}> + <div style={card.style}> + <div className={'ant-mk-text line' + card.height} style={{height: card.innerHeight || 21}}>{val}</div> + </div> + </Col> + ) + } else if (card.eleType === 'number') { + let val = '' + + if (card.datatype === 'static') { + val = card.value + } else if (data.hasOwnProperty(card.field)) { + val = data[card.field] + } + + if (val !== '' && typeof(val) === 'number') { + if (card.format === 'percent') { + val = val * 100 + } + + if (card.col && card.col.type === 'number') { + val = val.toFixed(card.col.decimal || 0) + } else { + val = '' + val + } + + if (card.format === 'thdSeparator') { + val = val.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,') + } + } + if (val !== '') { val = `${card.prefix || ''}${val}${card.postfix || ''}` } diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx index 9c52d9c..0efdbeb 100644 --- a/src/tabviews/custom/components/card/data-card/index.jsx +++ b/src/tabviews/custom/components/card/data-card/index.jsx @@ -35,10 +35,29 @@ UNSAFE_componentWillMount () { let _config = fromJS(this.props.config).toJS() + let _card = _config.subcards[0] + let _cols = new Map() + + _config.columns.forEach(item => { + _cols.set(item.field, item) + }) + + _card.elements = _card.elements.map(item => { + if (item.field && _cols.has(item.field)) { + item.col = _cols.get(item.field) + } + return item + }) + _card.backElements = _card.backElements.map(item => { + if (item.field && _cols.has(item.field)) { + item.col = _cols.get(item.field) + } + return item + }) this.setState({ config: _config, - card: _config.subcards[0], + card: _card, arr_field: _config.columns.map(col => col.field).join(','), }, () => { this.loadData() diff --git a/src/tabviews/custom/components/card/data-card/index.scss b/src/tabviews/custom/components/card/data-card/index.scss index 76f84b2..bb60e73 100644 --- a/src/tabviews/custom/components/card/data-card/index.scss +++ b/src/tabviews/custom/components/card/data-card/index.scss @@ -3,7 +3,7 @@ background-position: center center; background-repeat: no-repeat; background-size: cover; - min-height: 50px; + min-height: 20px; display: flex; position: relative; diff --git a/src/tabviews/custom/components/card/prop-card/index.jsx b/src/tabviews/custom/components/card/prop-card/index.jsx index bb6fef1..b3ff9a4 100644 --- a/src/tabviews/custom/components/card/prop-card/index.jsx +++ b/src/tabviews/custom/components/card/prop-card/index.jsx @@ -30,6 +30,26 @@ UNSAFE_componentWillMount () { let _config = fromJS(this.props.config).toJS() + let _cols = new Map() + + _config.columns.forEach(item => { + _cols.set(item.field, item) + }) + + _config.subcards.forEach(card => { + card.elements = card.elements.map(item => { + if (item.field && _cols.has(item.field)) { + item.col = _cols.get(item.field) + } + return item + }) + card.backElements = card.backElements.map(item => { + if (item.field && _cols.has(item.field)) { + item.col = _cols.get(item.field) + } + return item + }) + }) this.setState({ config: _config, diff --git a/src/tabviews/custom/components/card/prop-card/index.scss b/src/tabviews/custom/components/card/prop-card/index.scss index d2304b4..6ba2875 100644 --- a/src/tabviews/custom/components/card/prop-card/index.scss +++ b/src/tabviews/custom/components/card/prop-card/index.scss @@ -3,7 +3,7 @@ background-position: center center; background-repeat: no-repeat; background-size: cover; - min-height: 50px; + min-height: 20px; position: relative; .card-row-list::after { diff --git a/src/tabviews/custom/components/chart/antv-bar-line/index.jsx b/src/tabviews/custom/components/chart/antv-bar-line/index.jsx index 0d993cd..3ddb731 100644 --- a/src/tabviews/custom/components/chart/antv-bar-line/index.jsx +++ b/src/tabviews/custom/components/chart/antv-bar-line/index.jsx @@ -1039,7 +1039,7 @@ <Spin /> </div> : null } - {showHeader ? <div className="chart-header"> + {showHeader ? <div className="chart-header" style={config.headerStyle}> <span className="chart-title">{title}</span> {/* <searchLine /> */} {plot.datatype === 'statistics' && chartFields.length > 0 ? <Select diff --git a/src/tabviews/custom/components/chart/antv-bar-line/index.scss b/src/tabviews/custom/components/chart/antv-bar-line/index.scss index dd7dc40..7d6a79a 100644 --- a/src/tabviews/custom/components/chart/antv-bar-line/index.scss +++ b/src/tabviews/custom/components/chart/antv-bar-line/index.scss @@ -7,11 +7,8 @@ > .chart-header { height: 45px; - border-bottom: 1px solid #e8e8e8; + // border-bottom: 1px solid #e8e8e8; overflow: hidden; - text-decoration: inherit; - font-weight: inherit; - font-style: inherit; .chart-title { // font-size: 16px; diff --git a/src/tabviews/custom/components/chart/antv-pie/index.jsx b/src/tabviews/custom/components/chart/antv-pie/index.jsx index abe2143..873f630 100644 --- a/src/tabviews/custom/components/chart/antv-pie/index.jsx +++ b/src/tabviews/custom/components/chart/antv-pie/index.jsx @@ -456,7 +456,7 @@ <Spin /> </div> : null } - {showHeader ? <div className="chart-header"> + {showHeader ? <div className="chart-header" style={config.headerStyle}> <span className="chart-title">{title}</span> {/* <searchLine /> */} </div> : null} diff --git a/src/tabviews/custom/components/chart/antv-pie/index.scss b/src/tabviews/custom/components/chart/antv-pie/index.scss index bf252bb..e6a1847 100644 --- a/src/tabviews/custom/components/chart/antv-pie/index.scss +++ b/src/tabviews/custom/components/chart/antv-pie/index.scss @@ -7,11 +7,8 @@ > .chart-header { height: 45px; - border-bottom: 1px solid #e8e8e8; + // border-bottom: 1px solid #e8e8e8; overflow: hidden; - text-decoration: inherit; - font-weight: inherit; - font-style: inherit; .chart-title { // font-size: 16px; diff --git a/src/tabviews/custom/components/share/tabtransfer/index.jsx b/src/tabviews/custom/components/share/tabtransfer/index.jsx index 0238c31..f2bb801 100644 --- a/src/tabviews/custom/components/share/tabtransfer/index.jsx +++ b/src/tabviews/custom/components/share/tabtransfer/index.jsx @@ -2,17 +2,22 @@ import PropTypes from 'prop-types' import { connect } from 'react-redux' import { is, fromJS } from 'immutable' -import { Row, Col, Empty } from 'antd' +import { Row, Col, Empty, notification } from 'antd' +import moment from 'moment' -import asyncSpinComponent from '@/utils/asyncSpinComponent' +import Api from '@/api' +import options from '@/store/options.js' +import asyncComponent from '@/utils/asyncComponent' import Utils from '@/utils/utils.js' import './index.scss' // 閫氱敤缁勪欢 -const AntvBarAndLine = asyncSpinComponent(() => import('@/tabviews/custom/components/chart/antv-bar-line')) -const MainSearch = asyncSpinComponent(() => import('@/tabviews/custom/components/search/main-search')) -const AntvPie = asyncSpinComponent(() => import('@/tabviews/custom/components/chart/antv-pie')) -const AntvTabs = asyncSpinComponent(() => import('@/tabviews/custom/components/tabs/antv-tabs')) +const AntvBarAndLine = asyncComponent(() => import('@/tabviews/custom/components/chart/antv-bar-line')) +const MainSearch = asyncComponent(() => import('@/tabviews/custom/components/search/main-search')) +const AntvPie = asyncComponent(() => import('@/tabviews/custom/components/chart/antv-pie')) +const AntvTabs = asyncComponent(() => import('@/tabviews/custom/components/tabs/antv-tabs')) +const DataCard = asyncComponent(() => import('@/tabviews/custom/components/card/data-card')) +const PropCard = asyncComponent(() => import('@/tabviews/custom/components/card/prop-card')) class TabTransfer extends Component { static propTpyes = { @@ -25,11 +30,13 @@ state = { mainSearch: [], - self: false + self: false, + data: null } UNSAFE_componentWillMount () { const { config, mainSearch } = this.props + // 鑾峰彇涓绘悳绱㈡潯浠� let _mainSearch = [] let self = false @@ -56,7 +63,26 @@ } }) - this.setState({mainSearch: self ? _mainSearch : fromJS(mainSearch).toJS(), self}) + if (!self) { + _mainSearch = fromJS(mainSearch).toJS() + } + + let params = [] + config.components.forEach(component => { + if (component.type === 'tabs') return + + if (!component.format || (component.subtype === 'propcard' && component.wrap.datatype === 'static')) return + + if (component.dataName && !component.pageable && component.setting.interType === 'system' && component.setting.onload === 'true' && component.setting.sync === 'true') { + let param = this.getDefaultParam(component, _mainSearch) + params.push(param) + } else { + component.setting.sync = 'false' + } + }) + + this.setState({mainSearch: _mainSearch, self}) + this.loadmaindata(params) } UNSAFE_componentWillReceiveProps(nextProps) { @@ -67,13 +93,136 @@ } } + /** + * @description 鑾峰彇绯荤粺瀛樺偍杩囩▼ sPC_Get_TableData 鐨勫弬鏁� + */ + getDefaultParam = (component, mainSearch) => { + const { columns, search, setting, dataName, format } = component + + let searchlist = [] + if (search && search.length > 0) { + searchlist = Utils.initMainSearch(search) + } + if (setting.useMSearch === 'true') { + searchlist = [...mainSearch, ...searchlist] + } + + let arr_field = columns.map(col => col.field) + let _dataresource = setting.dataresource + let _customScript = setting.customScript + + if (setting.queryType === 'statistics' || _customScript) { + let allSearch = Utils.getAllSearchOptions(searchlist) + let regoptions = allSearch.map(item => { + return { + reg: new RegExp('@' + item.key + '@', 'ig'), + value: `'${item.value}'` + } + }) + + regoptions.forEach(item => { + if (_dataresource && setting.queryType === 'statistics') { + _dataresource = _dataresource.replace(item.reg, item.value) + } + if (_customScript) { + _customScript = _customScript.replace(item.reg, item.value) + } + }) + } + + let _search = '' + if (setting.queryType !== 'statistics' && _dataresource) { + _search = Utils.joinMainSearchkey(searchlist) + _search = _search ? 'where ' + _search : '' + } + + if (setting.order && _dataresource) { + _dataresource = `select top 1000 ${arr_field.join(',')} from (select ${arr_field.join(',')} ,ROW_NUMBER() over(order by ${setting.order}) as rows from ${_dataresource} ${_search}) tmptable order by tmptable.rows ` + } else if (_dataresource) { + _dataresource = `select top 1000 ${arr_field.join(',')} from ${_dataresource} ${_search} ` + } + + // 娴嬭瘯绯荤粺鎵撳嵃鏌ヨ璇彞 + if ((options.sysType === 'local' && !window.GLOB.systemType) || window.debugger === true) { + _customScript && console.log(`${_dataresource ? '' : '/*涓嶆墽琛岄粯璁ql*/\n'}${_customScript}`) + _dataresource && console.log(_dataresource) + } + + return { + name: dataName, + columns: columns, + par_tablename: '', + type: format === 'array' ? format : '', + primaryKey: setting.primaryKey || '', + foreign_key: '', + sql: _dataresource, + script: _customScript + } + } + + /** + * @description 涓昏〃鏁版嵁鍔犺浇 + */ + loadmaindata = (params) => { + if (!params || params.length === 0) return + let LText_field = [] + let LText = params.map((item, index) => { + let _sql = item.sql + let _script = item.script + + if (index === 0) { + _script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000) select @ErrorCode='',@retmsg ='' + ${_script} + ` + } + + item.columns.forEach(cell => { + LText_field.push(`Select '${item.name}' as tablename,'${cell.field}' as fieldname,'${cell.datatype}' as field_type`) + }) + return `Select '${item.name}' as tablename,'${window.btoa(window.encodeURIComponent(_sql))}' as LText,'${window.btoa(window.encodeURIComponent(_script))}' as Lcustomize,'${item.type}' as table_type,'${item.primaryKey}' as primary_key,'${item.par_tablename}' as par_tablename,'${item.foreign_key}' as foreign_key,'${index}' as Sort` + }) + + let param = { + func: 'sPC_Get_structured_data', + LText: LText.join(' union all '), + LText_field: LText_field.join(' union all ') + } + + param.LText = Utils.formatOptions(param.LText) + param.LText_field = Utils.formatOptions(param.LText_field) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + + Api.getLocalConfig(param).then(result => { + if (result.status) { + delete result.status + delete result.message + delete result.ErrMesg + delete result.ErrCode + + this.setState({ + data: result + }) + } else { + this.setState({ + data: '' + }) + notification.error({ + top: 92, + message: result.message, + duration: 10 + }) + } + }) + } + resetSearch = (search) => { this.setState({mainSearch: search}) } getComponents = () => { const { menuType, dataManager, BID, config } = this.props - const { mainSearch } = this.state + const { mainSearch, data } = this.state if (!config || !config.components || config.components.length === 0) return (<Empty description={false} />) @@ -81,13 +230,13 @@ if (item.type === 'bar' || item.type === 'line') { return ( <Col span={item.width} key={item.uuid}> - <AntvBarAndLine config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> + <AntvBarAndLine data={data} config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> </Col> ) } else if (item.type === 'pie') { return ( <Col span={item.width} key={item.uuid}> - <AntvPie config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> + <AntvPie data={data} config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> </Col> ) } else if (item.type === 'search') { @@ -102,6 +251,22 @@ <AntvTabs config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> </Col> ) + } else if (item.type === 'card') { + if (item.subtype === 'datacard') { + return ( + <Col span={item.width} key={item.uuid}> + <DataCard config={item} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> + </Col> + ) + } else if (item.subtype === 'propcard') { + return ( + <Col span={item.width} key={item.uuid}> + <PropCard config={item} data={data} BID={BID} mainSearch={mainSearch} menuType={menuType} dataManager={dataManager} /> + </Col> + ) + } else { + return null + } } else { return null } diff --git a/src/tabviews/custom/components/tabs/antv-tabs/index.jsx b/src/tabviews/custom/components/tabs/antv-tabs/index.jsx index 1f89c25..d8ef472 100644 --- a/src/tabviews/custom/components/tabs/antv-tabs/index.jsx +++ b/src/tabviews/custom/components/tabs/antv-tabs/index.jsx @@ -8,7 +8,6 @@ import './index.scss' const TabTransfer = asyncComponent(() => import('../../share/tabtransfer')) - const { TabPane } = Tabs class antvBarLineChart extends Component { diff --git a/src/tabviews/custom/index.jsx b/src/tabviews/custom/index.jsx index a3a5325..9541ee1 100644 --- a/src/tabviews/custom/index.jsx +++ b/src/tabviews/custom/index.jsx @@ -10,19 +10,19 @@ import zhCN from '@/locales/zh-CN/main.js' import enUS from '@/locales/en-US/main.js' import Utils from '@/utils/utils.js' -import asyncSpinComponent from '@/utils/asyncSpinComponent' +import asyncComponent from '@/utils/asyncComponent' import { refreshTabView } from '@/store/action' import NotFount from '@/components/404' import './index.scss' // 閫氱敤缁勪欢 -const AntvBarAndLine = asyncSpinComponent(() => import('./components/chart/antv-bar-line')) -const AntvPie = asyncSpinComponent(() => import('./components/chart/antv-pie')) -const AntvTabs = asyncSpinComponent(() => import('./components/tabs/antv-tabs')) -const DataCard = asyncSpinComponent(() => import('./components/card/data-card')) -const PropCard = asyncSpinComponent(() => import('./components/card/prop-card')) -const MainSearch = asyncSpinComponent(() => import('./components/search/main-search')) +const AntvBarAndLine = asyncComponent(() => import('./components/chart/antv-bar-line')) +const AntvPie = asyncComponent(() => import('./components/chart/antv-pie')) +const AntvTabs = asyncComponent(() => import('./components/tabs/antv-tabs')) +const DataCard = asyncComponent(() => import('./components/card/data-card')) +const PropCard = asyncComponent(() => import('./components/card/prop-card')) +const MainSearch = asyncComponent(() => import('./components/search/main-search')) class CustomPage extends Component { static propTpyes = { @@ -66,6 +66,12 @@ let config = '' let userConfig = null + setTimeout(() => { // 寤舵椂鍔犺浇鐘舵�� + this.setState({ + loadingview: false + }) + }, 1500) + try { // 閰嶇疆淇℃伅瑙f瀽 config = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam))) } catch (e) { @@ -86,7 +92,6 @@ // 椤甸潰閰嶇疆瑙f瀽閿欒鏃舵彁绀� if (!config) { this.setState({ - loadingview: false, viewlost: true }) return @@ -95,7 +100,6 @@ // 椤甸潰鏈惎鐢ㄦ椂锛屾樉绀烘湭鍚敤椤甸潰 if (!config.enabled) { this.setState({ - loadingview: false, viewlost: true, lostmsg: this.state.dict['main.view.unenabled'] }) @@ -140,7 +144,6 @@ this.setState({ BID: param && param.BID ? param.BID : '', - loadingview: false, userConfig: userConfig, setting: config.setting, config, @@ -222,7 +225,7 @@ if (component.floor === 1 && component.dataName && !component.pageable && component.setting.interType === 'system' && component.setting.onload === 'true' && component.setting.sync === 'true') { let param = this.getDefaultParam(component, mainSearch) params.push(param) - } else { + } else if (component.floor === 1) { component.setting.sync = 'false' } @@ -307,22 +310,11 @@ let _sql = item.sql let _script = item.script - // if (index === 0) { - // _script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000) select @ErrorCode='',@retmsg ='' - // ${_script} - // ` - // } - - // if (params.length === index + 1) { - // _sql = `${_sql} - // aaa: - // if @ErrorCode!='' - // begin - // insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ - // goto bbb - // end - // ` - // } + if (index === 0) { + _script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000) select @ErrorCode='',@retmsg ='' + ${_script} + ` + } item.columns.forEach(cell => { LText_field.push(`Select '${item.name}' as tablename,'${cell.field}' as fieldname,'${cell.datatype}' as field_type`) @@ -335,7 +327,7 @@ LText: LText.join(' union all '), LText_field: LText_field.join(' union all ') } - + param.LText = Utils.formatOptions(param.LText) param.LText_field = Utils.formatOptions(param.LText_field) param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') diff --git a/src/templates/sharecomponent/actioncomponent/dragaction/index.jsx b/src/templates/sharecomponent/actioncomponent/dragaction/index.jsx index 5e1da18..4fbfca7 100644 --- a/src/templates/sharecomponent/actioncomponent/dragaction/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/dragaction/index.jsx @@ -53,7 +53,6 @@ copycard.uuid = Utils.getuuid() copycard.origin = false copycard.copyType = 'action' - copycard.label = copycard.label + '(copy)' copycard.focus = true copycard.originCard = card diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx index a21d6c6..a276faa 100644 --- a/src/views/menudesign/index.jsx +++ b/src/views/menudesign/index.jsx @@ -13,7 +13,7 @@ import antdEnUS from 'antd/es/locale/en_US' import antdZhCN from 'antd/es/locale/zh_CN' import asyncComponent from '@/utils/asyncComponent' -import { modifyCustomMenu } from '@/store/action' +import { modifyCustomMenu, initPermission } from '@/store/action' import './index.scss' @@ -467,7 +467,8 @@ const mapDispatchToProps = (dispatch) => { return { - modifyCustomMenu: (customMenu) => dispatch(modifyCustomMenu(customMenu)) + modifyCustomMenu: (customMenu) => dispatch(modifyCustomMenu(customMenu)), + initPermission: (sysRoles, permFuncField) => dispatch(initPermission(sysRoles, permFuncField)) } } -- Gitblit v1.8.0