From 57266ee8c62f0fddb42c18c705507fc0dc2416f6 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期五, 18 八月 2023 17:42:39 +0800 Subject: [PATCH] 2023-08-18 --- src/menu/components/card/cardcellcomponent/index.jsx | 307 +++++++++++++++++++++++++++++++++------------------ 1 files changed, 199 insertions(+), 108 deletions(-) diff --git a/src/menu/components/card/cardcellcomponent/index.jsx b/src/menu/components/card/cardcellcomponent/index.jsx index ce15a0c..5e871c2 100644 --- a/src/menu/components/card/cardcellcomponent/index.jsx +++ b/src/menu/components/card/cardcellcomponent/index.jsx @@ -1,14 +1,15 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { is, fromJS } from 'immutable' -import { Modal, Button } from 'antd' +import { Modal, Button, notification } from 'antd' +import moment from 'moment' -import zhCN from '@/locales/zh-CN/model.js' -import enUS from '@/locales/en-US/model.js' +import Api from '@/api' import asyncComponent from '@/utils/asyncComponent' import { getCardCellForm } from './formconfig' -import { getActionForm } from '@/menu/components/share/actioncomponent/formconfig' - +import { queryPrintSql } from '@/utils/option.js' +import { getActionForm, getBaseTableActionForm } from '@/menu/components/share/actioncomponent/formconfig' +import Utils, { FuncUtils } from '@/utils/utils.js' import MKEmitter from '@/utils/events.js' import MenuUtils from '@/utils/utils-custom.js' import ElementForm from './elementform' @@ -34,7 +35,6 @@ } state = { - dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, appType: sessionStorage.getItem('appType'), card: null, // 缂栬緫涓厓绱� formlist: null, // 琛ㄥ崟淇℃伅 @@ -77,7 +77,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() }) @@ -102,9 +102,7 @@ if (cardCell.uuid !== parentId) return - const { elements } = this.state - - let _elements = elements.map(item => { + let _elements = this.state.elements.map(item => { if (keys.includes(item.uuid)) { return this.resetCardStyle(item, {...item.style, ...style}) } @@ -126,11 +124,12 @@ this.setState({elements: this.state.elements.filter(item => item.uuid !== eleId)}) } - cardAddElement = (id, element) => { - const { cardCell } = this.props + cardAddElement = (id, element, type) => { + const { cardCell, side } = this.props if (id !== cardCell.uuid) return if (window.GLOB.$lock) return + if (type && side !== type) return window.GLOB.$lock = true setTimeout(() => { @@ -153,35 +152,41 @@ options = ['margin', 'float'] } else { options.push('width', 'minHeight', 'float') + _style.minHeight = _style.minHeight || '28px' } if (element.wrapStyle) { _style.float = element.wrapStyle.textAlign || 'left' } } else if (element.eleType === 'picture') { - options = ['border', 'margin'] + options = ['background', 'border', 'margin'] + } else if (element.eleType === 'color') { + options = ['border', 'margin', 'padding'] + } else if (element.eleType === 'number' || element.eleType === 'icon') { + options.push('display') } else if (element.eleType === 'text') { options[0] = 'font2' + options.push('display') } else if (element.eleType === 'slider') { options = ['padding', 'margin'] } else if (element.eleType === 'splitline') { options = ['padding', 'margin'] } + if (element.eleType !== 'button') { + options.push('position') + } + + options.push('clear') + this.setState({ card: element }) - MKEmitter.emit('changeStyle', options, _style, this.getStyle) + MKEmitter.emit('changeStyle', options, _style, this.getStyle, 'mk-' + element.eleType) } getStyle = (style) => { const { card, elements } = this.state - - // if (card.eleType === 'button') { - // if ((style.paddingLeft || style.paddingRight) && !style.width) { - // style.width = 'auto' - // } - // } let _card = this.resetCardStyle(card, style) @@ -204,7 +209,7 @@ _card.style = style let line = _card.height || null - if (['currentDate', 'sequence', 'icon'].includes(_card.eleType)) { + if (['currentDate', 'sequence'].includes(_card.eleType) || (_card.eleType === 'icon' && _card.tipType !== 'text')) { line = 1 } @@ -240,6 +245,9 @@ _card.wrapStyle = {textAlign: style.float} delete _card.style.float } + } else if (_card.eleType === 'picture') { + _card.style = style + delete _card.style.backgroundImage } else { _card.style = style } @@ -265,12 +273,10 @@ if (card.eleType === 'button') { this.handleAction(card) } else { - let anchors = MenuUtils.getAnchors(window.GLOB.customMenu.components, cards.uuid) || [] - this.setState({ visible: true, card: card, - formlist: getCardCellForm(card, cards.type, cards.subtype, cardCell, anchors) + formlist: getCardCellForm(card, cards, cardCell) }) } } @@ -279,7 +285,7 @@ * @description 鎸夐挳缂栬緫锛岃幏鍙栨寜閽〃鍗曚俊鎭� */ handleAction = (card) => { - const { cards } = this.props + const { cards, side } = this.props let usefulFields = sessionStorage.getItem('permFuncField') if (usefulFields) { @@ -293,20 +299,10 @@ } let ableField = usefulFields.join(', ') + let msg = `鍑芥暟鍚嶇О闇�浠�${ableField}绛夊瓧绗﹀紑濮�;` let functip = <div> - <p style={{marginBottom: '5px'}}>{this.state.dict['model.tooltip.func.innerface'].replace('@ableField', ableField)}</p> + <p style={{marginBottom: '5px'}}>{msg}</p> </div> - - let menulist = sessionStorage.getItem('fstMenuList') - if (menulist) { - try { - menulist = JSON.parse(menulist) - } catch (e) { - menulist = [] - } - } else { - menulist = [] - } let supId = '' if (cards.setting && cards.setting.supModule) { @@ -318,13 +314,65 @@ } } - let modules = MenuUtils.getSubModules(window.GLOB.customMenu.components, cards.uuid, supId) || [] - let anchors = MenuUtils.getAnchors(window.GLOB.customMenu.components, cards.uuid) || [] + let modules = MenuUtils.getSubModules(window.GLOB.customMenu.components, cards.uuid, supId) - this.setState({ - actvisible: true, - card: card, - formlist: getActionForm(card, functip, cards, usefulFields, menulist, modules, anchors) + this.checkPrintTemp().then(() => { + if (cards.subtype === 'basetable') { + this.setState({ + actvisible: true, + card: card, + formlist: getBaseTableActionForm(card, functip, cards, usefulFields, modules) + }) + } else { + let anchors = MenuUtils.getAnchors(window.GLOB.customMenu.components, cards.uuid) || [] + + this.setState({ + actvisible: true, + card: card, + formlist: getActionForm(card, functip, cards, usefulFields, modules, anchors, side) + }) + } + }) + } + + checkPrintTemp = () => { + return new Promise(resolve => { + if (!window.GLOB.printTemps) { + let param = { + func: 'sPC_Get_SelectedList', + LText: Utils.formatOptions(queryPrintSql), + obj_name: 'data', + arr_field: 'PN,ID,Images' + } + + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + param.secretkey = Utils.encrypt(param.LText, param.timestamp) + + param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) // 浜戠鏁版嵁楠岃瘉 + + Api.getCloudConfig(param).then(res => { + if (!res.status) { + notification.warning({ + top: 92, + message: res.message, + duration: 5 + }) + } + + let temps = (res.data || []).map(temp => { + return { + value: temp.ID, + text: temp.PN + } + }) + window.GLOB.printTemps = temps + resolve() + }, () => { + resolve() + }) + } else { + resolve() + } }) } @@ -332,15 +380,11 @@ * @description 鍙栨秷淇濆瓨锛屽鏋滃厓绱犱负鏂版坊鍏冪礌锛屽垯浠庡簭鍒椾腑鍒犻櫎 */ editModalCancel = () => { - const { card, elements, appType } = this.state + const { card, elements } = this.state let _elements = null if (card.focus) { _elements = elements.filter(item => item.uuid !== card.uuid) - - if (card.OpenType === 'popview' && appType !== 'mob') { // 寮圭獥鏍囩鎸夐挳锛屼粠澶嶅埗鍒楄〃涓垹闄� - MKEmitter.emit('delButtons', [card.uuid]) - } } else { _elements = elements } @@ -362,16 +406,28 @@ const { elements } = this.state this.elementFormRef.handleConfirm().then(res => { + if (res.width % 0.5) { + res.width = parseInt(res.width / 0.5) * 0.5 + } + if (res.width % 1) { + res.width = (res.width + '').replace(/.5/, 'x') + } + let _elements = elements.map(cell => { if (cell.uuid === res.uuid) { res.style = cell.style || {} + + if (!['text', 'number', 'icon'].includes(res.eleType)) { + delete res.style.display + } + if (res.eleType === 'splitline' && (cell.eleType !== 'splitline' || cell.focus)) { res.style.paddingTop = '5px' res.style.paddingBottom = '5px' } else if (['text', 'number', 'formula', 'currentDate', 'sequence', 'icon'].includes(res.eleType)) { let line = res.height || null - if (['currentDate', 'sequence', 'icon'].includes(res.eleType)) { + if (['currentDate', 'sequence'].includes(res.eleType) || (res.eleType === 'icon' && res.tipType !== 'text')) { line = 1 } @@ -402,6 +458,8 @@ } res.innerHeight = res.barHeight + (res.displayValue === 'true' ? fontSize + 2 : 0) + } else if (res.eleType === 'picture') { + delete res.style.backgroundImage } return res @@ -423,39 +481,41 @@ */ handleActionSubmit = () => { const { elements } = this.state - let color = { primary: '#1890ff', yellow: '#c49f47', orange: 'orange', danger: '#ff4d4f', green: '#26C281', dgreen: '#32c5d2', purple: '#8E44AD', cyan: '#13c2c2', gray: '#666666' } + let color = { primary: '#1890ff', yellow: '#c49f47', orange: 'orange', danger: '#ff4d4f', green: '#26C281', dgreen: '#32c5d2', purple: '#8E44AD', cyan: '#13c2c2', gray: '#666666', default: 'rgba(0, 0, 0, 0.65)' } this.actionFormRef.handleConfirm().then(res => { let _elements = elements.map(cell => { if (cell.uuid === res.uuid) { res.eleType = cell.eleType || null res.style = cell.style || null - res.modal = cell.modal || null res.wrapStyle = cell.wrapStyle || null - // res = {...cell, ...res} - - // if (!res.control) { - // delete res.controlField - // delete res.controlVal - // } - - // delete res.focus if (res.OpenType === 'form') { if (cell.OpenType !== 'form') { res.style = {} } } else if (res.class !== cell.class || res.show !== cell.show || !res.style) { + let cl = res.class.replace('border-', '') let style = {} if (res.show === 'link' || res.show === 'icon') { - style.color = color[res.class] + style.color = color[cl] style.backgroundColor = 'transparent' + } else if (res.class === 'default') { + style.color = 'rgba(0, 0, 0, 0.65)' + style.backgroundColor = '#fff' + style.borderColor = '#d9d9d9' + } else if (res.class.indexOf('border') > -1) { + style.color = color[cl] + style.backgroundColor = '#fff' + style.borderColor = color[cl] } else { style.color = '#ffffff' - style.backgroundColor = color[res.class] + style.backgroundColor = color[cl] } res.style = {...res.style, ...style} } + + res.updateTime = moment().format('YYYY-MM-DD HH:mm') return res } @@ -475,32 +535,19 @@ * @description 鎸夐挳鍒犻櫎 */ deleteElement = (card) => { - const { cardCell, side } = this.props - const { dict, elements, appType } = this.state + const { elements } = this.state let _this = this confirm({ - content: dict['model.confirm'] + dict['model.delete'] + '鍏冪礌鍚楋紵', + content: '纭畾鍒犻櫎鍏冪礌鍚楋紵', onOk() { let _elements = elements.filter(item => item.uuid !== card.uuid) - - if (card.OpenType === 'popview' || card.verify || card.modal) { - card.$parentId = cardCell.uuid - card.$side = side || '' - - // MKEmitter.emit('logButton', cards.uuid, card) - } _this.setState({ elements: _elements }, () => { _this.props.updateElement(_elements) }) - - if (card.eleType !== 'button') return - if (appType === 'mob' || (appType === 'pc' && card.OpenType !== 'popview')) return - - MKEmitter.emit('delButtons', [card.uuid]) }, onCancel() {} }) @@ -514,7 +561,6 @@ profVisible: true, card: element }) - MKEmitter.emit('modalStatus', '楠岃瘉淇℃伅') } /** @@ -527,6 +573,7 @@ let _elements = elements.map(cell => { if (cell.uuid === card.uuid) { cell.verify = res + cell.updateTime = moment().format('YYYY-MM-DD HH:mm') } return cell @@ -538,15 +585,17 @@ }, () => { this.props.updateElement(_elements) }) - - MKEmitter.emit('modalStatus', false) }) } handleSubConfig = (item) => { - const { cards } = this.props + const { cards, side } = this.props const { appType } = this.state let btn = fromJS(item).toJS() + + if (side === 'sub') { + btn.$sub = true + } if ((sessionStorage.getItem('style-control') && sessionStorage.getItem('style-control') === 'true')) return @@ -572,18 +621,18 @@ } } - handleSave = (_cards, btn, modal) => { + handleSave = (componentId, btnId, modal) => { const { cards } = this.props const { elements } = this.state - if (cards.uuid !== _cards.uuid) return + if (cards.uuid !== componentId) return - let _index = elements.findIndex(cell => cell.uuid === btn.uuid) + let _index = elements.findIndex(cell => cell.uuid === btnId) if (_index === -1) return let _elements = elements.map(cell => { - if (cell.uuid === btn.uuid) { + if (cell.uuid === btnId) { cell.modal = modal } @@ -613,10 +662,9 @@ } dropButton = (id) => { - const { cards, cardCell } = this.props + const { cards } = this.props if (!cards.action) return - if (cardCell.type === 'custom') return let index = cards.action.findIndex(item => item.uuid === id) @@ -653,54 +701,98 @@ }) } + /** + * @description 鍒涘缓鎸夐挳瀛樺偍杩囩▼ + */ + creatFunc = () => { + const menu = window.GLOB.customMenu + let _config = fromJS(this.props.cards).toJS() + + this.actionFormRef.handleConfirm().then(res => { + let btn = res // 鎸夐挳淇℃伅 + let newLText = '' // 鍒涘缓瀛樺偍杩囩▼sql + let DelText = '' // 鍒犻櫎瀛樺偍杩囩▼sql + + if (btn.intertype !== 'inner') return + + if (btn.OpenType === 'pop') { + let _param = { + funcName: btn.innerFunc, + name: _config.setting.tableName || '', + fields: btn.modal ? btn.modal.fields : [], + menuNo: menu.MenuNo + } + newLText = Utils.formatOptions(FuncUtils.getfunc(_param, btn, menu, _config)) + DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc)) + } else if (btn.OpenType === 'excelIn') { + let _param = { + funcName: btn.innerFunc, + menuNo: menu.MenuNo + } + newLText = Utils.formatOptions(FuncUtils.getexcelInfunc(_param, btn, menu)) + DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc)) + } else if (btn.OpenType === 'excelOut') { + newLText = Utils.formatOptions(FuncUtils.getTableFunc(btn.innerFunc, menu, _config)) // 鍒涘缓瀛樺偍杩囩▼sql + DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc)) + } else { + let _param = { + funcName: btn.innerFunc, + name: _config.setting.tableName || '', + fields: '', + menuNo: menu.MenuNo + } + newLText = Utils.formatOptions(FuncUtils.getfunc(_param, btn, menu, _config)) + DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc)) + } + + this.refs.btnCreatFunc.exec(btn.innerFunc, newLText, DelText) + }) + } + getVerify = (card) => { - const { cards } = this.props - const { dict } = this.state + const { cards, side } = this.props if (!card) return null if (['pop', 'prompt', 'exec', 'form'].includes(card.OpenType)) { return <VerifyCard card={card} - dict={dict} config={cards} - columns={cards.columns} + side={side || ''} + columns={side === 'sub' ? cards.subColumns : cards.columns} wrappedComponentRef={(inst) => this.verifyRef = inst} /> } else if (card.OpenType === 'excelIn') { return <VerifyExcelIn card={card} - dict={dict} - columns={cards.columns} + columns={side === 'sub' ? cards.subColumns : cards.columns} wrappedComponentRef={(inst) => this.verifyRef = inst} /> } else if (card.OpenType === 'excelOut') { return <VerifyExcelOut card={card} - dict={dict} config={cards} wrappedComponentRef={(inst) => this.verifyRef = inst} /> } else if (card.OpenType === 'funcbutton' && card.funcType === 'print') { return <VerifyPrint card={card} - dict={dict} - columns={cards.columns} + columns={side === 'sub' ? cards.subColumns : cards.columns} wrappedComponentRef={(inst) => this.verifyRef = inst} /> } } render() { - const { cards, cardCell } = this.props - const { elements, visible, actvisible, profVisible, card, dict, record } = this.state + const { cards, cardCell, side } = this.props + const { elements, visible, actvisible, profVisible, card, record } = this.state return ( - <div className="model-menu-card-cell-list"> + <div className={'model-menu-card-cell-list ' + (cardCell && cardCell.setting && cardCell.setting.layout === 'flex' ? 'mk-flex' : '') }> <DragElement list={elements} parent={cardCell} - fields={cards.columns} + fields={side === 'sub' ? cards.subColumns : cards.columns} updateMarks={this.updateMarks} handleList={this.handleList} handleMenu={this.handleElement} @@ -714,6 +806,7 @@ {/* 缂栬緫鎸夐挳锛氬鍒躲�佺紪杈� */} <Modal title="缂栬緫鍏冪礌" + wrapClassName="mk-scroll-modal" visible={visible} width={850} maskClosable={false} @@ -722,8 +815,8 @@ destroyOnClose > <ElementForm - dict={dict} card={card} + side={side} formlist={this.state.formlist} inputSubmit={this.handleSubmit} config={cards} @@ -733,20 +826,20 @@ {/* 缂栬緫鎸夐挳锛氬鍒躲�佺紪杈� */} <Modal title="鎸夐挳路缂栬緫" + wrapClassName="mk-scroll-modal" visible={actvisible} width={920} maskClosable={false} onCancel={this.editModalCancel} footer={[ - record && record.intertype === 'inner' ? <CreateFunc key="create" dict={dict} ref="btnCreatFunc" trigger={this.creatFunc}/> : null, - <Button key="cancel" onClick={this.editModalCancel}>{dict['model.cancel']}</Button>, - <Button key="confirm" type="primary" onClick={this.handleActionSubmit}>{dict['model.confirm']}</Button> + record && record.intertype === 'inner' && cards.subtype === 'dualdatacard' ? <CreateFunc key="create" ref="btnCreatFunc" trigger={this.creatFunc}/> : null, + <Button key="cancel" onClick={this.editModalCancel}>鍙栨秷</Button>, + <Button key="confirm" type="primary" onClick={this.handleActionSubmit}>纭畾</Button> ]} destroyOnClose > <ActionForm - dict={dict} - type={cards.type === 'balcony' ? '' : 'card'} + type={cards.type === 'balcony' || cardCell.$cardType === 'extendCard' ? '' : 'card'} card={card} formlist={this.state.formlist} inputSubmit={this.handleActionSubmit} @@ -761,17 +854,15 @@ visible={profVisible} width={'90vw'} maskClosable={false} - okText={dict['model.submit']} + okText="鎻愪氦" onOk={this.verifySubmit} onCancel={() => { if (this.verifyRef.handleCancel) { this.verifyRef.handleCancel().then(() => { this.setState({ profVisible: false }) - MKEmitter.emit('modalStatus', false) }) } else { this.setState({ profVisible: false }) - MKEmitter.emit('modalStatus', false) } }} destroyOnClose -- Gitblit v1.8.0