From cad4c57867b08541bb560e871b690e4e730cc1b8 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期六, 15 四月 2023 14:29:27 +0800 Subject: [PATCH] Merge branch 'develop' --- src/templates/sharecomponent/columncomponent/columnform/index.scss | 5 src/menu/components/card/cardcellcomponent/dragaction/index.scss | 17 src/tabviews/custom/components/card/double-data-card/index.jsx | 62 + src/menu/components/card/cardcellcomponent/elementform/index.jsx | 104 +++ src/templates/sharecomponent/fieldscomponent/editcard/index.jsx | 5 src/views/menudesign/menuform/index.jsx | 105 +-- public/options.json | 10 src/tabviews/zshare/actionList/exceloutbutton/index.jsx | 21 src/menu/components/card/cardcellcomponent/dragaction/card.jsx | 12 src/tabviews/custom/popview/index.jsx | 188 ++---- src/templates/sharecomponent/fieldscomponent/index.jsx | 9 src/menu/components/table/normal-table/columns/editColumn/index.jsx | 2 src/menu/components/table/edit-table/columns/editColumn/index.scss | 5 src/tabviews/custom/index.scss | 5 src/menu/components/table/normal-table/columns/editColumn/index.scss | 5 src/tabviews/zshare/actionList/normalbutton/index.jsx | 23 src/components/paste/index.jsx | 4 src/menu/components/table/edit-table/columns/editColumn/index.jsx | 2 src/menu/datasource/verifycard/index.jsx | 13 src/tabviews/custom/components/card/data-card/index.jsx | 64 + src/utils/utils.js | 11 src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx | 41 + src/tabviews/custom/components/card/table-card/index.jsx | 9 src/tabviews/custom/components/card/cardcellList/index.jsx | 181 +++--- src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx | 13 src/menu/components/table/base-table/columns/editColumn/index.jsx | 2 src/components/normalform/modalform/index.jsx | 2 src/menu/components/card/cardcellcomponent/index.jsx | 2 src/menu/components/card/cardcomponent/index.jsx | 53 + src/tabviews/custom/components/card/tableHeader/index.scss | 45 + src/menu/components/card/cardcellcomponent/formconfig.jsx | 38 + src/tabviews/custom/index.jsx | 200 ++---- src/menu/components/card/cardcomponent/index.scss | 5 src/menu/components/table/base-table/columns/editColumn/index.scss | 5 src/components/sidemenu/index.jsx | 3 src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx | 32 + src/menu/components/card/cardcellcomponent/elementform/index.scss | 20 src/menu/components/card/cardcomponent/options.jsx | 18 src/tabviews/custom/components/card/tableHeader/index.jsx | 160 ++++++ src/views/login/index.jsx | 27 40 files changed, 1,004 insertions(+), 524 deletions(-) diff --git a/public/options.json b/public/options.json index 4e405d0..bedcbee 100644 --- a/public/options.json +++ b/public/options.json @@ -1,12 +1,12 @@ { - "appId": "201912040924165801464FF1788654BC5AC73", - "appkey": "20191106103859640976D6E924E464D029CF0", + "appId": "202108312122504607B107A83F55B40C98CCF", + "appkey": "20210831212235413F287EC3BF489424496C8", "mainSystemApi": "http://sso.mk9h.cn/cloud/webapi/dostars", "systemType": "", "externalDatabase": "", "lineColor": "", "filter": "false", - "defaultApp": "mk", + "defaultApp": "mkindustry", "defaultLang": "zh-CN", "WXAppID": "", "WXminiAppID": "", @@ -17,6 +17,6 @@ "transfer": "false", "keepPassword": "true", "platforms": ["H5", "wechat", "android", "ios", "wxMiniProgram"], - "host": "http://qingqiumarket.cn", - "service": "MKWMS/" + "host": "http://demo.mk9h.cn", + "service": "erp_new/" } \ No newline at end of file diff --git a/src/components/normalform/modalform/index.jsx b/src/components/normalform/modalform/index.jsx index cae1d70..c3e3144 100644 --- a/src/components/normalform/modalform/index.jsx +++ b/src/components/normalform/modalform/index.jsx @@ -45,6 +45,8 @@ item.hidden = false + if (item.forbid && item.del) return false + if (item.forbid) { item.hidden = true } diff --git a/src/components/paste/index.jsx b/src/components/paste/index.jsx index bf998d5..ce96162 100644 --- a/src/components/paste/index.jsx +++ b/src/components/paste/index.jsx @@ -33,10 +33,10 @@ }) this.setState({visible: false}) } else { - notification.success({ + notification.warning({ top: 92, message: result.message, - duration: 2 + duration: 5 }) } }) diff --git a/src/components/sidemenu/index.jsx b/src/components/sidemenu/index.jsx index 452c916..94686bd 100644 --- a/src/components/sidemenu/index.jsx +++ b/src/components/sidemenu/index.jsx @@ -18,8 +18,7 @@ state = { subMenulist: [], // 浜岀骇鑿滃崟 rootSubmenuKeys: null, - openKeys: null, - preview: null + openKeys: null } async loadsubmenu (menu) { diff --git a/src/menu/components/card/cardcellcomponent/dragaction/card.jsx b/src/menu/components/card/cardcellcomponent/dragaction/card.jsx index 8069bcf..6494683 100644 --- a/src/menu/components/card/cardcellcomponent/dragaction/card.jsx +++ b/src/menu/components/card/cardcellcomponent/dragaction/card.jsx @@ -1,7 +1,7 @@ import React from 'react' import { useDrag, useDrop } from 'react-dnd' import { Popover } from 'antd' -import { EditOutlined, CopyOutlined, CloseOutlined, FontColorsOutlined } from '@ant-design/icons' +import { EditOutlined, CopyOutlined, CloseOutlined, FontColorsOutlined, CaretUpOutlined, CaretDownOutlined } from '@ant-design/icons' import MkIcon from '@/components/mk-icon' import moment from 'moment' @@ -84,6 +84,9 @@ if (card.fixStyle === 'alone') { let _s = {fontSize: card.fixSize, color: card.fixColor, marginLeft: card.fixLeft, marginRight: card.fixRight} val = <><span style={_s}>{card.prefix || ''}</span>{`${card.datatype === 'static' ? (card.value || '') : (card.field || '')}`}<span style={_s}>{card.postfix || ''}</span></> + } + if (card.sortField) { + val = <><span>{val}</span><span className="sort-wrap"><CaretUpOutlined /><CaretDownOutlined /></span></> } return ( <div className={'ant-mk-text line' + (card.height || '')} style={{height: card.innerHeight || 'auto'}}>{val}</div> @@ -211,6 +214,11 @@ _style_ = {clear: 'left'} } + let tableHCell = false + if (parent.setting && parent.setting.cardRole === 'header') { + tableHCell = true + } + return ( <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}> @@ -218,7 +226,7 @@ <CopyOutlined className="copy" title="澶嶅埗" onClick={() => copyCard(id)} /> <CloseOutlined className="close" title="鍒犻櫎" onClick={() => delCard(id)} /> <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={() => changeStyle(id)}/> - {['text', 'number', 'slider', 'sequence', 'formula'].includes(card.eleType) ? <MarkColumn field={card.field || ''} columns={fields} type={card.eleType} marks={card.marks} onSubmit={(vals) => updateMarks({...card, marks: vals})} /> : null } + {['text', 'number', 'slider', 'sequence', 'formula'].includes(card.eleType) && !tableHCell ? <MarkColumn field={card.field || ''} columns={fields} type={card.eleType} marks={card.marks} onSubmit={(vals) => updateMarks({...card, marks: vals})} /> : null } </div> } trigger="hover"> <div ref={node => drag(drop(node))} style={_style_} className={'ant-col card-cell ant-col-' + card.width}> diff --git a/src/menu/components/card/cardcellcomponent/dragaction/index.scss b/src/menu/components/card/cardcellcomponent/dragaction/index.scss index 3d44552..51310de 100644 --- a/src/menu/components/card/cardcellcomponent/dragaction/index.scss +++ b/src/menu/components/card/cardcellcomponent/dragaction/index.scss @@ -214,4 +214,21 @@ background-repeat: no-repeat; background-size: cover; } + .sort-wrap { + position: relative; + margin-left: 5px; + font-size: 12px; + color: #bfbfbf; + display: none; + + .anticon-caret-up { + position: relative; + top: -4px; + } + .anticon-caret-down { + position: absolute; + top: 5px; + left: 0px; + } + } } \ No newline at end of file diff --git a/src/menu/components/card/cardcellcomponent/elementform/index.jsx b/src/menu/components/card/cardcellcomponent/elementform/index.jsx index e21fc1f..b6badfd 100644 --- a/src/menu/components/card/cardcellcomponent/elementform/index.jsx +++ b/src/menu/components/card/cardcellcomponent/elementform/index.jsx @@ -1,7 +1,7 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { fromJS } from 'immutable' -import { Form, Row, Col, Input, Select, Radio, Tooltip, InputNumber, Cascader } from 'antd' +import { Form, Row, Col, Input, Select, Radio, Tooltip, InputNumber, Cascader, Popover } from 'antd' import { QuestionCircleOutlined } from '@ant-design/icons' import { formRule } from '@/utils/option.js' @@ -15,7 +15,7 @@ const cardTypeOptions = { sequence: ['eleType', 'width'], - text: ['eleType', 'datatype', 'format', 'width', 'height', 'prefix', 'postfix', 'link', 'anchors', 'noValue', 'bgImage', 'fixStyle', 'copyable', 'alignItems'], + text: ['eleType', 'datatype', 'format', 'width', 'height', 'prefix', 'postfix', 'link', 'anchors', 'noValue', 'bgImage', 'fixStyle', 'copyable', 'alignItems', 'sortField'], number: ['eleType', 'datatype', 'width', 'height', 'prefix', 'postfix', 'noValue', 'fixStyle', 'alignItems'], picture: ['eleType', 'datatype', 'width', 'lenWidRadio', 'maxWidth', 'link', 'noValue'], video: ['eleType', 'datatype', 'width', 'aspectRatio', 'autoPlay', 'loop', 'startTime', 'noValue', 'posterType'], @@ -96,9 +96,43 @@ } }) } + } else if (item.key === 'sortField' && !item.forbid) { + item.options = [] + + config.columns.forEach(col => { + let label = `${col.field}锛�${col.label}锛塦 + item.options.push({ + value: col.field, + text: label + }) + }) + + if (config.subColumns) { + config.subColumns.forEach(col => { + let label = `${col.field}锛�${col.label}锛塦 + item.options.push({ + value: col.field, + text: label + }) + }) + } } else if (item.key === 'value' && card.eleType === 'slider') { item.type = 'number' item.label = '鍊�' + } else if (item.key === 'formula') { + item.fields = [] + + config.columns.forEach(col => { + item.fields.push(col.field) + }) + + if (config.subColumns) { + config.subColumns.forEach(col => { + item.fields.push(col.field) + }) + } + + item.fields = item.fields.join(', ') } else if (item.key === 'value' && card.eleType === 'text') { item.type = 'textarea' item.label = '鍐呭' @@ -409,26 +443,52 @@ </Col> ) } else if (item.type === 'textarea') { - fields.push( - <Col span={24} className="textarea" key={index}> - <Form.Item label={item.tooltip ? - <Tooltip placement="topLeft" title={item.tooltip}> - <QuestionCircleOutlined className="mk-form-tip" /> - {item.label} - </Tooltip> : item.label - }> - {getFieldDecorator(item.key, { - initialValue: item.initVal || '', - rules: [ - { - required: item.readonly ? false : !!item.required, - message: '璇疯緭鍏�' + item.label + '!' - } - ] - })(<TextArea autoSize={{minRows: 2}} disabled={item.readonly} placeholder={item.placeholder || ''} />)} - </Form.Item> - </Col> - ) + if (item.key === 'formula') { + fields.push( + <Col span={24} className="textarea" key={index}> + <Form.Item label={item.tooltip ? + <Tooltip placement="topLeft" title={item.tooltip}> + <QuestionCircleOutlined className="mk-form-tip" /> + {item.label} + </Tooltip> : item.label + }> + {getFieldDecorator(item.key, { + initialValue: item.initVal || '', + rules: [ + { + required: item.readonly ? false : !!item.required, + message: '璇疯緭鍏�' + item.label + '!' + } + ] + })(<TextArea autoSize={{minRows: 2}} disabled={item.readonly} placeholder={item.placeholder || ''} />)} + </Form.Item> + <Popover overlayClassName="formula-fields" placement="topLeft" title="" content={<div>{item.fields}</div>} trigger="click"> + <span className="formula-icon">瀛楁闆�</span> + </Popover> + </Col> + ) + } else { + fields.push( + <Col span={24} className="textarea" key={index}> + <Form.Item label={item.tooltip ? + <Tooltip placement="topLeft" title={item.tooltip}> + <QuestionCircleOutlined className="mk-form-tip" /> + {item.label} + </Tooltip> : item.label + }> + {getFieldDecorator(item.key, { + initialValue: item.initVal || '', + rules: [ + { + required: item.readonly ? false : !!item.required, + message: '璇疯緭鍏�' + item.label + '!' + } + ] + })(<TextArea autoSize={{minRows: 2}} disabled={item.readonly} placeholder={item.placeholder || ''} />)} + </Form.Item> + </Col> + ) + } } else if (item.type === 'number') { fields.push( <Col span={12} key={index}> diff --git a/src/menu/components/card/cardcellcomponent/elementform/index.scss b/src/menu/components/card/cardcellcomponent/elementform/index.scss index 090ce2d..45788e3 100644 --- a/src/menu/components/card/cardcellcomponent/elementform/index.scss +++ b/src/menu/components/card/cardcellcomponent/elementform/index.scss @@ -6,12 +6,22 @@ height: 65px; } .ant-col.textarea { + position: relative; min-height: 80px; .ant-form-item-label { width: 14.2%; } .ant-form-item-control-wrapper { width: 85.8%; + } + + .formula-icon { + position: absolute; + bottom: 5px; + right: 15px; + cursor: pointer; + font-size: 12px; + color: #1890ff; } } } @@ -26,4 +36,14 @@ .ant-form-explain, .ant-form-extra { font-size: 13px; } +} +.formula-fields { + z-index: 1200!important; + + .ant-popover-inner-content { + div { + max-width: 750px; + word-break: break-all; + } + } } \ No newline at end of file diff --git a/src/menu/components/card/cardcellcomponent/formconfig.jsx b/src/menu/components/card/cardcellcomponent/formconfig.jsx index 76739c9..746ce52 100644 --- a/src/menu/components/card/cardcellcomponent/formconfig.jsx +++ b/src/menu/components/card/cardcellcomponent/formconfig.jsx @@ -43,6 +43,14 @@ tooltip = '鍦ㄦ墿灞曞崱鐗囦腑锛屽姩鎬佹暟鎹樉绀哄�间负鑾峰彇鍒扮殑绗竴琛屾暟鎹��' } + let isHeader = false + if (cardCell.$cardType === 'extendCard' && cardCell.setting.cardRole === 'header') { + isHeader = true + anchors = null + card.link = '' + _options = [{ value: 'text', text: '鏂囨湰'}] + } + let width = card.width || 12 if (/x/.test(card.width)) { width = +width.replace(/x/, '.5') @@ -193,7 +201,8 @@ { value: 'MM鏈圖D鏃� ahh:mm', text: '鑷畾涔�2锛堜緥锛�12鏈�17鏃� 涓婂崍10:57锛�' }, { value: 'calendar1', text: '鑷畾涔�3锛堜緥锛氫粖澶� 涓婂崍10:57锛�' }, { value: 'calendar2', text: '鑷畾涔�4锛堜緥锛氬垰鍒氥�佹槰澶┿��5澶╁墠锛�' }, - ] + ], + forbid: isHeader }, { type: 'select', @@ -359,7 +368,8 @@ tooltip: '缁戝畾鏁版嵁婧愬瓧娈碉紝鍙牴鎹繑鍥炲�兼敼鍙樿儗鏅浘銆�', required: false, allowClear: true, - options: [] + options: [], + forbid: isHeader }, { type: 'cascader', @@ -490,7 +500,8 @@ { value: '', text: '鏃�' }, { value: 'dynamic', text: '鍔ㄦ��' }, { value: 'static', text: '闈欐��' } - ] + ], + forbid: isHeader }, { type: 'radio', @@ -578,13 +589,14 @@ key: 'alignItems', label: '鍨傜洿瀵归綈', initVal: card.alignItems || '', - tooltip: '鍨傜洿鏂瑰悜鐨勫榻愭柟寮忋��', + tooltip: '鍨傜洿鏂瑰悜鐨勫榻愭柟寮忋�傛敞锛氶珮搴︼紙琛岋級澶т簬1鏃舵湁鏁堛��', required: false, options: [ { value: '', text: '灞呬笂' }, { value: 'center', text: '灞呬腑' }, { value: 'end', text: '灞呬笅' } - ] + ], + forbid: isHeader }, { type: 'radio', @@ -596,7 +608,8 @@ options: [ { value: '', text: '缁熶竴鏍峰紡' }, { value: 'alone', text: '鐙珛鏍峰紡' } - ] + ], + forbid: isHeader }, { type: 'radio', @@ -608,7 +621,8 @@ options: [ { value: 'true', text: '鏄�' }, { value: 'false', text: '鍚�' } - ] + ], + forbid: isHeader }, { type: 'number', @@ -648,6 +662,16 @@ tooltip: '鍓嶇紑銆佸悗缂�鐨勫彸杈硅窛銆�', required: false }, + { + type: 'select', + key: 'sortField', + label: '鎺掑簭瀛楁', + initVal: card.sortField || '', + required: false, + allowClear: true, + options: [], + forbid: !isHeader + }, ] return forms diff --git a/src/menu/components/card/cardcellcomponent/index.jsx b/src/menu/components/card/cardcellcomponent/index.jsx index f752e5a..f676322 100644 --- a/src/menu/components/card/cardcellcomponent/index.jsx +++ b/src/menu/components/card/cardcellcomponent/index.jsx @@ -75,7 +75,7 @@ } UNSAFE_componentWillReceiveProps(nextProps) { - if (this.props.side !== nextProps.side) { + if (this.props.side !== nextProps.side && nextProps.side) { this.setState({ elements: fromJS(nextProps.elements).toJS() }) diff --git a/src/menu/components/card/cardcomponent/index.jsx b/src/menu/components/card/cardcomponent/index.jsx index a7efb6a..db2c7f5 100644 --- a/src/menu/components/card/cardcomponent/index.jsx +++ b/src/menu/components/card/cardcomponent/index.jsx @@ -12,6 +12,8 @@ import MKEmitter from '@/utils/events.js' import './index.scss' +const { confirm } = Modal + const NormalForm = asyncIconComponent(() => import('@/components/normalform')) const CardCellComponent = asyncComponent(() => import('@/menu/components/card/cardcellcomponent')) const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent')) @@ -129,6 +131,10 @@ newcard.datatype = 'dynamic' newcard.height = 1 + if (card.$cardType === 'extendCard' && card.setting.cardRole === 'header') { + newcard.datatype = 'static' + } + // 娉ㄥ唽浜嬩欢-娣诲姞鍏冪礌 MKEmitter.emit('cardAddElement', card.uuid, newcard) } @@ -188,6 +194,39 @@ updateSetting = (res) => { const { card, side, appType } = this.state + if (card.$cardType === 'extendCard' && res.cardRole === 'header') { + let _card = {...card, setting: res} + + let originLength = _card.elements.length + _card.elements = _card.elements.filter(item => item.eleType === 'text') + _card.backElements = [] + + delete _card.menus + + if (_card.elements.length < originLength) { + const that = this + + confirm({ + title: '琛ㄦ牸澶翠粎鏀寔鏂囨湰锛岀‘瀹氳鍒囨崲鍗$墖瑙掕壊鍚�?', + content: '', + okText: '纭畾', + cancelText: '鍙栨秷', + onOk() { + that.setState({ card: _card, side: '', elements: fromJS(_card.elements).toJS() }, () => { + that.setState({ side: 'front' }) + }) + that.props.updateElement(_card) + }, + onCancel() {} + }) + } else { + this.setState({ card: _card, side: 'front' }) + this.props.updateElement(_card) + } + + return + } + if (appType === '' && res.menu) { let list = null try { @@ -237,6 +276,11 @@ let _uuid = Utils.getuuid() + if (card.$cardType === 'extendCard' && card.setting.cardRole === 'header' && element.eleType !== 'text') { + resolve({status: false, message: '琛ㄦ牸澶翠粎鏀寔鏂囨湰鍏冪礌锛�'}) + return + } + if (element.copyType === 'action') { element.eleType = 'button' } @@ -325,16 +369,21 @@ } } + let tablerole = '' + if (card.$cardType === 'extendCard' && card.setting.cardRole === 'header') { + tablerole = ' mk-table-header' + } + return ( <Col span={card.setting.width || 6}> - <div className={'card-item ' + (card.setting.btnControl || '') + checkAll} style={_style} onDoubleClick={(e) => {e.stopPropagation(); this.doubleClickCard()}} id={card.uuid}> + <div className={'card-item ' + (card.setting.btnControl || '') + checkAll + tablerole} style={_style} onDoubleClick={(e) => {e.stopPropagation(); this.doubleClickCard()}} id={card.uuid}> <span className="circle-select"></span> <CardCellComponent cards={cards} cardCell={card} side={side} elements={elements} updateElement={this.updateCard}/> <div className="card-control" onDoubleClick={(e) => e.stopPropagation()}> <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={ <div className="mk-popover-control"> <PlusOutlined className="plus" title="娣诲姞鍏冪礌" onClick={this.addElement} /> - <PlusSquareOutlined className="plus" title="娣诲姞鎸夐挳" onClick={this.addButton} /> + {!tablerole ? <PlusSquareOutlined className="plus" title="娣诲姞鎸夐挳" onClick={this.addButton} /> : null} <NormalForm title={cards.subtype === 'datacard' && card.$cardType !== 'extendCard' ? '寰幆鍗$墖璁剧疆' : '灞炴�у崱鐗囪缃�'} width={950} update={this.updateSetting} getForms={this.getSettingForms}> <EditOutlined className="edit" title="缂栬緫"/> </NormalForm> diff --git a/src/menu/components/card/cardcomponent/index.scss b/src/menu/components/card/cardcomponent/index.scss index 62291ee..930a06f 100644 --- a/src/menu/components/card/cardcomponent/index.scss +++ b/src/menu/components/card/cardcomponent/index.scss @@ -93,3 +93,8 @@ border-radius: 0; } } +.card-item.mk-table-header { + .sort-wrap { + display: inline; + } +} diff --git a/src/menu/components/card/cardcomponent/options.jsx b/src/menu/components/card/cardcomponent/options.jsx index 32a1632..0e8c311 100644 --- a/src/menu/components/card/cardcomponent/options.jsx +++ b/src/menu/components/card/cardcomponent/options.jsx @@ -61,6 +61,24 @@ }, { type: 'radio', + field: 'cardRole', + label: '鍗$墖瑙掕壊', + initval: setting.cardRole || 'card', + required: false, + options: [ + {value: 'card', label: '灞炴�у崱'}, + {value: 'header', label: '琛ㄦ牸澶�'}, + ], + controlFields: [ + {field: 'type', values: ['card']}, + {field: 'click', values: ['card']}, + {field: 'btnControl', values: ['card']}, + ], + del: true, + forbid: cardType !== 'extendCard' + }, + { + type: 'radio', field: 'type', label: '鍗$墖绫诲瀷', initval: setting.type || 'simple', diff --git a/src/menu/components/table/base-table/columns/editColumn/index.jsx b/src/menu/components/table/base-table/columns/editColumn/index.jsx index 7af08ee..87fc195 100644 --- a/src/menu/components/table/base-table/columns/editColumn/index.jsx +++ b/src/menu/components/table/base-table/columns/editColumn/index.jsx @@ -17,7 +17,7 @@ picture: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'fieldlength', 'blacklist', 'scale', 'lenWidRadio', 'backgroundSize', 'span'], video: ['label', 'field', 'type', 'Align', 'Hide', 'startTime', 'Width', 'fieldlength', 'blacklist', 'aspectRatio'], colspan: ['label', 'type', 'Align', 'Hide', 'blacklist'], - custom: ['label', 'type', 'Align', 'Hide', 'Width', 'blacklist'], + custom: ['label', 'type', 'Align', 'Width', 'blacklist'], action: ['label', 'type', 'Align', 'Width'], formula: ['label', 'type', 'Align', 'Hide', 'Width', 'prefix', 'postfix', 'eval', 'formula', 'blacklist'], index: ['label', 'type', 'Align', 'Width'] diff --git a/src/menu/components/table/base-table/columns/editColumn/index.scss b/src/menu/components/table/base-table/columns/editColumn/index.scss index 9885df8..6d72890 100644 --- a/src/menu/components/table/base-table/columns/editColumn/index.scss +++ b/src/menu/components/table/base-table/columns/editColumn/index.scss @@ -14,4 +14,9 @@ width: 88%; } } + >.ant-row >.ant-col { + display: inline-block; + vertical-align: top; + float: none; + } } diff --git a/src/menu/components/table/edit-table/columns/editColumn/index.jsx b/src/menu/components/table/edit-table/columns/editColumn/index.jsx index 00c47c3..9fe0f6d 100644 --- a/src/menu/components/table/edit-table/columns/editColumn/index.jsx +++ b/src/menu/components/table/edit-table/columns/editColumn/index.jsx @@ -16,7 +16,7 @@ text: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'prefix', 'postfix', 'textFormat', 'editable', 'initval', 'blacklist'], number: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'decimal', 'format', 'prefix', 'postfix', 'editable', 'initval', 'sum', 'blacklist'], textarea: ['label', 'field', 'type', 'Align', 'Hide', 'Width', 'prefix', 'initval', 'postfix', 'blacklist'], - custom: ['label', 'type', 'Align', 'Hide', 'Width', 'blacklist'], + custom: ['label', 'type', 'Align', 'Width', 'blacklist'], colspan: ['label', 'type', 'Align', 'Hide', 'blacklist'], action: ['label', 'type', 'Align', 'Width'], formula: ['label', 'type', 'Align', 'Hide', 'Width', 'prefix', 'postfix', 'eval', 'formula', 'blacklist'], diff --git a/src/menu/components/table/edit-table/columns/editColumn/index.scss b/src/menu/components/table/edit-table/columns/editColumn/index.scss index e9dd7c5..2ddf595 100644 --- a/src/menu/components/table/edit-table/columns/editColumn/index.scss +++ b/src/menu/components/table/edit-table/columns/editColumn/index.scss @@ -29,4 +29,9 @@ cursor: pointer; font-size: 14px; } + >.ant-row >.ant-col { + display: inline-block; + vertical-align: top; + float: none; + } } diff --git a/src/menu/components/table/normal-table/columns/editColumn/index.jsx b/src/menu/components/table/normal-table/columns/editColumn/index.jsx index d299f89..d580db8 100644 --- a/src/menu/components/table/normal-table/columns/editColumn/index.jsx +++ b/src/menu/components/table/normal-table/columns/editColumn/index.jsx @@ -17,7 +17,7 @@ picture: ['label', 'field', 'type', 'Align', 'Hide', 'IsSort', 'Width', 'blacklist', 'scale', 'lenWidRadio', 'backgroundSize', 'span'], video: ['label', 'field', 'type', 'Align', 'Hide', 'startTime', 'Width', 'blacklist', 'aspectRatio'], colspan: ['label', 'type', 'Align', 'Hide', 'blacklist'], - custom: ['label', 'type', 'Align', 'Hide', 'Width', 'blacklist'], + custom: ['label', 'type', 'Align', 'Width', 'blacklist'], action: ['label', 'type', 'Align', 'Width'], formula: ['label', 'type', 'Align', 'Hide', 'Width', 'prefix', 'postfix', 'eval', 'formula', 'blacklist'], index: ['label', 'type', 'Align', 'Width'] diff --git a/src/menu/components/table/normal-table/columns/editColumn/index.scss b/src/menu/components/table/normal-table/columns/editColumn/index.scss index 9885df8..6d72890 100644 --- a/src/menu/components/table/normal-table/columns/editColumn/index.scss +++ b/src/menu/components/table/normal-table/columns/editColumn/index.scss @@ -14,4 +14,9 @@ width: 88%; } } + >.ant-row >.ant-col { + display: inline-block; + vertical-align: top; + float: none; + } } diff --git a/src/menu/datasource/verifycard/index.jsx b/src/menu/datasource/verifycard/index.jsx index 814c6df..a8e1e0f 100644 --- a/src/menu/datasource/verifycard/index.jsx +++ b/src/menu/datasource/verifycard/index.jsx @@ -4,6 +4,7 @@ import { Form, Tabs, Popconfirm, notification, Modal, Typography, Spin, message, Button, Input } from 'antd' import { StopOutlined, CheckCircleOutlined, EditOutlined, SwapOutlined, DeleteOutlined, CopyOutlined, BorderOutlined, SnippetsOutlined } from '@ant-design/icons' import moment from 'moment' +import md5 from 'md5' import Api from '@/api' import Utils from '@/utils/utils.js' @@ -33,6 +34,7 @@ state = { columns: [], + debugId: '', subColumns: [], activeKey: 'setting', loading: false, @@ -653,7 +655,7 @@ } sqlverify = (resolve, reject, change = false, testScripts) => { - const { columns, setting, scripts, searches, defaultSearch } = this.state + const { columns, setting, scripts, searches, defaultSearch, debugId } = this.state let _scripts = scripts.filter(item => item.status !== 'false') @@ -678,6 +680,13 @@ if ((setting.interType === 'system' && setting.execute !== 'false') || _scripts.length > 0) { let timestamp = moment().format('YYYY-MM-DD HH:mm:ss') let r = SettingUtils.getDebugSql(setting, _scripts, columns, searches, defaultSearch, timestamp) + + let _debugId = md5(r.sql) + + if (debugId === _debugId) { + resolve() + return + } if (r.errors) { notification.warning({ @@ -713,6 +722,7 @@ if (sumParam) { Api.genericInterface(sumParam).then(res => { if (res.status) { + this.setState({debugId: _debugId}) resolve() } else { reject() @@ -722,6 +732,7 @@ } }) } else { + this.setState({debugId: _debugId}) resolve() } } else { diff --git a/src/tabviews/custom/components/card/cardcellList/index.jsx b/src/tabviews/custom/components/card/cardcellList/index.jsx index 94c16f6..fb48b4b 100644 --- a/src/tabviews/custom/components/card/cardcellList/index.jsx +++ b/src/tabviews/custom/components/card/cardcellList/index.jsx @@ -35,6 +35,37 @@ '10:1': '10%', '3:4': '133.33%', '2:3': '150%', '9:16': '177.78%' } +class TextCell extends Component { + componentDidMount() { + if (this.node && this.node.scrollHeight > this.node.offsetHeight) { + this.node.style.display = 'block' + } + } + + componentDidUpdate() { + if (this.node) { + if (this.node.scrollHeight > this.node.offsetHeight) { + this.node.style.display = 'block' + } else { + this.node.style.display = 'flex' + } + } + } + + render() { + const { card, className, value } = this.props + + let lineStyle = {height: card.innerHeight} + lineStyle.display = 'flex' + lineStyle.alignItems = card.alignItems + lineStyle.justifyContent = card.style.textAlign || 'left' + + return ( + <div ref={ref => this.node = ref} className={className} style={lineStyle}>{value}</div> + ) + } +} + class CardCellComponent extends Component { static propTpyes = { cards: PropTypes.object, // 鑿滃崟閰嶇疆淇℃伅 @@ -249,15 +280,15 @@ className = mark.signType } contents.push( - <Col key={card.uuid} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <div style={card.style}> <div className={'ant-mk-text line1' + className} style={{height: card.innerHeight || 'auto'}}><span className="sequence-wrap" style={_style}>{data.$Index || ''}</span></div> </div> - </Col> + </div> ) } else if (card.eleType === 'text') { let val = '' - let _style = card.style ? {...card.style} : {} + let _style = {...card.style} if (card.datatype === 'static') { val = card.value || '' @@ -400,24 +431,18 @@ if (card.bgImage && data[card.bgImage]) { _style.backgroundImage = `url('${data[card.bgImage]}')` } - - let lineStyle = {height: card.innerHeight || 'auto'} - if (card.alignItems) { - lineStyle.display = 'flex' - lineStyle.alignItems = card.alignItems - lineStyle.justifyContent = _style.textAlign || 'left' - } contents.push( - <Col key={card.uuid} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <div style={_style} onClick={(e) => {this.openNewView(e, card)}}> - <div className={'ant-mk-text line' + (card.height || '') + className} style={lineStyle}>{val}</div> + {card.alignItems ? <TextCell card={card} className={'ant-mk-text line' + (card.height || '') + className} value={val}/> : + <div className={'ant-mk-text line' + (card.height || '') + className} style={{height: card.innerHeight}}>{val}</div>} </div> - </Col> + </div> ) } else if (card.eleType === 'number') { let val = '' - let _style = card.style ? {...card.style} : {} + let _style = {...card.style} if (card.datatype === 'static') { val = card.value @@ -478,24 +503,17 @@ className = mark.signType } - let lineStyle = {height: card.innerHeight || 'auto'} - if (card.alignItems) { - lineStyle.display = 'flex' - lineStyle.alignItems = card.alignItems - lineStyle.justifyContent = _style.textAlign || 'left' - } - contents.push( - <Col key={card.uuid} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <div style={_style}> - <div className={'ant-mk-text line' + (card.height || '') + className} style={lineStyle}>{val}</div> + {card.alignItems ? <TextCell card={card} className={'ant-mk-text line' + (card.height || '') + className} value={val}/> : + <div className={'ant-mk-text line' + (card.height || '') + className} style={{height: card.innerHeight}}>{val}</div>} </div> - </Col> + </div> ) } else if (card.eleType === 'icon') { let val = '' let icon = '' - let height = card.innerHeight if (card.datatype === 'dynamic') { icon = data[card.field] || '' @@ -506,20 +524,6 @@ if (!icon && card.noValue === 'hide') { // 绌哄�奸殣钘� return null } - - if (!height) { // 鍏煎 - let fontSize = 14 - let lineHeight = 1.5 - - if (card.style.fontSize) { - fontSize = parseInt(card.style.fontSize) - } - if (card.style.lineHeight) { - lineHeight = parseFloat(card.style.lineHeight) - } - - height = fontSize * lineHeight - } if (data.hasOwnProperty(card.tooltip)) { val = data[card.tooltip] @@ -528,13 +532,13 @@ } contents.push( - <Col key={card.uuid} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <div style={card.style}> {val ? <Tooltip title={val}> - <MkIcon className="ant-mk-icon" style={{height: height}} type={icon}/> - </Tooltip> : <MkIcon className="ant-mk-icon" style={{height: height}} type={icon}/>} + <MkIcon className="ant-mk-icon" style={{height: card.innerHeight}} type={icon}/> + </Tooltip> : <MkIcon className="ant-mk-icon" style={{height: card.innerHeight}} type={icon}/>} </div> - </Col> + </div> ) } else if (card.eleType === 'slider') { let val = 0 @@ -558,15 +562,15 @@ } contents.push( - <Col key={card.uuid} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <div style={card.style}> <MkProgress value={val} config={card} color={color}/> </div> - </Col> + </div> ) } else if (card.eleType === 'picture') { let _imagestyle = {} - let _style = card.style ? {margin: '0 auto', ...card.style} : {} + let _style = {margin: '0 auto', ...card.style} let url = '' if (card.maxWidth) { _style.maxWidth = card.maxWidth @@ -610,22 +614,22 @@ let urls = url ? url.split(',').filter(Boolean) : [''] urls.forEach((u, i) => { - contents.push(<Col key={card.uuid + i} style={_style_} span={card.width}> + contents.push(<div className={'ant-col ant-col-' + card.width} key={card.uuid + i} style={_style_} span={card.width}> <div style={_style} onClick={(e) => {this.openNewView(e, card)}}> <MkPicture style={_imagestyle} scale={scale} url={u} urls={urls}/> </div> - </Col>) + </div>) }) } else if (card.eleType === 'splitline') { let _borderWidth = card.borderWidth === undefined ? 1 : card.borderWidth _style_ = _style_ || {} _style_.minHeight = _borderWidth contents.push( - <Col key={card.uuid} span={card.width} style={_style_}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} span={card.width} style={_style_}> <div style={card.style}> <div className="ant-mk-splitline" style={{borderColor: card.color, borderWidth: _borderWidth}}></div> </div> - </Col> + </div> ) } else if (card.eleType === 'barcode') { let val = '' @@ -641,13 +645,13 @@ } contents.push( - <Col key={card.uuid} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <div style={card.style}> <div style={{height: card.innerHeight || 25}}> {val ? <BarCode card={card} value={val}/> : null} </div> </div> - </Col> + </div> ) } else if (card.eleType === 'video') { let url = '' @@ -674,11 +678,11 @@ urls.forEach((u, i) => { contents.push( - <Col key={card.uuid + i} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid + i} style={_style_} span={card.width}> <div className="video-wrap" style={card.style}> <Video card={card} poster={poster} value={u}/> </div> - </Col> + </div> ) }) } else if (card.eleType === 'qrcode') { @@ -695,13 +699,13 @@ } contents.push( - <Col key={card.uuid} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <div style={card.style}> <div style={{minHeight: card.qrWidth || 50}}> {val ? <QrCode card={card} value={val}/> : null} </div> </div> - </Col> + </div> ) } else if (card.eleType === 'currentDate') { let val = moment().format(card.dateFormat || 'YYYY-MM-DD') @@ -714,15 +718,15 @@ } contents.push( - <Col key={card.uuid} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <div style={card.style}> <div className="ant-mk-text line1" style={{height: card.innerHeight || 'auto'}}>{val}</div> </div> - </Col> + </div> ) } else if (card.eleType === 'formula') { let val = 0 - let _style = card.style ? {...card.style} : {} + let _style = {...card.style} if (card.$sync) { if (card.eval === 'false') { @@ -804,19 +808,13 @@ className = mark.signType } - let lineStyle = {height: card.innerHeight || 'auto'} - if (card.alignItems) { - lineStyle.display = 'flex' - lineStyle.alignItems = card.alignItems - lineStyle.justifyContent = _style.textAlign || 'left' - } - contents.push( - <Col key={card.uuid} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <div style={_style}> - <div className={'ant-mk-text line' + (card.height || '') + className} style={lineStyle}>{val}</div> + {card.alignItems ? <TextCell card={card} className={'ant-mk-text line' + (card.height || '') + className} value={val}/> : + <div className={'ant-mk-text line' + (card.height || '') + className} style={{height: card.innerHeight}}>{val}</div>} </div> - </Col> + </div> ) } else if (card.eleType === 'color') { let color = '' @@ -844,7 +842,7 @@ } contents.push( - <Col key={card.uuid} style={_style_} span={card.width}> + <div className={'ant-col ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <div className="ant-mk-color" style={card.style}> <div style={_bgstyle} onClick={(e) => { if (card.copyable === 'true') { @@ -861,7 +859,7 @@ } }}></div> </div> - </Col> + </div> ) } else if (card.eleType === 'button') { let _disabled = data.$disabled @@ -882,7 +880,7 @@ if (['exec', 'prompt', 'pop', 'form'].includes(card.OpenType)) { contents.push( - <Col key={card.uuid} className="mk-cell-btn" style={_style_} span={card.width}> + <div className={'ant-col mk-cell-btn ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <NormalButton btn={card} BID={data.$$BID} @@ -892,11 +890,11 @@ columns={cards.columns} selectedData={_data} /> - </Col> + </div> ) } else if (card.OpenType === 'excelIn') { contents.push( - <Col key={card.uuid} className="mk-cell-btn" style={_style_} span={card.width}> + <div className={'ant-col mk-cell-btn ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <ExcelInButton btn={card} BID={data.$$BID} @@ -905,11 +903,11 @@ setting={cards.setting} selectedData={_data} /> - </Col> + </div> ) } else if (card.OpenType === 'excelOut') { contents.push( - <Col key={card.uuid} className="mk-cell-btn" style={_style_} span={card.width}> + <div className={'ant-col mk-cell-btn ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <ExcelOutButton btn={card} BID={data.$$BID} @@ -918,11 +916,11 @@ setting={cards.setting} selectedData={_data} /> - </Col> + </div> ) } else if (card.OpenType === 'popview') { contents.push( - <Col key={card.uuid} className="mk-cell-btn" style={_style_} span={card.width}> + <div className={'ant-col mk-cell-btn ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <PopupButton btn={card} BID={data.$$BID} @@ -931,11 +929,11 @@ setting={cards.setting} selectedData={_data} /> - </Col> + </div> ) } else if (card.OpenType === 'tab') { contents.push( - <Col key={card.uuid} className="mk-cell-btn" style={_style_} span={card.width}> + <div className={'ant-col mk-cell-btn ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <TabButton btn={card} BID={data.$$BID} @@ -943,23 +941,23 @@ disabled={_disabled} selectedData={_data} /> - </Col> + </div> ) } else if (card.OpenType === 'innerpage') { contents.push( - <Col key={card.uuid} className="mk-cell-btn" style={_style_} span={card.width}> + <div className={'ant-col mk-cell-btn ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <NewPageButton btn={card} BData={data.$$BData || ''} disabled={_disabled} selectedData={_data} /> - </Col> + </div> ) } else if (card.OpenType === 'funcbutton') { if (card.funcType === 'changeuser' || card.funcType === 'closetab') { contents.push( - <Col key={card.uuid} className="mk-cell-btn" style={_style_} span={card.width}> + <div className={'ant-col mk-cell-btn ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <ChangeUserButton btn={card} BID={data.$$BID} @@ -968,11 +966,11 @@ setting={cards.setting} selectedData={_data} /> - </Col> + </div> ) } else if (card.funcType === 'print') { contents.push( - <Col key={card.uuid} className="mk-cell-btn" style={_style_} span={card.width}> + <div className={'ant-col mk-cell-btn ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <PrintButton btn={card} BID={data.$$BID} @@ -982,11 +980,11 @@ columns={cards.columns} selectedData={_data} /> - </Col> + </div> ) } else if (card.funcType === 'megvii') { contents.push( - <Col key={card.uuid} className="mk-cell-btn" style={_style_} span={card.width}> + <div className={'ant-col mk-cell-btn ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <FuncMegvii btn={card} BID={data.$$BID} @@ -994,11 +992,11 @@ setting={cards.setting} selectedData={_data} /> - </Col> + </div> ) } else if (card.funcType === 'filezip') { contents.push( - <Col key={card.uuid} className="mk-cell-btn" style={_style_} span={card.width}> + <div className={'ant-col mk-cell-btn ant-col-' + card.width} key={card.uuid} style={_style_} span={card.width}> <FuncZip btn={card} BID={data.$$BID} @@ -1006,7 +1004,7 @@ setting={cards.setting} selectedData={_data} /> - </Col> + </div> ) } } @@ -1022,6 +1020,7 @@ return ( <div className={'card-cell-list ' + (cardCell && cardCell.setting && cardCell.setting.layout === 'flex' ? 'mk-flex' : '')}> {this.getContent()} + <Col style={{display: 'none'}} span={24}></Col> </div> ) } diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx index f4023d3..98f672e 100644 --- a/src/tabviews/custom/components/card/data-card/index.jsx +++ b/src/tabviews/custom/components/card/data-card/index.jsx @@ -15,6 +15,7 @@ import './index.scss' const CardItem = asyncComponent(() => import('../cardItem')) +const TableHeader = asyncComponent(() => import('../tableHeader')) const MainAction = asyncComponent(() => import('@/tabviews/zshare/actionList')) const NormalHeader = asyncComponent(() => import('@/tabviews/custom/components/share/normalheader')) @@ -32,6 +33,7 @@ search: null, // 鎼滅储鏉′欢 pageIndex: 1, // 椤电爜 pageSize: 10, + orderBy: '', pageOptions: [], activeKey: '', // 閫変腑鍗� selectKeys: [], // 澶氶�夋椂閫変腑鍗$墖 @@ -78,6 +80,8 @@ } } + _config.$extend = false + _config.subcards.forEach(item => { if (item.setting.click === 'button' && !item.setting.linkbtn) { item.elements.forEach(ele => { @@ -93,8 +97,10 @@ if (item.$cardType !== 'extendCard') { _card = item } else if (!_card) { + _config.$extend = true precards.push(item) } else { + _config.$extend = true nextcards.push(item) } }) @@ -160,6 +166,10 @@ this.loaded = _data !== null let pageOptions = ['10', '25', '50', '100', '500', '1000'] + + if (!_config.setting.laypage) { + _config.wrap.pagestyle = 'none' + } if (_config.wrap.pagestyle === 'page') { let size = (_config.setting.pageSize || 10) + '' @@ -578,7 +588,7 @@ */ queryModuleParam = (menuId, callback) => { const { mainSearch } = this.props - const { arr_field, config, search } = this.state + const { arr_field, config, search, orderBy } = this.state if (config.uuid !== menuId) return @@ -594,7 +604,7 @@ callback({ arr_field: arr_field, - orderBy: config.setting.order || '', + orderBy: orderBy ||config.setting.order || '', search: searches, menuName: config.name }) @@ -602,7 +612,7 @@ async loadData (id, type) { const { mainSearch } = this.props - const { config, arr_field, pageIndex, pageSize, search, BID, BData, selected } = this.state + const { config, arr_field, pageIndex, pageSize, search, BID, BData, selected, orderBy } = this.state if (config.setting.supModule && !BID && config.wrap.supKey !== 'false') { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇� this.loaded = true @@ -654,7 +664,7 @@ }) } - let _orderBy = config.setting.order || '' + let _orderBy = orderBy || config.setting.order || '' let param = UtilsDM.getQueryDataParams(config.setting, arr_field, searches, _orderBy, pageIndex, pageSize, BID) let result = await Api.genericInterface(param) @@ -757,7 +767,7 @@ */ async loadLinedata (id) { const { mainSearch } = this.props - const { config, arr_field, pageIndex, pageSize, search, BID, BData } = this.state + const { config, arr_field, pageIndex, pageSize, search, BID, BData, orderBy } = this.state let searches = fromJS(search).toJS() if (config.setting.useMSearch && mainSearch && mainSearch.length > 0) { // 涓昏〃鎼滅储鏉′欢 @@ -773,7 +783,7 @@ loading: true }) - let _orderBy = config.setting.order || '' + let _orderBy = orderBy || config.setting.order || '' let param = UtilsDM.getQueryDataParams(config.setting, arr_field, searches, _orderBy, pageIndex, pageSize, BID, id) let result = await Api.genericInterface(param) @@ -928,6 +938,14 @@ } } + refreshByHeader = (sorter) => { + this.setState({ + orderBy: sorter || '' + }, () => { + this.loadData() + }) + } + render() { const { config, precards, nextcards, loading, data, pageIndex, pageSize, total, card, activeKey, BID, BData, selectedData, selectKeys } = this.state @@ -935,15 +953,23 @@ let _total = 0 let switchable = false - if (config.wrap.pagestyle === 'switch' && config.pageable && config.setting.laypage && total > pageSize && data) { + if (config.wrap.pagestyle === 'switch' && total > pageSize && data) { _total = pageSize * pageIndex switchable = true } - let extendData = {$$BID: BID, $$BData: BData, $$selectedData: selectedData, $$type: 'extendCard'} + let extendData = null - if (data && data[0]) { - extendData = {...extendData, ...data[0]} + if (config.$extend) { + extendData = {$$BID: BID, $$BData: BData, $$selectedData: selectedData, $$type: 'extendCard'} + + if (data && data[0]) { + if (selectedData[0]) { + extendData = {...extendData, ...selectedData[0]} + } else { + extendData = {...extendData, ...data[0]} + } + } } let checkAll = '' @@ -977,9 +1003,11 @@ <Row className={'card-row-list ' + config.wrap.layout}> {precards.map((item, index) => ( <Col key={'pre' + index} className="extend-card" span={item.setting.width || 6}> - <CardItem card={item} cards={config} data={extendData}> + {item.setting.cardRole === 'header' ? <TableHeader card={item} data={extendData} refresh={this.refreshByHeader}> {item.setting.checkAll === 'show' ? <span onClick={this.checkAll} className={'circle-select' + checkAll}></span> : null} - </CardItem> + </TableHeader> : <CardItem card={item} cards={config} data={extendData}> + {item.setting.checkAll === 'show' ? <span onClick={this.checkAll} className={'circle-select' + checkAll}></span> : null} + </CardItem>} </Col> ))} {data && data.map((item, index) => { @@ -1007,17 +1035,19 @@ })} {nextcards.map((item, index) => ( <Col key={'next' + index} className="extend-card" span={item.setting.width || 6}> - <CardItem card={item} cards={config} data={extendData}> + {item.setting.cardRole === 'header' ? <TableHeader card={item} data={extendData} refresh={this.refreshByHeader}> {item.setting.checkAll === 'show' ? <span onClick={this.checkAll} className={'circle-select' + checkAll}></span> : null} - </CardItem> + </TableHeader> : <CardItem card={item} cards={config} data={extendData}> + {item.setting.checkAll === 'show' ? <span onClick={this.checkAll} className={'circle-select' + checkAll}></span> : null} + </CardItem>} </Col> ))} </Row> {switchable ? <div className={'prev-page ' + (total <= _total ? 'disabled' : '')} onClick={this.nextPage}><div><div><img src={nextImg} alt=""/></div></div></div> : null} - {precards.length === 0 && nextcards.length === 0 && (!data || data.length === 0) ? <Empty description={false}/> : null} + {!config.$extend && (!data || data.length === 0) ? <Empty description={false}/> : null} </div> - {config.wrap.pagestyle === 'page' && config.setting.laypage && data ? <Pagination size="small" total={total} showTotal={(t, range) => `${range[0]}-${range[1]} 鍏� ${total} 鏉} pageSize={pageSize} showSizeChanger={true} pageSizeOptions={this.state.pageOptions} onChange={this.changePageIndex} onShowSizeChange={this.pageSizeChange} current={pageIndex}/> : null} - {config.wrap.pagestyle === 'more' && config.setting.laypage && data && data.length > 0 ? <div className={'mk-more' + (pageSize * pageIndex >= total ? ' disabled' : '')} onClick={this.loadMore}>鏌ョ湅鏇村<DownOutlined/></div> : null} + {config.wrap.pagestyle === 'page' && data ? <Pagination size="small" total={total} showTotal={(t, range) => total > 0 ? `${range[0]}-${range[1]} 鍏� ${total} 鏉 : `鍏� ${total} 鏉} pageSize={pageSize} showSizeChanger={true} pageSizeOptions={this.state.pageOptions} onChange={this.changePageIndex} onShowSizeChange={this.pageSizeChange} current={pageIndex}/> : null} + {config.wrap.pagestyle === 'more' && data && data.length > 0 ? <div className={'mk-more' + (pageSize * pageIndex >= total ? ' disabled' : '')} onClick={this.loadMore}>鏌ョ湅鏇村<DownOutlined/></div> : null} </div> ) } diff --git a/src/tabviews/custom/components/card/double-data-card/index.jsx b/src/tabviews/custom/components/card/double-data-card/index.jsx index b06a81c..b3fc0da 100644 --- a/src/tabviews/custom/components/card/double-data-card/index.jsx +++ b/src/tabviews/custom/components/card/double-data-card/index.jsx @@ -13,6 +13,7 @@ import './index.scss' const CardItem = asyncComponent(() => import('../cardItem')) +const TableHeader = asyncComponent(() => import('../tableHeader')) const MainAction = asyncComponent(() => import('@/tabviews/zshare/actionList')) const NormalHeader = asyncComponent(() => import('@/tabviews/custom/components/share/normalheader')) @@ -29,6 +30,7 @@ search: null, // 鎼滅储鏉′欢 pageIndex: 1, // 椤电爜 pageSize: 10, + orderBy: '', pageOptions: [], activeKey: '', // 閫変腑鍗� selectKeys: [], // 澶氶�夋椂閫変腑鍗$墖 @@ -76,6 +78,8 @@ } } + _config.$extend = false + _config.subcards.forEach(item => { if (item.setting.click === 'button' && !item.setting.linkbtn) { item.elements.forEach(ele => { @@ -91,8 +95,10 @@ if (item.$cardType !== 'extendCard') { _card = item } else if (!_card) { + _config.$extend = true precards.push(item) } else { + _config.$extend = true nextcards.push(item) } }) @@ -137,6 +143,10 @@ _config.setting.sub_field = subconfig.columns.map(col => col.field).join(',') let pageOptions = ['10', '25', '50', '100', '500', '1000'] + + if (!_config.setting.laypage) { + _config.wrap.pagestyle = 'none' + } if (_config.wrap.pagestyle === 'page') { let size = (_config.setting.pageSize || 10) + '' @@ -445,7 +455,7 @@ */ queryModuleParam = (menuId, callback) => { const { mainSearch } = this.props - const { arr_field, config, search } = this.state + const { arr_field, config, search, orderBy } = this.state if (config.uuid !== menuId) return @@ -461,7 +471,7 @@ callback({ arr_field: arr_field, - orderBy: config.setting.order || '', + orderBy: orderBy || config.setting.order || '', search: searches, menuName: config.name }) @@ -469,7 +479,7 @@ async loadData (id, type) { const { mainSearch } = this.props - const { config, arr_field, pageIndex, pageSize, search, BID, BData, selected, card } = this.state + const { config, arr_field, pageIndex, pageSize, search, BID, BData, selected, card, orderBy } = this.state if (config.setting.supModule && !BID && config.wrap.supKey !== 'false') { // BID 涓嶅瓨鍦ㄦ椂锛屼笉鍋氭煡璇� this.loaded = true @@ -519,7 +529,7 @@ }) } - let _orderBy = config.setting.order || '' + let _orderBy = orderBy || config.setting.order || '' let param = UtilsDM.getQueryDataParams(config.setting, arr_field, searches, _orderBy, pageIndex, pageSize, BID) let result = await Api.genericInterface(param) @@ -674,7 +684,7 @@ */ async loadLinedata (id) { const { mainSearch } = this.props - const { config, arr_field, pageIndex, pageSize, search, BID, BData } = this.state + const { config, arr_field, pageIndex, pageSize, search, BID, BData, orderBy } = this.state let searches = fromJS(search).toJS() if (config.setting.useMSearch && mainSearch && mainSearch.length > 0) { // 涓昏〃鎼滅储鏉′欢 @@ -690,7 +700,7 @@ loading: true }) - let _orderBy = config.setting.order || '' + let _orderBy = orderBy || config.setting.order || '' let param = UtilsDM.getQueryDataParams(config.setting, arr_field, searches, _orderBy, pageIndex, pageSize, BID, id) let result = await Api.genericInterface(param) @@ -874,15 +884,31 @@ } } + refreshByHeader = (sorter) => { + this.setState({ + orderBy: sorter || '' + }, () => { + this.loadData() + }) + } + render() { const { config, precards, nextcards, loading, data, pageIndex, pageSize, total, card, activeKey, BID, BData, selectedData, selectKeys, subcard, subconfig, wrapStyle, opens } = this.state if (config.wrap.empty === 'hidden' && (!data || data.length === 0)) return null - let extendData = {$$BID: BID, $$BData: BData, $$selectedData: selectedData, $$type: 'extendCard'} + let extendData = null - if (data && data[0]) { - extendData = {...extendData, ...data[0]} + if (config.$extend) { + extendData = {$$BID: BID, $$BData: BData, $$selectedData: selectedData, $$type: 'extendCard'} + + if (data && data[0]) { + if (selectedData[0]) { + extendData = {...extendData, ...selectedData[0]} + } else { + extendData = {...extendData, ...data[0]} + } + } } let checkAll = '' @@ -922,9 +948,11 @@ <Row className={'card-row-list '}> {precards.map((item, index) => ( <Col key={'pre' + index} className="extend-card" span={item.setting.width || 6}> - <CardItem card={item} cards={config} data={extendData}> + {item.setting.cardRole === 'header' ? <TableHeader card={item} data={extendData} refresh={this.refreshByHeader}> {item.setting.checkAll === 'show' ? <span onClick={this.checkAll} className={'circle-select' + checkAll}></span> : null} - </CardItem> + </TableHeader> : <CardItem card={item} cards={config} data={extendData}> + {item.setting.checkAll === 'show' ? <span onClick={this.checkAll} className={'circle-select' + checkAll}></span> : null} + </CardItem>} </Col> ))} {data && data.map((item, index) => { @@ -969,17 +997,19 @@ })} {nextcards.map((item, index) => ( <Col key={'next' + index} className="extend-card" span={item.setting.width || 6}> - <CardItem card={item} cards={config} data={extendData}> + {item.setting.cardRole === 'header' ? <TableHeader card={item} data={extendData} refresh={this.refreshByHeader}> {item.setting.checkAll === 'show' ? <span onClick={this.checkAll} className={'circle-select' + checkAll}></span> : null} - </CardItem> + </TableHeader> : <CardItem card={item} cards={config} data={extendData}> + {item.setting.checkAll === 'show' ? <span onClick={this.checkAll} className={'circle-select' + checkAll}></span> : null} + </CardItem>} </Col> ))} </Row> - {precards.length === 0 && nextcards.length === 0 && (!data || data.length === 0) ? <Empty description={false}/> : null} + {!config.$extend && (!data || data.length === 0) ? <Empty description={false}/> : null} </div> </div> - {config.wrap.pagestyle === 'page' && config.setting.laypage && data ? <Pagination size="small" total={total} showTotal={(t, range) => `${range[0]}-${range[1]} 鍏� ${total} 鏉} pageSize={pageSize} showSizeChanger={true} pageSizeOptions={this.state.pageOptions} onChange={this.changePageIndex} onShowSizeChange={this.pageSizeChange} current={pageIndex}/> : null} - {config.wrap.pagestyle === 'more' && config.setting.laypage && data && data.length > 0 ? <div className={'mk-more' + (pageSize * pageIndex >= total ? ' disabled' : '')} onClick={this.loadMore}>鏌ョ湅鏇村<DownOutlined/></div> : null} + {config.wrap.pagestyle === 'page' && data ? <Pagination size="small" total={total} showTotal={(t, range) => total > 0 ? `${range[0]}-${range[1]} 鍏� ${total} 鏉 : `鍏� ${total} 鏉} pageSize={pageSize} showSizeChanger={true} pageSizeOptions={this.state.pageOptions} onChange={this.changePageIndex} onShowSizeChange={this.pageSizeChange} current={pageIndex}/> : null} + {config.wrap.pagestyle === 'more' && data && data.length > 0 ? <div className={'mk-more' + (pageSize * pageIndex >= total ? ' disabled' : '')} onClick={this.loadMore}>鏌ョ湅鏇村<DownOutlined/></div> : null} </div> ) } diff --git a/src/tabviews/custom/components/card/table-card/index.jsx b/src/tabviews/custom/components/card/table-card/index.jsx index 47aab12..16fc44e 100644 --- a/src/tabviews/custom/components/card/table-card/index.jsx +++ b/src/tabviews/custom/components/card/table-card/index.jsx @@ -83,13 +83,14 @@ showHeader = true } + _config.wrap.pagestyle = _config.wrap.pagestyle || 'page' + if (_config.setting.laypage) { _config.wrap.contentHeight = showHeader ? 'calc(100% - 85px)' : 'calc(100% - 40px)' } else { + _config.wrap.pagestyle = 'none' _config.wrap.contentHeight = showHeader ? 'calc(100% - 45px)' : '100%' } - - _config.wrap.pagestyle = _config.wrap.pagestyle || 'page' this.loaded = _data !== null @@ -513,8 +514,8 @@ {data && data.length === 0 ? <div className="card-row-list" style={{height: config.wrap.contentHeight}}> <Empty description={false}/> </div> : null} - {config.setting.laypage && config.wrap.pagestyle === 'page' ? <Pagination size="small" current={pageIndex} total={total} onChange={this.changePageIndex} /> : null} - {config.setting.laypage && config.wrap.pagestyle === 'more' && data && data.length > 0 ? <div className={'mk-more' + (config.setting.pageSize * pageIndex >= total ? ' disabled' : '')} onClick={this.loadMore}>鏌ョ湅鏇村<DownOutlined/></div> : null} + {config.wrap.pagestyle === 'page' ? <Pagination size="small" current={pageIndex} total={total} onChange={this.changePageIndex} /> : null} + {config.wrap.pagestyle === 'more' && data && data.length > 0 ? <div className={'mk-more' + (config.setting.pageSize * pageIndex >= total ? ' disabled' : '')} onClick={this.loadMore}>鏌ョ湅鏇村<DownOutlined/></div> : null} </div> ) } diff --git a/src/tabviews/custom/components/card/tableHeader/index.jsx b/src/tabviews/custom/components/card/tableHeader/index.jsx new file mode 100644 index 0000000..c3e229f --- /dev/null +++ b/src/tabviews/custom/components/card/tableHeader/index.jsx @@ -0,0 +1,160 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { is, fromJS } from 'immutable' +import { CaretUpOutlined, CaretDownOutlined } from '@ant-design/icons' + +import './index.scss' + +class TableHeader extends Component { + static propTpyes = { + card: PropTypes.object, // 鍗$墖閰嶇疆淇℃伅 + data: PropTypes.object, + refresh: PropTypes.func + } + + state = { + sortField: '', + order: '' + } + + /** + * @description 鎼滅储鏉′欢鍒濆鍖� + */ + UNSAFE_componentWillMount () { + + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.state), fromJS(nextState)) || !is(fromJS(this.props), fromJS(nextProps)) + } + + /** + * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆 + */ + componentWillUnmount () { + this.setState = () => { + return + } + } + + triggerHeader = (item) => { + const { sortField, order } = this.state + + if (!item.sortField) return + + if (item.sortField !== sortField) { + this.setState({sortField: item.sortField, order: 'asc'}) + + this.props.refresh(item.sortField + ' asc') + } else { + if (order === 'asc') { + this.setState({order: 'desc'}) + this.props.refresh(item.sortField + ' desc') + } else if (order === 'desc') { + this.setState({sortField: '', order: ''}) + this.props.refresh('') + } + } + } + + getContent = () => { + const { data, card } = this.props + const { sortField, order } = this.state + + let contents = [] + + card.elements.forEach(item => { + if (item.eleType !== 'text') return + + let _style_ = null + + if (item.style && item.style.clear === 'left') { + _style_ = {clear: 'left'} + } + + let val = '' + let _style = item.style ? {...item.style} : {} + + if (item.datatype === 'static') { + val = item.value || '' + if (/@username@|@fullName@|@mk_city@|@bid@/ig.test(val)) { + let userName = sessionStorage.getItem('User_Name') || '' + let fullName = sessionStorage.getItem('Full_Name') || '' + let city = sessionStorage.getItem('city') || '' + let bid = data.$$BID || '' + val = val.replace(/@username@/ig, userName).replace(/@fullName@/ig, fullName).replace(/@mk_city@/ig, city).replace(/@bid@/ig, bid) + } else if (/@month@/ig.test(val)) { + val = val.replace(/@month@/ig, new Date().toLocaleString('en-US', { month: 'long' })) + } else if (/@week@/ig.test(val)) { + val = val.replace(/@week@/ig, (() => { + let day = new Date().getDay() + let weeks = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�'] + return weeks[day] + })()) + } else if (/@day@/ig.test(val)) { + val = val.replace(/@day@/ig, (() => { + let day = new Date().getDate() + return day < 10 ? '0' + day : day + })()) + } + } else if (data.hasOwnProperty(item.field)) { + val = data[item.field] + } + + if (val === '' && item.noValue === 'hide') { // 绌哄�奸殣钘� + return null + } + + if (val !== '') { + if (item.sortField) { + val = <> + <span className="mk-content">{item.prefix || ''}{val}{item.postfix || ''}</span> + <span className="sort-wrap"><CaretUpOutlined /><CaretDownOutlined /></span> + </> + } else { + val = <span>{item.prefix || ''}{val}{item.postfix || ''}</span> + } + } + + let lineStyle = {height: item.innerHeight || 'auto', display: 'flex', alignItems: 'center', justifyContent: _style.textAlign || 'left'} + + let extra = '' + if (item.sortField) { + extra = ' sortable' + + if (item.sortField === sortField) { + if (order === 'asc') { + extra += ' up-sort' + } else { + extra += ' down-sort' + } + } + } + + contents.push( + <div className={'ant-col ant-col-' + item.width + extra} onClick={() => this.triggerHeader(item)} key={item.uuid} style={_style_} span={item.width}> + <div style={_style}> + <div className={'ant-mk-text mk-header-cell line' + (item.height || '')} style={lineStyle}>{val}</div> + </div> + </div> + ) + }) + + return contents + } + + render() { + const { card, children } = this.props + + return ( + <div className={'card-item-box mk-table-header'} style={card.style}> + {children} + <div className={'card-cell-list ' + (card.setting.layout === 'flex' ? 'mk-flex' : '')}> + {this.getContent()} + </div> + </div> + ) + } +} + +export default TableHeader \ No newline at end of file diff --git a/src/tabviews/custom/components/card/tableHeader/index.scss b/src/tabviews/custom/components/card/tableHeader/index.scss new file mode 100644 index 0000000..5abc071 --- /dev/null +++ b/src/tabviews/custom/components/card/tableHeader/index.scss @@ -0,0 +1,45 @@ +.card-item-box.mk-table-header { + position: relative; + overflow: hidden; + + .mk-content { + display: inline-block; + white-space: normal; + max-width: calc(100% - 20px); + } + .sort-wrap { + position: relative; + margin-left: 10px; + font-size: 12px; + color: #bfbfbf; + display: inline-block; + + .anticon-caret-up { + position: relative; + top: -3px; + } + .anticon-caret-down { + position: absolute; + top: 7px; + left: 0px; + } + } + .sortable { + cursor: pointer; + } + .sortable.up-sort { + .anticon-caret-up { + color: var(--mk-sys-color); + } + } + .sortable.down-sort { + .anticon-caret-down { + color: var(--mk-sys-color); + } + } + .sortable:hover { + .mk-content { + color: var(--mk-sys-color); + } + } +} diff --git a/src/tabviews/custom/index.jsx b/src/tabviews/custom/index.jsx index cbf6415..1074471 100644 --- a/src/tabviews/custom/index.jsx +++ b/src/tabviews/custom/index.jsx @@ -482,17 +482,7 @@ } } else if (col.type === 'custom') { col.elements = col.elements.map(cell => { - if (['text', 'number', 'formula'].includes(cell.eleType)) { - if (!cell.height) { - cell.innerHeight = 'auto' - } - if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') { - cell.round = Math.pow(10, cell.decimal) - if (cell.format === 'percent') { - cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 - } - } - } + cell = this.resetElement(cell) return cell }) } @@ -530,12 +520,8 @@ item.action = item.action.filter(cell => { if (cell.hidden === 'true') return false - cell.logLabel = item.$menuname + '-' + cell.label - cell.ContainerId = this.state.ContainerId - cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' - cell.$menuId = item.uuid - cell.$MenuID = this.props.MenuID - cell.$view = popview + cell = this.resetButton(item, cell, popview) + cell.$toolbtn = true if (!mutil && cell.syncComponentId === item.setting.supModule) { @@ -547,19 +533,6 @@ if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 鎵撳嵃鏈鸿缃� cell = this.getPrinter(cell, item.uuid) - } - - if (cell.btnstyle) { // 鍏煎 - cell.style = cell.style || {} - cell.style = {...cell.style, ...cell.btnstyle} - } - - if (cell.controlField) { - if (/,/ig.test(cell.controlVal)) { - cell.controlVals = cell.controlVal.split(',') - } else { - cell.controlVals = [(cell.controlVal || '')] - } } return skip || permAction[cell.uuid] @@ -579,13 +552,7 @@ if (cell.eleType === 'button') { if (cell.hidden === 'true') return false - cell.logLabel = item.$menuname + '-' + cell.label - cell.Ot = cell.Ot || 'requiredSgl' - cell.ContainerId = this.state.ContainerId - cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' - cell.$menuId = item.uuid - cell.$MenuID = this.props.MenuID - cell.$view = popview + cell = this.resetButton(item, cell, popview) if (!mutil && cell.syncComponentId === item.setting.supModule) { cell.syncComponentId = '' @@ -597,23 +564,8 @@ if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 鎵撳嵃鏈鸿缃� cell = this.getPrinter(cell, item.uuid) } - if (cell.controlField) { - if (/,/ig.test(cell.controlVal)) { - cell.controlVals = cell.controlVal.split(',') - } else { - cell.controlVals = [(cell.controlVal || '')] - } - } - } else if (['text', 'number', 'formula'].includes(cell.eleType)) { - if (!cell.height) { - cell.innerHeight = 'auto' - } - if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') { - cell.round = Math.pow(10, cell.decimal) - if (cell.format === 'percent') { - cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 - } - } + } else { + cell = this.resetElement(cell) } return cell.eleType !== 'button' || skip || permAction[cell.uuid] @@ -625,13 +577,7 @@ if (cell.eleType === 'button') { if (cell.hidden === 'true') return false - cell.logLabel = item.$menuname + '-' + cell.label - cell.Ot = cell.Ot || 'requiredSgl' - cell.ContainerId = this.state.ContainerId - cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' - cell.$menuId = item.uuid - cell.$MenuID = this.props.MenuID - cell.$view = popview + cell = this.resetButton(item, cell, popview) if (!mutil && cell.syncComponentId === item.setting.supModule) { cell.syncComponentId = '' @@ -643,23 +589,8 @@ if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 鎵撳嵃鏈鸿缃� cell = this.getPrinter(cell, item.uuid) } - if (cell.controlField) { - if (/,/ig.test(cell.controlVal)) { - cell.controlVals = cell.controlVal.split(',') - } else { - cell.controlVals = [(cell.controlVal || '')] - } - } - } else if (['text', 'number', 'formula'].includes(cell.eleType)) { - if (!cell.height) { - cell.innerHeight = 'auto' - } - if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') { - cell.round = Math.pow(10, cell.decimal) - if (cell.format === 'percent') { - cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 - } - } + } else { + cell = this.resetElement(cell) } return cell.eleType !== 'button' || skip || permAction[cell.uuid] @@ -677,12 +608,7 @@ if (cell.eleType === 'button') { if (cell.hidden === 'true') return false - cell.logLabel = item.$menuname + '-' + cell.label - cell.ContainerId = this.state.ContainerId - cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' - cell.$menuId = item.uuid - cell.$MenuID = this.props.MenuID - cell.$view = popview + cell = this.resetButton(item, cell, popview) if (cell.syncComponentId === item.wrap.supModule) { cell.syncComponentId = '' @@ -694,23 +620,8 @@ if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 鎵撳嵃鏈鸿缃� cell = this.getPrinter(cell, item.uuid) } - if (cell.controlField) { - if (/,/ig.test(cell.controlVal)) { - cell.controlVals = cell.controlVal.split(',') - } else { - cell.controlVals = [(cell.controlVal || '')] - } - } - } else if (['text', 'number', 'formula'].includes(cell.eleType)) { - if (!cell.height) { - cell.innerHeight = 'auto' - } - if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') { - cell.round = Math.pow(10, cell.decimal) - if (cell.format === 'percent') { - cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 - } - } + } else { + cell = this.resetElement(cell) } return cell.eleType !== 'button' || skip || permAction[cell.uuid] @@ -720,14 +631,8 @@ if (col.type !== 'action') return true col.elements = col.elements.filter(cell => { if (cell.hidden === 'true') return false - - cell.logLabel = item.$menuname + '-' + cell.label - cell.Ot = cell.Ot || 'requiredSgl' - cell.ContainerId = this.state.ContainerId - cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' - cell.$menuId = item.uuid - cell.$MenuID = this.props.MenuID - cell.$view = popview + + cell = this.resetButton(item, cell, popview) if (cell.syncComponentId === item.setting.supModule) { cell.syncComponentId = '' @@ -738,19 +643,6 @@ if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { // 鎵撳嵃鏈鸿缃� cell = this.getPrinter(cell, item.uuid) - } - - if (cell.btnstyle) { // 鍏煎 - cell.style = cell.style || {} - cell.style = {...cell.style, ...cell.btnstyle} - } - - if (cell.controlField) { - if (/,/ig.test(cell.controlVal)) { - cell.controlVals = cell.controlVal.split(',') - } else { - cell.controlVals = [(cell.controlVal || '')] - } } return skip || permAction[cell.uuid] @@ -847,6 +739,66 @@ return true }) + } + + resetButton = (item, cell, popview) => { + cell.logLabel = item.$menuname + '-' + cell.label + cell.Ot = cell.Ot || 'requiredSgl' + cell.ContainerId = this.state.ContainerId + cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' + cell.$menuId = item.uuid + cell.$MenuID = this.props.MenuID + cell.$view = popview + + if (cell.btnstyle) { // 鍏煎 + cell.style = cell.style || {} + cell.style = {...cell.style, ...cell.btnstyle} + } + + if (cell.controlField) { + if (/,/ig.test(cell.controlVal)) { + cell.controlVals = cell.controlVal.split(',') + } else { + cell.controlVals = [(cell.controlVal || '')] + } + } + + return cell + } + + resetElement = (cell) => { + cell.style = cell.style || {} + if (['text', 'number', 'formula'].includes(cell.eleType)) { + if (!cell.height) { + cell.innerHeight = 'auto' + } + + cell.innerHeight = cell.innerHeight || 'auto' + cell.alignItems = cell.height > 1 ? cell.alignItems : '' + + if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') { + cell.round = Math.pow(10, cell.decimal) + if (cell.format === 'percent') { + cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 + } + } + } else if (cell.eleType === 'icon') { + if (!cell.innerHeight) { // 鍏煎 + let fontSize = 14 + let lineHeight = 1.5 + + if (cell.style.fontSize) { + fontSize = parseInt(cell.style.fontSize) + } + if (cell.style.lineHeight) { + lineHeight = parseFloat(cell.style.lineHeight) + } + + cell.innerHeight = fontSize * lineHeight + } + } + + return cell } getPrinter = (item, parentId) => { @@ -1384,9 +1336,9 @@ const { loadingview, viewlost, config, loading, shortcuts, BID } = this.state return ( - <div className={'custom-page-wrap ' + (loadingview || loading ? 'loading' : '')} id={this.state.ContainerId} style={config ? config.style : null}> + <div className={`custom-page-wrap ${config && config.minWidth ? 'mk-scroll' : ''} ${loadingview || loading ? 'loading' : ''}`} id={this.state.ContainerId} style={config ? config.style : null}> {(loadingview || (loading && !config.$cache)) ? <Spin className="view-spin" size="large" /> : null} - <Row id={config ? 'menu' + config.uuid : ''} className="component-wrap">{this.getComponents()}</Row> + <Row id={config ? 'menu' + config.uuid : ''} style={config && config.minWidth ? {minWidth: config.minWidth} : null} className="component-wrap">{this.getComponents()}</Row> {config && config.interfaces.length > 0 ? <MkInterfaces BID={BID} interfaces={config.interfaces}/> : null} {config && window.GLOB.breakpoint ? <DebugTable /> : null} {!window.GLOB.mkHS && window.GLOB.systemType !== 'production' ? <TableNodes config={config} /> : null} diff --git a/src/tabviews/custom/index.scss b/src/tabviews/custom/index.scss index 6799e47..2c2a5fe 100644 --- a/src/tabviews/custom/index.scss +++ b/src/tabviews/custom/index.scss @@ -49,3 +49,8 @@ display: none; } } +.custom-page-wrap.mk-scroll { + height: calc(100vh - 93px); + overflow: auto; + margin: 0!important; +} diff --git a/src/tabviews/custom/popview/index.jsx b/src/tabviews/custom/popview/index.jsx index 7c3ba68..903d3c9 100644 --- a/src/tabviews/custom/popview/index.jsx +++ b/src/tabviews/custom/popview/index.jsx @@ -329,17 +329,7 @@ } } else if (col.type === 'custom') { col.elements = col.elements.map(cell => { - if (['text', 'number', 'formula'].includes(cell.eleType)) { - if (!cell.height) { - cell.innerHeight = 'auto' - } - if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') { - cell.round = Math.pow(10, cell.decimal) - if (cell.format === 'percent') { - cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 - } - } - } + cell = this.resetElement(cell) return cell }) } @@ -377,30 +367,13 @@ item.action = item.action.filter(cell => { if (cell.hidden === 'true' || ['popview', 'funcbutton'].includes(cell.OpenType)) return false - cell.logLabel = item.$menuname + '-' + cell.label - cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' - cell.$menuId = item.uuid - cell.$MenuID = Tab.$MenuID - cell.$tabId = Tab.uuid + cell = this.resetButton(item, cell, Tab) cell.$toolbtn = true if (!mutil && cell.syncComponentId === item.setting.supModule) { cell.syncComponentId = '' if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { cell.execSuccess = 'mainline' - } - } - - if (cell.btnstyle) { // 鍏煎 - cell.style = cell.style || {} - cell.style = {...cell.style, ...cell.btnstyle} - } - - if (cell.controlField) { - if (/,/ig.test(cell.controlVal)) { - cell.controlVals = cell.controlVal.split(',') - } else { - cell.controlVals = [(cell.controlVal || '')] } } @@ -421,12 +394,7 @@ if (cell.eleType === 'button') { if (cell.hidden === 'true' || ['popview', 'funcbutton'].includes(cell.OpenType)) return false - cell.logLabel = item.$menuname + '-' + cell.label - cell.Ot = cell.Ot || 'requiredSgl' - cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' - cell.$menuId = item.uuid - cell.$MenuID = Tab.$MenuID - cell.$tabId = Tab.uuid + cell = this.resetButton(item, cell, Tab) if (!mutil && cell.syncComponentId === item.setting.supModule) { cell.syncComponentId = '' @@ -434,23 +402,8 @@ cell.execSuccess = 'mainline' } } - if (cell.controlField) { - if (/,/ig.test(cell.controlVal)) { - cell.controlVals = cell.controlVal.split(',') - } else { - cell.controlVals = [(cell.controlVal || '')] - } - } - } else if (['text', 'number', 'formula'].includes(cell.eleType)) { - if (!cell.height) { - cell.innerHeight = 'auto' - } - if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') { - cell.round = Math.pow(10, cell.decimal) - if (cell.format === 'percent') { - cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 - } - } + } else { + cell = this.resetElement(cell) } return true @@ -462,12 +415,7 @@ if (cell.eleType === 'button') { if (cell.hidden === 'true' || ['popview', 'funcbutton'].includes(cell.OpenType)) return false - cell.logLabel = item.$menuname + '-' + cell.label - cell.Ot = cell.Ot || 'requiredSgl' - cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' - cell.$menuId = item.uuid - cell.$MenuID = Tab.$MenuID - cell.$tabId = Tab.uuid + cell = this.resetButton(item, cell, Tab) if (!mutil && cell.syncComponentId === item.setting.supModule) { cell.syncComponentId = '' @@ -475,24 +423,8 @@ cell.execSuccess = 'mainline' } } - - if (cell.controlField) { - if (/,/ig.test(cell.controlVal)) { - cell.controlVals = cell.controlVal.split(',') - } else { - cell.controlVals = [(cell.controlVal || '')] - } - } - } else if (['text', 'number', 'formula'].includes(cell.eleType)) { - if (!cell.height) { - cell.innerHeight = 'auto' - } - if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') { - cell.round = Math.pow(10, cell.decimal) - if (cell.format === 'percent') { - cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 - } - } + } else { + cell = this.resetElement(cell) } return true @@ -510,11 +442,7 @@ if (cell.eleType === 'button') { if (cell.hidden === 'true' || ['popview', 'funcbutton'].includes(cell.OpenType)) return false - cell.logLabel = item.$menuname + '-' + cell.label - cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' - cell.$menuId = item.uuid - cell.$MenuID = Tab.$MenuID - cell.$tabId = Tab.uuid + cell = this.resetButton(item, cell, Tab) if (cell.syncComponentId === item.wrap.supModule) { cell.syncComponentId = '' @@ -522,23 +450,8 @@ cell.execSuccess = 'mainline' } } - if (cell.controlField) { - if (/,/ig.test(cell.controlVal)) { - cell.controlVals = cell.controlVal.split(',') - } else { - cell.controlVals = [(cell.controlVal || '')] - } - } - } else if (['text', 'number', 'formula'].includes(cell.eleType)) { - if (!cell.height) { - cell.innerHeight = 'auto' - } - if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') { - cell.round = Math.pow(10, cell.decimal) - if (cell.format === 'percent') { - cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 - } - } + } else { + cell = this.resetElement(cell) } return true @@ -549,30 +462,12 @@ col.elements = col.elements.filter(cell => { if (cell.hidden === 'true' || ['popview', 'funcbutton'].includes(cell.OpenType)) return false - cell.logLabel = item.$menuname + '-' + cell.label - cell.Ot = cell.Ot || 'requiredSgl' - cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' - cell.$menuId = item.uuid - cell.$MenuID = Tab.$MenuID - cell.$tabId = Tab.uuid + cell = this.resetButton(item, cell, Tab) if (cell.syncComponentId === item.setting.supModule) { cell.syncComponentId = '' if (cell.execSuccess === 'line' || cell.execSuccess === 'grid') { cell.execSuccess = 'mainline' - } - } - - if (cell.btnstyle) { // 鍏煎 - cell.style = cell.style || {} - cell.style = {...cell.style, ...cell.btnstyle} - } - - if (cell.controlField) { - if (/,/ig.test(cell.controlVal)) { - cell.controlVals = cell.controlVal.split(',') - } else { - cell.controlVals = [(cell.controlVal || '')] } } @@ -671,6 +566,65 @@ }) } + resetButton = (item, cell, Tab) => { + cell.logLabel = item.$menuname + '-' + cell.label + cell.Ot = cell.Ot || 'requiredSgl' + cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : '' + cell.$menuId = item.uuid + cell.$MenuID = Tab.$MenuID + cell.$tabId = Tab.uuid + + if (cell.btnstyle) { // 鍏煎 + cell.style = cell.style || {} + cell.style = {...cell.style, ...cell.btnstyle} + } + + if (cell.controlField) { + if (/,/ig.test(cell.controlVal)) { + cell.controlVals = cell.controlVal.split(',') + } else { + cell.controlVals = [(cell.controlVal || '')] + } + } + + return cell + } + + resetElement = (cell) => { + cell.style = cell.style || {} + if (['text', 'number', 'formula'].includes(cell.eleType)) { + if (!cell.height) { + cell.innerHeight = 'auto' + } + + cell.innerHeight = cell.innerHeight || 'auto' + cell.alignItems = cell.height > 1 ? cell.alignItems : '' + + if (cell.eleType === 'number' && typeof(cell.decimal) === 'number') { + cell.round = Math.pow(10, cell.decimal) + if (cell.format === 'percent') { + cell.decimal = cell.decimal > 2 ? cell.decimal - 2 : 0 + } + } + } else if (cell.eleType === 'icon') { + if (!cell.innerHeight) { // 鍏煎 + let fontSize = 14 + let lineHeight = 1.5 + + if (cell.style.fontSize) { + fontSize = parseInt(cell.style.fontSize) + } + if (cell.style.lineHeight) { + lineHeight = parseFloat(cell.style.lineHeight) + } + + cell.innerHeight = fontSize * lineHeight + } + } + + return cell + } + getPrinter = (item, parentId) => { let _item = window.GLOB.UserCacheMap.get(parentId + item.uuid) diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx index b96ad92..34d4cbb 100644 --- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx +++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx @@ -713,6 +713,21 @@ }) } + if (btn.verify.wrapText === 'true' && data) { + let lines = data.length + 1 + let start = 2 + if (btn.verify.merge === 'true') { + lines = data.length + 2 + } + for (let n = 0; n < cols.length; n++) { + for (let m = start; m <= lines; m++) { + if (ws[cols[n] + m] && !ws[cols[n] + m].s) { + ws[cols[n] + m].s = {alignment: { wrapText: true }} + } + } + } + } + // ws["A1"].s = {fill: { bgColor: { rgb: "FFFFAA" }}, font: { color: { rgb: "1890FF" } }} const wb = XLSX.utils.book_new() @@ -884,7 +899,7 @@ defaultSql = btn.verify.defaultSql || 'true' _dataresource = btn.verify.dataresource || '' queryType = btn.verify.queryType - primaryKey = btn.verify.primaryKey || 'ID' + // primaryKey = btn.verify.primaryKey || 'ID' if (/\s/.test(_dataresource)) { _dataresource = '(' + _dataresource + ') tb' @@ -993,9 +1008,9 @@ if (btn.Ot === 'requiredOnce' && selectedData && selectedData.length > 0) { primaryId = selectedData.map(d => d.$$uuid || '').filter(Boolean).join(',') if (_search && primaryId) { - _search += ` and ${primaryKey} in (select ID from dbo.SplitComma('${primaryId}'))` + _search += ` and ${primaryKey} in (select ${primaryKey} from dbo.SplitComma('${primaryId}'))` } else if (primaryId) { - _search = `where ${primaryKey} in (select ID from dbo.SplitComma('${primaryId}'))` + _search = `where ${primaryKey} in (select ${primaryKey} from dbo.SplitComma('${primaryId}'))` } } diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx index 65f734e..4de4e94 100644 --- a/src/tabviews/zshare/actionList/normalbutton/index.jsx +++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx @@ -890,15 +890,16 @@ } }) + let _data = {} if (data) { Object.keys(data).forEach(key => { - data[key.toLowerCase()] = data[key] + _data[key.toLowerCase()] = data[key] }) } // 娣诲姞鏁版嵁涓瓧娈碉紝琛ㄥ崟鍊间紭鍏�(鎸夐挳涓嶉�夎鎴栧琛屾嫾鎺ユ椂璺宠繃) if (data && btn.Ot !== 'notRequired' && columns && columns.length > 0) { - datavars = {...data, ...datavars} + datavars = {..._data, ...datavars} const setField = (col) => { if (!col.field) return @@ -2430,9 +2431,23 @@ MKEmitter.emit('popclose') } else if (btn.execError !== 'never') { MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn, '', this.state.selines) - } else if (btn.OpenType === 'form' && btn.formType !== 'counter') { + } + if (btn.OpenType === 'form') { let data = this.props.selectedData && this.props.selectedData[0] ? this.props.selectedData[0] : null - this.setState({check: data && data[btn.field] === btn.openVal}) + + if (btn.formType === 'counter') { + let count = 0 + if (data && data[btn.field]) { + count = +data[btn.field] + if (isNaN(count)) { + count = 0 + } + } + + this.setState({count: count }) + } else { + this.setState({check: data && data[btn.field] === btn.openVal}) + } } if (window.GLOB.breakpoint) { diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx index 09e0fe5..04fa4a8 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx @@ -108,8 +108,18 @@ } updateDataType = (e) => { - this.setState({dataType: e.target.value}) this.props.updateDataType(e.target.value) + + if (e.target.value === 'custom') { + setTimeout(() => { + this.setState({ + dataType: e.target.value, + defaultSql: this.props.setting.defaultSql || 'true' + }) + }, 10) + } else { + this.setState({dataType: e.target.value}) + } } render() { @@ -206,13 +216,13 @@ </Radio.Group>)} </Form.Item> </Col> : null} - {dataType === 'custom' && defaultSql === 'true' ? <Col className="short-label" span={8}> + {/* {dataType === 'custom' && defaultSql === 'true' ? <Col className="short-label" span={8}> <Form.Item label="涓婚敭"> {getFieldDecorator('primaryKey', { initialValue: setting.primaryKey || 'ID', })(<Input placeholder={''} autoComplete="off" />)} </Form.Item> - </Col> : null} + </Col> : null} */} {dataType === 'custom' && defaultSql === 'true' ? <Col className="short-label" span={8}> <Form.Item label="鎺掑簭鏂瑰紡"> {getFieldDecorator('order', { @@ -282,6 +292,22 @@ </Radio.Group>)} </Form.Item> </Col> : null} + {btnType !== 'print' ? <Col span={8}> + <Form.Item label={ + <Tooltip placement="topLeft" title="Excel鍐呭鍖烘槸鍚﹁嚜鍔ㄦ崲琛屻��"> + <QuestionCircleOutlined className="mk-form-tip" /> + 鑷姩鎹㈣ + </Tooltip> + }> + {getFieldDecorator('wrapText', { + initialValue: setting.wrapText || 'false' + })( + <Radio.Group> + <Radio value="false">鍚�</Radio> + <Radio value="true">鏄�</Radio> + </Radio.Group>)} + </Form.Item> + </Col> : null} </Row> </Form> </div> diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx index e307490..3473421 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx @@ -4,6 +4,7 @@ import { Form, Tabs, Row, Col, Button, notification, Modal, message, InputNumber, Radio, Spin, Typography, Popconfirm } from 'antd' import { EditOutlined, StopOutlined, CheckCircleOutlined, SwapOutlined, DeleteOutlined } from '@ant-design/icons' import moment from 'moment' +import md5 from 'md5' import Api from '@/api' import Utils from '@/utils/utils.js' @@ -28,6 +29,7 @@ state = { verify: {}, + debugId: '', activeKey: 'setting', defaultscript: '', // 鑷畾涔夎剼鏈� excelColumns: [ @@ -585,6 +587,17 @@ } else if (activeKey === 'setting') { this.settingForm.handleConfirm().then(res => { let _verify = {...verify, ...res} + + if (res.dataType !== 'custom') { + delete _verify.tableName + delete _verify.dataresource + delete _verify.queryType + delete _verify.defaultSql + delete _verify.order + + _verify.scripts = [] + } + this.setState({ verify: _verify }, () => { @@ -995,7 +1008,7 @@ } sqlverify = (_resolve, _reject, scripts) => { - const { searches, verify } = this.state + const { searches, verify, debugId } = this.state if (verify.dataType !== 'custom') { _resolve() @@ -1004,6 +1017,14 @@ let timestamp = moment().format('YYYY-MM-DD HH:mm:ss') let sql = SettingUtils.getDebugSql(verify, scripts, (verify.useSearch === 'true' ? searches : []), Utils, timestamp) + + let _debugId = md5(sql) + + if (debugId === _debugId) { + _resolve() + return + } + let param = { func: 's_debug_sql', exec_type: 'y', @@ -1015,6 +1036,7 @@ Api.genericInterface(param).then(result => { if (result.status) { + this.setState({debugId: _debugId}) _resolve() } else { _reject() @@ -1026,7 +1048,22 @@ } updateDataType = (val) => { - this.setState({verify: {...this.state.verify, dataType: val}}) + const { config } = this.props + + let verify = {...this.state.verify, dataType: val} + if (val === 'custom' && config.setting) { + verify.tableName = verify.tableName || config.setting.tableName || '' + verify.dataresource = verify.dataresource || config.setting.dataresource || '' + verify.queryType = verify.queryType || config.setting.queryType || '' + verify.defaultSql = verify.defaultSql || config.setting.execute || '' + verify.order = verify.order || config.setting.order || '' + + if (verify.scripts.length === 0 && config.scripts && config.scripts.length > 0) { + verify.scripts = fromJS(config.scripts).toJS() + } + } + + this.setState({verify: verify}) } render() { diff --git a/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx index 832945f..83c35bc 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx @@ -4,6 +4,7 @@ import { Form, Tabs, Row, Col, Button, notification, Modal, message, InputNumber, Input, Select, Radio, Tooltip, Typography, Popconfirm, Spin } from 'antd' import { QuestionCircleOutlined, EditOutlined, StopOutlined, CheckCircleOutlined, SwapOutlined, DeleteOutlined } from '@ant-design/icons' import moment from 'moment' +import md5 from 'md5' import Api from '@/api' import Utils from '@/utils/utils.js' @@ -33,6 +34,7 @@ state = { verify: {}, + debugId: '', templates: [], loading: false, activeKey: 'base', @@ -611,10 +613,18 @@ } sqlverify = (_resolve, _reject, scripts) => { - const { verify, declareSql } = this.state + const { verify, declareSql, debugId } = this.state let timestamp = moment().format('YYYY-MM-DD HH:mm:ss') let sql = SettingUtils.getDebugSql(verify.setting || {}, verify.columns, scripts, declareSql, timestamp) + + let _debugId = md5(sql) + + if (debugId === _debugId) { + _resolve() + return + } + let param = { func: 's_debug_sql', exec_type: 'y', @@ -626,6 +636,7 @@ Api.genericInterface(param).then(result => { if (result.status) { + this.setState({debugId: _debugId}) _resolve() } else { _reject() diff --git a/src/templates/sharecomponent/columncomponent/columnform/index.scss b/src/templates/sharecomponent/columncomponent/columnform/index.scss index 0b02ab2..aabfa36 100644 --- a/src/templates/sharecomponent/columncomponent/columnform/index.scss +++ b/src/templates/sharecomponent/columncomponent/columnform/index.scss @@ -15,4 +15,9 @@ width: 88%; } } + >.ant-row >.ant-col { + display: inline-block; + vertical-align: top; + float: none; + } } diff --git a/src/templates/sharecomponent/fieldscomponent/editcard/index.jsx b/src/templates/sharecomponent/fieldscomponent/editcard/index.jsx index d4eb344..4387911 100644 --- a/src/templates/sharecomponent/fieldscomponent/editcard/index.jsx +++ b/src/templates/sharecomponent/fieldscomponent/editcard/index.jsx @@ -18,7 +18,9 @@ _type = 'text' } } else if (props.type === 'search') { - if (_type !== 'select') { + if (_type === 'date' || _type === 'datetime') { + _type = 'date' + } else if (_type !== 'select') { _type = 'text' } } else if (props.type === 'form') { @@ -83,6 +85,7 @@ <Radio.Group onChange={this.changeType} value={card.type} disabled={!card.selected || card.origin}> <Radio value="text">text</Radio> <Radio value="select">select</Radio> + <Radio value="date">date</Radio> </Radio.Group> : null } {type === 'columns' ? diff --git a/src/templates/sharecomponent/fieldscomponent/index.jsx b/src/templates/sharecomponent/fieldscomponent/index.jsx index 590e699..4d8d96f 100644 --- a/src/templates/sharecomponent/fieldscomponent/index.jsx +++ b/src/templates/sharecomponent/fieldscomponent/index.jsx @@ -106,10 +106,13 @@ selectCards.forEach(item => { let _match = '' let initval = '' - if (item.type === 'select') { + let _type = item.type + if (item.type === 'date') { + _type = 'daterange' + } else if (item.type === 'select') { _match = '=' } else { - item.type = 'text' + _type = 'text' _match = 'like' } @@ -118,7 +121,7 @@ label: item.label, field: item.field, initval: initval, - type: item.type, + type: _type, resourceType: '0', options: [], orderType: 'asc', diff --git a/src/utils/utils.js b/src/utils/utils.js index 3350032..119a3ee 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -1504,15 +1504,16 @@ } }) + let _data = {} if (data) { Object.keys(data).forEach(key => { - data[key.toLowerCase()] = data[key] + _data[key.toLowerCase()] = data[key] }) } // 娣诲姞鏁版嵁涓瓧娈碉紝琛ㄥ崟鍊间紭鍏�(鎸夐挳涓嶉�夎鎴栧琛屾嫾鎺ユ椂璺宠繃) if (data && btn.Ot !== 'notRequired' && columns && columns.length > 0) { - datavars = {...data, ...datavars} + datavars = {..._data, ...datavars} const setField = (col) => { if (!col.field) return @@ -1781,8 +1782,8 @@ let _val = '' if (_linkKey === 'bid' && BID) { // 鏇挎崲bid _val = BID - } else if (data && data.hasOwnProperty(_linkKey)) { - _val = data[_linkKey] + } else if (_data.hasOwnProperty(_linkKey)) { + _val = _data[_linkKey] } _ModularDetailCode = `'${item.TypeCharOne + _val}'` } else { @@ -1911,7 +1912,7 @@ _sql += ` /* 鍒涘缓鍑瘉 */ exec s_BVoucher_Create - @Bill ='${data[_voucher.linkField.toLowerCase()]}', + @Bill ='${_data[_voucher.linkField.toLowerCase()]}', @BVoucherType ='${_voucher.BVoucherType}', @VoucherTypeOne ='${_voucher.VoucherTypeOne}', @VoucherTypeTwo ='${_voucher.VoucherTypeTwo}', diff --git a/src/views/login/index.jsx b/src/views/login/index.jsx index 2738aa7..da7b51b 100644 --- a/src/views/login/index.jsx +++ b/src/views/login/index.jsx @@ -149,14 +149,7 @@ } } - let _history = sessionStorage.getItem('history') - if (_history) { - sessionStorage.removeItem('history') - // 鏌ョ湅鏄惁涓哄叾浠栭〉闈㈣烦杞紝璺緞瀛樺湪鏃讹紝璺冲洖鍘熼〉闈� - this.props.history.replace(_history) - } else { - this.props.history.replace('/main') - } + this.props.history.replace('/main') } else if (res.ErrCode === 'Need_Get_Appkey' && options.sysType === 'SSO') { message.warning('搴旂敤灏氭湭鍒涘缓锛岃鍚戜簯绔悓姝ュ簲鐢紒') @@ -210,14 +203,7 @@ sessionStorage.removeItem('visitorUserID') sessionStorage.removeItem('visitorLoginUID') - let _history = sessionStorage.getItem('history') - if (_history) { - sessionStorage.removeItem('history') - // 鏌ョ湅鏄惁涓哄叾浠栭〉闈㈣烦杞紝璺緞瀛樺湪鏃讹紝璺冲洖鍘熼〉闈� - this.props.history.replace(_history) - } else { - this.props.history.replace('/main') - } + this.props.history.replace('/main') } else if (res.ErrCode === 'Need_Get_Appkey' && options.sysType === 'SSO') { message.warning('搴旂敤灏氭湭鍒涘缓锛岃鍚戜簯绔悓姝ュ簲鐢紒') @@ -256,14 +242,7 @@ sessionStorage.removeItem('visitorUserID') sessionStorage.removeItem('visitorLoginUID') - let _history = sessionStorage.getItem('history') - if (_history) { - sessionStorage.removeItem('history') - // 鏌ョ湅鏄惁涓哄叾浠栭〉闈㈣烦杞紝璺緞瀛樺湪鏃讹紝璺冲洖鍘熼〉闈� - this.props.history.replace(_history) - } else { - this.props.history.replace('/main') - } + this.props.history.replace('/main') } else if (res.ErrCode === 'Need_Get_Appkey' && options.sysType === 'SSO') { message.warning('搴旂敤灏氭湭鍒涘缓锛岃鍚戜簯绔悓姝ュ簲鐢紒') diff --git a/src/views/menudesign/menuform/index.jsx b/src/views/menudesign/menuform/index.jsx index 7c8be79..0f4433b 100644 --- a/src/views/menudesign/menuform/index.jsx +++ b/src/views/menudesign/menuform/index.jsx @@ -193,47 +193,14 @@ this.props.form.setFieldsValue({parentId: _id}) this.props.updateConfig({...config, fstMenuId: value, parentId: _id}) }) - } else if (key === 'parentId') { - this.props.updateConfig({...config, parentId: value}) - } else if (key === 'cacheUseful') { - this.props.updateConfig({...config, cacheUseful: value}) - } else if (key === 'timeUnit') { - this.props.updateConfig({...config, timeUnit: value}) - } else if (key === 'OpenType') { - this.props.updateConfig({...config, OpenType: value}) - } else if (key === 'hidden') { - this.props.updateConfig({...config, hidden: value}) - } else if (key === 'permission') { - this.props.updateConfig({...config, permission: value}) - } else if (key === 'cacheLocal') { - this.props.updateConfig({...config, cacheLocal: value}) + } else { + if (key === 'cacheTime' || key === 'minWidth') { + if (typeof(value) !== 'number') { + value = '' + } + } + this.props.updateConfig({...config, [key]: value}) } - } - - // 鑿滃崟鍚嶇О - changeName = (e) => { - this.props.updateConfig({...this.props.config, MenuName: e.target.value}) - } - - // 鑿滃崟鍙傛暟 - changeNo = (e) => { - this.props.updateConfig({...this.props.config, MenuNo: e.target.value}) - } - - // 鍔╄鐮� - changeEasyCode = (e) => { - this.props.updateConfig({...this.props.config, easyCode: e.target.value}) - } - - changeRemark = (e) => { - this.props.updateConfig({...this.props.config, Remark: e.target.value}) - } - - changeCacheDay = (val) => { - if (typeof(val) !== 'number') { - val = '' - } - this.props.updateConfig({...this.props.config, cacheTime: val}) } render() { @@ -306,7 +273,7 @@ message: '璇疯緭鍏ヨ彍鍗曞悕绉�!' } ] - })(<Input placeholder="" autoComplete="off" onChange={this.changeName}/>)} + })(<Input placeholder="" autoComplete="off" onChange={(e) => {this.selectChange('MenuName', e.target.value)}}/>)} </Form.Item> </Col> <Col span={24}> @@ -319,7 +286,7 @@ message: '璇疯緭鍏ヨ彍鍗曞弬鏁�!' } ] - })(<Input placeholder="" autoComplete="off" onChange={this.changeNo}/>)} + })(<Input placeholder="" autoComplete="off" onChange={(e) => {this.selectChange('MenuNo', e.target.value)}}/>)} </Form.Item> </Col> <Col span={24}> @@ -336,6 +303,23 @@ <Radio.Group onChange={(e) => {this.selectChange('OpenType', e.target.value)}}> <Radio value="newtab">鏍囩椤�</Radio> <Radio value="newpage">鏂伴〉闈�</Radio> + </Radio.Group> + )} + </Form.Item> + </Col> + <Col span={24}> + <Form.Item label={ + <Tooltip placement="topLeft" title="璺宠繃鏉冮檺楠岃瘉鏃讹紝椤甸潰涓粍浠跺強鎸夐挳涓嶅湪杩涜鏉冮檺鎺у埗銆�"> + <QuestionCircleOutlined className="mk-form-tip" /> + 鏉冮檺楠岃瘉 + </Tooltip> + }> + {getFieldDecorator('permission', { + initialValue: config.permission || 'true' + })( + <Radio.Group onChange={(e) => {this.selectChange('permission', e.target.value)}}> + <Radio value="true">浣跨敤</Radio> + <Radio value="false">涓嶄娇鐢�</Radio> </Radio.Group> )} </Form.Item> @@ -374,23 +358,6 @@ )} </Form.Item> </Col> - <Col span={24}> - <Form.Item label={ - <Tooltip placement="topLeft" title="璺宠繃鏉冮檺楠岃瘉鏃讹紝椤甸潰涓粍浠跺強鎸夐挳涓嶅湪杩涜鏉冮檺鎺у埗銆�"> - <QuestionCircleOutlined className="mk-form-tip" /> - 鏉冮檺楠岃瘉 - </Tooltip> - }> - {getFieldDecorator('permission', { - initialValue: config.permission || 'true' - })( - <Radio.Group onChange={(e) => {this.selectChange('permission', e.target.value)}}> - <Radio value="true">浣跨敤</Radio> - <Radio value="false">涓嶄娇鐢�</Radio> - </Radio.Group> - )} - </Form.Item> - </Col> {config.cacheUseful === 'true' ? <Col span={24}> <Form.Item label="鍗曚綅"> {getFieldDecorator('timeUnit', { @@ -414,15 +381,29 @@ } ] })( - <InputNumber min={1} max={config.timeUnit !== 'hour' ? 7 : 23} precision={0} onChange={this.changeCacheDay}/> + <InputNumber min={1} max={config.timeUnit !== 'hour' ? 7 : 23} precision={0} onChange={(val) => {this.selectChange('cacheTime', val)}}/> )} </Form.Item> </Col> : null} <Col span={24}> + <Form.Item label={ + <Tooltip placement="topLeft" title="濡傛灉椤甸潰鍐呭鍦ㄧ獥鍙d腑鏃犳硶瀹屽叏灞曠ず锛屽彲璁剧疆鏈�灏忓搴︼紝瀹炵幇椤甸潰鐨勬í鍚戞粴鍔ㄣ��"> + <QuestionCircleOutlined className="mk-form-tip" /> + 鏈�灏忓搴� + </Tooltip> + }> + {getFieldDecorator('minWidth', { + initialValue: config.minWidth + })( + <InputNumber min={0} precision={0} onChange={(val) => {this.selectChange('minWidth', val)}}/> + )} + </Form.Item> + </Col> + <Col span={24}> <Form.Item label="鍔╄鐮�"> {getFieldDecorator('easyCode', { initialValue: config.easyCode - })(<Input placeholder="" autoComplete="off" onChange={this.changeEasyCode}/>)} + })(<Input placeholder="" autoComplete="off" onChange={(e) => {this.selectChange('easyCode', e.target.value)}}/>)} </Form.Item> </Col> <Col span={24}> @@ -442,7 +423,7 @@ message: '澶囨敞鏈�澶�512涓瓧绗︼紒' } ] - })(<TextArea rows={2} placeholder={''} onChange={this.changeRemark} />)} + })(<TextArea rows={2} placeholder={''} onChange={(e) => {this.selectChange('Remark', e.target.value)}}/>)} </Form.Item> </Col> </Row> -- Gitblit v1.8.0